From 505e112fd1518ac966b540a48c6ca1809e1b6703 Mon Sep 17 00:00:00 2001
From: zhaoxiaoqiang <287285524@qq.com>
Date: Tue, 02 Aug 2022 17:29:55 +0800
Subject: [PATCH] 爱享学客户端

---
 static/img/rlsbsb.png                         |    0 
 src/utils/jsBridge.js                         |  265 
 static/zc.pdf                                 |    0 
 vue.config.js                                 |   15 
 src/views/order/settlementEarly.vue           |  352 
 static/img/shz.png                            |    0 
 src/assets/imgs/myHeader.png                  |    0 
 src/utils/formCheckAndComb.js                 |  194 
 static/img/homeBack.png                       |    0 
 static/rzfwxy.pdf                             |    0 
 src/utils/dateformat.js                       |  282 
 src/assets/imgs/nodata.png                    |    0 
 static/img/bgwd.png                           |    0 
 static/yhyszc.pdf                             |    0 
 src/assets/zfblx/bg.png                       |    0 
 static/LICENSE                                |  177 
 src/views/order-handling/image-upload.vue     |  212 
 src/style/normalize.less                      |  219 
 src/store/index.js                            |  147 
 src/views/order/order-detail.vue              |  329 
 static/zy.pdf                                 |    0 
 static/bankPdf/PSBC.pdf                       |    0 
 src/assets/zfblx/code1.png                    |    0 
 static/img/logout.png                         |    0 
 src/views/user/login.vue                      |  359 
 src/assets/img/noinfo.png                     |    0 
 debug.log                                     |   12 
 static/img/zlcc.png                           |    0 
 yarn.lock                                     | 8827 ++++++++++++++++++++
 src/assets/imgs/pic.png                       |    0 
 static/img/noinfo.png                         |    0 
 src/utils/index.js                            |  361 
 static/img/logo.png                           |    0 
 src/assets/imgs/userImg.png                   |    0 
 src/views/order/repayment-plan.vue            |  483 +
 static/bankPdf/ADC.pdf                        |    0 
 src/views/order/active-repayment.vue          |  415 
 static/bankPdf/CITIC.pdf                      |    0 
 src/assets/zfblx/2.png                        |    0 
 static/img/rlsbz.png                          |    0 
 static/ys.pdf                                 |    0 
 src/views/bankCard/index.vue                  |  264 
 src/components/cell/h-cell.vue                |  194 
 src/assets/zfblx/code.png                     |    0 
 src/utils/pageBackByAndroid.js                |   43 
 src/utils/wechat.js                           |   41 
 src/api/index.js                              |  150 
 src/assets/imgs/logo.png                      |    0 
 src/assets/zfblx/4.png                        |    0 
 static/img/order.png                          |    0 
 src/components/validator/validator.js         |  307 
 src/api/config.js                             |  123 
 src/views/order-handling/upload-userInfo.vue  |  654 +
 src/views/order/my-order.vue                  |  115 
 public/index.html                             |   95 
 src/assets/imgs/openpic.png                   |    0 
 src/utils/createUserProtocol.js               |   33 
 webpack.dev.js                                |   58 
 src/style/mixins.less                         |  139 
 src/assets/zfblx/bg3.png                      |    0 
 static/bankPdf/CMB.pdf                        |    0 
 src/assets/zfblx/course.png                   |    0 
 static/bankPdf/SPDB.pdf                       |    0 
 babel.config.js                               |    9 
 src/views/order/settle.vue                    |  301 
 src/utils/IDValidator.js                      | 3844 ++++++++
 static/bankPdf/PAB.pdf                        |    0 
 src/assets/imgs/credit.png                    |    0 
 static/bankPdf/BOC.pdf                        |    0 
 src/views/order-handling/face-recognition.vue |  350 
 src/components/h-list.vue                     |   76 
 src/router/routes.js                          |  140 
 static/bankPdf/ICBC.pdf                       |    0 
 src/views/user/agreement2.vue                 |  113 
 src/components/v-navbar.vue                   |   98 
 src/store/mutations-types.js                  |   28 
 static/img/pic.png                            |    0 
 src/components/input/h-ipt.vue                |  155 
 static/bankPdf/CCB.pdf                        |    0 
 src/utils/formValidator.js                    |  101 
 src/components/upload/uploadImg.vue           |  374 
 static/img/bg.png                             |    0 
 static/jquery/jquery.js                       |  719 +
 static/img/success.png                        |    0 
 static/dk.pdf                                 |    0 
 src/components/upload/uploadIdCard.vue        |  407 
 src/assets/zfblx/5.png                        |    0 
 static/img/shcg.png                           |    0 
 src/style/myVideo.less                        |    8 
 src/views/order-handling/approval-results.vue |  326 
 src/assets/zfblx/zfb.png                      |    0 
 src/router/index.js                           |   46 
 README.md                                     |    4 
 src/bus.js                                    |    9 
 webpack.prod.js                               |   38 
 src/assets/imgs/business.png                  |    0 
 src/utils/deviceInfo.js                       |   88 
 src/views/order/contract.vue                  |  145 
 static/img/bankCard.png                       |    0 
 static/img/touxiang.png                       |    0 
 src/views/home.vue                            |   52 
 static/bankPdf/SHB.pdf                        |    0 
 postcss.config.js                             |   11 
 src/style/mixin.less                          |   98 
 src/views/order-handling/upload-IDcard.vue    |  351 
 src/views/order/pay-result.vue                |  157 
 src/views/order-handling/bank-list.vue        |  448 +
 static/img/shsb.png                           |    0 
 src/utils/filters.js                          |   31 
 .gitignore                                    |   13 
 static/bankPdf/GDB.pdf                        |    0 
 static/img/idcardz.png                        |    0 
 src/assets/imgs/yqpic.png                     |    0 
 static/bankPdf/ABC.pdf                        |    0 
 src/views/homeIndex/home-index.vue            |  273 
 src/assets/zfblx/3.png                        |    0 
 src/style/themes.css                          |   13 
 src/views/order-handling/order-handling.vue   |  121 
 static/bankPdf/CEB.pdf                        |    0 
 src/style/myVant.less                         |   12 
 src/store/mutations.js                        |   55 
 src/assets/zfblx/1.png                        |    0 
 src/components/pdf/cpdf.vue                   |  125 
 src/assets/zfblx/bg4.png                      |    0 
 src/utils/validator.js                        |  222 
 src/views/user/front-login.vue                |   73 
 src/utils/config.js                           |   29 
 src/index.js                                  |   61 
 src/style/themes.less                         |   51 
 src/views/personal/personal-center.vue        |  186 
 src/views/order-handling/contract-signing.vue |  659 +
 static/xx.pdf                                 |    0 
 webpack.common.js                             |  135 
 src/assets/zfblx/bg2.png                      |    0 
 src/style/common.less                         |  191 
 src/views/user/agreement.vue                  |  115 
 static/img/faile.png                          |    0 
 src/assets/imgs/img_details.png               |    0 
 static/bl.pdf                                 |    0 
 static/img/idcardf.png                        |    0 
 package.json                                  |   69 
 static/bankPdf/CMBC.pdf                       |    0 
 static/img/ing.png                            |    0 
 src/App.vue                                   |   60 
 144 files changed, 25,853 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d3d5eef
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
diff --git a/README.md b/README.md
index 2c189db..884708d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-## axx_ins_client
+## edu_ins_client
 
-爱享学客户端
+教育分期平台用户端
 
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..4ce7753
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+    plugins: [
+        ['import', {
+            libraryName: 'vant',
+            libraryDirectory: 'es',
+            style: true
+        }, 'vant']
+    ]
+};
\ No newline at end of file
diff --git a/debug.log b/debug.log
new file mode 100644
index 0000000..4a19538
--- /dev/null
+++ b/debug.log
@@ -0,0 +1,12 @@
+[1008/143351.981:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1009/090254.570:WARNING:minidump_to_upload_parameters.cc(66)] duplicate annotation name metrics_client_id, discarding value 6cdb146c16ce4bfab185288f8bae5c8b
+[1009/090315.609:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1011/110357.879:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1011/135443.332:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/133259.641:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/144714.941:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1016/161814.067:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1017/091122.502:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1017/103028.328:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[1025/160715.460:ERROR:http_transport_win.cc(273)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
+[0428/174357.264:ERROR:http_transport_win.cc(276)] WinHttpSendRequest: �����ɹ���ɡ� (0x0)
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..34af749
--- /dev/null
+++ b/package.json
@@ -0,0 +1,69 @@
+{
+  "name": "scene_staging",
+  "version": "1.0.0",
+  "description": "智享收银台项目重构",
+  "main": "webpack.common.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "build": "webpack --env.production --config webpack.prod.js",
+    "dev": "webpack-dev-server --open --config webpack.dev.js"
+  },
+  "keywords": [],
+  "author": "小明丶",
+  "license": "ISC",
+  "devDependencies": {
+    "@babel/core": "^7.3.4",
+    "@babel/preset-env": "^7.3.4",
+    "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.3",
+    "@vue/babel-preset-jsx": "^1.0.0-beta.3",
+    "autoprefixer": "^9.4.10",
+    "babel-loader": "^8.0.0-beta.0",
+    "babel-plugin-dynamic-import-webpack": "^1.1.0",
+    "babel-plugin-import": "^1.12.0",
+    "clean-webpack-plugin": "^1.0.1",
+    "copy-webpack-plugin": "^5.0.2",
+    "css-loader": "^2.1.0",
+    "cssnano": "^4.1.10",
+    "file-loader": "^3.0.1",
+    "html-webpack-plugin": "^3.2.0",
+    "less": "^3.9.0",
+    "less-loader": "^4.1.0",
+    "mini-css-extract-plugin": "^0.5.0",
+    "optimize-css-assets-webpack-plugin": "^5.0.1",
+    "postcss-loader": "^3.0.0",
+    "postcss-pxtorem": "^4.0.1",
+    "style-loader": "^0.23.1",
+    "style-resources-loader": "^1.2.1",
+    "uglifyjs-webpack-plugin": "^2.1.2",
+    "url-loader": "^1.1.2",
+    "vue-loader": "^15.7.0",
+    "vue-template-compiler": "^2.6.10",
+    "vux-loader": "^1.2.9",
+    "webpack": "^4.29.6",
+    "webpack-cli": "^3.2.3",
+    "webpack-dev-server": "^3.2.1",
+    "webpack-merge": "^4.2.1"
+  },
+  "dependencies": {
+    "axios": "^0.18.0",
+    "blueimp-md5": "^2.11.1",
+    "element-ui": "^2.13.0",
+    "exif-js": "^2.3.0",
+    "html2canvas": "^1.0.0-rc.3",
+    "qrcode": "^1.4.1",
+    "vant": "^2.8.7",
+    "vue": "^2.6.10",
+    "vue-i18n": "^8.14.0",
+    "vue-pdf": "^4.1.0",
+    "vue-router": "^3.0.2",
+    "vue-video-player": "^5.0.2",
+    "vuex": "^3.1.0",
+    "vuex-persistedstate": "^2.5.4",
+    "vux": "^2.9.2"
+  },
+  "browserslist": [
+    "last 1 version",
+    "> 1%",
+    "IE 10"
+  ]
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..4177fb7
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,11 @@
+module.exports = {
+    plugins: {
+      'autoprefixer': {},
+      //默认不开启rem配置
+      'postcss-pxtorem': {
+        rootValue: 50,
+        mediaQuery:true, //允许在媒体查询中转换px
+        propList: ['*'],//px 大写 Px 就不会被转换
+      }
+    }
+  }
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..6193005
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,95 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-20 10:46:58
+ * @Description:
+ -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no,maximum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
+    <title>小纷助学</title>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_1806850_8ykk82vs4kg.css">
+    <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
+    <!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script> -->
+    <!-- <script src="https://ins-js.oss-cn-beijing.aliyuncs.com/js/jquery.js"></script> -->
+    <!-- 移动端调试用需要时解开 -->
+    <!-- <script src="https://cdn.bootcdn.net/ajax/libs/vConsole/3.3.4/vconsole.min.js"></script> 
+    <script>
+        var vConsole = new VConsole();
+    </script> -->
+    <!-- // 加载阿里CDN的文件 -->
+    <!-- <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> -->
+    <script>
+        (function (doc, win) {
+            var docEl = doc.documentElement,
+                isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
+                dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
+                dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
+                dpr = 1,
+                scale = 1 / dpr,
+                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
+            docEl.dataset.dpr = dpr;
+            var metaEl = doc.createElement('meta');
+            metaEl.name = 'viewport';
+            metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
+            docEl.firstElementChild.appendChild(metaEl);
+            var recalc = function () {
+                var width = docEl.clientWidth;
+                if (width / dpr > 750) {
+                    width = 750 * dpr;
+                }
+                // 乘以50,px : rem = 50 : 1
+                docEl.style.fontSize = 100 * (width / 750) + 'px';
+            };
+            recalc();
+            if (!doc.addEventListener) return;
+            win.addEventListener(resizeEvt, recalc, false);
+        })(document, window);
+        (function (m, ei, q, i, a, j, s) {
+                m[i] = m[i] || function () {
+                        (m[i].a = m[i].a || []).push(arguments)
+                    };
+                j = ei.createElement(q),
+                    s = ei.getElementsByTagName(q)[0];
+                j.async = true;
+                j.charset = 'UTF-8';
+                j.src = 'https://static.meiqia.com/dist/meiqia.js?_=t';
+                s.parentNode.insertBefore(j, s);
+        })(window, document, 'script', '_MEIQIA');
+        _MEIQIA('entId', 119312);
+        _MEIQIA('withoutBtn');
+    </script>
+    <style type="text/css">
+        .icon {
+           width: 1em; height: 1em;
+           vertical-align: -0.15em;
+           fill: currentColor;
+           overflow: hidden;
+        }
+    </style>
+</head>
+
+<body>
+    <body>
+        <div id="app"></div>
+        <!-- cdn 生产环境打开注释!!!  -->
+        <!-- icon 图标 -->
+        <script src="https://at.alicdn.com/t/font_1806850_8ykk82vs4kg.js"></script>
+        <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.echarts.common.min.js></script>
+        <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.axios.min.js></script>
+        <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue.js></script>
+        <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue-router.js></script>
+        <script src=https://ins-js.oss-accelerate.aliyuncs.com/js/local.vue.min.js></script>
+        <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
+        <script>
+            Vue.prototype.$t = ()=>{};
+        </script>
+    </body>
+</body>
+
+</html>
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..006506b
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,60 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-06 10:49:57
+ * @Description:
+ -->
+<template>
+    <div class="h-100">
+        <router-view></router-view>
+        <!-- <van-loading type="spinner" color="white" class="app-loading" v-show="AppLoading"></van-loading> -->
+        <van-loading color="white" class="app-loading" v-show="AppLoading"/> 
+    </div>
+</template>
+
+<script>
+import Vue from 'vue';
+import { Loading } from 'vant';
+
+Vue.use(Loading);
+    import {
+        mapState,
+        mapActions,
+    } from 'vuex';
+    
+    export default {
+        data() {
+            return {
+
+            }
+        },
+        computed:{
+            ...mapState(['AppLoading'])
+        },
+        methods: {
+            ...mapActions(['getArea'])
+        },
+        created() {
+            this.getArea();
+        },
+    }
+</script>
+
+<style lang="less" scoped>
+    .h-100 {
+        height: 100%;
+    }
+
+
+    .app-loading {
+        position: fixed;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -50%);
+        z-index: @zIndex-999;
+        background-color: rgba(0, 0, 0, 0.5);
+        padding: 30px;
+        border-radius: 4px;
+    }
+</style>
diff --git a/src/api/config.js b/src/api/config.js
new file mode 100644
index 0000000..a8f84f8
--- /dev/null
+++ b/src/api/config.js
@@ -0,0 +1,123 @@
+/*
+ * @Descripttion: 配置axios
+ * @Author: TM丶
+ * @LastEditors: zxq
+ * @Date: 2019-03-30 09:07:29
+ * @LastEditTime: 2022-08-02 17:23:10
+ */
+import axios from 'axios';
+import md5 from 'blueimp-md5';
+import Store from "@/store/index";
+import router from '@/router/index';
+import { Notify} from 'vant';
+import {SET_APP_LOADING,SET_USER_INFO,SET_SESSION_ID} from '@/store/mutations-types';
+
+
+function createSign(params){
+    if(params.jttechSign){
+        delete params.jttechSign;
+    }
+    let keys = Object.keys(params),
+        paramsSign = '';
+    keys.forEach(key=>{
+        let val = params[key];
+        if(typeof val ==='string'){
+            if(val.trim().length>0){
+                paramsSign +=val;
+            }else{
+                delete params[key]
+            }
+        }else if(typeof val === 'number' && !isNaN(val)){
+            paramsSign +=val;
+        }else if(Array.isArray(val) && !val.length){
+            delete params[key]
+        }else if(val===null){
+            delete params[key]
+        }
+
+    })
+    let sessionId = Store.state.sessionId || '';
+    params.jttechSign = md5(paramsSign + sessionId);
+    return params;
+}
+
+
+function deleteCatchInfo(){
+    localStorage.removeItem('user_account')
+    localStorage.removeItem('user_pwd')
+    Store.commit(SET_USER_INFO,{})
+    Store.commit(SET_SESSION_ID,{})
+}
+
+// 错误处理
+const resolveError = {
+    999(message){
+        Notify(message || '网络异常,请稍后重试');
+    },
+    // 90040006
+    99(){
+        deleteCatchInfo()
+        Notify('登录超时,请重新登录!');
+        router.push('/');
+    },
+    90040006(message){
+        deleteCatchInfo()
+        Notify(message || '登录超时,请重新登录!');
+        router.push('/');
+    },
+    // 密码错误
+    9990027(message){
+        Notify(message);
+        deleteCatchInfo()
+    },
+    // 密码错误
+    1340004(message){
+        Notify(message);
+        deleteCatchInfo()
+        router.push('/')
+    }
+}
+
+const $http = axios.create({
+    baseURL: '/aic',
+    timeout: 90000,
+    header: {
+        'Content-Type': 'application/json; charset=UTF-8'
+    }
+})
+
+// 添加请求拦截器
+$http.interceptors.request.use(config => {
+    if(typeof config.data ==='undefined'){
+        config.data = {};
+    }
+    config.data = createSign(config.data);
+
+    if(!config.data.apploading){
+        Store.commit(SET_APP_LOADING,true);
+    }
+
+    return config;
+}, error => {
+    Store.commit(SET_APP_LOADING,false);
+    return Promise.reject(error);
+})
+
+// 添加响应拦截器
+$http.interceptors.response.use(response => {
+    Store.commit(SET_APP_LOADING,false);
+    return response.data;
+}, error => {
+    Store.commit(SET_APP_LOADING,false);
+    let data = error.response.data;
+
+    let code = Math.abs(data.errorCode || data.status);
+    if(typeof resolveError[code] ==='function'){
+        resolveError[code](data.errMsg || data.message);
+    }else{
+        Notify(data.errMsg || data.message || '系统错误');
+    }
+    return Promise.reject(data);
+})
+
+export default $http;
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000..5a2c172
--- /dev/null
+++ b/src/api/index.js
@@ -0,0 +1,150 @@
+/*
+ * @Descripttion:该文件用于组织服务器请求,添加请求函数时注意 函数重名!
+ * @Author: TM丶
+ * @LastEditors: Please set LastEditors
+ * @Date: 2019-03-30 08:27:46
+ * @LastEditTime: 2021-10-29 16:49:16
+ */
+
+import $http from './config';
+const api = {
+    uploadFile(data){
+        return $http.post('/public/uploadFile',data)
+    },//文件上传
+    areaOptions(data){
+        return $http.post('/public/areaOptions',data)
+    },//获取读取
+    wechatUserInfo(data){
+        return $http.post('/wechat/userInfo',data)
+    },//获取微信openId
+    wechatGetUserInfo(data){
+        return $http.post('/wechat/getUserInfo',data)
+    },//获取微信用户信息
+    wechatgetSign(data){
+        return $http.post('/wechat/getSign',data)
+    },//获取微信签名
+    login(data){
+        return $http.post('/login/login',data)
+    },//登录 
+    openIdLogin(data){
+        return $http.post('/login/openIdLogin',data)
+    },//openId登录
+    logout(data){
+        return $http.post('/login/logout',data)
+    },//退出登录
+    getVerCode(data){
+        return $http.post('/user/verCode',data)
+    },
+    // 订单创建相关
+    orderCreateStep(data){
+        return $http.post('/order/create/createStep',data)
+    },//获取订单创建步骤
+    createTrial(data){
+        return $http.post('/order/create/trial',data)
+    },//订单详情已经还款试算获取
+    orderCreate(data){
+        return $http.post('/order/create/create',data)
+    },//订单创建模块
+    createInitIdInfo(data){
+        return $http.post('order/create/initIdInfo',data)
+    },//初始化身份证信息
+    getIdCardInfo(data){
+        return $http.post('/order/create/getIdCardInfo',data)
+    },//获取身份证信息
+    saveIdInfo(data){
+        return $http.post('/order/create/saveIdInfo',data)
+    },//保存身份证信息
+    getFaceUrl(data){
+        return $http.post('/order/create/getFaceUrl',data)
+    },//获取人脸识别地址
+    findFaceResult(data){
+        return $http.post('/order/create/findFaceResult',data)
+    },//获取人脸识别结果
+    createInitImgInfo(data){
+        return $http.post('/order/create/initImgInfo',data)
+    },//初始化影像资料
+    saveImgInfo(data){
+        return $http.post('/order/create/saveImgInfo',data)
+    },//保存影像资料
+    initUserInfo(data){
+        return $http.post('/order/create/initUserInfo',data)
+    },//初始化个人信息
+    saveUserInfo(data){
+        return $http.post('/order/create/saveUserInfo',data)
+    },//保存个人信息
+    initContInfo(data){
+        return $http.post('/order/create/initContInfo',data)
+    },//初始化合同签署页面
+    bankVerCode(data){
+        return $http.post('/order/create/bankVerCode',data)
+    },//获取银行验证码
+    getContInfo(data){
+        return $http.post('/order/create/getContInfo',data)
+    },//获取合同信息
+    saveContInfo(data){
+        return $http.post('/order/create/saveContInfo',data)
+    },//保存合同签署页面
+    initImgInfo(data){
+        return $http.post('/order/create/initImgInfo',data)
+    },//初始化图片上传页面
+    saveImgInfo(data){
+        return $http.post('/order/create/saveImgInfo',data)
+    },//图片上传保存
+    initAuditInfo(data){
+        return $http.post('/order/create/initAuditInfo',data)
+    },//初始化审核结果
+
+    // 订单记录相关
+    orderUserList(data){
+        return $http.post('/order/user/list',data)
+    },//订单列表
+    orderUserDetail(data){
+        return $http.post('/order/user/detail',data)
+    },//订单详情
+    orderUserCancel(data){
+        return $http.post('/order/user/cancel',data)
+    },//取消订单
+    initPreClose(data){
+        return $http.post('/order/user/initPreClose',data)
+    },//初始化提前结清
+    preClose(data){
+        return $http.post('/order/user/preClose',data)
+    },//提前结清
+    initRepay(data){
+        return $http.post('/order/user/initRepay',data)
+    },//主动还款初始化
+
+    repay(data){
+        return $http.post('/order/user/repay',data)
+    },//主动还款
+
+    repayTrial(data){
+        return $http.post('/order/user/repayTrial',data)
+    },//主动还款试算
+
+    preSettleStatus(data){
+        return $http.post('/order/user/preSettleStatus',data)
+    },//查询提前结清支付是否成功
+    findRepayResult(data){
+        return $http.post('/order/user/findRepayResult',data)
+    },//查询主动还款支付是否成功
+    // ===========银行卡信息===========
+    bankCardInfo(data){
+        return $http.post('/user/bankCardInfo',data)
+    },//用户银行卡信息
+    bankVerCode(data){
+        return $http.post('/user/bankVerCode',data)
+    },//发送银行卡验证码
+    bindBankCard(data){
+        return $http.post('/user/bindBankCard',data)
+    },//绑定银行卡
+    baseInfo(data){
+        return $http.post('/user/baseInfo',data)
+    },//绑定银行卡
+}
+
+export default {
+    install(Vue, opt) {
+        Vue.prototype.$api = api;
+    }
+}
diff --git a/src/assets/img/noinfo.png b/src/assets/img/noinfo.png
new file mode 100644
index 0000000..10ebf14
--- /dev/null
+++ b/src/assets/img/noinfo.png
Binary files differ
diff --git a/src/assets/imgs/business.png b/src/assets/imgs/business.png
new file mode 100644
index 0000000..0b2c429
--- /dev/null
+++ b/src/assets/imgs/business.png
Binary files differ
diff --git a/src/assets/imgs/credit.png b/src/assets/imgs/credit.png
new file mode 100644
index 0000000..21a76d2
--- /dev/null
+++ b/src/assets/imgs/credit.png
Binary files differ
diff --git a/src/assets/imgs/img_details.png b/src/assets/imgs/img_details.png
new file mode 100644
index 0000000..d8f9080
--- /dev/null
+++ b/src/assets/imgs/img_details.png
Binary files differ
diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png
new file mode 100644
index 0000000..4419c20
--- /dev/null
+++ b/src/assets/imgs/logo.png
Binary files differ
diff --git a/src/assets/imgs/myHeader.png b/src/assets/imgs/myHeader.png
new file mode 100644
index 0000000..fa8a747
--- /dev/null
+++ b/src/assets/imgs/myHeader.png
Binary files differ
diff --git a/src/assets/imgs/nodata.png b/src/assets/imgs/nodata.png
new file mode 100644
index 0000000..9ea398f
--- /dev/null
+++ b/src/assets/imgs/nodata.png
Binary files differ
diff --git a/src/assets/imgs/openpic.png b/src/assets/imgs/openpic.png
new file mode 100644
index 0000000..dd78720
--- /dev/null
+++ b/src/assets/imgs/openpic.png
Binary files differ
diff --git a/src/assets/imgs/pic.png b/src/assets/imgs/pic.png
new file mode 100644
index 0000000..edc845c
--- /dev/null
+++ b/src/assets/imgs/pic.png
Binary files differ
diff --git a/src/assets/imgs/userImg.png b/src/assets/imgs/userImg.png
new file mode 100644
index 0000000..b1b84e5
--- /dev/null
+++ b/src/assets/imgs/userImg.png
Binary files differ
diff --git a/src/assets/imgs/yqpic.png b/src/assets/imgs/yqpic.png
new file mode 100644
index 0000000..3123494
--- /dev/null
+++ b/src/assets/imgs/yqpic.png
Binary files differ
diff --git a/src/assets/zfblx/1.png b/src/assets/zfblx/1.png
new file mode 100644
index 0000000..51ff3db
--- /dev/null
+++ b/src/assets/zfblx/1.png
Binary files differ
diff --git a/src/assets/zfblx/2.png b/src/assets/zfblx/2.png
new file mode 100644
index 0000000..fed081b
--- /dev/null
+++ b/src/assets/zfblx/2.png
Binary files differ
diff --git a/src/assets/zfblx/3.png b/src/assets/zfblx/3.png
new file mode 100644
index 0000000..22003ad
--- /dev/null
+++ b/src/assets/zfblx/3.png
Binary files differ
diff --git a/src/assets/zfblx/4.png b/src/assets/zfblx/4.png
new file mode 100644
index 0000000..64b7849
--- /dev/null
+++ b/src/assets/zfblx/4.png
Binary files differ
diff --git a/src/assets/zfblx/5.png b/src/assets/zfblx/5.png
new file mode 100644
index 0000000..3a363f8
--- /dev/null
+++ b/src/assets/zfblx/5.png
Binary files differ
diff --git a/src/assets/zfblx/bg.png b/src/assets/zfblx/bg.png
new file mode 100644
index 0000000..1050eb2
--- /dev/null
+++ b/src/assets/zfblx/bg.png
Binary files differ
diff --git a/src/assets/zfblx/bg2.png b/src/assets/zfblx/bg2.png
new file mode 100644
index 0000000..30e57b8
--- /dev/null
+++ b/src/assets/zfblx/bg2.png
Binary files differ
diff --git a/src/assets/zfblx/bg3.png b/src/assets/zfblx/bg3.png
new file mode 100644
index 0000000..76795bf
--- /dev/null
+++ b/src/assets/zfblx/bg3.png
Binary files differ
diff --git a/src/assets/zfblx/bg4.png b/src/assets/zfblx/bg4.png
new file mode 100644
index 0000000..91b1433
--- /dev/null
+++ b/src/assets/zfblx/bg4.png
Binary files differ
diff --git a/src/assets/zfblx/code.png b/src/assets/zfblx/code.png
new file mode 100644
index 0000000..cfe225c
--- /dev/null
+++ b/src/assets/zfblx/code.png
Binary files differ
diff --git a/src/assets/zfblx/code1.png b/src/assets/zfblx/code1.png
new file mode 100644
index 0000000..cfe225c
--- /dev/null
+++ b/src/assets/zfblx/code1.png
Binary files differ
diff --git a/src/assets/zfblx/course.png b/src/assets/zfblx/course.png
new file mode 100644
index 0000000..c3ff11b
--- /dev/null
+++ b/src/assets/zfblx/course.png
Binary files differ
diff --git a/src/assets/zfblx/zfb.png b/src/assets/zfblx/zfb.png
new file mode 100644
index 0000000..85c76b2
--- /dev/null
+++ b/src/assets/zfblx/zfb.png
Binary files differ
diff --git a/src/bus.js b/src/bus.js
new file mode 100644
index 0000000..97fd1eb
--- /dev/null
+++ b/src/bus.js
@@ -0,0 +1,9 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-06-01 13:43:10
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-01 13:44:10
+ * @Description: 
+ */ 
+import Vue from 'vue'
+export default new Vue()
\ No newline at end of file
diff --git a/src/components/cell/h-cell.vue b/src/components/cell/h-cell.vue
new file mode 100644
index 0000000..56a46a1
--- /dev/null
+++ b/src/components/cell/h-cell.vue
@@ -0,0 +1,194 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-09 13:38:38
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-04-29 09:33:49
+ * @Description: cell框组件
+ -->
+<template>
+  <div class="flex-between-g v-cell-box" @click.stop="_click">
+    <div class="left flex-start-g">
+      <svg v-if="icon" class="icon" aria-hidden="true" style="width:16px;height:16px;">
+        <use :xlink:href="'#'+icon" />
+      </svg>
+      <span style="color:red" v-show="isMust">*</span>
+      <span class="label" :class="[isTitle? 'title' : '']">{{label}}</span>
+    </div>
+    <div class="right flex-end-g">
+      <slot name="v-cell-right">
+        <div class="c-text-999-g" v-if="!Show_input">
+          {{calcValue}}
+        </div>
+        <input
+          class="input"
+          :class="[readonly ? 'readonly' : '']"
+          :type="type"
+          :maxlength="max"
+          v-if="Show_input"
+          @blur.stop="_blur"
+          :disabled="readonly"
+          v-model="calcValue"
+          :placeholder="placeholder"
+        />
+        <svg
+          v-if="isLink"
+          class="icon"
+          aria-hidden="true"
+          style="width:18px;height:18px;fill:#999;"
+        >
+          <use xlink:href="#iconright" />
+        </svg>
+      </slot>
+      <slot name="button">
+        
+      </slot>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "h-cell",
+  props: {
+    max: [String, Number],
+    type: {
+      type: String,
+      default: "text"
+    },
+    // 左侧文字
+    label: String,
+    //左侧图标类名
+    icon: String,
+    isMust:{
+      type: Boolean,
+      default: false
+    },
+    //是否展示右侧图标
+    isLink: {
+      type: Boolean,
+      default: false
+    },
+    // title文字加粗
+    isTitle: {
+      type: Boolean,
+      default: false
+    },
+    // 是否只读
+    readonly: {
+      type: Boolean,
+      default: false
+    },
+    // 是否禁用
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    Show_input: {
+      type: Boolean,
+      default: true
+    },
+    // input 的vmodel
+    value: [String, Number],
+    placeholder: String
+  },
+  computed: {
+    calcValue: {
+      get() {
+        return this.value;
+      },
+      set(v) {
+        this.$emit("input", v);
+      }
+    }
+  },
+  methods:{
+    _click(){
+      this.$emit('click')
+    },
+    _blur(){
+      this.$emit('blur'); 
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+.v-cell-box {
+  padding: 16px 0;
+  background-color: @c-bg-fff;
+  margin-bottom: 1px;
+  border-bottom:1px solid #f1f1f1;
+  &:first-child {
+    border-top-left-radius: 3px;
+    border-top-right-radius: 3px;
+    
+  }
+
+  &:last-child {
+    border-bottom-left-radius: 3px;
+    border-bottom-right-radius: 3px;
+    margin-bottom: 0;
+   
+  }
+
+  .label {
+    font-size: @font-14;
+    font-weight:500;
+    color:rgba(101,101,101,1);
+    &.title {
+      font-weight: 500;
+    }
+  }
+
+  .left {
+    .icon {
+      margin-right: 8px;
+    }
+  }
+
+  .right{
+    width: 60%;
+  }
+
+  .input {
+    border: none;
+    outline: none;
+    width: 100%;
+    text-align: right;
+    color: @c-text-333;
+    background: @c-bg-fff;
+    &.readonly {
+      color:#999999;
+    }
+    &[disabled] {
+      opacity: 1;
+      -webkit-opacity: 1;
+      color: #999999;
+      -webkit-text-fill-color: #999999;
+    }
+  }
+  input::-webkit-input-placeholder {
+    color: #999999;
+  }
+
+  input::-moz-placeholder {
+    /* Mozilla Firefox 19+ */
+    color: #999999;
+  }
+
+  input:-moz-placeholder {
+    /* Mozilla Firefox 4 to 18 */
+    color: #999999;
+  }
+
+  input:-ms-input-placeholder {
+    /* Internet Explorer 10-11 */
+    color: #999999;
+  }
+  input:-internal-autofill-previewed,
+  input:-internal-autofill-selected {
+    -webkit-text-fill-color: #333;
+    transition: background-color 5000s ease-out 0.5s;
+  }
+}
+</style>
diff --git a/src/components/h-list.vue b/src/components/h-list.vue
new file mode 100644
index 0000000..a8450fe
--- /dev/null
+++ b/src/components/h-list.vue
@@ -0,0 +1,76 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-01-07 09:27:05
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-24 14:41:23
+ * @Description: 下滑分页组件 为保证不重复请求 使用时要根据显示内容的div高度确定一次返回条数,数据足够的情况下一次放回请装满容器
+ -->
+<template>
+    <div class="h-list" :style="{'height':height,'background':background}">
+        <div class="box" ref="lisBox">
+            <slot></slot>
+            <p v-if="loading" class="load">加载中....</p>
+            <p v-if="finished" class="finish">没有更多了</p>
+        </div>
+   </div>
+</template>
+<script>
+export default {
+    name:'h-list',
+    /**
+     * defScroll-滚动条距离底部小于此距离执行加载,可根据需求调整距离(必传)
+     * finished-是否已经等到所有数据(必传)
+     * loading-是否显示加载(必传)
+     */
+    props:['defScroll','finished','loading','height','background'],
+    data() {
+        return {
+           previous:0,
+           now:0,
+        }
+    },
+    mounted(){
+        document.querySelector('.h-list').addEventListener('scroll', this.boxScroll,true)
+        //window.addEventListener('scroll', this.boxScroll,true)
+        console.log(this.defScroll)
+    },
+    methods:{
+        boxScroll(e){
+            this.now = new Date().getTime()
+            // 获取滚动条距离容器底部的距离
+            let scrollBottom =
+                e.target.scrollHeight -
+                e.target.scrollTop -
+                e.target.clientHeight;
+            if(this.now-this.previous > 100){
+                if(scrollBottom < this.defScroll && !this.finished && scrollBottom!=0){
+                    this.loading = true
+                    this.$emit('scroll')
+                    this.previous = this.now
+                    return
+                }else{
+                    this.loading = false
+                    return
+                }
+            }
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+.h-list::-webkit-scrollbar,.withdrawals-box::-webkit-scrollbar {
+        display: none;
+    }
+.h-list{
+    overflow: scroll;
+    height: 75vh;
+    background-color: #fff;
+    width: 100%;
+    padding-bottom: 20px;
+    display: flex;
+    justify-content: center;
+    .load,.finish{
+        text-align: center;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/components/input/h-ipt.vue b/src/components/input/h-ipt.vue
new file mode 100644
index 0000000..653f76b
--- /dev/null
+++ b/src/components/input/h-ipt.vue
@@ -0,0 +1,155 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-08 19:04:22
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-24 11:27:18
+ * @Description: 登录也输入框组件
+ -->
+<template>
+  <div class="h-ipt-box">
+    <div class="ipt-div">
+      <i class="left iconfont" :class="icon" v-if="icon"></i>
+      <input
+        :type="type"
+        class="ipt"
+        v-model="newValue"
+        :maxlength="maxlength"
+        :placeholder="placeholder"
+        @focus="showClose"
+        @blur="noClose"
+      />
+      <div class="right-slot">
+        <slot name="right">
+        </slot>
+      </div>
+      
+      <i class="right iconfont iconreeor-fill" v-if="close && newValue && getClose" @click="deleteMsg"></i>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name:'h-ipt',
+  model: {
+    prop: "value",
+    event: "input"
+  },
+  props: {
+    getClose:{
+      type:Boolean,
+      default:false
+    },
+    icon: {
+      type: String
+    },
+    maxlength: {
+      type: Number
+    },
+    placeholder: {
+      type: String,
+      default: "请输入"
+    },
+    value: {
+      type: [String, Number]
+    },
+    type: {
+      type: String,
+      default: "text"
+    },
+    
+  },
+  data() {
+    return {
+        close:false,
+    };
+  },
+  computed: {
+    newValue: {
+      get: function() {
+        return this.value;
+      },
+      set: function(value) {
+        this.$emit("input", value);
+      }
+    }
+  },
+  methods:{ 
+      showClose(){
+          this.close = true
+      },
+      noClose(){
+          this.close = false
+      },
+      deleteMsg(){
+        this.newValue = ''
+      }
+  }
+};
+</script>
+<style lang="less" scoped>
+.h-ipt-box {
+  width: 100%;
+  text-align: center;
+  .ipt-div {
+    display: inline-block;
+    width: 80%;
+    height: 40px;
+    border-radius: 20px;
+    border: 1px solid rgb(234, 234, 234);
+    //line-height: 40px;
+    position: relative;
+    .left {
+      font-size: 24px;
+      color: @c-default;
+      position: absolute;
+      left: 10px;
+      top: 6px;
+    }
+    .right{
+        font-size: 18px;
+        color: @c-default;
+        position: absolute;
+        right: 10px;
+        top: 10px;
+    }
+    .ipt {
+      position: absolute;
+      right: 100px;
+      top: 10px;
+      width: 50%;
+      border: 0; // 去除未选中状态边框
+      outline: none; // 去除选中状态边框
+      background-color: rgba(0, 0, 0, 0); // 透明背景
+    }
+    .right-slot{
+      position: absolute;
+      right: 10px;
+      top: 6px;
+    }
+  }
+
+  input::-webkit-input-placeholder {
+    color: rgb(163, 163, 163);
+  }
+
+  input::-moz-placeholder {
+    /* Mozilla Firefox 19+ */
+    color: rgb(163, 163, 163);
+  }
+
+  input:-moz-placeholder {
+    /* Mozilla Firefox 4 to 18 */
+    color: rgb(163, 163, 163);
+  }
+
+  input:-ms-input-placeholder {
+    /* Internet Explorer 10-11 */
+    color: rgb(163, 163, 163);
+  }
+  input:-internal-autofill-previewed,
+  input:-internal-autofill-selected {
+    -webkit-text-fill-color: #333;
+    transition: background-color 5000s ease-out 0.5s;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/components/pdf/cpdf.vue b/src/components/pdf/cpdf.vue
new file mode 100644
index 0000000..cafa67f
--- /dev/null
+++ b/src/components/pdf/cpdf.vue
@@ -0,0 +1,125 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-07-01 19:52:15
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-16 16:42:41
+ * @Description: 
+--> 
+<template>
+  <div class="cpdf" id="cpdf">
+    <div class="center">
+      <!-- <div class="contor">
+        <button @click="prev">上一页</button>
+        <button @click="next">下一页</button>
+        <span>Page: <span v-text="page_num"></span> / <span v-text="page_count"></span></span>
+ 
+        <button @click="addscale" >加</button>
+        <button @click="minus" >减</button>
+        <button id="prev" @click="closepdf">关闭</button>
+      </div> -->
+      <!-- <canvas class="canvasstyle" id="the-canvas"></canvas> -->
+      <canvas id="the-canvas" style="border:1px  solid black"></canvas>
+    </div>
+  </div>
+</template>
+<script>
+// import PDFJS from "pdfjs-dist";
+// import { TextLayerBuilder } from "pdfjs-dist/web/pdf_viewer";
+// import "pdfjs-dist/web/pdf_viewer.css";
+// PDFJS.GlobalWorkerOptions.workerSrc = "pdfjs-dist/build/pdf.worker.js";
+
+var container;
+export default {
+  name: "c-pdf",
+  props: {
+    msg: String
+  },
+  mounted() {
+    // this.$nextTick(() => {
+    //     let url =
+    //     "http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf";
+    //     this.getPDF(url);
+    // });
+  },
+  methods: {
+    async getPDF(url) {
+        let pdf = await PDFJS.getDocument(url)
+        container = container || document.querySelector('#container')
+        for(let i = 0; i < pdf.numPages; i++) {
+            try{
+                await this.rendPDF(pdf, i)
+            } catch(e) {
+                // console.error(e)
+            }
+        }
+    },
+    // async renderPDF(pdf, num) {
+    //     let page = await pdf.getPage(num)
+    //     // 设置展示比例
+    //     let scale = 1.5;
+    //     let viewport = page.getViewport(scale);
+
+    //     let pageDiv = document.createElement('div');
+    //     pageDiv.setAttribute('id', 'page-' + (page.pageIndex + 1));
+    //     pageDiv.setAttribute('style', 'position: relative');
+    //     container.appendChild(pageDiv);
+
+    //     let canvas = document.createElement('canvas');
+    //     pageDiv.appendChild(canvas);
+    //     let context = canvas.getContext('2d');
+    //     canvas.height = viewport.height;
+    //     canvas.width = viewport.width;
+        
+    //     let renderContext = {
+    //         canvasContext: context,
+    //         viewport: viewport
+    //     };
+        
+    //     await page.render(renderContext);
+    //     let textContent = await page.getTextContent()
+    //     // 创建文本图层div
+    //     const textLayerDiv = document.createElement('div');
+    //     textLayerDiv.setAttribute('class', 'textLayer');
+    //     textLayerDiv.setAttribute('style', `width: ${viewport.width}px; margin: 0 auto;`)
+    //     // 将文本图层div添加至每页pdf的div中
+    //     pageDiv.appendChild(textLayerDiv);
+        
+    //     // 创建新的TextLayerBuilder实例
+    //     var textLayer = new TextLayerBuilder({
+    //         textLayerDiv: textLayerDiv,
+    //         pageIndex: page.pageIndex,
+    //         viewport: viewport
+    //     });
+        
+    //     textLayer.setTextContent(textContent);
+        
+    //     textLayer.render();
+
+    // }
+  }
+};
+
+</script>
+<style type="text/less" lang="less" rel="stylesheet/less">
+  .cpdf {
+    position: fixed;
+    top: 0;
+    left: 0;
+    background-color: rgba(0, 0, 0, .5);
+    width: 100%;
+    height: 100%;
+    z-index: 99999;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    .center {
+      text-align: center;
+      height: 100%;
+      overflow: auto;
+      padding-top: 20px;
+      .contor {
+        margin-bottom: 10px;
+      }
+    }
+  }
+</style>
diff --git a/src/components/upload/uploadIdCard.vue b/src/components/upload/uploadIdCard.vue
new file mode 100644
index 0000000..4ecaabc
--- /dev/null
+++ b/src/components/upload/uploadIdCard.vue
@@ -0,0 +1,407 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-10 14:38:34
+ * @Description:
+ -->
+<template>
+  <div class="component-photo-upload">
+    <div class="photo-list">
+      <!--上传按钮-->
+      <div class="pic-item-box-z" @click="handleUploadPicture(1)">
+        <img v-if="picZ.fileUrl" :src="picZ.fileUrl" alt />
+        <img v-if="!picZ.fileUrl&&cardFont" :src="cardFont" alt />
+      </div>
+      <!--上传按钮-->
+      <div class="pic-item-box-f" @click="handleUploadPicture(2)">
+        <img v-if="picF.fileUrl" :src="picF.fileUrl" alt />
+        <img v-if="!picF.fileUrl&&cardBack" :src="cardBack" alt />
+      </div>
+    </div>
+    <!-- 真正的上传按钮-->
+    <div>
+      <input
+        style="display: none;cursor:pointer"
+        type="file"
+        id='androidInputFileImage'
+        ref="androidInputFileImage"
+        @change="handlePhotoChange($event,1)"
+        accept="image/jpg, image/jpeg, image/png"
+      />
+      <input
+        style="display: none;cursor:pointer;"
+        type="file"
+        id='androidInputFileCapture'
+        ref="androidInputFileCapture"
+        @change="handlePhotoChange($event,2)"
+        accept="image/*"
+        capture="camera"
+      />
+    </div>
+    <!--选择上传图片还是拍照-->
+    <van-action-sheet
+      v-model="selectModel"
+      :close-on-click-overlay="false"
+      cancel-text="取消"
+      :actions="nav"
+      @select="handleMenuSelect"
+    ></van-action-sheet>
+    <!-- <button @click="onclick">aa</button> -->
+  </div>
+</template>
+
+<script>
+import Bus from "../../bus";
+import { SET_APP_LOADING } from "@/store/mutations-types";
+import { mapMutations } from "vuex";
+import EXIF from "exif-js";
+import { _imgCompress, _fileToBase64 } from "@/utils/index";
+import Vue from "vue";
+import { ActionSheet } from "vant";
+Vue.use(ActionSheet);
+export default {
+  name: "upLoadIdCard",
+  data() {
+    return {
+      selectModel: false, // 模态窗选择拍照还是相册
+      nav: [{ name: "拍照" }, { name: "从手机相册选择" }],
+      picList: [{}, {}],
+      picZ: {},
+      picF: {},
+      zOrf: "",
+      isFirst: true
+    };
+  },
+  props: {
+    cardFont: {
+      type: String
+    },
+    cardBack: {
+      type: String
+    }
+  },
+  watch: {
+    cardFont: function(newVal, oldVal) {
+      if (newVal) {
+        this.picList[0].fileId = this.cardFont.slice(1);
+        this.picList[0].fileUrl = this.cardFont;
+      }
+    },
+    cardBack: function(newVal, oldVal) {
+      if (this.cardBack) {
+        this.picList[1].fileId = this.cardBack.slice(1);
+        this.picList[1].fileUrl = this.cardBack;
+      }
+    }
+  },
+  methods: {
+    ...mapMutations([SET_APP_LOADING]),
+    // 处理图片上传的事件(deleteIndex---删除图片的索引)
+    handlePhotoChange: function(evt,type) {
+      let that = this;
+      let shebei = this.judgeBrand(navigator.userAgent.toLowerCase());
+      that.SET_APP_LOADING(true);
+      // 图片是单选还是多选
+      const files = Array.prototype.slice.call(evt.target.files);
+      // 图片的处理
+      files.forEach(function(file, i) {
+        // 图片的拍摄方向
+        var orientation;
+        // 格式是否支持的判断
+        if (!/\/(?:jpg|jpeg|png)/i.test(file.type)) {
+          that.$vux.toast.text("仅支持jpg|png图片格式", "middle");
+          that.SET_APP_LOADING(false);
+          return;
+        }
+        // 获取文件内容
+        let reader = new FileReader();
+        // reader.readAsArrayBuffer(file);
+        reader.onload = function(e) {
+            // EXIF.getData(file, function() {
+            //     orientation = EXIF.getTag(this, "Orientation");
+                // console.log(orientation)
+                // 使用exif,处理图片的旋转问题,然后执行回调函数(orientation永远是0);
+                // if(type==2&&orientation){
+                //       // 拍照上传
+                //       that.getImgData(e.target.result, orientation, function(data) {
+                //         // 这里可以使用校正后的图片data了
+                //         var img = new Image();
+                //         img.src = data;
+                //         // 图片加载完毕之后进行压缩,然后上传
+                //         if (img.complete) {
+                          
+                //           callback();
+                //         } else {
+                //           img.onload = callback;
+                //         }
+                //         // 图片的路径获取成功后
+                //         function callback(){
+                //           // 压缩后的图片的base64字符串
+                //           let data = that.compress(img);
+                //           // 调取接口上传图片
+                //           that.submitUploadImg(that.fileType, data);
+                //         }
+                //     });
+                // }else{
+                  var comimg = new Image();
+                  comimg.src = e.target.result;
+                  comimg.onload = function(eimg){
+                  let num = 1;
+                  if(this.width<this.height){
+                      num = 8
+                  }
+                  that.getImgData(e.target.result, num, function(data) {
+                      // 这里可以使用校正后的图片data了
+                      var img = new Image();
+                      img.src = data;
+                      // 图片加载完毕之后进行压缩,然后上传
+                      if (img.complete) {
+                        callback();
+                      } else {
+                        img.onload = callback;
+                      }
+                      // 图片的路径获取成功后
+                      function callback() {
+                        // 压缩后的图片的base64字符串
+                        console.log(img.width,img.height)
+                        let data = that.compress(img);
+                        // 调取接口上传图片
+                        that.submitUploadImg(that.fileType, data);
+                        }
+                    });
+                  }
+                // }
+            // })
+        };
+        reader.readAsDataURL(file);
+      });
+    },
+    // type文件上传的路径,data图片的base64字符串(删除图片即重新上传)
+    submitUploadImg: function(type, base64) {
+      let that = this;
+      // 防止操作的模态窗
+      let submitInfo = {
+        base64Data: base64.split(",")[1], // 文件base64
+        suffix: base64.split(",")[0].split(";")["0"].split("/")[1]
+      };
+      this.$api.uploadFile(submitInfo).then(
+        res => {
+          if (that.zOrf == 1) {
+            that.picZ = {
+              fileUrl: res.body.fileUrl,
+              fileId: res.body.fileId
+            };
+            that.picList[0] = that.picZ;
+          } else {
+            that.picF = {
+              fileUrl: res.body.fileUrl,
+              fileId: res.body.fileId
+            };
+            that.picList[1] = that.picF;
+          }
+          if (this.picList[1].fileId && this.picList[0].fileId) {
+            this.getIdCardInfo();
+          }
+          that.SET_APP_LOADING(false);
+        },
+        error => {
+          this.SET_APP_LOADING(false);
+        }
+      );
+    },
+    // 获取身份证信息
+    getIdCardInfo() {
+      if (!this.isFirst) {
+        this.$api
+          .getIdCardInfo({
+            idBackId: this.picList[1].fileId,
+            idFrontId: this.picList[0].fileId
+          })
+          .then(res => {
+            let obj = res.body;
+            obj.idBackUrl = this.picList[1].fileUrl;
+            obj.idFrontUrl = this.picList[0].fileUrl;
+            Bus.$emit("getIdUserInfo", obj);
+          });
+      }
+    },
+    // 图片旋转处理
+    getImgData: function(img, dir, next) {
+      // @param {string} img 图片的base64
+      // @param {int} dir exif获取的方向信息
+      // @param {function} next 回调方法,返回校正方向后的base64
+      var image = new Image();
+      let canvas = document.createElement("canvas");
+      let ctx = canvas.getContext("2d");
+      image.onload = function() {
+        let resultWidth = 0;
+        let resultHeight = 0;
+        let maxWidthOrHeight = 1024;
+        let drawWidth = this.naturalWidth;
+        let drawHeight = this.naturalHeight;
+        // 以下改变图片大小,控制最大宽度为1024
+        var maxSide = Math.max(drawWidth, drawHeight);
+        if (maxSide > maxWidthOrHeight) {
+          let minSide = Math.min(drawWidth, drawHeight);
+          minSide = (minSide / maxSide) * maxWidthOrHeight;
+          maxSide = maxWidthOrHeight;
+          if (drawWidth > drawHeight) {
+            resultWidth = maxSide;
+            resultHeight = minSide;
+          } else {
+            resultWidth = minSide;
+            resultHeight = maxSide;
+          }
+        } else {
+          resultWidth = drawWidth;
+          resultHeight = drawHeight;
+        }
+        if (dir === 3) {
+          canvas.width = resultWidth;
+          canvas.height = resultHeight;
+          ctx.translate(resultWidth, resultHeight);
+          ctx.rotate(Math.PI);
+        } else if (dir === 6) {
+          canvas.width = resultHeight;
+          canvas.height = resultWidth;
+          ctx.translate(resultHeight, 0);
+          ctx.rotate(Math.PI / 2);
+        } else if (dir === 8) {
+          canvas.width = resultHeight;
+          canvas.height = resultWidth;
+          ctx.translate(0, resultWidth);
+          ctx.rotate(-Math.PI / 2);
+        } else {
+          canvas.width = resultWidth;
+          canvas.height = resultHeight;
+        }
+        ctx.drawImage(this, 0, 0, resultWidth, resultHeight);
+        // 返回校正图片
+        next(canvas.toDataURL("image/jpeg", 0.8));
+      };
+      image.src = img;
+    },
+    compress(img) {
+        let quality = 0.92, //压缩比例
+        w = img.width,
+        h = img.height,
+        canvas = document.createElement("canvas"),
+        ctx = canvas.getContext("2d");
+        canvas.width = w;
+        canvas.height = h;
+        ctx.drawImage(img, 0, 0, w, h);
+        return canvas.toDataURL("image/jpeg", quality);
+    },
+    checkAuth(id) {
+      // authStatus: 0 未授权  1授权---用户授权后才能执行下一步
+      this.$api
+        .checkAuth({
+          fileId: id
+        })
+        .then(res => {
+          if (res.body.authStatus === 1) {
+            this.$emit("on-check-auth", "下一步");
+          }
+        });
+    },
+    // 点击上传按钮
+    handleUploadPicture(i) {
+      this.isFirst = false;
+      this.zOrf = i;
+      // this.$refs.androidInputFileCapture.click();
+      this.selectModel = true;
+    },
+    // 选择拍照或者相册选项
+    handleMenuSelect(item, index) {
+      if (index === 0) {
+        this.$refs.androidInputFileCapture.click();
+      } else {
+        this.$refs.androidInputFileImage.click();
+      }
+      this.selectModel = false;
+    },
+    // 处理图片的删除
+    handleDeletePicture(index) {
+      this.selectModel = true;
+    },
+    judgeBrand(sUserAgent) {
+       var isIphone = sUserAgent.match(/iphone/i) == "iphone";
+       var isHuawei = sUserAgent.match(/huawei/i) == "huawei";
+       var isHonor = sUserAgent.match(/honor/i) == "honor";
+       var isOppo = sUserAgent.match(/oppo/i) == "oppo";
+       var isOppoR15 = sUserAgent.match(/pacm00/i) == "pacm00";
+       var isVivo = sUserAgent.match(/vivo/i) == "vivo";
+       var isXiaomi = sUserAgent.match(/mi\s/i) == "mi ";
+       var isXiaomi2s = sUserAgent.match(/mix\s/i) == "mix ";
+       var isRedmi = sUserAgent.match(/redmi/i) == "redmi";
+       var isSamsung = sUserAgent.match(/sm-/i) == "sm-";
+       if (isIphone) {
+           return 'iphone';
+       } else if (isHuawei || isHonor) {
+           return 'huawei';
+       } else if (isOppo || isOppoR15) {
+           return 'oppo';
+       } else if (isVivo) {
+           return 'vivo';
+       } else if (isXiaomi || isRedmi || isXiaomi2s) {
+           return 'xiaomi';
+       } else if (isSamsung) {
+           return 'samsung';
+       } else {
+           return 'default';
+       }
+   }
+  },
+  created(){
+  //  let 
+  //  console.log(shebei);
+  }
+};
+</script>
+
+<style lang="less" scoped >
+.component-photo-upload {
+  .pic-title {
+    h4 {
+      padding: 10px 0;
+      font-size: 15px;
+      line-height: 1;
+      color: #333;
+      font-weight: normal;
+    }
+  }
+
+  .photo-list {
+    // .pic-item-box{
+    //     width: 239px;
+    //     height: 134px;
+    // }
+
+    .pic-item-box-z {
+      width: 239px;
+      height: 134px;
+      background-image: url("../../../static/img/idcardz.png");
+      background-size: cover;
+      margin: auto;
+      margin-bottom: 20px;
+
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+
+    .pic-item-box-f {
+      width: 239px;
+      height: 134px;
+      background-image: url("../../../static/img/idcardf.png");
+      background-size: cover;
+      margin: auto;
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/components/upload/uploadImg.vue b/src/components/upload/uploadImg.vue
new file mode 100644
index 0000000..1f088a6
--- /dev/null
+++ b/src/components/upload/uploadImg.vue
@@ -0,0 +1,374 @@
+<!--
+ * @Date: 2019-08-30 18:04:49
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-08 14:09:13
+ * @Description:
+ -->
+<template>
+  <div class="component-photo-upload-img">
+    <!--title 和上传按钮的图标-->
+    <div class="pic-title">
+      <span v-if="hasTips" style="font-size:14px;color:#FF6666;">*</span>
+      <span style="font-size:14px;font-weight:500;color:#333333;">{{ title }}</span>
+    </div>
+    <!--图片上传列表,删除即重新上传-->
+    <div class="photo-list">
+      <!--图片上传列表-->
+      <template v-for="(item, index) in picList">
+        <div class="pic-item-box" v-if="picList instanceof Array && picList.length" :key="index">
+          <div class="close-div">
+            <div class="close-div-box">
+              <van-icon name="clear" v-if="picList.length > 1" @click="deletPhoto(item,index)" />
+            </div>
+          </div>
+          <!-- <img :src="item.fileUrl" @click="handleDeletePicture(index)" /> -->
+          <img :src="item" @click="handleDeletePicture(index)" />
+        </div>
+      </template>
+      <!--上传按钮-->
+      <div class="pic-item-box" @click="handleUploadPicture" v-if="showUploadBtn">
+        <i class="iconfont iconzhaoxiang"></i>
+      </div>
+    </div>
+    <!-- 真正的上传按钮-->
+    <div>
+      <input
+        style="display: none"
+        type="file"
+        ref="androidInputFileImage"
+        @change="handlePhotoChange($event)"
+        accept="image/*"
+      />
+      <input
+        style="display: none"
+        type="file"
+        ref="androidInputFileCapture"
+        @change="handlePhotoChange($event)"
+        accept="image/*"
+        capture="camera"
+      />
+    </div>
+    <!--选择上传图片还是拍照-->
+
+    <van-action-sheet
+      v-model="selectModel"
+      :close-on-click-overlay="false"
+      cancel-text="取消"
+      :actions="nav"
+      @select="handleMenuSelect"
+    ></van-action-sheet>
+  </div>
+</template>
+
+<script>
+import { SET_APP_LOADING } from "@/store/mutations-types";
+import { mapMutations } from "vuex";
+import EXIF from "exif-js";
+
+import { _imgCompress, _fileToBase64 } from "@/utils/index";
+import Vue from "vue";
+import { Icon } from "vant";
+import { ActionSheet } from 'vant';
+
+Vue.use(ActionSheet);
+Vue.use(Icon);
+export default {
+  name: "sceneUploadFile",
+  data() {
+    return {
+      selectModel: false, // 模态窗选择拍照还是相册
+      deleteIndex: -1, // 删除图片的index
+      nav: [{ name: "拍照" }, { name: "从手机相册选择" }]
+    };
+  },
+  props: [
+    "title",
+    "fileType", // 文件类型1-合同资料 2-现场合照 3-资料证明
+    "picList",
+    "sourceType",
+    "typeId",
+    "hasTips"
+  ],
+  computed: {
+    showUploadBtn() {
+      let num = Number(this.fileType),
+        isArray = Array.isArray(this.picList);
+
+      // 这里只能上传一张
+      if (num === 2 ) {
+        return isArray && this.picList.length < 1;
+      } else if (num === 10 || num === 13) {
+        // 这个类型,只能上传两张
+        return isArray && this.picList.length < 2;
+      } else {
+        return isArray && this.picList.length < 4;
+      }
+    }
+  },
+  methods: {
+    ...mapMutations([SET_APP_LOADING]),
+    //删除照片
+    deletPhoto(item, i) {
+      //console.log(item);
+      this.picList.splice(i, 1);
+    },
+    // 处理图片上传的事件(deleteIndex---删除图片的索引)
+    handlePhotoChange: function(evt) {
+      let that = this;
+      that.SET_APP_LOADING(true);
+      // 图片是单选还是多选
+      const files = Array.prototype.slice.call(evt.target.files);
+      // 图片的处理
+      files.forEach(function(file, i) {
+        // 图片的拍摄方向
+        var orientation;
+        // 格式是否支持的判断
+        if (!/\/(?:jpg|jpeg|png)/i.test(file.type)) {
+          that.$vux.toast.text("仅支持jpg|png图片格式", "middle");
+          that.SET_APP_LOADING(false);
+          return;
+        }
+        // 读取图片的元信息
+        EXIF.getData(file, function() {
+          orientation = EXIF.getTag(this, "Orientation");
+        });
+        // 获取文件内容
+        let reader = new FileReader();
+        reader.onload = function() {
+          that.$refs.androidInputFileCapture.value = null;
+          that.$refs.androidInputFileImage.value = null;
+          // 使用exif,处理图片的旋转问题,然后执行回调函数
+          that.getImgData(this.result, orientation, function(data) {
+            // 这里可以使用校正后的图片data了
+            var img = new Image();
+            img.src = data;
+
+            // 图片加载完毕之后进行压缩,然后上传
+            if (img.complete) {
+              callback();
+            } else {
+              img.onload = callback;
+            }
+            // 图片的路径获取成功后
+            function callback() {
+              // 压缩后的图片的base64字符串
+              let data = that.compress(img);
+              // 调取接口上传图片
+              that.submitUploadImg(that.fileType, data, that.deleteIndex);
+            }
+          });
+        };
+        reader.readAsDataURL(file);
+      });
+    },
+    // type文件上传的路径,data图片的base64字符串(删除图片即重新上传)
+    submitUploadImg: function(type, base64, deleteIndex) {
+      let that = this;
+      // 防止操作的模态窗
+      let submitInfo = {
+        base64Data: base64.split(",")[1], // 文件base64
+        //fileType: type,
+        suffix: base64
+          .split(",")[0]
+          .split(";")
+          ["0"].split("/")[1]
+      };
+        this.$api
+          .uploadFile({
+            ...submitInfo,
+          })
+          .then(
+            res => {
+              // 如果存在删除图片索引
+              if (deleteIndex >= 0) {
+                // 删除以前的那张照片,然后添加新上传的图片
+                // this.picList.splice(deleteIndex, 1, {
+                //   fileUrl: res.body.fileUrl,
+                //   fileId: res.body.fileId
+                // });
+                this.picList.splice(deleteIndex, 1, res.body.fileUrl);
+                // 将删除索引重置为-1,即当前状态重置为新增,而非删除状态
+                this.deleteIndex = -1;
+              } else {
+                // this.picList.unshift({
+                //   fileUrl: res.body.fileUrl,
+                //   fileId: res.body.fileId
+                // });
+                this.picList.unshift(
+                  res.body.fileUrl
+                );
+              }
+              // 如果是支付二维码的话,需要调取检查授权
+              if (Number(this.fileType) === 8) {
+                this.checkAuth(res.body.fileId);
+              }
+              that.SET_APP_LOADING(false);
+              // 提交整个图片列表
+              this.$emit("on-change-pic", this.picList);
+            },
+            error => {
+              this.SET_APP_LOADING(false);
+            }
+          );
+      
+    },
+    // 图片旋转处理
+    getImgData: function(img, dir, next) {
+      // @param {string} img 图片的base64
+      // @param {int} dir exif获取的方向信息
+      // @param {function} next 回调方法,返回校正方向后的base64
+      var image = new Image();
+      let canvas = document.createElement("canvas");
+      let ctx = canvas.getContext("2d");
+      image.onload = function() {
+        let resultWidth = 0;
+        let resultHeight = 0;
+        let maxWidthOrHeight = 1024;
+        let drawWidth = this.naturalWidth;
+        let drawHeight = this.naturalHeight;
+
+        // 以下改变图片大小,控制最大宽度为1024
+        var maxSide = Math.max(drawWidth, drawHeight);
+        if (maxSide > maxWidthOrHeight) {
+          let minSide = Math.min(drawWidth, drawHeight);
+          minSide = (minSide / maxSide) * maxWidthOrHeight;
+          maxSide = maxWidthOrHeight;
+          if (drawWidth > drawHeight) {
+            resultWidth = maxSide;
+            resultHeight = minSide;
+          } else {
+            resultWidth = minSide;
+            resultHeight = maxSide;
+          }
+        } else {
+          resultWidth = drawWidth;
+          resultHeight = drawHeight;
+        }
+
+        if (dir === 3) {
+          canvas.width = resultWidth;
+          canvas.height = resultHeight;
+          ctx.translate(resultWidth, resultHeight);
+          ctx.rotate(Math.PI);
+        } else if (dir === 6) {
+          canvas.width = resultHeight;
+          canvas.height = resultWidth;
+          ctx.translate(resultHeight, 0);
+          ctx.rotate(Math.PI / 2);
+        } else if (dir === 8) {
+          canvas.width = resultHeight;
+          canvas.height = resultWidth;
+          ctx.translate(0, resultWidth);
+          ctx.rotate(-Math.PI / 2);
+        } else {
+          canvas.width = resultWidth;
+          canvas.height = resultHeight;
+        }
+        ctx.drawImage(this, 0, 0, resultWidth, resultHeight);
+        // 返回校正图片
+        next(canvas.toDataURL("image/jpeg", 0.8));
+      };
+      image.src = img;
+    },
+    compress(img) {
+      let quality = 0.92, //压缩比例
+        w = img.width,
+        h = img.height,
+        canvas = document.createElement("canvas"),
+        ctx = canvas.getContext("2d");
+      canvas.width = w;
+      canvas.height = h;
+      ctx.drawImage(img, 0, 0, w, h);
+      return canvas.toDataURL("image/jpeg", quality);
+    },
+    checkAuth(id) {
+      // authStatus: 0 未授权  1授权---用户授权后才能执行下一步
+      this.$api
+        .checkAuth({
+          fileId: id
+        })
+        .then(res => {
+          if (res.body.authStatus === 1) {
+            this.$emit("on-check-auth", "下一步");
+          }
+        });
+    },
+    // 点击上传按钮
+    handleUploadPicture() {
+      if(this.fileType==2){
+          this.$refs.androidInputFileCapture.click();
+      }else{
+          this.selectModel = true;
+      }
+      
+    },
+    // 选择拍照或者相册选项
+    handleMenuSelect(item, index) {
+      if (index === 0) {
+        this.$refs.androidInputFileCapture.click();
+      } else {
+        this.$refs.androidInputFileImage.click();
+      }
+      this.selectModel = false;
+    },
+    // 处理图片的删除
+    handleDeletePicture(index) {
+      this.deleteIndex = index;
+      this.selectModel = true;
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+.component-photo-upload-img {
+  .pic-title {
+    margin-bottom: 10px;
+  }
+
+  .photo-list {
+    display: flex;
+    padding-bottom: 20px;
+    flex-wrap: wrap;
+
+    .pic-item-box {
+      position: relative;
+      height: 100px;
+      width: 100px;
+      margin-right: 10px;
+      margin-bottom: 10px;
+      line-height: 100px;
+      text-align: center;
+      background: rgba(245, 249, 255, 1);
+      border: 1px dashed rgba(81, 148, 254, 1);
+      border-radius: 4px;
+      .iconzhaoxiang {
+        font-size: 30px;
+        color: #5194fe;
+      }
+      .close-div {
+        position: absolute;
+        top: -45px;
+        right: -10px;
+        //border: 1px red solid;
+        //border-radius:50% ;
+        height: 20px;
+        width: 20px;
+        .close-div-box {
+          //border: 1px red solid;
+          //border-radius:50% ;
+          height: 20px;
+          width: 20px;
+          i {
+            font-size: 20px;
+          }
+        }
+      }
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+  }
+}
+</style>
diff --git a/src/components/v-navbar.vue b/src/components/v-navbar.vue
new file mode 100644
index 0000000..128f38b
--- /dev/null
+++ b/src/components/v-navbar.vue
@@ -0,0 +1,98 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 15:44:44
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-22 18:17:12
+ * @Description: 头部组件
+ -->
+<template>
+    <div class="nav-bar flex-start-g" :class="[fixed ? 'fixed' : '']" :style="{'background':background}">
+        <slot name="left-back">
+            <svg class="icon" aria-hidden="true" style="width:25px;height:44px;" @click="go">
+                <use xlink:href="#iconzuojiantou"></use>
+            </svg>
+        </slot>
+        <h4 class="title text-center-g" :style="{'color':titleColor}">{{title}}</h4>
+        <div class="rightText" @click="rightClick">
+            <slot name="right">{{rightText}}</slot>
+        </div>
+    </div>
+</template>
+
+<script>
+    export default {
+        name: 'v-navbar',
+        props: {
+            title: {
+                type: String,
+                require: true,
+            },
+            rightText: {
+                type: String,
+            },
+            fixed:{
+                type:Boolean,
+                default:false
+            },
+            back:{
+                type:String,
+            },
+            background:{
+                type:String,
+                default:'#fff'
+            },
+            titleColor:{
+                type:String
+            },
+            
+        },
+        methods:{
+            rightClick(){
+                this.$emit('right-click')
+            },
+            go(){
+                if(this.back){
+                    this.$router.push(this.back)
+                }else{
+                    this.$router.back()
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+    .nav-bar {
+        background-color: @c-bg-fff;
+        .lh(44px);
+        position: relative;
+        padding: 0 20px;
+        z-index: @zIndex-100;
+        &.fixed{
+            position: fixed;
+            top: 0;
+            left: 0;
+            right: 0;
+        }
+
+        .icon {
+            z-index: @zIndex-20;
+        }
+
+        .title {
+            font-size: @font-16;
+            position: absolute;
+            left: 60px;
+            right: 60px;
+        }
+
+        .rightText {
+            font-size: @font-14;
+            position: absolute;
+            right: 20px;
+            height: 44px;
+            min-width: 50px;
+            text-align: right;
+        }
+    }
+</style>
diff --git a/src/components/validator/validator.js b/src/components/validator/validator.js
new file mode 100644
index 0000000..5b7af6a
--- /dev/null
+++ b/src/components/validator/validator.js
@@ -0,0 +1,307 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-09 09:35:12
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-03-30 09:33:47
+ * @Description: 
+ */
+import {
+    Toast,
+} from 'vant';
+import IDValidator from '@/utils/IDValidator';
+import vNavBar from '../v-navbar';
+import vCell from '../cell/h-cell';
+import hIpt from '../input/h-ipt';
+import hList from '../h-list';
+import upLoadIdCard from '../upload/uploadIdCard'
+
+var arr = [
+    vNavBar,
+    vCell,
+    hIpt,
+    hList,
+    upLoadIdCard
+]
+
+export default {
+    install(Vue, opt) {
+        // 循环注入自定义组件
+        arr.forEach(item => {
+            Vue.component(item.name, item)
+        })
+
+        // 老项目的 函数
+        Vue.prototype.$tool = {
+            toast(text) {
+                Toast(text)
+            },
+            // 金额格式化
+            formatMoney(str = 0) {
+                str = str + '';
+                let newStr = '';
+                let count = 0;
+                if (str.indexOf('.') === -1) {
+                    for (let i = str.length - 1; i >= 0; i--) {
+                        if (count % 3 === 0 && count !== 0) {
+                            newStr = str.charAt(i) + ',' + newStr;
+                        } else {
+                            newStr = str.charAt(i) + newStr;
+                        }
+                        count++;
+                    }
+                    str = newStr + '.00'; // 自动补小数点后两位
+                    return str;
+                } else {
+                    for (let i = str.indexOf('.') - 1; i >= 0; i--) {
+                        if (count % 3 === 0 && count !== 0) {
+                            newStr = str.charAt(i) + ',' + newStr;
+                        } else {
+                            newStr = str.charAt(i) + newStr; // 逐个字符相接起来
+                        }
+                        count++;
+                    }
+                    str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3);
+                    return str;
+                }
+            },
+            // 身份证 中间用* 显示
+            cardIDHide(cardid) {
+                if (cardid) {
+                    return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2');
+                } else {
+                    return '';
+                }
+            },
+            //手机号,中间四位*显示
+            formatPhone(phone) {
+                return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
+            },
+            // 电话号码格式
+            checkPhone(phone) {
+                let reg = /^1(3|4|5|6|7|8|9)\d{9}$/
+                //let reg = /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/;
+                return reg.test(phone);
+            },
+            //座机/手机/400号码验证
+            checkCompanyPhone(phone) {
+                let reg = /^([0-9]{3,4}-)?[0-9]{7,8}$|^1(3|4|5|6|7|8|9)\d{9}$|^\d{3,4}-\d{3,4}-\d{3,4}$/
+                return reg.test(phone)
+            },
+            checkEmail(email) {
+                // 验证邮箱格式
+                //let reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
+                let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;
+                return reg.test(email);
+            },
+            checkVerifyCode(code) {
+                // 验证验证码格式
+                let reg = /^\d{6}$/;
+                return reg.test(code);
+            },
+            checkDynamicCode(code) {
+                // 验证邀请码格式
+                let reg = /^[A-Za-z0-9]{4}$/;
+                return reg.test(code);
+            },
+            // password check
+            checkPassword(password) {
+                // 验证密码格式
+                let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
+                return reg.test(password);
+            },
+            // name check
+            checkName(name) {
+                // 验证用户名格式
+                let reg = /^[\u4E00-\u9FA5]{2,10}$/;
+                return reg.test(name);
+            },
+            //校验真实姓名
+            checkRealName(name) {
+                // 验证用户名格式
+                let reg = /^[\u4E00-\u9FA5]{2,6}$/;
+                return reg.test(name);
+            },
+            //  账户名称的正则表达式
+            checkUsername(name) {
+                let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/;
+                return reg.test(name);
+            },
+            //身份证详细地址验证
+            checkCardAddress(address) {
+                let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{9,30}$/;
+                return reg.test(address);
+            },
+            //详细地址验证
+            checkAddress(address) {
+                let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{9,30}$/;
+                return reg.test(address);
+            },
+            //  统一验证
+            checkCommonField(name) {
+                let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/;
+                return reg.test(name);
+            },
+            // idCard check
+            checkIDCard(idCard) {
+                // 验证身份证格式
+                return IDValidator.isValid(idCard);
+            },
+            isIdcard(val) {
+                let result = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val);
+                return result;
+            },
+            checkValEmpty(str) {
+                // 验证是否为空
+                if (
+                    str === undefined ||
+                    str === null ||
+                    str.length <= 0 ||
+                    str === 'undefined'
+                ) {
+                    return true;
+                } else {
+                    return false;
+                }
+            },
+            // 验证佣金输入金额
+            checkCommission(commission) {
+                // 小于100且后面可以带4个小数点
+                let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/;
+                //一亿以内,保留四位小数
+                //  /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/
+                // 如果通过的话,那么判断小数点的前几位数字
+                return reg.test(commission);
+            },
+            // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写
+            checkChannelNo(channelNo) {
+                let reg = /^[\w\d]{4,8}$/;
+                return reg.test(channelNo);
+            },
+            //验证是否包含空格
+            checkSpace(val) {
+                let reg = /^\s+$/;
+                if (reg.test(val)) {
+                    return true;
+                } else {
+                    return false;
+                }
+            },
+            //将发送请求中的参数格式化,如果为空则转为null
+            formatReq(obj) {
+                for (let i in obj) {
+                    let item = obj[i];
+                    if (item === null) continue;
+                    if (
+                        item === undefined ||
+                        item === '' ||
+                        item === 'undefined' ||
+                        item.length <= 0 ||
+                        JSON.stringify(item) == '{}'
+                    ) {
+                        obj[i] = null;
+                    }
+                }
+                return obj;
+            },
+            // 只能输入数字与小数点正则判断
+            checkIntegerAndDot(checkVal) {
+                let dotReg = /\./g;
+                let IntegerReg = /^[1-9]{1}\d{0,5}$/;
+                // 如果输入了多个点,直接不符合要求
+                if (checkVal.match(dotReg) && checkVal.match(dotReg).length > 1) {
+                    return false;
+                    // 输入了一个点
+                } else if (
+                    checkVal.match(dotReg) &&
+                    checkVal.match(dotReg).length === 1
+                ) {
+                    // 开头与结尾都不能出现点,点的前面与后面必须是数字
+                    let strLen = checkVal.length;
+                    if (
+                        checkVal.indexOf('.') === 0 ||
+                        checkVal.indexOf('.') === strLen - 1
+                    ) {
+                        return false;
+                        // 超过个数的限制的话
+                    } else {
+                        return strLen <= 6;
+                    }
+                    // 没有小数点的话,那么就是全部数字进行匹配
+                } else if (!checkVal.match(dotReg)) {
+                    return IntegerReg.test(checkVal);
+                }
+            },
+            //银行卡验证
+            bankCard(idCard) {
+                let reg =  /^([1-9]{1})(\d{14,30})$/;
+                return reg.test(idCard);
+            },
+            //公司名称校验
+            checkCompany(name) {
+                let reg = /^[\u4e00-\u9fa5a-zA-Z]{2,20}$/;
+                return reg.test(name);
+            },
+            date(date, fmt) {
+                if (!date) {
+                    return null;
+                }
+                if (typeof date === 'string') {
+                    date = new Date(date.replace(/-/g, '/'));
+                }
+                if (typeof date === 'number') {
+                    date = new Date(date);
+                }
+                if (fmt === undefined) {
+                    return Number(date);
+                } else {
+                    var o = {
+                        'M+': date.getMonth() + 1,
+                        'D+': date.getDate(),
+                        'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
+                        'H+': date.getHours(),
+                        'm+': date.getMinutes(),
+                        's+': date.getSeconds(),
+                        'q+': Math.floor((date.getMonth() + 3) / 3),
+                        S: date.getMilliseconds()
+                    };
+                    var week = {
+                        '0': '\u65e5',
+                        '1': '\u4e00',
+                        '2': '\u4e8c',
+                        '3': '\u4e09',
+                        '4': '\u56db',
+                        '5': '\u4e94',
+                        '6': '\u516d'
+                    };
+                    if (/(Y+)/.test(fmt)) {
+                        fmt = fmt.replace(
+                            RegExp.$1,
+                            (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+                        );
+                    }
+                    if (/(E+)/.test(fmt)) {
+                        fmt = fmt.replace(
+                            RegExp.$1,
+                            (RegExp.$1.length > 1
+                                ? RegExp.$1.length > 2
+                                    ? '\u661f\u671f'
+                                    : '\u5468'
+                                : '') + week[date.getDay() + '']
+                        );
+                    }
+                    for (var k in o) {
+                        if (new RegExp('(' + k + ')').test(fmt)) {
+                            fmt = fmt.replace(
+                                RegExp.$1,
+                                RegExp.$1.length === 1
+                                    ? o[k]
+                                    : ('00' + o[k]).substr(('' + o[k]).length)
+                            );
+                        }
+                    }
+                    return fmt;
+                }
+            },
+        }
+    }
+}
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..2ed246d
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,61 @@
+/*
+ * @Descripttion: 修改配置
+ * @Author: TM丶
+ * @Date: 2019-08-14 14:05:51
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2021-10-28 15:20:31
+ */
+
+
+import Vue from 'vue';
+import 'element-ui/lib/theme-chalk/index.css';
+import { Select } from 'element-ui'
+import Validator from '@/utils/formValidator';
+import vantRegister from '@/components/validator/validator' 
+
+import store from "@/store/index";
+import router from "@/router/index";
+import App from "./App.vue";
+import api from "@/api"; //接口
+import filters from '@/utils/filters';
+// import Vant from 'vant'
+// import 'vant/lib/vant-css/index.css'
+
+import androidBack from './utils/pageBackByAndroid';
+Vue.config.productionTip = false; // 关闭生产的提示
+
+
+import "@/style/normalize.less";
+import "@/style/common.less";
+
+
+Vue.use(api)
+Vue.use(filters)
+Vue.use(Validator)
+Vue.use(vantRegister)
+Vue.use(Select)
+// Vue.use(Vant)
+
+
+new Vue({
+    store,
+    router,
+    mounted() {
+        var u = navigator.userAgent;
+        if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {
+            window.addEventListener("resize", function() {
+                let el = document.activeElement;
+                if(el.tagName=="INPUT" || el.tagName=="TEXTAREA") {
+                    window.setTimeout(function() {
+                        el.scrollIntoView({
+                            behavior:'smooth',
+                        });
+                    },16.7);
+                }
+            })
+        }
+    },
+    render: h => h(App)
+}).$mount("#app")
+
+androidBack.androidBackBtn();
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..a70173f
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,46 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-08-02 17:27:35
+ * @Description:
+ */
+import Vue from "vue";
+import VueRouter from 'vue-router';
+import routes from './routes';
+import Store from '@/store';
+Vue.use(VueRouter);
+
+let router =  new VueRouter({
+    mode:"hash", //history
+    routes,
+    scrollBehavior (to, from, savedPosition) {
+        return {
+            x:0,
+            y:0
+        }
+    },
+})
+
+// 全局前置守卫:页面跳转前拦截
+router.beforeEach((to, from, next) => {
+    if(to.meta.isLogin){
+        next()
+    }else{
+        // 需要登录的页面
+        if(Store.state.sessionId){
+            next()
+        }else{
+            
+            next('/login')
+        }
+    }
+})
+
+
+//全局后置守卫:页面跳转后执行
+router.afterEach((to, from) => {
+
+})
+
+export default router;
diff --git a/src/router/routes.js b/src/router/routes.js
new file mode 100644
index 0000000..ab6e40a
--- /dev/null
+++ b/src/router/routes.js
@@ -0,0 +1,140 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-13 18:10:18
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-08-02 17:27:11
+ * @Description:
+ */
+export default [
+    // {
+    //     path:"/",
+    //     name:'front-login',
+    //     component:()=>import("@/views/user/front-login.vue"),
+    //     meta:{
+    //         isLogin:true
+    //     }
+    // },
+    {
+        path:"/login",
+        name:'login',
+        component:()=>import("@/views/user/login.vue"),
+        meta:{
+            isLogin:true
+        }
+    },
+    {
+        path:"/agreement",
+        name:'agreement',
+        component:()=>import("@/views/user/agreement.vue"),
+        meta:{
+            isLogin:true
+        }
+    },
+    // {
+    //     path:"/agreement2",
+    //     name:'agreement2',
+    //     component:()=>import("@/views/user/agreement2.vue"),  
+    // },
+    {
+        path:"/",
+        name:'home',
+        component:()=>import("@/views/home.vue"),
+        children:[
+            {
+                path:'/home/index',
+                name:'index',
+                component:()=>import("@/views/homeIndex/home-index.vue"),
+            },
+            {
+                path:'/home/personal',
+                name:'personal',
+                component:()=>import("@/views/personal/personal-center.vue")
+            }
+        ]
+    },
+    {
+        path:'/order-handling',
+        name:'order-handling',
+        component:()=>import('@/views/order-handling/order-handling.vue')
+    },//扫码办单订单信息页面
+    {
+        path:'/order-handling/upload-IDcard',
+        name:'upload-IDcard',
+        component:()=>import('@/views/order-handling/upload-IDcard.vue')
+    },//进入办单第一步上传身份证
+    {
+        path:'/order-handling/face-recognition',
+        name:'face-recognition',
+        component:()=>import('@/views/order-handling/face-recognition.vue')
+    },//进入办单人脸识别结果页面
+    {
+        path:'/order-handling/upload-userInfo',
+        name:'upload-userinfo',
+        component:()=>import('@/views/order-handling/upload-userInfo.vue')
+    },//办单人信息填写页面
+    {
+        path:'/order-handling/contract-signing',
+        name:'contract-signing',
+        component:()=>import('@/views/order-handling/contract-signing.vue')
+    },//合同签署页面
+    {
+        path:'/order-handling/bank-list',
+        name:'bank-list',
+        component:()=>import('@/views/order-handling/bank-list.vue')
+    },//银行选择页面
+    {
+        path:'/order-handling/image-upload',
+        name:'image-upload',
+        component:()=>import('@/views/order-handling/image-upload.vue')
+    },//图像上传页面
+    {
+        path:'/order-handling/approval-results',
+        name:'approval-results',
+        component:()=>import('@/views/order-handling/approval-results.vue')
+    },//审批结果页面
+    {
+        path:'/order/my-order',
+        name:'my-order',
+        component:()=>import('@/views/order/my-order.vue')
+    },
+    {
+        path:'/order/order-detail',
+        name:'order-detail',
+        component:()=>import('@/views/order/order-detail.vue')
+    },
+    {
+        path:'/order/repayment-plan',
+        name:'repayment-plan',
+        component:()=>import('@/views/order/repayment-plan.vue')
+    },
+    {
+        path:'/order/contract',
+        name:'order-contract',
+        component:()=>import('@/views/order/contract.vue')
+    },
+    {
+        path:'/order/settle',
+        name:'settle',
+        component:()=>import('@/views/order/settle.vue')
+    },
+    {
+        path:'/order/settlementEarly',
+        name:'settle',
+        component:()=>import('@/views/order/settlementEarly.vue')
+    },
+    {
+        path:'/order/pay-result',
+        name:'pay-result',
+        component:()=>import('@/views/order/pay-result.vue')
+    },
+    {
+        path:'/order/active-repayment',
+        name:'active-repayment',
+        component:()=>import('@/views/order/active-repayment.vue')
+    },
+    {
+        path:'/bankCard/index',
+        name:'active-repayment',
+        component:()=>import('@/views/bankCard/index.vue')
+    },
+]
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..3f24ecd
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,147 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:17
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2021-11-01 11:01:36
+ * @Description:
+ */
+import Vue from 'vue';
+import Vuex from "vuex";
+import md5 from 'blueimp-md5';
+import mutations from "./mutations";
+// 数据持久化到session的插件
+import createPersistedState from 'vuex-persistedstate';
+import {calcArea} from '@/utils/index';
+
+import {
+    SET_SESSION_ID,
+    SET_FOOTER_NAV,
+    SET_USER_PAGE,
+    SET_USER_INFO,
+    SET_AREA_LIST,
+    SET_MESSAGE_CONUT,
+    SET_INVITE_CODE,
+} from './mutations-types';
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+    plugins: [createPersistedState({ storage: window.sessionStorage })],
+    state: {
+        AppLoading: false,//加载
+        sessionId: '',//判断是否登录
+        userinfo: {}, //用户信息
+        footerNav:[],//底部导航
+        areaList:[],
+        msgCount: {},
+    },
+    getters: {
+        orgType(state){
+            return state.userinfo.orgType
+        },
+        orgId(state) {
+            return state.userinfo.orgId
+        }
+    },
+    mutations,
+    actions: {
+        openIdLogin({ commit, dispatch }, { vm, openId, next }){
+            let passwordLogin = {
+               openId:openId
+            };
+            //dispatch('getWechatUserInfo',{vm,openId,next})
+            Vue.prototype.$api.openIdLogin(passwordLogin).then(res=>{
+                if(res.body){
+                    let userInfo = {}
+                    userInfo.mblNo = res.body.account;//手机号修改成账号
+                    userInfo.hasBankCard = res.body.hasBankCard;//1标识有我的银行卡0未绑定银行卡
+                    commit(SET_USER_INFO,userInfo)
+                    commit(SET_SESSION_ID, res.body.sessionId);//存储sessionId用于判断是否登录
+                    dispatch('setUserMenu',{ vm, next })
+                    vm.$router.push('/home/index')//跳转到指定页面
+                }else{
+                    vm.$router.push('/login')
+                }
+            }).catch(err=>{
+                //vm.$router.push('/login')
+            })
+        },
+        login({ commit, dispatch }, { vm, mblNo, verCode, openId, next }) {
+            let tmpCode = md5(mblNo + verCode);
+            let passwordLogin = {
+                mblNo: mblNo,
+                verCode: verCode,
+                openId:openId
+            };
+            //dispatch('getWechatUserInfo',{vm,openId,next})
+            Vue.prototype.$api.login(passwordLogin).then(res => {
+                // sessionStorage.jumpUrl = res.body.clientAccessDomain;
+                let {
+                    sessionId,
+                    mblNo
+                } = res.body;
+                let userInfo = {}
+                userInfo.mblNo = res.body.account;//手机号修改成账号
+                userInfo.hasBankCard = res.body.hasBankCard;//1标识有我的银行卡0未绑定银行卡
+                commit(SET_SESSION_ID, sessionId);//存储sessionId用于判断是否登录
+                commit(SET_USER_INFO,userInfo)
+                dispatch('setUserMenu',{ vm, next })
+                vm.$router.push('/home/index')//跳转到指定页面
+            });
+        },
+         // 获取微信用户信息
+        getWechatUserInfo({commit},{vm,openId,next}){
+            Vue.prototype.$api.wechatGetUserInfo({
+                openId:openId
+            }).then(res=>{
+                let obj = {}
+                obj = res.body
+            })
+        },
+        // 根据不同的权限设置用户拥有的菜单
+        setUserMenu({ commit }, { vm, lastLoginMgrId, next }) {
+            var arr = [
+                {
+                    icon:'iconshouye',
+                    icon_h:'iconshouye_h',
+                    title:'首页',
+                    to:'/home/index'
+                },
+                {
+                    icon:'icongerenzhongxin',
+                    icon_h:'icongerenzhongxin_h',
+                    title:'我的',
+                    to:'/home/personal'
+                }
+            ] 
+            commit(SET_FOOTER_NAV, arr);
+        },
+        // 获取验证码
+        getVercode({ commit },obj){
+            let form = {
+                mblNo:obj.mblNo,
+                verCodeType:obj.verCodeType
+            } 
+            Vue.prototype.$api.getVerCode(form).then(res=>{
+                obj.vm.$tool.toast('验证码获取成功')
+            })
+        },
+        // 获取地区列表
+        getArea({commit}) {
+            Vue.prototype.$api.areaOptions().then((res) => {
+                let  provList  = res.body;
+                commit(SET_AREA_LIST,provList)
+            }).catch((err) => {
+
+            });
+        },
+        //消息count
+        getCount({commit}) {
+            
+        }
+    },
+    modules: {
+        
+    }
+})
+
diff --git a/src/store/mutations-types.js b/src/store/mutations-types.js
new file mode 100644
index 0000000..cde345b
--- /dev/null
+++ b/src/store/mutations-types.js
@@ -0,0 +1,28 @@
+/*
+ * @Descripttion: 使用常量替代 mutation 事件类型,把这些常量放在单独的文件中可以让整个 app 包含的 mutation 一目了然
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-06 21:41:06
+ * @LastEditTime: 2020-05-08 14:12:42
+ */
+
+// 设置加载状态
+export const SET_APP_LOADING = "SET_APP_LOADING";
+// sessionId 判断用户登录状态
+export const SET_SESSION_ID = "SET_SESSION_ID";
+// 设置用户信息
+export const SET_USER_INFO = "SET_USER_INFO";
+
+// 设置地区列表
+export const SET_AREA_LIST = "SET_AREA_LIST";
+
+//消息
+export const SET_MESSAGE_CONUT = "SET_MESSAGE_CONUT";
+
+// 设置用户的底部导航菜单
+export const SET_FOOTER_NAV = "SET_FOOTER_NAV";
+
+// 设置用户的权限页面
+export const SET_USER_PAGE = "SET_USER_PAGE";
+// 设置用户邀请码
+export const SET_INVITE_CODE = "SET_INVITE_CODE";
diff --git a/src/store/mutations.js b/src/store/mutations.js
new file mode 100644
index 0000000..c9fcc5c
--- /dev/null
+++ b/src/store/mutations.js
@@ -0,0 +1,55 @@
+/*
+ * @Descripttion: 项目的mutations
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-06 21:40:25
+ * @LastEditTime: 2020-06-22 14:34:57
+ */
+import {
+    SET_APP_LOADING,
+    SET_USER_PAGE,
+    SET_FOOTER_NAV,
+    SET_SESSION_ID,
+    SET_USER_INFO,
+    SET_AREA_LIST,
+    SET_MESSAGE_CONUT,
+    SET_INVITE_CODE
+} from "./mutations-types";
+
+//使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名
+export default {
+    //设置loading状态
+    [SET_APP_LOADING](state, val) {
+        state.AppLoading = val;
+    },
+    //获取邀请码
+    [SET_INVITE_CODE](state, val) {
+        state.inviteCode = val;
+    },
+    [SET_AREA_LIST](state, val) {
+        state.areaList = val;
+    },
+    [SET_MESSAGE_CONUT](state, val) {
+        state.msgCount = val;
+    },
+    [SET_SESSION_ID](state, val) {
+        state.sessionId = val;
+    },
+    [SET_USER_INFO](state, val) {
+        state.userinfo = val;
+    },
+    [SET_USER_PAGE](state, val) {
+        if (Array.isArray(val)) {
+            state.userPage = val;
+        }
+    },
+    [SET_FOOTER_NAV](state, val) {
+        if (Array.isArray(val)) {
+            state.footerNav = val;
+        }
+    },
+    // 设置消息列表
+    // [SET_MESSAGE_LIST](state, val) {
+    //     state.messageList = val;
+    // },
+}
\ No newline at end of file
diff --git a/src/style/common.less b/src/style/common.less
new file mode 100644
index 0000000..da3063a
--- /dev/null
+++ b/src/style/common.less
@@ -0,0 +1,191 @@
+/*
+ * @Descripttion: 基础css 类,全局类名以 -g 结尾来区分
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2020-04-24 15:56:39
+ */
+
+ html,body{
+   height: 100%;
+ }
+
+ body {
+  font-size: @font-14;
+  color: @c-333;
+  scroll-behavior: smooth;
+}
+
+p,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+ul {
+  margin: 0;
+}
+
+
+
+.font-11-g{
+  font-size: @font-11;
+}
+
+.font-12-g{
+  font-size: @font-12;
+}
+
+.font-14-g{
+  font-size: @font-14;
+}
+
+
+.font-16-g{
+  font-size: @font-16;
+}
+
+
+
+.height-44-g{
+  height: 44px;
+  width: 100%;
+}
+.height-20-g{
+  height: 20px;
+  width: 100%;
+}
+
+
+
+.c-text-999-g{
+  color: @c-text-999;
+}
+
+.c-text-666-g{
+  color: @c-text-666;
+}
+
+hr{
+  border: none;
+}
+
+.h-100-g{
+  min-height: 100%;
+}
+
+.w-100-g{
+  width: 100%;
+}
+
+.fl-g {
+  float: left;
+}
+
+.fr-g {
+  float: right;
+}
+
+
+.clearfix-g {
+  zoom: 1;
+
+  &:after {
+    content: "";
+    display: block;
+    clear: both;
+  }
+}
+
+.text-center-g{
+  text-align: center;
+}
+
+.img-fluid-g {
+  max-width: 100%;
+  height: auto;
+}
+
+.p-center-g{
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%,-50%);
+}
+
+.hidden-g {
+  display: none;
+}
+
+.flex-start-g {
+  .flex(flex-start);
+}
+
+.flex-center-g {
+  .flex(center);
+}
+
+.flex-between-g {
+  .flex(space-between);
+}
+
+.flex-around-g {
+  .flex(space-around);
+}
+
+.flex-end-g {
+  .flex(flex-end);
+}
+
+.flex-1-g{
+  flex:1;
+}
+
+/*单行溢出*/
+.text-clip-g {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+// 滚动条样式
+::-webkit-scrollbar {
+  max-width: 5px;
+  max-height: 8px;
+}
+
+
+::-webkit-scrollbar-thumb {
+  background-color: #C9CAD3;
+  border-radius: 4px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+}
+
+// placeholder样式控制
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+  color: @c-999;
+  font-size: @font-14;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+  color: @c-999;
+  font-size: @font-14;
+}
+
+input::-moz-placeholder,
+textarea::-moz-placeholder {
+  color: @c-999;
+  font-size: @font-14;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+  color: @c-999;
+  font-size: @font-14;
+}
diff --git a/src/style/mixin.less b/src/style/mixin.less
new file mode 100644
index 0000000..b5eb120
--- /dev/null
+++ b/src/style/mixin.less
@@ -0,0 +1,98 @@
+/**
+ * Created by c.y on 2018-3-1
+ * 文件说明: 这个是定义项目全局的mixin
+ */
+
+// flex布局
+.flexLayout(@justify:flex-start,@align:center,@direction:row) {
+    display: flex;
+    justify-content: @justify;
+    align-items: @align;
+    flex-direction: @direction;
+}
+
+// 清除浮动
+.clearfix() {
+    zoom: 1;
+    &:before,
+    &:after {
+        content: '';
+        display: table;
+    }
+    &:after {
+        clear: both;
+        visibility: hidden;
+        font-size: 0;
+        height: 0;
+    }
+}
+
+// 单行文本超出显示省略号
+.ellipsis(@w:auto) {
+    width: @w;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    word-wrap: normal;
+}
+
+// 多行文本超出显示省略号
+.ellipsisLn(@line) {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: @line;
+    word-break: break-all;
+}
+
+// 单词换行
+.text_wrap() {
+    word-wrap: break-word;
+    word-break: break-all;
+}
+
+// 设置箭头 arrowSize--箭头的大小, borderColor---箭头的颜色,@borderWidth箭头的粗细
+._setArrow(@arrowsize, @borderColor, @borderWidth) {
+    display: inline-block;
+    height: @arrowsize;
+    width: @arrowsize;
+    border-width: @borderWidth @borderWidth 0 0;
+    border-color: @borderColor;
+    border-style: solid;
+}
+
+// 示例调用  .setArrow(top, 10px, red, 2px);向上箭头
+.setArrow(@direction, @arrowsize, @borderColor, @borderWidth)
+    when
+    (@direction = top) {
+    ._setArrow(@arrowsize, @borderColor, @borderWidth);
+    transform: matrix(0.71, -0.71, 0.71, 0.71, 0, 0); // rotate(-45deg)
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+    when
+    (@direction = right) {
+    ._setArrow(@arrowsize, @borderColor, @borderWidth);
+    transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); // rotate(45deg);
+    position: relative;
+    top: -1px;
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+    when
+    (@direction = down) {
+    ._setArrow(@arrowsize, @borderColor, @borderWidth);
+    transform: matrix(-0.71, 0.71, -0.71, -0.71, 0, 0); // rotate(135deg);
+    position: relative;
+    top: -1.5px;
+}
+
+.setArrow(@direction, @arrowsize, @borderColor,@borderWidth)
+    when
+    (@direction = left) {
+    ._setArrow(@arrowsize, @borderColor, @borderWidth);
+    transform: matrix(-0.71, -0.71, 0.71, -0.71, 0, 0); // rotate(-135deg);
+    position: relative;
+    top: -1px;
+}
diff --git a/src/style/mixins.less b/src/style/mixins.less
new file mode 100644
index 0000000..6d04221
--- /dev/null
+++ b/src/style/mixins.less
@@ -0,0 +1,139 @@
+/*
+ * @Descripttion: 全局mixins变量
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2019-08-30 10:42:05
+ */
+ @import "./themes.less";
+
+ /* 字体 大小*/
+ @font-10: 10px;
+ @font-11: 11px;
+ @font-12: 12px;
+ @font-13: 13px;
+ @font-14: 14px;
+ @font-15: 15px;
+ @font-16: 16px;
+ @font-17: 17px;
+ @font-18: 18px;
+ @font-20: 20px;
+ @font-24: 24px;
+ @font-28: 28px;
+ 
+ 
+ /* z-index*/
+ @zIndex-10:10;
+ @zIndex-20:20;
+ @zIndex-30:30;
+ @zIndex-40:40;
+ @zIndex-50:50;
+ @zIndex-100:100;
+ @zIndex-200:200;
+ @zIndex-300:300;
+ @zIndex-400:400;
+ @zIndex-500:500;
+ @zIndex-999:999;
+ @zIndex-9999:9999;
+ 
+//  新主题色
+  @c-main: #896EDB;
+  @c-success: #19BE6B;
+  @c-lose:#ED4014;
+ // flex布局
+ .flex(@x:flex-start,@y:center,@wrap:nowrap,@dir:row) {
+   display: flex;
+   justify-content: @x;
+   align-items: @y;
+   flex-wrap: @wrap;
+   flex-direction: @dir;
+ }
+
+//  老项目复制过来的 兼任!
+ .flexLayout(@justify:flex-start,@align:center,@direction:row) {
+  display: flex;
+  justify-content: @justify;
+  align-items: @align;
+  flex-direction: @direction;
+}
+ 
+ 
+ .lh(@val){
+   height: @val;
+   line-height: @val;
+ }
+ 
+ 
+ /*多行溢出 手机端使用*/
+ .text-clip-double(@num:2) {
+   display: -webkit-box;
+   overflow: hidden;
+   word-break: break-all;
+   text-overflow: ellipsis;
+   -webkit-box-orient: vertical;
+   -webkit-line-clamp: @num;
+ }
+ 
+ // 定位到html
+//  .p-fixed(@bg:#fff) {
+//    position: fixed;
+//    top: 0;
+//    right: 0;
+//    bottom: 0;
+//    left: 0;
+//    overflow-y: scroll;
+//    background-color: @bg;
+//  }
+ 
+
+ 
+
+
+
+//  老项目的变量
+@fontEN: -apple-system-font, "Helvetica Neue";
+@fontCN: "PingFang SC", "Microsoft YaHei", "sans-serif", "Helvetica Neue";
+@fontDefault: @fontEN, @fontCN;
+
+@font-size-tiny: 10Px;
+@font-size-small: 12Px;
+@font-size-medium: 14Px;
+@font-size-base: 15Px;
+@font-size-primary: 16Px;
+@font-size-large: 18Px;
+
+@font-line-height-base: 1;
+@font-line-height-medium: 1.3;
+@font-line-height-large: 1.5;
+
+@font-weight-normal: normal;
+@font-weight-bold: bold;
+@font-weight-base: 400;
+@font-weight-thin: 200;
+
+@border-radius-normal-size: 7.5px;
+
+@color-white: #fff;
+@backgroundColor: #f1f1f1;
+
+@color-text-main: #3a3a3a; //场景分期文字主要颜色
+@color-text-second: #666; //场景分期文字第二颜色
+@color-text-three: #bfa073; //场景分期文字第三颜色
+@color-text-three-light: rgba(191, 160, 115, 0.05); //场景分期文字第三颜色-淡色
+@color-text-placeholder: #a3a3a3; // 场景分期输入框placeholder暗提示颜色
+@color-line: #d9d9d9; // 边框颜色
+@color-border-theme: #bfa073; // 边框主题颜色
+
+@color-button-default: #3a3a3a;
+@color-button-normal: #bfa073;
+
+@tabbar-text-active-color: #bfa073;
+
+@switch-checked-bg-color: #bfa073;
+@switch-checked-border-color: #bfa073;
+
+@calendar-arrow-color: #444;
+@calendar-today-font-color: #bfa073;
+@calendar-selected-bg-color: #bfa073;
+
+
diff --git a/src/style/myVant.less b/src/style/myVant.less
new file mode 100644
index 0000000..8936816
--- /dev/null
+++ b/src/style/myVant.less
@@ -0,0 +1,12 @@
+.ipt,
+  .fenqi {
+    & {
+      border-bottom: 1px solid #e0e1e6;
+      color: #333;
+      font-size: 16px;
+      .van-field__control{
+        color: #999 !important;
+        font-size: 14px !important;
+      }
+    }
+  }
\ No newline at end of file
diff --git a/src/style/myVideo.less b/src/style/myVideo.less
new file mode 100644
index 0000000..26cb77e
--- /dev/null
+++ b/src/style/myVideo.less
@@ -0,0 +1,8 @@
+/*
+*只用于video组件的样式调整
+*/
+.vjs-big-play-button{
+    // position: absolute;
+    top: 35% !important;
+    left: 35% !important;
+}
\ No newline at end of file
diff --git a/src/style/normalize.less b/src/style/normalize.less
new file mode 100644
index 0000000..b7fefd2
--- /dev/null
+++ b/src/style/normalize.less
@@ -0,0 +1,219 @@
+html {
+  line-height: 1.15;
+  -webkit-text-size-adjust: 100%;
+}
+
+
+body {
+  margin: 0;
+}
+
+main {
+  display: block;
+}
+
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+
+hr {
+  box-sizing: content-box;
+  height: 0;
+  overflow: visible;
+}
+
+
+pre {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+
+
+a {
+  background-color: transparent;
+}
+
+
+
+abbr[title] {
+  border-bottom: none;
+  text-decoration: underline;
+  text-decoration: underline dotted;
+}
+
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+
+
+code,
+kbd,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+
+small {
+  font-size: 80%;
+}
+
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+
+
+img {
+  border-style: none;
+}
+
+
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit;
+  font-size: 100%;
+  margin: 0;
+}
+
+
+
+button,
+input {
+  overflow: visible;
+}
+
+
+
+button,
+select {
+  text-transform: none;
+}
+
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
+}
+
+
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
+}
+
+
+legend {
+  box-sizing: border-box;
+  color: inherit;
+  display: table;
+  max-width: 100%;
+  padding: 0;
+  white-space: normal;
+}
+
+
+progress {
+  vertical-align: baseline;
+}
+
+
+
+textarea {
+  overflow: auto;
+}
+
+
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box;
+  padding: 0;
+}
+
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+
+[type="search"] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px;
+}
+
+
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  font: inherit;
+}
+
+
+details {
+  display: block;
+}
+
+
+summary {
+  display: list-item;
+}
+
+
+
+template {
+  display: none;
+}
+
+
+[hidden] {
+  display: none;
+}
\ No newline at end of file
diff --git a/src/style/themes.css b/src/style/themes.css
new file mode 100644
index 0000000..b3a1aac
--- /dev/null
+++ b/src/style/themes.css
@@ -0,0 +1,13 @@
+/*
+ * @Descripttion: 项目色彩相关配置
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2020-05-21 16:51:33
+ */
+/*color*/
+/* 边框 颜色*/
+/* 文字 颜色*/
+/* 背景 颜色*/
+/* 边框 */
+/* boxshadow */
diff --git a/src/style/themes.less b/src/style/themes.less
new file mode 100644
index 0000000..1d70ce7
--- /dev/null
+++ b/src/style/themes.less
@@ -0,0 +1,51 @@
+/*
+ * @Descripttion: 项目色彩相关配置
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-11 21:02:51
+ * @LastEditTime: 2020-05-21 16:51:33
+ */
+
+/*color*/
+@c-default:#5194FE;
+
+@c-fff:#ffffff;
+@c-f5:#F5F5F7;
+@c-eee:#eeeeee;
+@c-333:#333333;
+@c-666:#666666;
+@c-999:#999999;
+@c-green:#19BE6B;
+@c-red:#ED4014;
+@c-blue:#FF9900;
+@c-black:#423D5D;
+@c-555:#55516e;
+@c-fe:#FEFEFF;
+@c-back:#F5F5F7;
+/* 边框 颜色*/
+// @color-border-default:@c-gray-default;
+
+/* 文字 颜色*/
+@c-text-default:@c-default;
+@c-text-333:@c-333;
+@c-text-666:@c-666;
+@c-text-999:@c-999;
+@c-text-fff:@c-fff;
+@c-text-black:@c-black;
+@c-text-fe:@c-fe;
+@c-text-f5:@c-f5;
+
+/* 背景 颜色*/
+@c-bg-default:@c-default;
+@c-bg-f5:@c-f5;
+@c-bg-eee:@c-eee;
+@c-bg-fff:@c-fff;
+@c-bg-black:@c-black;
+@c-bg-555:@c-555;
+
+/* 边框 */
+// @border-default:0.5Px solid @c-gray-e6;
+
+/* boxshadow */
+@shadow-default:0 2px 10px 0 rgba(0,39,125,0.1);
+
diff --git a/src/utils/IDValidator.js b/src/utils/IDValidator.js
new file mode 100644
index 0000000..8dd1881
--- /dev/null
+++ b/src/utils/IDValidator.js
@@ -0,0 +1,3844 @@
+/**
+ * Created by 陈伟
+ * 2017/11/21.
+ * 身份证检查
+ */
+let GB2260 = {
+  '110000': '北京市',
+  '110100': '北京市市辖区',
+  '110101': '北京市东城区',
+  '110102': '北京市西城区',
+  '110103': '北京市崇文区',
+  '110104': '北京市宣武区',
+  '110105': '北京市朝阳区',
+  '110106': '北京市丰台区',
+  '110107': '北京市石景山区',
+  '110108': '北京市海淀区',
+  '110109': '北京市门头沟区',
+  '110111': '北京市房山区',
+  '110112': '北京市通州区',
+  '110113': '北京市顺义区',
+  '110200': '北京市县',
+  '110221': '北京市昌平县',
+  '110224': '北京市大兴县',
+  '110226': '北京市平谷县',
+  '110227': '北京市怀柔县',
+  '110228': '北京市密云县',
+  '110229': '北京市延庆县',
+  '120000': '天津市',
+  '120100': '天津市市辖区',
+  '120101': '天津市和平区',
+  '120102': '天津市河东区',
+  '120103': '天津市河西区',
+  '120104': '天津市南开区',
+  '120105': '天津市河北区',
+  '120106': '天津市红桥区',
+  '120107': '天津市塘沽区',
+  '120108': '天津市汉沽区',
+  '120109': '天津市大港区',
+  '120110': '天津市东丽区',
+  '120111': '天津市西青区',
+  '120112': '天津市津南区',
+  '120113': '天津市北辰区',
+  '120200': '天津市县',
+  '120221': '天津市宁河县',
+  '120222': '天津市武清县',
+  '120223': '天津市静海县',
+  '120224': '天津市宝坻县',
+  '120225': '天津市蓟县',
+  '130000': '河北省',
+  '130100': '河北省石家庄市',
+  '130101': '河北省石家庄市市辖区',
+  '130102': '河北省石家庄市长安区',
+  '130103': '河北省石家庄市桥东区',
+  '130104': '河北省石家庄市桥西区',
+  '130105': '河北省石家庄市新华区',
+  '130106': '河北省石家庄市郊区',
+  '130107': '河北省石家庄市井陉矿区',
+  '130121': '河北省石家庄市井陉县',
+  '130123': '河北省石家庄市正定县',
+  '130124': '河北省石家庄市栾城县',
+  '130125': '河北省石家庄市行唐县',
+  '130126': '河北省石家庄市灵寿县',
+  '130127': '河北省石家庄市高邑县',
+  '130128': '河北省石家庄市深泽县',
+  '130129': '河北省石家庄市赞皇县',
+  '130130': '河北省石家庄市无极县',
+  '130131': '河北省石家庄市平山县',
+  '130132': '河北省石家庄市元氏县',
+  '130133': '河北省石家庄市赵县',
+  '130181': '河北省石家庄市辛集市',
+  '130182': '河北省石家庄市藁城市',
+  '130183': '河北省石家庄市晋州市',
+  '130184': '河北省石家庄市新乐市',
+  '130185': '河北省石家庄市鹿泉市',
+  '130200': '河北省唐山市',
+  '130201': '河北省唐山市市辖区',
+  '130202': '河北省唐山市路南区',
+  '130203': '河北省唐山市路北区',
+  '130204': '河北省唐山市古冶区',
+  '130205': '河北省唐山市开平区',
+  '130206': '河北省唐山市新区',
+  '130221': '河北省唐山市丰润县',
+  '130223': '河北省唐山市滦县',
+  '130224': '河北省唐山市滦南县',
+  '130225': '河北省唐山市乐亭县',
+  '130227': '河北省唐山市迁西县',
+  '130229': '河北省唐山市玉田县',
+  '130230': '河北省唐山市唐海县',
+  '130281': '河北省唐山市遵化市',
+  '130282': '河北省唐山市丰南市',
+  '130283': '河北省唐山市迁安市',
+  '130300': '河北省秦皇岛市秦皇岛市',
+  '130301': '河北省秦皇岛市市辖区',
+  '130302': '河北省秦皇岛市海港区',
+  '130303': '河北省秦皇岛市山海关区',
+  '130304': '河北省秦皇岛市北戴河区',
+  '130321': '河北省秦皇岛市青龙满族自治县',
+  '130322': '河北省秦皇岛市昌黎县',
+  '130323': '河北省秦皇岛市抚宁县',
+  '130324': '河北省秦皇岛市卢龙县',
+  '130400': '河北省邯郸市邯郸市',
+  '130401': '河北省邯郸市市辖区',
+  '130402': '河北省邯郸市邯山区',
+  '130403': '河北省邯郸市丛台区',
+  '130404': '河北省邯郸市复兴区',
+  '130406': '河北省邯郸市峰峰矿区',
+  '130421': '河北省邯郸市邯郸县',
+  '130423': '河北省邯郸市临漳县',
+  '130424': '河北省邯郸市成安县',
+  '130425': '河北省邯郸市大名县',
+  '130426': '河北省邯郸市涉县',
+  '130427': '河北省邯郸市磁县',
+  '130428': '河北省邯郸市肥乡县',
+  '130429': '河北省邯郸市永年县',
+  '130430': '河北省邯郸市邱县',
+  '130431': '河北省邯郸市鸡泽县',
+  '130432': '河北省邯郸市广平县',
+  '130433': '河北省邯郸市馆陶县',
+  '130434': '河北省邯郸市魏县',
+  '130435': '河北省邯郸市曲周县',
+  '130481': '河北省邯郸市武安市',
+  '130500': '河北省邢台市',
+  '130501': '河北省邢台市市辖区',
+  '130502': '河北省邢台市桥东区',
+  '130503': '河北省邢台市桥西区',
+  '130521': '河北省邢台市邢台县',
+  '130522': '河北省邢台市临城县',
+  '130523': '河北省邢台市内丘县',
+  '130524': '河北省邢台市柏乡县',
+  '130525': '河北省邢台市隆尧县',
+  '130526': '河北省邢台市任县',
+  '130527': '河北省邢台市南和县',
+  '130528': '河北省邢台市宁晋县',
+  '130529': '河北省邢台市巨鹿县',
+  '130530': '河北省邢台市新河县',
+  '130531': '河北省邢台市广宗县',
+  '130532': '河北省邢台市平乡县',
+  '130533': '河北省邢台市威县',
+  '130534': '河北省邢台市清河县',
+  '130535': '河北省邢台市临西县',
+  '130581': '河北省邢台市南宫市',
+  '130582': '河北省邢台市沙河市',
+  '130600': '河北省保定市',
+  '130601': '河北省保定市市辖区',
+  '130602': '河北省保定市新市区',
+  '130603': '河北省保定市北市区',
+  '130604': '河北省保定市南市区',
+  '130621': '河北省保定市满城县',
+  '130622': '河北省保定市清苑县',
+  '130623': '河北省保定市涞水县',
+  '130624': '河北省保定市阜平县',
+  '130625': '河北省保定市徐水县',
+  '130626': '河北省保定市定兴县',
+  '130627': '河北省保定市唐县',
+  '130628': '河北省保定市高阳县',
+  '130629': '河北省保定市容城县',
+  '130630': '河北省保定市涞源县',
+  '130631': '河北省保定市望都县',
+  '130632': '河北省保定市安新县',
+  '130633': '河北省保定市易县',
+  '130634': '河北省保定市曲阳县',
+  '130635': '河北省保定市蠡县',
+  '130636': '河北省保定市顺平县',
+  '130637': '河北省保定市博野县',
+  '130638': '河北省保定市雄县',
+  '130681': '河北省保定市涿州市',
+  '130682': '河北省保定市定州市',
+  '130683': '河北省保定市安国市',
+  '130684': '河北省保定市高碑店市',
+  '130700': '河北省张家口市',
+  '130701': '河北省张家口市市辖区',
+  '130702': '河北省张家口市桥东区',
+  '130703': '河北省张家口市桥西区',
+  '130705': '河北省张家口市宣化区',
+  '130706': '河北省张家口市下花园区',
+  '130721': '河北省张家口市宣化县',
+  '130722': '河北省张家口市张北县',
+  '130723': '河北省张家口市康保县',
+  '130724': '河北省张家口市沽源县',
+  '130725': '河北省张家口市尚义县',
+  '130726': '河北省张家口市蔚县',
+  '130727': '河北省张家口市阳原县',
+  '130728': '河北省张家口市怀安县',
+  '130729': '河北省张家口市万全县',
+  '130730': '河北省张家口市怀来县',
+  '130731': '河北省张家口市涿鹿县',
+  '130732': '河北省张家口市赤城县',
+  '130733': '河北省张家口市崇礼县',
+  '130800': '河北省承德市',
+  '130801': '河北省承德市市辖区',
+  '130802': '河北省承德市双桥区',
+  '130803': '河北省承德市双滦区',
+  '130804': '河北省承德市鹰手营子矿区',
+  '130821': '河北省承德市承德县',
+  '130822': '河北省承德市兴隆县',
+  '130823': '河北省承德市平泉县',
+  '130824': '河北省承德市滦平县',
+  '130825': '河北省承德市隆化县',
+  '130826': '河北省承德市丰宁满族自治县',
+  '130827': '河北省承德市宽城满族自治县',
+  '130828': '河北省承德市围场满族蒙古族自治县',
+  '130900': '河北省沧州市',
+  '130901': '河北省沧州市市辖区',
+  '130902': '河北省沧州市新华区',
+  '130903': '河北省沧州市运河区',
+  '130921': '河北省沧州市沧县',
+  '130922': '河北省沧州市青县',
+  '130923': '河北省沧州市东光县',
+  '130924': '河北省沧州市海兴县',
+  '130925': '河北省沧州市盐山县',
+  '130926': '河北省沧州市肃宁县',
+  '130927': '河北省沧州市南皮县',
+  '130928': '河北省沧州市吴桥县',
+  '130929': '河北省沧州市献县',
+  '130930': '河北省沧州市孟村回族自治县',
+  '130981': '河北省沧州市泊头市',
+  '130982': '河北省沧州市任丘市',
+  '130983': '河北省沧州市黄骅市',
+  '130984': '河北省沧州市河间市',
+  '131000': '河北省廊坊市',
+  '131001': '河北省廊坊市市辖区',
+  '131002': '河北省廊坊市安次区',
+  '131022': '河北省廊坊市固安县',
+  '131023': '河北省廊坊市永清县',
+  '131024': '河北省廊坊市香河县',
+  '131025': '河北省廊坊市大城县',
+  '131026': '河北省廊坊市文安县',
+  '131028': '河北省廊坊市大厂回族自治县',
+  '131081': '河北省廊坊市霸州市',
+  '131082': '河北省廊坊市三河市',
+  '131100': '河北省衡水市',
+  '131101': '河北省衡水市市辖区',
+  '131102': '河北省衡水市桃城区',
+  '131121': '河北省衡水市枣强县',
+  '131122': '河北省衡水市武邑县',
+  '131123': '河北省衡水市武强县',
+  '131124': '河北省衡水市饶阳县',
+  '131125': '河北省衡水市安平县',
+  '131126': '河北省衡水市故城县',
+  '131127': '河北省衡水市景县',
+  '131128': '河北省衡水市阜城县',
+  '131181': '河北省衡水市冀州市',
+  '131182': '河北省衡水市深州市',
+  '140000': '山西省',
+  '140100': '山西省太原市',
+  '140101': '山西省太原市市辖区',
+  '140105': '山西省太原市小店区',
+  '140106': '山西省太原市迎泽区',
+  '140107': '山西省太原市杏花岭区',
+  '140108': '山西省太原市尖草坪区',
+  '140109': '山西省太原市万柏林区',
+  '140110': '山西省太原市晋源区',
+  '140121': '山西省太原市清徐县',
+  '140122': '山西省太原市阳曲县',
+  '140123': '山西省太原市娄烦县',
+  '140181': '山西省太原市古交市',
+  '140200': '山西省大同市',
+  '140201': '山西省大同市市辖区',
+  '140202': '山西省大同市城区',
+  '140203': '山西省大同市矿区',
+  '140211': '山西省大同市南郊区',
+  '140212': '山西省大同市新荣区',
+  '140221': '山西省大同市阳高县',
+  '140222': '山西省大同市天镇县',
+  '140223': '山西省大同市广灵县',
+  '140224': '山西省大同市灵丘县',
+  '140225': '山西省大同市浑源县',
+  '140226': '山西省大同市左云县',
+  '140227': '山西省大同市大同县',
+  '140300': '山西省阳泉市',
+  '140301': '山西省阳泉市市辖区',
+  '140302': '山西省阳泉市城区',
+  '140303': '山西省阳泉市矿区',
+  '140311': '山西省阳泉市郊区',
+  '140321': '山西省阳泉市平定县',
+  '140322': '山西省阳泉市盂县',
+  '140400': '山西省长治市',
+  '140401': '山西省长治市市辖区',
+  '140402': '山西省长治市城区',
+  '140411': '山西省长治市郊区',
+  '140421': '山西省长治市长治县',
+  '140423': '山西省长治市襄垣县',
+  '140424': '山西省长治市屯留县',
+  '140425': '山西省长治市平顺县',
+  '140426': '山西省长治市黎城县',
+  '140427': '山西省长治市壶关县',
+  '140428': '山西省长治市长子县',
+  '140429': '山西省长治市武乡县',
+  '140430': '山西省长治市沁县',
+  '140431': '山西省长治市沁源县',
+  '140481': '山西省长治市潞城市',
+  '140500': '山西省晋城市',
+  '140501': '山西省晋城市市辖区',
+  '140502': '山西省晋城市城区',
+  '140521': '山西省晋城市沁水县',
+  '140522': '山西省晋城市阳城县',
+  '140524': '山西省晋城市陵川县',
+  '140525': '山西省晋城市泽州县',
+  '140581': '山西省晋城市高平市',
+  '140600': '山西省晋城市朔州市',
+  '140601': '山西省晋城市市辖区',
+  '140602': '山西省晋城市朔城区',
+  '140603': '山西省晋城市平鲁区',
+  '140621': '山西省晋城市山阴县',
+  '140622': '山西省晋城市应县',
+  '140623': '山西省晋城市右玉县',
+  '140624': '山西省晋城市怀仁县',
+  '142200': '山西省忻州地区',
+  '142201': '山西省忻州地区忻州市',
+  '142202': '山西省忻州地区原平市',
+  '142222': '山西省忻州地区定襄县',
+  '142223': '山西省忻州地区五台县',
+  '142225': '山西省忻州地区代县',
+  '142226': '山西省忻州地区繁峙县',
+  '142227': '山西省忻州地区宁武县',
+  '142228': '山西省忻州地区静乐县',
+  '142229': '山西省忻州地区神池县',
+  '142230': '山西省忻州地区五寨县',
+  '142231': '山西省忻州地区岢岚县',
+  '142232': '山西省忻州地区河曲县',
+  '142233': '山西省忻州地区保德县',
+  '142234': '山西省忻州地区偏关县',
+  '142300': '山西省忻州地区吕梁地区',
+  '142301': '山西省忻州地区孝义市',
+  '142302': '山西省忻州地区离石市',
+  '142303': '山西省忻州地区汾阳市',
+  '142322': '山西省忻州地区文水县',
+  '142323': '山西省忻州地区交城县',
+  '142325': '山西省忻州地区兴县',
+  '142326': '山西省忻州地区临县',
+  '142327': '山西省忻州地区柳林县',
+  '142328': '山西省忻州地区石楼县',
+  '142329': '山西省忻州地区岚县',
+  '142330': '山西省忻州地区方山县',
+  '142332': '山西省忻州地区中阳县',
+  '142333': '山西省忻州地区交口县',
+  '142400': '山西省晋中地区',
+  '142401': '山西省晋中地区榆次市',
+  '142402': '山西省晋中地区介休市',
+  '142421': '山西省晋中地区榆社县',
+  '142422': '山西省晋中地区左权县',
+  '142423': '山西省晋中地区和顺县',
+  '142424': '山西省晋中地区昔阳县',
+  '142427': '山西省晋中地区寿阳县',
+  '142429': '山西省晋中地区太谷县',
+  '142430': '山西省晋中地区祁县',
+  '142431': '山西省晋中地区平遥县',
+  '142433': '山西省晋中地区灵石县',
+  '142600': '山西省临汾地区',
+  '142601': '山西省临汾地区临汾市',
+  '142602': '山西省临汾地区侯马市',
+  '142603': '山西省临汾地区霍州市',
+  '142621': '山西省临汾地区曲沃县',
+  '142622': '山西省临汾地区翼城县',
+  '142623': '山西省临汾地区襄汾县',
+  '142625': '山西省临汾地区洪洞县',
+  '142627': '山西省临汾地区古县',
+  '142628': '山西省临汾地区安泽县',
+  '142629': '山西省临汾地区浮山县',
+  '142630': '山西省临汾地区吉县',
+  '142631': '山西省临汾地区乡宁县',
+  '142632': '山西省临汾地区蒲县',
+  '142633': '山西省临汾地区大宁县',
+  '142634': '山西省临汾地区永和县',
+  '142635': '山西省临汾地区隰县',
+  '142636': '山西省临汾地区汾西县',
+  '142700': '山西省运城地区',
+  '142701': '山西省运城地区运城市',
+  '142702': '山西省运城地区永济市',
+  '142703': '山西省运城地区河津市',
+  '142723': '山西省运城地区芮城县',
+  '142724': '山西省运城地区临猗县',
+  '142725': '山西省运城地区万荣县',
+  '142726': '山西省运城地区新绛县',
+  '142727': '山西省运城地区稷山县',
+  '142729': '山西省运城地区闻喜县',
+  '142730': '山西省运城地区夏县',
+  '142731': '山西省运城地区绛县',
+  '142732': '山西省运城地区平陆县',
+  '142733': '山西省运城地区垣曲县',
+  '150000': '内蒙古自治区',
+  '150100': '内蒙古自治区呼和浩特市',
+  '150101': '内蒙古自治区呼和浩特市市辖区',
+  '150102': '内蒙古自治区呼和浩特市新城区',
+  '150103': '内蒙古自治区呼和浩特市回民区',
+  '150104': '内蒙古自治区呼和浩特市玉泉区',
+  '150105': '内蒙古自治区呼和浩特市郊区',
+  '150121': '内蒙古自治区呼和浩特市土默特左旗',
+  '150122': '内蒙古自治区呼和浩特市托克托县',
+  '150123': '内蒙古自治区呼和浩特市和林格尔县',
+  '150124': '内蒙古自治区呼和浩特市清水河县',
+  '150125': '内蒙古自治区呼和浩特市武川县',
+  '150200': '内蒙古自治区包头市',
+  '150201': '内蒙古自治区包头市市辖区',
+  '150202': '内蒙古自治区包头市东河区',
+  '150203': '内蒙古自治区包头市昆都伦区',
+  '150204': '内蒙古自治区包头市青山区',
+  '150205': '内蒙古自治区包头市石拐矿区',
+  '150206': '内蒙古自治区包头市白云矿区',
+  '150207': '内蒙古自治区包头市郊区',
+  '150221': '内蒙古自治区包头市土默特右旗',
+  '150222': '内蒙古自治区包头市固阳县',
+  '150223': '内蒙古自治区包头市达尔罕茂明安联合旗',
+  '150300': '内蒙古自治区乌海市',
+  '150301': '内蒙古自治区乌海市市辖区',
+  '150302': '内蒙古自治区乌海市海勃湾区',
+  '150303': '内蒙古自治区乌海市海南区',
+  '150304': '内蒙古自治区乌海市乌达区',
+  '150400': '内蒙古自治区赤峰市',
+  '150401': '内蒙古自治区赤峰市市辖区',
+  '150402': '内蒙古自治区赤峰市红山区',
+  '150403': '内蒙古自治区赤峰市元宝山区',
+  '150404': '内蒙古自治区赤峰市松山区',
+  '150421': '内蒙古自治区赤峰市阿鲁科尔沁旗',
+  '150422': '内蒙古自治区赤峰市巴林左旗',
+  '150423': '内蒙古自治区赤峰市巴林右旗',
+  '150424': '内蒙古自治区赤峰市林西县',
+  '150425': '内蒙古自治区赤峰市克什克腾旗',
+  '150426': '内蒙古自治区赤峰市翁牛特旗',
+  '150428': '内蒙古自治区赤峰市喀喇沁旗',
+  '150429': '内蒙古自治区赤峰市宁城县',
+  '150430': '内蒙古自治区赤峰市敖汉旗',
+  '152100': '内蒙古自治区呼伦贝尔盟',
+  '152101': '内蒙古自治区呼伦贝尔盟海拉尔市',
+  '152102': '内蒙古自治区呼伦贝尔盟满洲里市',
+  '152103': '内蒙古自治区呼伦贝尔盟扎兰屯市',
+  '152104': '内蒙古自治区呼伦贝尔盟牙克石市',
+  '152105': '内蒙古自治区呼伦贝尔盟根河市',
+  '152106': '内蒙古自治区呼伦贝尔盟额尔古纳市',
+  '152122': '内蒙古自治区呼伦贝尔盟阿荣旗',
+  '152123': '内蒙古自治区呼伦贝尔盟莫力达瓦达斡尔族自治旗',
+  '152127': '内蒙古自治区呼伦贝尔盟鄂伦春自治旗',
+  '152128': '内蒙古自治区呼伦贝尔盟鄂温克族自治旗',
+  '152129': '内蒙古自治区呼伦贝尔盟新巴尔虎右旗',
+  '152130': '内蒙古自治区呼伦贝尔盟新巴尔虎左旗',
+  '152131': '内蒙古自治区呼伦贝尔盟陈巴尔虎旗',
+  '152200': '内蒙古自治区兴安盟',
+  '152201': '内蒙古自治区兴安盟乌兰浩特市',
+  '152202': '内蒙古自治区兴安盟阿尔山市',
+  '152221': '内蒙古自治区兴安盟科尔沁右翼前旗',
+  '152222': '内蒙古自治区兴安盟科尔沁右翼中旗',
+  '152223': '内蒙古自治区兴安盟扎赉特旗',
+  '152224': '内蒙古自治区兴安盟突泉县',
+  '152300': '内蒙古自治区哲里木盟',
+  '152301': '内蒙古自治区哲里木盟通辽市',
+  '152302': '内蒙古自治区哲里木盟霍林郭勒市',
+  '152322': '内蒙古自治区哲里木盟科尔沁左翼中旗',
+  '152323': '内蒙古自治区哲里木盟科尔沁左翼后旗',
+  '152324': '内蒙古自治区哲里木盟开鲁县',
+  '152325': '内蒙古自治区哲里木盟库伦旗',
+  '152326': '内蒙古自治区哲里木盟奈曼旗',
+  '152327': '内蒙古自治区哲里木盟扎鲁特旗',
+  '152500': '内蒙古自治区锡林郭勒盟',
+  '152501': '内蒙古自治区锡林郭勒盟二连浩特市',
+  '152502': '内蒙古自治区锡林郭勒盟锡林浩特市',
+  '152522': '内蒙古自治区锡林郭勒盟阿巴嘎旗',
+  '152523': '内蒙古自治区锡林郭勒盟苏尼特左旗',
+  '152524': '内蒙古自治区锡林郭勒盟苏尼特右旗',
+  '152525': '内蒙古自治区锡林郭勒盟东乌珠穆沁旗',
+  '152526': '内蒙古自治区锡林郭勒盟西乌珠穆沁旗',
+  '152527': '内蒙古自治区锡林郭勒盟太仆寺旗',
+  '152528': '内蒙古自治区锡林郭勒盟镶黄旗',
+  '152529': '内蒙古自治区锡林郭勒盟正镶白旗',
+  '152530': '内蒙古自治区锡林郭勒盟正蓝旗',
+  '152531': '内蒙古自治区锡林郭勒盟多伦县',
+  '152600': '内蒙古自治区乌兰察布盟',
+  '152601': '内蒙古自治区乌兰察布盟集宁市',
+  '152602': '内蒙古自治区乌兰察布盟丰镇市',
+  '152624': '内蒙古自治区乌兰察布盟卓资县',
+  '152625': '内蒙古自治区乌兰察布盟化德县',
+  '152626': '内蒙古自治区乌兰察布盟商都县',
+  '152627': '内蒙古自治区乌兰察布盟兴和县',
+  '152629': '内蒙古自治区乌兰察布盟凉城县',
+  '152630': '内蒙古自治区乌兰察布盟察哈尔右翼前旗',
+  '152631': '内蒙古自治区乌兰察布盟察哈尔右翼中旗',
+  '152632': '内蒙古自治区乌兰察布盟察哈尔右翼后旗',
+  '152634': '内蒙古自治区乌兰察布盟四子王旗',
+  '152700': '内蒙古自治区伊克昭盟',
+  '152701': '内蒙古自治区伊克昭盟东胜市',
+  '152722': '内蒙古自治区伊克昭盟达拉特旗',
+  '152723': '内蒙古自治区伊克昭盟准格尔旗',
+  '152724': '内蒙古自治区伊克昭盟鄂托克前旗',
+  '152725': '内蒙古自治区伊克昭盟鄂托克旗',
+  '152726': '内蒙古自治区伊克昭盟杭锦旗',
+  '152727': '内蒙古自治区伊克昭盟乌审旗',
+  '152728': '内蒙古自治区伊克昭盟伊金霍洛旗',
+  '152800': '内蒙古自治区巴彦淖尔盟',
+  '152801': '内蒙古自治区巴彦淖尔盟临河市',
+  '152822': '内蒙古自治区巴彦淖尔盟五原县',
+  '152823': '内蒙古自治区巴彦淖尔盟磴口县',
+  '152824': '内蒙古自治区巴彦淖尔盟乌拉特前旗',
+  '152825': '内蒙古自治区巴彦淖尔盟乌拉特中旗',
+  '152826': '内蒙古自治区巴彦淖尔盟乌拉特后旗',
+  '152827': '内蒙古自治区巴彦淖尔盟杭锦后旗',
+  '152900': '内蒙古自治区阿拉善盟',
+  '152921': '内蒙古自治区阿拉善盟阿拉善左旗',
+  '152922': '内蒙古自治区阿拉善盟阿拉善右旗',
+  '152923': '内蒙古自治区阿拉善盟额济纳旗',
+  '210000': '辽宁省',
+  '210100': '辽宁省沈阳市',
+  '210101': '辽宁省沈阳市市辖区',
+  '210102': '辽宁省沈阳市和平区',
+  '210103': '辽宁省沈阳市沈河区',
+  '210104': '辽宁省沈阳市大东区',
+  '210105': '辽宁省沈阳市皇姑区',
+  '210106': '辽宁省沈阳市铁西区',
+  '210111': '辽宁省沈阳市苏家屯区',
+  '210112': '辽宁省沈阳市东陵区',
+  '210113': '辽宁省沈阳市新城子区',
+  '210114': '辽宁省沈阳市于洪区',
+  '210122': '辽宁省沈阳市辽中县',
+  '210123': '辽宁省沈阳市康平县',
+  '210124': '辽宁省沈阳市法库县',
+  '210181': '辽宁省沈阳市新民市',
+  '210200': '辽宁省大连市',
+  '210201': '辽宁省大连市市辖区',
+  '210202': '辽宁省大连市中山区',
+  '210203': '辽宁省大连市西岗区',
+  '210204': '辽宁省大连市沙河口区',
+  '210211': '辽宁省大连市甘井子区',
+  '210212': '辽宁省大连市旅顺口区',
+  '210213': '辽宁省大连市金州区',
+  '210224': '辽宁省大连市长海县',
+  '210281': '辽宁省大连市瓦房店市',
+  '210282': '辽宁省大连市普兰店市',
+  '210283': '辽宁省大连市庄河市',
+  '210300': '辽宁省鞍山市',
+  '210301': '辽宁省鞍山市市辖区',
+  '210302': '辽宁省鞍山市铁东区',
+  '210303': '辽宁省鞍山市铁西区',
+  '210304': '辽宁省鞍山市立山区',
+  '210311': '辽宁省鞍山市千山区',
+  '210321': '辽宁省鞍山市台安县',
+  '210323': '辽宁省鞍山市岫岩满族自治县',
+  '210381': '辽宁省鞍山市海城市',
+  '210400': '辽宁省抚顺市',
+  '210401': '辽宁省抚顺市市辖区',
+  '210402': '辽宁省抚顺市新抚区',
+  '210403': '辽宁省抚顺市露天区',
+  '210404': '辽宁省抚顺市望花区',
+  '210411': '辽宁省抚顺市顺城区',
+  '210421': '辽宁省抚顺市抚顺县',
+  '210422': '辽宁省抚顺市新宾满族自治县',
+  '210423': '辽宁省抚顺市清原满族自治县',
+  '210500': '辽宁省本溪市',
+  '210501': '辽宁省本溪市市辖区',
+  '210502': '辽宁省本溪市平山区',
+  '210503': '辽宁省本溪市溪湖区',
+  '210504': '辽宁省本溪市明山区',
+  '210505': '辽宁省本溪市南芬区',
+  '210521': '辽宁省本溪市本溪满族自治县',
+  '210522': '辽宁省本溪市桓仁满族自治县',
+  '210600': '辽宁省丹东市',
+  '210601': '辽宁省丹东市市辖区',
+  '210602': '辽宁省丹东市元宝区',
+  '210603': '辽宁省丹东市振兴区',
+  '210604': '辽宁省丹东市振安区',
+  '210624': '辽宁省丹东市宽甸满族自治县',
+  '210681': '辽宁省丹东市东港市',
+  '210682': '辽宁省丹东市凤城市',
+  '210700': '辽宁省锦州市',
+  '210701': '辽宁省锦州市市辖区',
+  '210702': '辽宁省锦州市古塔区',
+  '210703': '辽宁省锦州市凌河区',
+  '210711': '辽宁省锦州市太和区',
+  '210726': '辽宁省锦州市黑山县',
+  '210727': '辽宁省锦州市义县',
+  '210781': '辽宁省锦州市凌海市',
+  '210782': '辽宁省锦州市北宁市',
+  '210800': '辽宁省营口市',
+  '210801': '辽宁省营口市市辖区',
+  '210802': '辽宁省营口市站前区',
+  '210803': '辽宁省营口市西市区',
+  '210804': '辽宁省营口市鲅鱼圈区',
+  '210811': '辽宁省营口市老边区',
+  '210881': '辽宁省营口市盖州市',
+  '210882': '辽宁省营口市大石桥市',
+  '210900': '辽宁省阜新市',
+  '210901': '辽宁省阜新市市辖区',
+  '210902': '辽宁省阜新市海州区',
+  '210903': '辽宁省阜新市新邱区',
+  '210904': '辽宁省阜新市太平区',
+  '210905': '辽宁省阜新市清河门区',
+  '210911': '辽宁省阜新市细河区',
+  '210921': '辽宁省阜新市阜新蒙古族自治县',
+  '210922': '辽宁省阜新市彰武县',
+  '211000': '辽宁省辽阳市',
+  '211001': '辽宁省辽阳市市辖区',
+  '211002': '辽宁省辽阳市白塔区',
+  '211003': '辽宁省辽阳市文圣区',
+  '211004': '辽宁省辽阳市宏伟区',
+  '211005': '辽宁省辽阳市弓长岭区',
+  '211011': '辽宁省辽阳市太子河区',
+  '211021': '辽宁省辽阳市辽阳县',
+  '211081': '辽宁省辽阳市灯塔市',
+  '211100': '辽宁省盘锦市',
+  '211101': '辽宁省盘锦市市辖区',
+  '211102': '辽宁省盘锦市双台子区',
+  '211103': '辽宁省盘锦市兴隆台区',
+  '211121': '辽宁省盘锦市大洼县',
+  '211122': '辽宁省盘锦市盘山县',
+  '211200': '辽宁省铁岭市',
+  '211201': '辽宁省铁岭市市辖区',
+  '211202': '辽宁省铁岭市银州区',
+  '211204': '辽宁省铁岭市清河区',
+  '211221': '辽宁省铁岭市铁岭县',
+  '211223': '辽宁省铁岭市西丰县',
+  '211224': '辽宁省铁岭市昌图县',
+  '211281': '辽宁省铁岭市铁法市',
+  '211282': '辽宁省铁岭市开原市',
+  '211300': '辽宁省朝阳市',
+  '211301': '辽宁省朝阳市市辖区',
+  '211302': '辽宁省朝阳市双塔区',
+  '211303': '辽宁省朝阳市龙城区',
+  '211321': '辽宁省朝阳市朝阳县',
+  '211322': '辽宁省朝阳市建平县',
+  '211324': '辽宁省朝阳市喀喇沁左翼蒙古族自治县',
+  '211381': '辽宁省朝阳市北票市',
+  '211382': '辽宁省朝阳市凌源市',
+  '211400': '辽宁省葫芦岛市',
+  '211401': '辽宁省葫芦岛市市辖区',
+  '211402': '辽宁省葫芦岛市连山区',
+  '211403': '辽宁省葫芦岛市龙港区',
+  '211404': '辽宁省葫芦岛市南票区',
+  '211421': '辽宁省葫芦岛市绥中县',
+  '211422': '辽宁省葫芦岛市建昌县',
+  '211481': '辽宁省葫芦岛市兴城市',
+  '220000': '吉林省',
+  '220100': '吉林省长春市',
+  '220101': '吉林省长春市市辖区',
+  '220102': '吉林省长春市南关区',
+  '220103': '吉林省长春市宽城区',
+  '220104': '吉林省长春市朝阳区',
+  '220105': '吉林省长春市二道区',
+  '220106': '吉林省长春市绿园区',
+  '220112': '吉林省长春市双阳区',
+  '220122': '吉林省长春市农安县',
+  '220181': '吉林省长春市九台市',
+  '220182': '吉林省长春市榆树市',
+  '220183': '吉林省长春市德惠市',
+  '220200': '吉林省吉林市',
+  '220201': '吉林省吉林市市辖区',
+  '220202': '吉林省吉林市昌邑区',
+  '220203': '吉林省吉林市龙潭区',
+  '220204': '吉林省吉林市船营区',
+  '220211': '吉林省吉林市丰满区',
+  '220221': '吉林省吉林市永吉县',
+  '220281': '吉林省吉林市蛟河市',
+  '220282': '吉林省吉林市桦甸市',
+  '220283': '吉林省吉林市舒兰市',
+  '220284': '吉林省吉林市磐石市',
+  '220300': '吉林省四平市',
+  '220301': '吉林省四平市市辖区',
+  '220302': '吉林省四平市铁西区',
+  '220303': '吉林省四平市铁东区',
+  '220322': '吉林省四平市梨树县',
+  '220323': '吉林省四平市伊通满族自治县',
+  '220381': '吉林省四平市公主岭市',
+  '220382': '吉林省四平市双辽市',
+  '220400': '吉林省辽源市',
+  '220401': '吉林省辽源市市辖区',
+  '220402': '吉林省辽源市龙山区',
+  '220403': '吉林省辽源市西安区',
+  '220421': '吉林省辽源市东丰县',
+  '220422': '吉林省辽源市东辽县',
+  '220500': '吉林省通化市',
+  '220501': '吉林省通化市市辖区',
+  '220502': '吉林省通化市东昌区',
+  '220503': '吉林省通化市二道江区',
+  '220521': '吉林省通化市通化县',
+  '220523': '吉林省通化市辉南县',
+  '220524': '吉林省通化市柳河县',
+  '220581': '吉林省通化市梅河口市',
+  '220582': '吉林省通化市集安市',
+  '220600': '吉林省白山市',
+  '220601': '吉林省白山市市辖区',
+  '220602': '吉林省白山市八道江区',
+  '220621': '吉林省白山市抚松县',
+  '220622': '吉林省白山市靖宇县',
+  '220623': '吉林省白山市长白朝鲜族自治县',
+  '220625': '吉林省白山市江源县',
+  '220681': '吉林省白山市临江市',
+  '220700': '吉林省松原市',
+  '220701': '吉林省松原市市辖区',
+  '220702': '吉林省松原市宁江区',
+  '220721': '吉林省松原市前郭尔罗斯蒙古族自治县',
+  '220722': '吉林省松原市长岭县',
+  '220723': '吉林省松原市乾安县',
+  '220724': '吉林省松原市扶余县',
+  '220800': '吉林省白城市',
+  '220801': '吉林省白城市市辖区',
+  '220802': '吉林省白城市洮北区',
+  '220821': '吉林省白城市镇赉县',
+  '220822': '吉林省白城市通榆县',
+  '220881': '吉林省白城市洮南市',
+  '220882': '吉林省白城市大安市',
+  '222400': '吉林省延边朝鲜族自治州',
+  '222401': '吉林省延边朝鲜族自治州延吉市',
+  '222402': '吉林省延边朝鲜族自治州图们市',
+  '222403': '吉林省延边朝鲜族自治州敦化市',
+  '222404': '吉林省延边朝鲜族自治州珲春市',
+  '222405': '吉林省延边朝鲜族自治州龙井市',
+  '222406': '吉林省延边朝鲜族自治州和龙市',
+  '222424': '吉林省延边朝鲜族自治州汪清县',
+  '222426': '吉林省延边朝鲜族自治州安图县',
+  '230000': '黑龙江省',
+  '230100': '黑龙江省哈尔滨市',
+  '230101': '黑龙江省哈尔滨市市辖区',
+  '230102': '黑龙江省哈尔滨市道里区',
+  '230103': '黑龙江省哈尔滨市南岗区',
+  '230104': '黑龙江省哈尔滨市道外区',
+  '230105': '黑龙江省哈尔滨市太平区',
+  '230106': '黑龙江省哈尔滨市香坊区',
+  '230107': '黑龙江省哈尔滨市动力区',
+  '230108': '黑龙江省哈尔滨市平房区',
+  '230121': '黑龙江省哈尔滨市呼兰县',
+  '230123': '黑龙江省哈尔滨市依兰县',
+  '230124': '黑龙江省哈尔滨市方正县',
+  '230125': '黑龙江省哈尔滨市宾县',
+  '230126': '黑龙江省哈尔滨市巴彦县',
+  '230127': '黑龙江省哈尔滨市木兰县',
+  '230128': '黑龙江省哈尔滨市通河县',
+  '230129': '黑龙江省哈尔滨市延寿县',
+  '230181': '黑龙江省哈尔滨市阿城市',
+  '230182': '黑龙江省哈尔滨市双城市',
+  '230183': '黑龙江省哈尔滨市尚志市',
+  '230184': '黑龙江省哈尔滨市五常市',
+  '230200': '黑龙江省齐齐哈尔市',
+  '230201': '黑龙江省齐齐哈尔市市辖区',
+  '230202': '黑龙江省齐齐哈尔市龙沙区',
+  '230203': '黑龙江省齐齐哈尔市建华区',
+  '230204': '黑龙江省齐齐哈尔市铁锋区',
+  '230205': '黑龙江省齐齐哈尔市昂昂溪区',
+  '230206': '黑龙江省齐齐哈尔市富拉尔基区',
+  '230207': '黑龙江省齐齐哈尔市碾子山区',
+  '230208': '黑龙江省齐齐哈尔市梅里斯达斡尔族区',
+  '230221': '黑龙江省齐齐哈尔市龙江县',
+  '230223': '黑龙江省齐齐哈尔市依安县',
+  '230224': '黑龙江省齐齐哈尔市泰来县',
+  '230225': '黑龙江省齐齐哈尔市甘南县',
+  '230227': '黑龙江省齐齐哈尔市富裕县',
+  '230229': '黑龙江省齐齐哈尔市克山县',
+  '230230': '黑龙江省齐齐哈尔市克东县',
+  '230231': '黑龙江省齐齐哈尔市拜泉县',
+  '230281': '黑龙江省齐齐哈尔市讷河市',
+  '230300': '黑龙江省鸡西市',
+  '230301': '黑龙江省鸡西市市辖区',
+  '230302': '黑龙江省鸡西市鸡冠区',
+  '230303': '黑龙江省鸡西市恒山区',
+  '230304': '黑龙江省鸡西市滴道区',
+  '230305': '黑龙江省鸡西市梨树区',
+  '230306': '黑龙江省鸡西市城子河区',
+  '230307': '黑龙江省鸡西市麻山区',
+  '230321': '黑龙江省鸡西市鸡东县',
+  '230381': '黑龙江省鸡西市虎林市',
+  '230382': '黑龙江省鸡西市密山市',
+  '230400': '黑龙江省鹤岗市',
+  '230401': '黑龙江省鹤岗市市辖区',
+  '230402': '黑龙江省鹤岗市向阳区',
+  '230403': '黑龙江省鹤岗市工农区',
+  '230404': '黑龙江省鹤岗市南山区',
+  '230405': '黑龙江省鹤岗市兴安区',
+  '230406': '黑龙江省鹤岗市东山区',
+  '230407': '黑龙江省鹤岗市兴山区',
+  '230421': '黑龙江省鹤岗市萝北县',
+  '230422': '黑龙江省鹤岗市绥滨县',
+  '230500': '黑龙江省双鸭山市',
+  '230501': '黑龙江省双鸭山市市辖区',
+  '230502': '黑龙江省双鸭山市尖山区',
+  '230503': '黑龙江省双鸭山市岭东区',
+  '230505': '黑龙江省双鸭山市四方台区',
+  '230506': '黑龙江省双鸭山市宝山区',
+  '230521': '黑龙江省双鸭山市集贤县',
+  '230522': '黑龙江省双鸭山市友谊县',
+  '230523': '黑龙江省双鸭山市宝清县',
+  '230524': '黑龙江省双鸭山市饶河县',
+  '230600': '黑龙江省大庆市',
+  '230601': '黑龙江省大庆市市辖区',
+  '230602': '黑龙江省大庆市萨尔图区',
+  '230603': '黑龙江省大庆市龙凤区',
+  '230604': '黑龙江省大庆市让胡路区',
+  '230605': '黑龙江省大庆市红岗区',
+  '230606': '黑龙江省大庆市大同区',
+  '230621': '黑龙江省大庆市肇州县',
+  '230622': '黑龙江省大庆市肇源县',
+  '230623': '黑龙江省大庆市林甸县',
+  '230624': '黑龙江省大庆市杜尔伯特蒙古族自治县',
+  '230700': '黑龙江省伊春市',
+  '230701': '黑龙江省伊春市市辖区',
+  '230702': '黑龙江省伊春市伊春区',
+  '230703': '黑龙江省伊春市南岔区',
+  '230704': '黑龙江省伊春市友好区',
+  '230705': '黑龙江省伊春市西林区',
+  '230706': '黑龙江省伊春市翠峦区',
+  '230707': '黑龙江省伊春市新青区',
+  '230708': '黑龙江省伊春市美溪区',
+  '230709': '黑龙江省伊春市金山屯区',
+  '230710': '黑龙江省伊春市五营区',
+  '230711': '黑龙江省伊春市乌马河区',
+  '230712': '黑龙江省伊春市汤旺河区',
+  '230713': '黑龙江省伊春市带岭区',
+  '230714': '黑龙江省伊春市乌伊岭区',
+  '230715': '黑龙江省伊春市红星区',
+  '230716': '黑龙江省伊春市上甘岭区',
+  '230722': '黑龙江省伊春市嘉荫县',
+  '230781': '黑龙江省伊春市铁力市',
+  '230800': '黑龙江省佳木斯市',
+  '230801': '黑龙江省佳木斯市市辖区',
+  '230802': '黑龙江省佳木斯市永红区',
+  '230803': '黑龙江省佳木斯市向阳区',
+  '230804': '黑龙江省佳木斯市前进区',
+  '230805': '黑龙江省佳木斯市东风区',
+  '230811': '黑龙江省佳木斯市郊区',
+  '230822': '黑龙江省佳木斯市桦南县',
+  '230826': '黑龙江省佳木斯市桦川县',
+  '230828': '黑龙江省佳木斯市汤原县',
+  '230833': '黑龙江省佳木斯市抚远县',
+  '230881': '黑龙江省佳木斯市同江市',
+  '230882': '黑龙江省佳木斯市富锦市',
+  '230900': '黑龙江省七台河市',
+  '230901': '黑龙江省七台河市市辖区',
+  '230902': '黑龙江省七台河市新兴区',
+  '230903': '黑龙江省七台河市桃山区',
+  '230904': '黑龙江省七台河市茄子河区',
+  '230921': '黑龙江省七台河市勃利县',
+  '231000': '黑龙江省牡丹江市',
+  '231001': '黑龙江省牡丹江市市辖区',
+  '231002': '黑龙江省牡丹江市东安区',
+  '231003': '黑龙江省牡丹江市阳明区',
+  '231004': '黑龙江省牡丹江市爱民区',
+  '231005': '黑龙江省牡丹江市西安区',
+  '231024': '黑龙江省牡丹江市东宁县',
+  '231025': '黑龙江省牡丹江市林口县',
+  '231081': '黑龙江省牡丹江市绥芬河市',
+  '231083': '黑龙江省牡丹江市海林市',
+  '231084': '黑龙江省牡丹江市宁安市',
+  '231085': '黑龙江省牡丹江市穆棱市',
+  '231100': '黑龙江省黑河市',
+  '231101': '黑龙江省黑河市市辖区',
+  '231102': '黑龙江省黑河市爱辉区',
+  '231121': '黑龙江省黑河市嫩江县',
+  '231123': '黑龙江省黑河市逊克县',
+  '231124': '黑龙江省黑河市孙吴县',
+  '231181': '黑龙江省黑河市北安市',
+  '231182': '黑龙江省黑河市五大连池市',
+  '232300': '黑龙江省绥化地区',
+  '232301': '黑龙江省绥化地区绥化市',
+  '232302': '黑龙江省绥化地区安达市',
+  '232303': '黑龙江省绥化地区肇东市',
+  '232304': '黑龙江省绥化地区海伦市',
+  '232324': '黑龙江省绥化地区望奎县',
+  '232325': '黑龙江省绥化地区兰西县',
+  '232326': '黑龙江省绥化地区青冈县',
+  '232330': '黑龙江省绥化地区庆安县',
+  '232331': '黑龙江省绥化地区明水县',
+  '232332': '黑龙江省绥化地区绥棱县',
+  '232700': '黑龙江省大兴安岭地区',
+  '232721': '黑龙江省大兴安岭地区呼玛县',
+  '232722': '黑龙江省大兴安岭地区塔河县',
+  '232723': '黑龙江省大兴安岭地区漠河县',
+  '310000': '上海市',
+  '310100': '上海市市辖区',
+  '310101': '上海市黄浦区',
+  '310102': '上海市南市区',
+  '310103': '上海市卢湾区',
+  '310104': '上海市徐汇区',
+  '310105': '上海市长宁区',
+  '310106': '上海市静安区',
+  '310107': '上海市普陀区',
+  '310108': '上海市闸北区',
+  '310109': '上海市虹口区',
+  '310110': '上海市杨浦区',
+  '310112': '上海市闵行区',
+  '310113': '上海市宝山区',
+  '310114': '上海市嘉定区',
+  '310115': '上海市浦东新区',
+  '310116': '上海市金山区',
+  '310117': '上海市松江区',
+  '310200': '上海市县',
+  '310225': '上海市南汇县',
+  '310226': '上海市奉贤县',
+  '310229': '上海市青浦县',
+  '310230': '上海市崇明县',
+  '320000': '江苏省',
+  '320100': '江苏省南京市',
+  '320101': '江苏省南京市市辖区',
+  '320102': '江苏省南京市玄武区',
+  '320103': '江苏省南京市白下区',
+  '320104': '江苏省南京市秦淮区',
+  '320105': '江苏省南京市建邺区',
+  '320106': '江苏省南京市鼓楼区',
+  '320107': '江苏省南京市下关区',
+  '320111': '江苏省南京市浦口区',
+  '320112': '江苏省南京市大厂区',
+  '320113': '江苏省南京市栖霞区',
+  '320114': '江苏省南京市雨花台区',
+  '320121': '江苏省南京市江宁县',
+  '320122': '江苏省南京市江浦县',
+  '320123': '江苏省南京市六合县',
+  '320124': '江苏省南京市溧水县',
+  '320125': '江苏省南京市高淳县',
+  '320200': '江苏省无锡市',
+  '320201': '江苏省无锡市市辖区',
+  '320202': '江苏省无锡市崇安区',
+  '320203': '江苏省无锡市南长区',
+  '320204': '江苏省无锡市北塘区',
+  '320211': '江苏省无锡市郊区',
+  '320281': '江苏省无锡市江阴市',
+  '320282': '江苏省无锡市宜兴市',
+  '320283': '江苏省无锡市锡山市',
+  '320300': '江苏省徐州市',
+  '320301': '江苏省徐州市市辖区',
+  '320302': '江苏省徐州市鼓楼区',
+  '320303': '江苏省徐州市云龙区',
+  '320304': '江苏省徐州市九里区',
+  '320305': '江苏省徐州市贾汪区',
+  '320311': '江苏省徐州市泉山区',
+  '320321': '江苏省徐州市丰县',
+  '320322': '江苏省徐州市沛县',
+  '320323': '江苏省徐州市铜山县',
+  '320324': '江苏省徐州市睢宁县',
+  '320381': '江苏省徐州市新沂市',
+  '320382': '江苏省徐州市邳州市',
+  '320400': '江苏省常州市',
+  '320401': '江苏省常州市市辖区',
+  '320402': '江苏省常州市天宁区',
+  '320404': '江苏省常州市钟楼区',
+  '320405': '江苏省常州市戚墅堰区',
+  '320411': '江苏省常州市郊区',
+  '320481': '江苏省常州市溧阳市',
+  '320482': '江苏省常州市金坛市',
+  '320483': '江苏省常州市武进市',
+  '320500': '江苏省苏州市',
+  '320501': '江苏省苏州市市辖区',
+  '320502': '江苏省苏州市沧浪区',
+  '320503': '江苏省苏州市平江区',
+  '320504': '江苏省苏州市金阊区',
+  '320511': '江苏省苏州市郊区',
+  '320581': '江苏省苏州市常熟市',
+  '320582': '江苏省苏州市张家港市',
+  '320583': '江苏省苏州市昆山市',
+  '320584': '江苏省苏州市吴江市',
+  '320585': '江苏省苏州市太仓市',
+  '320586': '江苏省苏州市吴县市',
+  '320600': '江苏省南通市',
+  '320601': '江苏省南通市市辖区',
+  '320602': '江苏省南通市崇川区',
+  '320611': '江苏省南通市港闸区',
+  '320621': '江苏省南通市海安县',
+  '320623': '江苏省南通市如东县',
+  '320681': '江苏省南通市启东市',
+  '320682': '江苏省南通市如皋市',
+  '320683': '江苏省南通市通州市',
+  '320684': '江苏省南通市海门市',
+  '320700': '江苏省连云港市',
+  '320701': '江苏省连云港市市辖区',
+  '320703': '江苏省连云港市连云区',
+  '320704': '江苏省连云港市云台区',
+  '320705': '江苏省连云港市新浦区',
+  '320706': '江苏省连云港市海州区',
+  '320721': '江苏省连云港市赣榆县',
+  '320722': '江苏省连云港市东海县',
+  '320723': '江苏省连云港市灌云县',
+  '320724': '江苏省连云港市灌南县',
+  '320800': '江苏省淮阴市',
+  '320801': '江苏省淮阴市市辖区',
+  '320802': '江苏省淮阴市清河区',
+  '320811': '江苏省淮阴市清浦区',
+  '320821': '江苏省淮阴市淮阴县',
+  '320826': '江苏省淮阴市涟水县',
+  '320829': '江苏省淮阴市洪泽县',
+  '320830': '江苏省淮阴市盱眙县',
+  '320831': '江苏省淮阴市金湖县',
+  '320882': '江苏省淮阴市淮安市',
+  '320900': '江苏省盐城市',
+  '320901': '江苏省盐城市市辖区',
+  '320902': '江苏省盐城市城区',
+  '320921': '江苏省盐城市响水县',
+  '320922': '江苏省盐城市滨海县',
+  '320923': '江苏省盐城市阜宁县',
+  '320924': '江苏省盐城市射阳县',
+  '320925': '江苏省盐城市建湖县',
+  '320928': '江苏省盐城市盐都县',
+  '320981': '江苏省盐城市东台市',
+  '320982': '江苏省盐城市大丰市',
+  '321000': '江苏省扬州市',
+  '321001': '江苏省扬州市市辖区',
+  '321002': '江苏省扬州市广陵区',
+  '321011': '江苏省扬州市郊区',
+  '321023': '江苏省扬州市宝应县',
+  '321027': '江苏省扬州市邗江县',
+  '321081': '江苏省扬州市仪征市',
+  '321084': '江苏省扬州市高邮市',
+  '321088': '江苏省扬州市江都市',
+  '321100': '江苏省镇江市',
+  '321101': '江苏省镇江市市辖区',
+  '321102': '江苏省镇江市京口区',
+  '321111': '江苏省镇江市润州区',
+  '321121': '江苏省镇江市丹徒县',
+  '321181': '江苏省镇江市丹阳市',
+  '321182': '江苏省镇江市扬中市',
+  '321183': '江苏省镇江市句容市',
+  '321200': '江苏省泰州市',
+  '321201': '江苏省泰州市市辖区',
+  '321202': '江苏省泰州市海陵区',
+  '321203': '江苏省泰州市高港区',
+  '321281': '江苏省泰州市兴化市',
+  '321282': '江苏省泰州市靖江市',
+  '321283': '江苏省泰州市泰兴市',
+  '321284': '江苏省泰州市姜堰市',
+  '321300': '江苏省宿迁市',
+  '321301': '江苏省宿迁市市辖区',
+  '321302': '江苏省宿迁市宿城区',
+  '321321': '江苏省宿迁市宿豫县',
+  '321322': '江苏省宿迁市沭阳县',
+  '321323': '江苏省宿迁市泗阳县',
+  '321324': '江苏省宿迁市泗洪县',
+  '330000': '浙江省',
+  '330100': '浙江省杭州市',
+  '330101': '浙江省杭州市市辖区',
+  '330102': '浙江省杭州市上城区',
+  '330103': '浙江省杭州市下城区',
+  '330104': '浙江省杭州市江干区',
+  '330105': '浙江省杭州市拱墅区',
+  '330106': '浙江省杭州市西湖区',
+  '330108': '浙江省杭州市滨江区',
+  '330122': '浙江省杭州市桐庐县',
+  '330127': '浙江省杭州市淳安县',
+  '330181': '浙江省杭州市萧山市',
+  '330182': '浙江省杭州市建德市',
+  '330183': '浙江省杭州市富阳市',
+  '330184': '浙江省杭州市余杭市',
+  '330185': '浙江省杭州市临安市',
+  '330200': '浙江省宁波市',
+  '330201': '浙江省宁波市市辖区',
+  '330203': '浙江省宁波市海曙区',
+  '330204': '浙江省宁波市江东区',
+  '330205': '浙江省宁波市江北区',
+  '330206': '浙江省宁波市北仑区',
+  '330211': '浙江省宁波市镇海区',
+  '330225': '浙江省宁波市象山县',
+  '330226': '浙江省宁波市宁海县',
+  '330227': '浙江省宁波市鄞县',
+  '330281': '浙江省宁波市余姚市',
+  '330282': '浙江省宁波市慈溪市',
+  '330283': '浙江省宁波市奉化市',
+  '330300': '浙江省温州市',
+  '330301': '浙江省温州市市辖区',
+  '330302': '浙江省温州市鹿城区',
+  '330303': '浙江省温州市龙湾区',
+  '330304': '浙江省温州市瓯海区',
+  '330322': '浙江省温州市洞头县',
+  '330324': '浙江省温州市永嘉县',
+  '330326': '浙江省温州市平阳县',
+  '330327': '浙江省温州市苍南县',
+  '330328': '浙江省温州市文成县',
+  '330329': '浙江省温州市泰顺县',
+  '330381': '浙江省温州市瑞安市',
+  '330382': '浙江省温州市乐清市',
+  '330400': '浙江省嘉兴市',
+  '330401': '浙江省嘉兴市市辖区',
+  '330402': '浙江省嘉兴市秀城区',
+  '330411': '浙江省嘉兴市郊区',
+  '330421': '浙江省嘉兴市嘉善县',
+  '330424': '浙江省嘉兴市海盐县',
+  '330481': '浙江省嘉兴市海宁市',
+  '330482': '浙江省嘉兴市平湖市',
+  '330483': '浙江省嘉兴市桐乡市',
+  '330500': '浙江省湖州市',
+  '330501': '浙江省湖州市市辖区',
+  '330521': '浙江省湖州市德清县',
+  '330522': '浙江省湖州市长兴县',
+  '330523': '浙江省湖州市安吉县',
+  '330600': '浙江省绍兴市',
+  '330601': '浙江省绍兴市市辖区',
+  '330602': '浙江省绍兴市越城区',
+  '330621': '浙江省绍兴市绍兴县',
+  '330624': '浙江省绍兴市新昌县',
+  '330681': '浙江省绍兴市诸暨市',
+  '330682': '浙江省绍兴市上虞市',
+  '330683': '浙江省绍兴市嵊州市',
+  '330700': '浙江省金华市',
+  '330701': '浙江省金华市市辖区',
+  '330702': '浙江省金华市婺城区',
+  '330721': '浙江省金华市金华县',
+  '330723': '浙江省金华市武义县',
+  '330726': '浙江省金华市浦江县',
+  '330727': '浙江省金华市磐安县',
+  '330781': '浙江省金华市兰溪市',
+  '330782': '浙江省金华市义乌市',
+  '330783': '浙江省金华市东阳市',
+  '330784': '浙江省金华市永康市',
+  '330800': '浙江省衢州市',
+  '330801': '浙江省衢州市市辖区',
+  '330802': '浙江省衢州市柯城区',
+  '330821': '浙江省衢州市衢县',
+  '330822': '浙江省衢州市常山县',
+  '330824': '浙江省衢州市开化县',
+  '330825': '浙江省衢州市龙游县',
+  '330881': '浙江省衢州市江山市',
+  '330900': '浙江省舟山市',
+  '330901': '浙江省舟山市市辖区',
+  '330902': '浙江省舟山市定海区',
+  '330903': '浙江省舟山市普陀区',
+  '330921': '浙江省舟山市岱山县',
+  '330922': '浙江省舟山市嵊泗县',
+  '331000': '浙江省台州市',
+  '331001': '浙江省台州市市辖区',
+  '331002': '浙江省台州市椒江区',
+  '331003': '浙江省台州市黄岩区',
+  '331004': '浙江省台州市路桥区',
+  '331021': '浙江省台州市玉环县',
+  '331022': '浙江省台州市三门县',
+  '331023': '浙江省台州市天台县',
+  '331024': '浙江省台州市仙居县',
+  '331081': '浙江省台州市温岭市',
+  '331082': '浙江省台州市临海市',
+  '332500': '浙江省丽水地区',
+  '332501': '浙江省丽水地区丽水市',
+  '332502': '浙江省丽水地区龙泉市',
+  '332522': '浙江省丽水地区青田县',
+  '332523': '浙江省丽水地区云和县',
+  '332525': '浙江省丽水地区庆元县',
+  '332526': '浙江省丽水地区缙云县',
+  '332527': '浙江省丽水地区遂昌县',
+  '332528': '浙江省丽水地区松阳县',
+  '332529': '浙江省丽水地区景宁畲族自治县',
+  '340000': '安徽省',
+  '340100': '安徽省合肥市',
+  '340101': '安徽省合肥市市辖区',
+  '340102': '安徽省合肥市东市区',
+  '340103': '安徽省合肥市中市区',
+  '340104': '安徽省合肥市西市区',
+  '340111': '安徽省合肥市郊区',
+  '340121': '安徽省合肥市长丰县',
+  '340122': '安徽省合肥市肥东县',
+  '340123': '安徽省合肥市肥西县',
+  '340200': '安徽省芜湖市',
+  '340201': '安徽省芜湖市市辖区',
+  '340202': '安徽省芜湖市镜湖区',
+  '340203': '安徽省芜湖市马塘区',
+  '340204': '安徽省芜湖市新芜区',
+  '340207': '安徽省芜湖市鸠江区',
+  '340221': '安徽省芜湖市芜湖县',
+  '340222': '安徽省芜湖市繁昌县',
+  '340223': '安徽省芜湖市南陵县',
+  '340300': '安徽省蚌埠市',
+  '340301': '安徽省蚌埠市市辖区',
+  '340302': '安徽省蚌埠市东市区',
+  '340303': '安徽省蚌埠市中市区',
+  '340304': '安徽省蚌埠市西市区',
+  '340311': '安徽省蚌埠市郊区',
+  '340321': '安徽省蚌埠市怀远县',
+  '340322': '安徽省蚌埠市五河县',
+  '340323': '安徽省蚌埠市固镇县',
+  '340400': '安徽省淮南市',
+  '340401': '安徽省淮南市市辖区',
+  '340402': '安徽省淮南市大通区',
+  '340403': '安徽省淮南市田家庵区',
+  '340404': '安徽省淮南市谢家集区',
+  '340405': '安徽省淮南市八公山区',
+  '340406': '安徽省淮南市潘集区',
+  '340421': '安徽省淮南市凤台县',
+  '340500': '安徽省马鞍山市',
+  '340501': '安徽省马鞍山市市辖区',
+  '340502': '安徽省马鞍山市金家庄区',
+  '340503': '安徽省马鞍山市花山区',
+  '340504': '安徽省马鞍山市雨山区',
+  '340505': '安徽省马鞍山市向山区',
+  '340521': '安徽省马鞍山市当涂县',
+  '340600': '安徽省淮北市',
+  '340601': '安徽省淮北市市辖区',
+  '340602': '安徽省淮北市杜集区',
+  '340603': '安徽省淮北市相山区',
+  '340604': '安徽省淮北市烈山区',
+  '340621': '安徽省淮北市濉溪县',
+  '340700': '安徽省铜陵市',
+  '340701': '安徽省铜陵市市辖区',
+  '340702': '安徽省铜陵市铜官山区',
+  '340703': '安徽省铜陵市狮子山区',
+  '340711': '安徽省铜陵市郊区',
+  '340721': '安徽省铜陵市铜陵县',
+  '340800': '安徽省安庆市',
+  '340801': '安徽省安庆市市辖区',
+  '340802': '安徽省安庆市迎江区',
+  '340803': '安徽省安庆市大观区',
+  '340811': '安徽省安庆市郊区',
+  '340822': '安徽省安庆市怀宁县',
+  '340823': '安徽省安庆市枞阳县',
+  '340824': '安徽省安庆市潜山县',
+  '340825': '安徽省安庆市太湖县',
+  '340826': '安徽省安庆市宿松县',
+  '340827': '安徽省安庆市望江县',
+  '340828': '安徽省安庆市岳西县',
+  '340881': '安徽省安庆市桐城市',
+  '341000': '安徽省黄山市',
+  '341001': '安徽省黄山市市辖区',
+  '341002': '安徽省黄山市屯溪区',
+  '341003': '安徽省黄山市黄山区',
+  '341004': '安徽省黄山市徽州区',
+  '341021': '安徽省黄山市歙县',
+  '341022': '安徽省黄山市休宁县',
+  '341023': '安徽省黄山市黟县',
+  '341024': '安徽省黄山市祁门县',
+  '341100': '安徽省滁州市',
+  '341101': '安徽省滁州市市辖区',
+  '341102': '安徽省滁州市琅琊区',
+  '341103': '安徽省滁州市南谯区',
+  '341122': '安徽省滁州市来安县',
+  '341124': '安徽省滁州市全椒县',
+  '341125': '安徽省滁州市定远县',
+  '341126': '安徽省滁州市凤阳县',
+  '341181': '安徽省滁州市天长市',
+  '341182': '安徽省滁州市明光市',
+  '341200': '安徽省阜阳市',
+  '341201': '安徽省阜阳市市辖区',
+  '341202': '安徽省阜阳市颍州区',
+  '341203': '安徽省阜阳市颍东区',
+  '341204': '安徽省阜阳市颍泉区',
+  '341221': '安徽省阜阳市临泉县',
+  '341222': '安徽省阜阳市太和县',
+  '341223': '安徽省阜阳市涡阳县',
+  '341224': '安徽省阜阳市蒙城县',
+  '341225': '安徽省阜阳市阜南县',
+  '341226': '安徽省阜阳市颍上县',
+  '341227': '安徽省阜阳市利辛县',
+  '341281': '安徽省阜阳市亳州市',
+  '341282': '安徽省阜阳市界首市',
+  '341300': '安徽省宿州市',
+  '341301': '安徽省宿州市市辖区',
+  '341302': '安徽省宿州市甬桥区',
+  '341321': '安徽省宿州市砀山县',
+  '341322': '安徽省宿州市萧县',
+  '341323': '安徽省宿州市灵璧县',
+  '341324': '安徽省宿州市泗县',
+  '342400': '安徽省六安地区',
+  '342401': '安徽省六安地区六安市',
+  '342422': '安徽省六安地区寿县',
+  '342423': '安徽省六安地区霍邱县',
+  '342425': '安徽省六安地区舒城县',
+  '342426': '安徽省六安地区金寨县',
+  '342427': '安徽省六安地区霍山县',
+  '342500': '安徽省宣城地区',
+  '342501': '安徽省宣城地区宣州市',
+  '342502': '安徽省宣城地区宁国市',
+  '342522': '安徽省宣城地区郎溪县',
+  '342523': '安徽省宣城地区广德县',
+  '342529': '安徽省宣城地区泾县',
+  '342530': '安徽省宣城地区旌德县',
+  '342531': '安徽省宣城地区绩溪县',
+  '342600': '安徽省巢湖地区',
+  '342601': '安徽省巢湖地区巢湖市',
+  '342622': '安徽省巢湖地区庐江县',
+  '342623': '安徽省巢湖地区无为县',
+  '342625': '安徽省巢湖地区含山县',
+  '342626': '安徽省巢湖地区和县',
+  '342900': '安徽省池州地区',
+  '342901': '安徽省池州地区贵池市',
+  '342921': '安徽省池州地区东至县',
+  '342922': '安徽省池州地区石台县',
+  '342923': '安徽省池州地区青阳县',
+  '350000': '福建省',
+  '350100': '福建省福州市',
+  '350101': '福建省福州市市辖区',
+  '350102': '福建省福州市鼓楼区',
+  '350103': '福建省福州市台江区',
+  '350104': '福建省福州市仓山区',
+  '350105': '福建省福州市马尾区',
+  '350111': '福建省福州市晋安区',
+  '350121': '福建省福州市闽侯县',
+  '350122': '福建省福州市连江县',
+  '350123': '福建省福州市罗源县',
+  '350124': '福建省福州市闽清县',
+  '350125': '福建省福州市永泰县',
+  '350128': '福建省福州市平潭县',
+  '350181': '福建省福州市福清市',
+  '350182': '福建省福州市长乐市',
+  '350200': '福建省厦门市',
+  '350201': '福建省厦门市市辖区',
+  '350202': '福建省厦门市鼓浪屿区',
+  '350203': '福建省厦门市思明区',
+  '350204': '福建省厦门市开元区',
+  '350205': '福建省厦门市杏林区',
+  '350206': '福建省厦门市湖里区',
+  '350211': '福建省厦门市集美区',
+  '350212': '福建省厦门市同安区',
+  '350300': '福建省莆田市',
+  '350301': '福建省莆田市市辖区',
+  '350302': '福建省莆田市城厢区',
+  '350303': '福建省莆田市涵江区',
+  '350321': '福建省莆田市莆田县',
+  '350322': '福建省莆田市仙游县',
+  '350400': '福建省三明市',
+  '350401': '福建省三明市市辖区',
+  '350402': '福建省三明市梅列区',
+  '350403': '福建省三明市三元区',
+  '350421': '福建省三明市明溪县',
+  '350423': '福建省三明市清流县',
+  '350424': '福建省三明市宁化县',
+  '350425': '福建省三明市大田县',
+  '350426': '福建省三明市尤溪县',
+  '350427': '福建省三明市沙县',
+  '350428': '福建省三明市将乐县',
+  '350429': '福建省三明市泰宁县',
+  '350430': '福建省三明市建宁县',
+  '350481': '福建省三明市永安市',
+  '350500': '福建省泉州市',
+  '350501': '福建省泉州市市辖区',
+  '350502': '福建省泉州市鲤城区',
+  '350503': '福建省泉州市丰泽区',
+  '350504': '福建省泉州市洛江区',
+  '350521': '福建省泉州市惠安县',
+  '350524': '福建省泉州市安溪县',
+  '350525': '福建省泉州市永春县',
+  '350526': '福建省泉州市德化县',
+  '350527': '福建省泉州市金门县',
+  '350581': '福建省泉州市石狮市',
+  '350582': '福建省泉州市晋江市',
+  '350583': '福建省泉州市南安市',
+  '350600': '福建省漳州市',
+  '350601': '福建省漳州市市辖区',
+  '350602': '福建省漳州市芗城区',
+  '350603': '福建省漳州市龙文区',
+  '350622': '福建省漳州市云霄县',
+  '350623': '福建省漳州市漳浦县',
+  '350624': '福建省漳州市诏安县',
+  '350625': '福建省漳州市长泰县',
+  '350626': '福建省漳州市东山县',
+  '350627': '福建省漳州市南靖县',
+  '350628': '福建省漳州市平和县',
+  '350629': '福建省漳州市华安县',
+  '350681': '福建省漳州市龙海市',
+  '350700': '福建省南平市',
+  '350701': '福建省南平市市辖区',
+  '350702': '福建省南平市延平区',
+  '350721': '福建省南平市顺昌县',
+  '350722': '福建省南平市浦城县',
+  '350723': '福建省南平市光泽县',
+  '350724': '福建省南平市松溪县',
+  '350725': '福建省南平市政和县',
+  '350781': '福建省南平市邵武市',
+  '350782': '福建省南平市武夷山市',
+  '350783': '福建省南平市建瓯市',
+  '350784': '福建省南平市建阳市',
+  '350800': '福建省龙岩市',
+  '350801': '福建省龙岩市市辖区',
+  '350802': '福建省龙岩市新罗区',
+  '350821': '福建省龙岩市长汀县',
+  '350822': '福建省龙岩市永定县',
+  '350823': '福建省龙岩市上杭县',
+  '350824': '福建省龙岩市武平县',
+  '350825': '福建省龙岩市连城县',
+  '350881': '福建省龙岩市漳平市',
+  '352200': '福建省宁德地区',
+  '352201': '福建省宁德地区宁德市',
+  '352202': '福建省宁德地区福安市',
+  '352203': '福建省宁德地区福鼎市',
+  '352225': '福建省宁德地区霞浦县',
+  '352227': '福建省宁德地区古田县',
+  '352228': '福建省宁德地区屏南县',
+  '352229': '福建省宁德地区寿宁县',
+  '352230': '福建省宁德地区周宁县',
+  '352231': '福建省宁德地区柘荣县',
+  '360000': '江西省',
+  '360100': '江西省南昌市',
+  '360101': '江西省南昌市市辖区',
+  '360102': '江西省南昌市东湖区',
+  '360103': '江西省南昌市西湖区',
+  '360104': '江西省南昌市青云谱区',
+  '360105': '江西省南昌市湾里区',
+  '360111': '江西省南昌市郊区',
+  '360121': '江西省南昌市南昌县',
+  '360122': '江西省南昌市新建县',
+  '360123': '江西省南昌市安义县',
+  '360124': '江西省南昌市进贤县',
+  '360200': '江西省景德镇市',
+  '360201': '江西省景德镇市市辖区',
+  '360202': '江西省景德镇市昌江区',
+  '360203': '江西省景德镇市珠山区',
+  '360222': '江西省景德镇市浮梁县',
+  '360281': '江西省景德镇市乐平市',
+  '360300': '江西省萍乡市',
+  '360301': '江西省萍乡市市辖区',
+  '360302': '江西省萍乡市安源区',
+  '360313': '江西省萍乡市湘东区',
+  '360321': '江西省萍乡市莲花县',
+  '360322': '江西省萍乡市上栗县',
+  '360323': '江西省萍乡市芦溪县',
+  '360400': '江西省九江市',
+  '360401': '江西省九江市市辖区',
+  '360402': '江西省九江市庐山区',
+  '360403': '江西省九江市浔阳区',
+  '360421': '江西省九江市九江县',
+  '360423': '江西省九江市武宁县',
+  '360424': '江西省九江市修水县',
+  '360425': '江西省九江市永修县',
+  '360426': '江西省九江市德安县',
+  '360427': '江西省九江市星子县',
+  '360428': '江西省九江市都昌县',
+  '360429': '江西省九江市湖口县',
+  '360430': '江西省九江市彭泽县',
+  '360481': '江西省九江市瑞昌市',
+  '360500': '江西省新余市',
+  '360501': '江西省新余市市辖区',
+  '360502': '江西省新余市渝水区',
+  '360521': '江西省新余市分宜县',
+  '360600': '江西省鹰潭市',
+  '360601': '江西省鹰潭市市辖区',
+  '360602': '江西省鹰潭市月湖区',
+  '360622': '江西省鹰潭市余江县',
+  '360681': '江西省鹰潭市贵溪市',
+  '360700': '江西省赣州市',
+  '360701': '江西省赣州市市辖区',
+  '360702': '江西省赣州市章贡区',
+  '360721': '江西省赣州市赣县',
+  '360722': '江西省赣州市信丰县',
+  '360723': '江西省赣州市大余县',
+  '360724': '江西省赣州市上犹县',
+  '360725': '江西省赣州市崇义县',
+  '360726': '江西省赣州市安远县',
+  '360727': '江西省赣州市龙南县',
+  '360728': '江西省赣州市定南县',
+  '360729': '江西省赣州市全南县',
+  '360730': '江西省赣州市宁都县',
+  '360731': '江西省赣州市于都县',
+  '360732': '江西省赣州市兴国县',
+  '360733': '江西省赣州市会昌县',
+  '360734': '江西省赣州市寻乌县',
+  '360735': '江西省赣州市石城县',
+  '360781': '江西省赣州市瑞金市',
+  '360782': '江西省赣州市南康市',
+  '362200': '江西省宜春地区',
+  '362201': '江西省宜春地区宜春市',
+  '362202': '江西省宜春地区丰城市',
+  '362203': '江西省宜春地区樟树市',
+  '362204': '江西省宜春地区高安市',
+  '362226': '江西省宜春地区奉新县',
+  '362227': '江西省宜春地区万载县',
+  '362228': '江西省宜春地区上高县',
+  '362229': '江西省宜春地区宜丰县',
+  '362232': '江西省宜春地区靖安县',
+  '362233': '江西省宜春地区铜鼓县',
+  '362300': '江西省上饶地区',
+  '362301': '江西省上饶地区上饶市',
+  '362302': '江西省上饶地区德兴市',
+  '362321': '江西省上饶地区上饶县',
+  '362322': '江西省上饶地区广丰县',
+  '362323': '江西省上饶地区玉山县',
+  '362324': '江西省上饶地区铅山县',
+  '362325': '江西省上饶地区横峰县',
+  '362326': '江西省上饶地区弋阳县',
+  '362329': '江西省上饶地区余干县',
+  '362330': '江西省上饶地区波阳县',
+  '362331': '江西省上饶地区万年县',
+  '362334': '江西省上饶地区婺源县',
+  '362400': '江西省吉安地区',
+  '362401': '江西省吉安地区吉安市',
+  '362402': '江西省吉安地区井冈山市',
+  '362421': '江西省吉安地区吉安县',
+  '362422': '江西省吉安地区吉水县',
+  '362423': '江西省吉安地区峡江县',
+  '362424': '江西省吉安地区新干县',
+  '362425': '江西省吉安地区永丰县',
+  '362426': '江西省吉安地区泰和县',
+  '362427': '江西省吉安地区遂川县',
+  '362428': '江西省吉安地区万安县',
+  '362429': '江西省吉安地区安福县',
+  '362430': '江西省吉安地区永新县',
+  '362432': '江西省吉安地区宁冈县',
+  '362500': '江西省抚州地区',
+  '362502': '江西省抚州地区临川市',
+  '362522': '江西省抚州地区南城县',
+  '362523': '江西省抚州地区黎川县',
+  '362524': '江西省抚州地区南丰县',
+  '362525': '江西省抚州地区崇仁县',
+  '362526': '江西省抚州地区乐安县',
+  '362527': '江西省抚州地区宜黄县',
+  '362528': '江西省抚州地区金溪县',
+  '362529': '江西省抚州地区资溪县',
+  '362531': '江西省抚州地区东乡县',
+  '362532': '江西省抚州地区广昌县',
+  '370000': '山东省',
+  '370100': '山东省济南市',
+  '370101': '山东省济南市市辖区',
+  '370102': '山东省济南市历下区',
+  '370103': '山东省济南市市中区',
+  '370104': '山东省济南市槐荫区',
+  '370105': '山东省济南市天桥区',
+  '370112': '山东省济南市历城区',
+  '370123': '山东省济南市长清县',
+  '370124': '山东省济南市平阴县',
+  '370125': '山东省济南市济阳县',
+  '370126': '山东省济南市商河县',
+  '370181': '山东省济南市章丘市',
+  '370200': '山东省青岛市',
+  '370201': '山东省青岛市市辖区',
+  '370202': '山东省青岛市市南区',
+  '370203': '山东省青岛市市北区',
+  '370205': '山东省青岛市四方区',
+  '370211': '山东省青岛市黄岛区',
+  '370212': '山东省青岛市崂山区',
+  '370213': '山东省青岛市李沧区',
+  '370214': '山东省青岛市城阳区',
+  '370281': '山东省青岛市胶州市',
+  '370282': '山东省青岛市即墨市',
+  '370283': '山东省青岛市平度市',
+  '370284': '山东省青岛市胶南市',
+  '370285': '山东省青岛市莱西市',
+  '370300': '山东省淄博市',
+  '370301': '山东省淄博市市辖区',
+  '370302': '山东省淄博市淄川区',
+  '370303': '山东省淄博市张店区',
+  '370304': '山东省淄博市博山区',
+  '370305': '山东省淄博市临淄区',
+  '370306': '山东省淄博市周村区',
+  '370321': '山东省淄博市桓台县',
+  '370322': '山东省淄博市高青县',
+  '370323': '山东省淄博市沂源县',
+  '370400': '山东省枣庄市',
+  '370401': '山东省枣庄市市辖区',
+  '370402': '山东省枣庄市市中区',
+  '370403': '山东省枣庄市薛城区',
+  '370404': '山东省枣庄市峄城区',
+  '370405': '山东省枣庄市台儿庄区',
+  '370406': '山东省枣庄市山亭区',
+  '370481': '山东省枣庄市滕州市',
+  '370500': '山东省东营市',
+  '370501': '山东省东营市市辖区',
+  '370502': '山东省东营市东营区',
+  '370503': '山东省东营市河口区',
+  '370521': '山东省东营市垦利县',
+  '370522': '山东省东营市利津县',
+  '370523': '山东省东营市广饶县',
+  '370600': '山东省烟台市',
+  '370601': '山东省烟台市市辖区',
+  '370602': '山东省烟台市芝罘区',
+  '370611': '山东省烟台市福山区',
+  '370612': '山东省烟台市牟平区',
+  '370613': '山东省烟台市莱山区',
+  '370634': '山东省烟台市长岛县',
+  '370681': '山东省烟台市龙口市',
+  '370682': '山东省烟台市莱阳市',
+  '370683': '山东省烟台市莱州市',
+  '370684': '山东省烟台市蓬莱市',
+  '370685': '山东省烟台市招远市',
+  '370686': '山东省烟台市栖霞市',
+  '370687': '山东省烟台市海阳市',
+  '370700': '山东省潍坊市',
+  '370701': '山东省潍坊市市辖区',
+  '370702': '山东省潍坊市潍城区',
+  '370703': '山东省潍坊市寒亭区',
+  '370704': '山东省潍坊市坊子区',
+  '370705': '山东省潍坊市奎文区',
+  '370724': '山东省潍坊市临朐县',
+  '370725': '山东省潍坊市昌乐县',
+  '370781': '山东省潍坊市青州市',
+  '370782': '山东省潍坊市诸城市',
+  '370783': '山东省潍坊市寿光市',
+  '370784': '山东省潍坊市安丘市',
+  '370785': '山东省潍坊市高密市',
+  '370786': '山东省潍坊市昌邑市',
+  '370800': '山东省济宁市',
+  '370801': '山东省济宁市市辖区',
+  '370802': '山东省济宁市市中区',
+  '370811': '山东省济宁市任城区',
+  '370826': '山东省济宁市微山县',
+  '370827': '山东省济宁市鱼台县',
+  '370828': '山东省济宁市金乡县',
+  '370829': '山东省济宁市嘉祥县',
+  '370830': '山东省济宁市汶上县',
+  '370831': '山东省济宁市泗水县',
+  '370832': '山东省济宁市梁山县',
+  '370881': '山东省济宁市曲阜市',
+  '370882': '山东省济宁市兖州市',
+  '370883': '山东省济宁市邹城市',
+  '370900': '山东省泰安市',
+  '370901': '山东省泰安市市辖区',
+  '370902': '山东省泰安市泰山区',
+  '370911': '山东省泰安市郊区',
+  '370921': '山东省泰安市宁阳县',
+  '370923': '山东省泰安市东平县',
+  '370982': '山东省泰安市新泰市',
+  '370983': '山东省泰安市肥城市',
+  '371000': '山东省威海市',
+  '371001': '山东省威海市市辖区',
+  '371002': '山东省威海市环翠区',
+  '371081': '山东省威海市文登市',
+  '371082': '山东省威海市荣成市',
+  '371083': '山东省威海市乳山市',
+  '371100': '山东省日照市',
+  '371101': '山东省日照市市辖区',
+  '371102': '山东省日照市东港区',
+  '371121': '山东省日照市五莲县',
+  '371122': '山东省日照市莒县',
+  '371200': '山东省莱芜市',
+  '371201': '山东省莱芜市市辖区',
+  '371202': '山东省莱芜市莱城区',
+  '371203': '山东省莱芜市钢城区',
+  '371300': '山东省临沂市',
+  '371301': '山东省临沂市市辖区',
+  '371302': '山东省临沂市兰山区',
+  '371311': '山东省临沂市罗庄区',
+  '371312': '山东省临沂市河东区',
+  '371321': '山东省临沂市沂南县',
+  '371322': '山东省临沂市郯城县',
+  '371323': '山东省临沂市沂水县',
+  '371324': '山东省临沂市苍山县',
+  '371325': '山东省临沂市费县',
+  '371326': '山东省临沂市平邑县',
+  '371327': '山东省临沂市莒南县',
+  '371328': '山东省临沂市蒙阴县',
+  '371329': '山东省临沂市临沭县',
+  '371400': '山东省德州市',
+  '371401': '山东省德州市市辖区',
+  '371402': '山东省德州市德城区',
+  '371421': '山东省德州市陵县',
+  '371422': '山东省德州市宁津县',
+  '371423': '山东省德州市庆云县',
+  '371424': '山东省德州市临邑县',
+  '371425': '山东省德州市齐河县',
+  '371426': '山东省德州市平原县',
+  '371427': '山东省德州市夏津县',
+  '371428': '山东省德州市武城县',
+  '371481': '山东省德州市乐陵市',
+  '371482': '山东省德州市禹城市',
+  '371500': '山东省聊城市',
+  '371501': '山东省聊城市市辖区',
+  '371502': '山东省聊城市东昌府区',
+  '371521': '山东省聊城市阳谷县',
+  '371522': '山东省聊城市莘县',
+  '371523': '山东省聊城市茌平县',
+  '371524': '山东省聊城市东阿县',
+  '371525': '山东省聊城市冠县',
+  '371526': '山东省聊城市高唐县',
+  '371581': '山东省聊城市临清市',
+  '372300': '山东省滨州地区',
+  '372301': '山东省滨州地区滨州市',
+  '372321': '山东省滨州地区惠民县',
+  '372323': '山东省滨州地区阳信县',
+  '372324': '山东省滨州地区无棣县',
+  '372325': '山东省滨州地区沾化县',
+  '372328': '山东省滨州地区博兴县',
+  '372330': '山东省滨州地区邹平县',
+  '372900': '山东省菏泽地区',
+  '372901': '山东省菏泽地区菏泽市',
+  '372922': '山东省菏泽地区曹县',
+  '372923': '山东省菏泽地区定陶县',
+  '372924': '山东省菏泽地区成武县',
+  '372925': '山东省菏泽地区单县',
+  '372926': '山东省菏泽地区巨野县',
+  '372928': '山东省菏泽地区郓城县',
+  '372929': '山东省菏泽地区鄄城县',
+  '372930': '山东省菏泽地区东明县',
+  '410000': '河南省',
+  '410100': '河南省郑州市',
+  '410101': '河南省郑州市市辖区',
+  '410102': '河南省郑州市中原区',
+  '410103': '河南省郑州市二七区',
+  '410104': '河南省郑州市管城回族区',
+  '410105': '河南省郑州市金水区',
+  '410106': '河南省郑州市上街区',
+  '410108': '河南省郑州市邙山区',
+  '410122': '河南省郑州市中牟县',
+  '410181': '河南省郑州市巩义市',
+  '410182': '河南省郑州市荥阳市',
+  '410183': '河南省郑州市新密市',
+  '410184': '河南省郑州市新郑市',
+  '410185': '河南省郑州市登封市',
+  '410200': '河南省开封市',
+  '410201': '河南省开封市市辖区',
+  '410202': '河南省开封市龙亭区',
+  '410203': '河南省开封市顺河回族区',
+  '410204': '河南省开封市鼓楼区',
+  '410205': '河南省开封市南关区',
+  '410211': '河南省开封市郊区',
+  '410221': '河南省开封市杞县',
+  '410222': '河南省开封市通许县',
+  '410223': '河南省开封市尉氏县',
+  '410224': '河南省开封市开封县',
+  '410225': '河南省开封市兰考县',
+  '410300': '河南省洛阳市',
+  '410301': '河南省洛阳市市辖区',
+  '410302': '河南省洛阳市老城区',
+  '410303': '河南省洛阳市西工区',
+  '410304': '河南省洛阳市廛河回族区',
+  '410305': '河南省洛阳市涧西区',
+  '410306': '河南省洛阳市吉利区',
+  '410311': '河南省洛阳市郊区',
+  '410322': '河南省洛阳市孟津县',
+  '410323': '河南省洛阳市新安县',
+  '410324': '河南省洛阳市栾川县',
+  '410325': '河南省洛阳市嵩县',
+  '410326': '河南省洛阳市汝阳县',
+  '410327': '河南省洛阳市宜阳县',
+  '410328': '河南省洛阳市洛宁县',
+  '410329': '河南省洛阳市伊川县',
+  '410381': '河南省洛阳市偃师市',
+  '410400': '河南省平顶山市',
+  '410401': '河南省平顶山市市辖区',
+  '410402': '河南省平顶山市新华区',
+  '410403': '河南省平顶山市卫东区',
+  '410404': '河南省平顶山市石龙区',
+  '410411': '河南省平顶山市湛河区',
+  '410421': '河南省平顶山市宝丰县',
+  '410422': '河南省平顶山市叶县',
+  '410423': '河南省平顶山市鲁山县',
+  '410425': '河南省平顶山市郏县',
+  '410481': '河南省平顶山市舞钢市',
+  '410482': '河南省平顶山市汝州市',
+  '410500': '河南省安阳市',
+  '410501': '河南省安阳市市辖区',
+  '410502': '河南省安阳市文峰区',
+  '410503': '河南省安阳市北关区',
+  '410504': '河南省安阳市铁西区',
+  '410511': '河南省安阳市郊区',
+  '410522': '河南省安阳市安阳县',
+  '410523': '河南省安阳市汤阴县',
+  '410526': '河南省安阳市滑县',
+  '410527': '河南省安阳市内黄县',
+  '410581': '河南省安阳市林州市',
+  '410600': '河南省鹤壁市',
+  '410601': '河南省鹤壁市市辖区',
+  '410602': '河南省鹤壁市鹤山区',
+  '410603': '河南省鹤壁市山城区',
+  '410611': '河南省鹤壁市郊区',
+  '410621': '河南省鹤壁市浚县',
+  '410622': '河南省鹤壁市淇县',
+  '410700': '河南省新乡市',
+  '410701': '河南省新乡市市辖区',
+  '410702': '河南省新乡市红旗区',
+  '410703': '河南省新乡市新华区',
+  '410704': '河南省新乡市北站区',
+  '410711': '河南省新乡市郊区',
+  '410721': '河南省新乡市新乡县',
+  '410724': '河南省新乡市获嘉县',
+  '410725': '河南省新乡市原阳县',
+  '410726': '河南省新乡市延津县',
+  '410727': '河南省新乡市封丘县',
+  '410728': '河南省新乡市长垣县',
+  '410781': '河南省新乡市卫辉市',
+  '410782': '河南省新乡市辉县市',
+  '410800': '河南省焦作市',
+  '410801': '河南省焦作市市辖区',
+  '410802': '河南省焦作市解放区',
+  '410803': '河南省焦作市中站区',
+  '410804': '河南省焦作市马村区',
+  '410811': '河南省焦作市山阳区',
+  '410821': '河南省焦作市修武县',
+  '410822': '河南省焦作市博爱县',
+  '410823': '河南省焦作市武陟县',
+  '410825': '河南省焦作市温县',
+  '410881': '河南省焦作市济源市',
+  '410882': '河南省焦作市沁阳市',
+  '410883': '河南省焦作市孟州市',
+  '410900': '河南省濮阳市',
+  '410901': '河南省濮阳市市辖区',
+  '410902': '河南省濮阳市市区',
+  '410922': '河南省濮阳市清丰县',
+  '410923': '河南省濮阳市南乐县',
+  '410926': '河南省濮阳市范县',
+  '410927': '河南省濮阳市台前县',
+  '410928': '河南省濮阳市濮阳县',
+  '411000': '河南省许昌市',
+  '411001': '河南省许昌市市辖区',
+  '411002': '河南省许昌市魏都区',
+  '411023': '河南省许昌市许昌县',
+  '411024': '河南省许昌市鄢陵县',
+  '411025': '河南省许昌市襄城县',
+  '411081': '河南省许昌市禹州市',
+  '411082': '河南省许昌市长葛市',
+  '411100': '河南省漯河市',
+  '411101': '河南省漯河市市辖区',
+  '411102': '河南省漯河市源汇区',
+  '411121': '河南省漯河市舞阳县',
+  '411122': '河南省漯河市临颍县',
+  '411123': '河南省漯河市郾城县',
+  '411200': '河南省三门峡市',
+  '411201': '河南省三门峡市市辖区',
+  '411202': '河南省三门峡市湖滨区',
+  '411221': '河南省三门峡市渑池县',
+  '411222': '河南省三门峡市陕县',
+  '411224': '河南省三门峡市卢氏县',
+  '411281': '河南省三门峡市义马市',
+  '411282': '河南省三门峡市灵宝市',
+  '411300': '河南省南阳市',
+  '411301': '河南省南阳市市辖区',
+  '411302': '河南省南阳市宛城区',
+  '411303': '河南省南阳市卧龙区',
+  '411321': '河南省南阳市南召县',
+  '411322': '河南省南阳市方城县',
+  '411323': '河南省南阳市西峡县',
+  '411324': '河南省南阳市镇平县',
+  '411325': '河南省南阳市内乡县',
+  '411326': '河南省南阳市淅川县',
+  '411327': '河南省南阳市社旗县',
+  '411328': '河南省南阳市唐河县',
+  '411329': '河南省南阳市新野县',
+  '411330': '河南省南阳市桐柏县',
+  '411381': '河南省南阳市邓州市',
+  '411400': '河南省商丘市',
+  '411401': '河南省商丘市市辖区',
+  '411402': '河南省商丘市梁园区',
+  '411403': '河南省商丘市睢阳区',
+  '411421': '河南省商丘市民权县',
+  '411422': '河南省商丘市睢县',
+  '411423': '河南省商丘市宁陵县',
+  '411424': '河南省商丘市柘城县',
+  '411425': '河南省商丘市虞城县',
+  '411426': '河南省商丘市夏邑县',
+  '411481': '河南省商丘市永城市',
+  '411500': '河南省信阳市',
+  '411501': '河南省信阳市市辖区',
+  '411502': '河南省信阳市师河区',
+  '411503': '河南省信阳市平桥区',
+  '411521': '河南省信阳市罗山县',
+  '411522': '河南省信阳市光山县',
+  '411523': '河南省信阳市新县',
+  '411524': '河南省信阳市商城县',
+  '411525': '河南省信阳市固始县',
+  '411526': '河南省信阳市潢川县',
+  '411527': '河南省信阳市淮滨县',
+  '411528': '河南省信阳市息县',
+  '412700': '河南省周口地区',
+  '412701': '河南省周口地区周口市',
+  '412702': '河南省周口地区项城市',
+  '412721': '河南省周口地区扶沟县',
+  '412722': '河南省周口地区西华县',
+  '412723': '河南省周口地区商水县',
+  '412724': '河南省周口地区太康县',
+  '412725': '河南省周口地区鹿邑县',
+  '412726': '河南省周口地区郸城县',
+  '412727': '河南省周口地区淮阳县',
+  '412728': '河南省周口地区沈丘县',
+  '412800': '河南省驻马店地区',
+  '412801': '河南省驻马店地区驻马店市',
+  '412821': '河南省驻马店地区确山县',
+  '412822': '河南省驻马店地区泌阳县',
+  '412823': '河南省驻马店地区遂平县',
+  '412824': '河南省驻马店地区西平县',
+  '412825': '河南省驻马店地区上蔡县',
+  '412826': '河南省驻马店地区汝南县',
+  '412827': '河南省驻马店地区平舆县',
+  '412828': '河南省驻马店地区新蔡县',
+  '412829': '河南省驻马店地区正阳县',
+  '420000': '湖北省',
+  '420100': '湖北省武汉市',
+  '420101': '湖北省武汉市市辖区',
+  '420102': '湖北省武汉市江岸区',
+  '420103': '湖北省武汉市江汉区',
+  '420104': '湖北省武汉市乔口区',
+  '420105': '湖北省武汉市汉阳区',
+  '420106': '湖北省武汉市武昌区',
+  '420107': '湖北省武汉市青山区',
+  '420111': '湖北省武汉市洪山区',
+  '420112': '湖北省武汉市东西湖区',
+  '420113': '湖北省武汉市汉南区',
+  '420114': '湖北省武汉市蔡甸区',
+  '420115': '湖北省武汉市江夏区',
+  '420116': '湖北省武汉市黄陂区',
+  '420117': '湖北省武汉市新洲区',
+  '420200': '湖北省黄石市',
+  '420201': '湖北省黄石市市辖区',
+  '420202': '湖北省黄石市黄石港区',
+  '420203': '湖北省黄石市石灰窑区',
+  '420204': '湖北省黄石市下陆区',
+  '420205': '湖北省黄石市铁山区',
+  '420222': '湖北省黄石市阳新县',
+  '420281': '湖北省黄石市大冶市',
+  '420300': '湖北省十堰市',
+  '420301': '湖北省十堰市市辖区',
+  '420302': '湖北省十堰市茅箭区',
+  '420303': '湖北省十堰市张湾区',
+  '420321': '湖北省十堰市郧县',
+  '420322': '湖北省十堰市郧西县',
+  '420323': '湖北省十堰市竹山县',
+  '420324': '湖北省十堰市竹溪县',
+  '420325': '湖北省十堰市房县',
+  '420381': '湖北省十堰市丹江口市',
+  '420500': '湖北省宜昌市',
+  '420501': '湖北省宜昌市市辖区',
+  '420502': '湖北省宜昌市西陵区',
+  '420503': '湖北省宜昌市伍家岗区',
+  '420504': '湖北省宜昌市点军区',
+  '420505': '湖北省宜昌市虎亭区',
+  '420521': '湖北省宜昌市宜昌县',
+  '420525': '湖北省宜昌市远安县',
+  '420526': '湖北省宜昌市兴山县',
+  '420527': '湖北省宜昌市秭归县',
+  '420528': '湖北省宜昌市长阳土家族自治县',
+  '420529': '湖北省宜昌市五峰土家族自治县',
+  '420581': '湖北省宜昌市宜都市',
+  '420582': '湖北省宜昌市当阳市',
+  '420583': '湖北省宜昌市枝江市',
+  '420600': '湖北省襄樊市',
+  '420601': '湖北省襄樊市市辖区',
+  '420602': '湖北省襄樊市襄城区',
+  '420606': '湖北省襄樊市樊城区',
+  '420621': '湖北省襄樊市襄阳县',
+  '420624': '湖北省襄樊市南漳县',
+  '420625': '湖北省襄樊市谷城县',
+  '420626': '湖北省襄樊市保康县',
+  '420682': '湖北省襄樊市老河口市',
+  '420683': '湖北省襄樊市枣阳市',
+  '420684': '湖北省襄樊市宜城市',
+  '420700': '湖北省鄂州市',
+  '420701': '湖北省鄂州市市辖区',
+  '420702': '湖北省鄂州市梁子湖区',
+  '420703': '湖北省鄂州市华容区',
+  '420704': '湖北省鄂州市鄂城区',
+  '420800': '湖北省荆门市',
+  '420801': '湖北省荆门市市辖区',
+  '420802': '湖北省荆门市东宝区',
+  '420821': '湖北省荆门市京山县',
+  '420822': '湖北省荆门市沙洋县',
+  '420881': '湖北省荆门市钟祥市',
+  '420900': '湖北省孝感市',
+  '420901': '湖北省孝感市市辖区',
+  '420902': '湖北省孝感市孝南区',
+  '420921': '湖北省孝感市孝昌县',
+  '420922': '湖北省孝感市大悟县',
+  '420923': '湖北省孝感市云梦县',
+  '420981': '湖北省孝感市应城市',
+  '420982': '湖北省孝感市安陆市',
+  '420983': '湖北省孝感市广水市',
+  '420984': '湖北省孝感市汉川市',
+  '421000': '湖北省荆州市',
+  '421001': '湖北省荆州市市辖区',
+  '421002': '湖北省荆州市沙市区',
+  '421003': '湖北省荆州市荆州区',
+  '421022': '湖北省荆州市公安县',
+  '421023': '湖北省荆州市监利县',
+  '421024': '湖北省荆州市江陵县',
+  '421081': '湖北省荆州市石首市',
+  '421083': '湖北省荆州市洪湖市',
+  '421087': '湖北省荆州市松滋市',
+  '421100': '湖北省黄冈市',
+  '421101': '湖北省黄冈市市辖区',
+  '421102': '湖北省黄冈市黄州区',
+  '421121': '湖北省黄冈市团风县',
+  '421122': '湖北省黄冈市红安县',
+  '421123': '湖北省黄冈市罗田县',
+  '421124': '湖北省黄冈市英山县',
+  '421125': '湖北省黄冈市浠水县',
+  '421126': '湖北省黄冈市蕲春县',
+  '421127': '湖北省黄冈市黄梅县',
+  '421181': '湖北省黄冈市麻城市',
+  '421182': '湖北省黄冈市武穴市',
+  '421200': '湖北省咸宁市',
+  '421201': '湖北省咸宁市市辖区',
+  '421202': '湖北省咸宁市咸安区',
+  '421221': '湖北省咸宁市嘉鱼县',
+  '421222': '湖北省咸宁市通城县',
+  '421223': '湖北省咸宁市崇阳县',
+  '421224': '湖北省咸宁市通山县',
+  '422800': '湖北省施土家族苗族自治州',
+  '422801': '湖北省恩施土家族苗族自治州恩施县',
+  '422802': '湖北省恩施土家族苗族自治州利川市',
+  '422822': '湖北省恩施土家族苗族自治州建始县',
+  '422823': '湖北省恩施土家族苗族自治州巴东县',
+  '422825': '湖北省恩施土家族苗族自治州宣恩县',
+  '422826': '湖北省恩施土家族苗族自治州咸丰县',
+  '422827': '湖北省恩施土家族苗族自治州来凤县',
+  '422828': '湖北省恩施土家族苗族自治州鹤峰县',
+  '429000': '湖北省省直辖县级行政单位',
+  '429001': '湖北省随州市',
+  '429004': '湖北省仙桃市',
+  '429005': '湖北省潜江市',
+  '429006': '湖北省天门市',
+  '429021': '湖北省神农架林区',
+  '430000': '湖南省',
+  '430100': '湖南省长沙市',
+  '430101': '湖南省长沙市市辖区',
+  '430102': '湖南省长沙市芙蓉区',
+  '430103': '湖南省长沙市天心区',
+  '430104': '湖南省长沙市岳麓区',
+  '430105': '湖南省长沙市开福区',
+  '430111': '湖南省长沙市雨花区',
+  '430121': '湖南省长沙市长沙县',
+  '430122': '湖南省长沙市望城县',
+  '430124': '湖南省长沙市宁乡县',
+  '430181': '湖南省长沙市浏阳市',
+  '430200': '湖南省株洲市',
+  '430201': '湖南省株洲市市辖区',
+  '430202': '湖南省株洲市荷塘区',
+  '430203': '湖南省株洲市芦淞区',
+  '430204': '湖南省株洲市石峰区',
+  '430211': '湖南省株洲市天元区',
+  '430221': '湖南省株洲市株洲县',
+  '430223': '湖南省株洲市攸县',
+  '430224': '湖南省株洲市茶陵县',
+  '430225': '湖南省株洲市炎陵县',
+  '430281': '湖南省株洲市醴陵市',
+  '430300': '湖南省湘潭市',
+  '430301': '湖南省湘潭市市辖区',
+  '430302': '湖南省湘潭市雨湖区',
+  '430304': '湖南省湘潭市岳塘区',
+  '430321': '湖南省湘潭市湘潭县',
+  '430381': '湖南省湘潭市湘乡市',
+  '430382': '湖南省湘潭市韶山市',
+  '430400': '湖南省衡阳市',
+  '430401': '湖南省衡阳市市辖区',
+  '430402': '湖南省衡阳市江东区',
+  '430403': '湖南省衡阳市城南区',
+  '430404': '湖南省衡阳市城北区',
+  '430411': '湖南省衡阳市郊区',
+  '430412': '湖南省衡阳市南岳区',
+  '430421': '湖南省衡阳市衡阳县',
+  '430422': '湖南省衡阳市衡南县',
+  '430423': '湖南省衡阳市衡山县',
+  '430424': '湖南省衡阳市衡东县',
+  '430426': '湖南省衡阳市祁东县',
+  '430481': '湖南省衡阳市耒阳市',
+  '430482': '湖南省衡阳市常宁市',
+  '430500': '湖南省邵阳市',
+  '430501': '湖南省邵阳市市辖区',
+  '430502': '湖南省邵阳市双清区',
+  '430503': '湖南省邵阳市大祥区',
+  '430511': '湖南省邵阳市北塔区',
+  '430521': '湖南省邵阳市邵东县',
+  '430522': '湖南省邵阳市新邵县',
+  '430523': '湖南省邵阳市邵阳县',
+  '430524': '湖南省邵阳市隆回县',
+  '430525': '湖南省邵阳市洞口县',
+  '430527': '湖南省邵阳市绥宁县',
+  '430528': '湖南省邵阳市新宁县',
+  '430529': '湖南省邵阳市城步苗族自治县',
+  '430581': '湖南省邵阳市武冈市',
+  '430600': '湖南省岳阳市',
+  '430601': '湖南省岳阳市市辖区',
+  '430602': '湖南省岳阳市岳阳楼区',
+  '430603': '湖南省岳阳市云溪区',
+  '430611': '湖南省岳阳市君山区',
+  '430621': '湖南省岳阳市岳阳县',
+  '430623': '湖南省岳阳市华容县',
+  '430624': '湖南省岳阳市湘阴县',
+  '430626': '湖南省岳阳市平江县',
+  '430681': '湖南省岳阳市汨罗市',
+  '430682': '湖南省岳阳市临湘市',
+  '430700': '湖南省常德市',
+  '430701': '湖南省常德市市辖区',
+  '430702': '湖南省常德市武陵区',
+  '430703': '湖南省常德市鼎城区',
+  '430721': '湖南省常德市安乡县',
+  '430722': '湖南省常德市汉寿县',
+  '430723': '湖南省常德市澧县',
+  '430724': '湖南省常德市临澧县',
+  '430725': '湖南省常德市桃源县',
+  '430726': '湖南省常德市石门县',
+  '430781': '湖南省常德市津市市',
+  '430800': '湖南省张家界市',
+  '430801': '湖南省张家界市市辖区',
+  '430802': '湖南省张家界市永定区',
+  '430811': '湖南省张家界市武陵源区',
+  '430821': '湖南省张家界市慈利县',
+  '430822': '湖南省张家界市桑植县',
+  '430900': '湖南省益阳市',
+  '430901': '湖南省益阳市市辖区',
+  '430902': '湖南省益阳市资阳区',
+  '430903': '湖南省益阳市赫山区',
+  '430921': '湖南省益阳市南县',
+  '430922': '湖南省益阳市桃江县',
+  '430923': '湖南省益阳市安化县',
+  '430981': '湖南省益阳市沅江市',
+  '431000': '湖南省郴州市',
+  '431001': '湖南省郴州市市辖区',
+  '431002': '湖南省郴州市北湖区',
+  '431003': '湖南省郴州市苏仙区',
+  '431021': '湖南省郴州市桂阳县',
+  '431022': '湖南省郴州市宜章县',
+  '431023': '湖南省郴州市永兴县',
+  '431024': '湖南省郴州市嘉禾县',
+  '431025': '湖南省郴州市临武县',
+  '431026': '湖南省郴州市汝城县',
+  '431027': '湖南省郴州市桂东县',
+  '431028': '湖南省郴州市安仁县',
+  '431081': '湖南省郴州市资兴市',
+  '431100': '湖南省永州市',
+  '431101': '湖南省永州市市辖区',
+  '431102': '湖南省永州市芝山区',
+  '431103': '湖南省永州市冷水滩区',
+  '431121': '湖南省永州市祁阳县',
+  '431122': '湖南省永州市东安县',
+  '431123': '湖南省永州市双牌县',
+  '431124': '湖南省永州市道县',
+  '431125': '湖南省永州市江永县',
+  '431126': '湖南省永州市宁远县',
+  '431127': '湖南省永州市蓝山县',
+  '431128': '湖南省永州市新田县',
+  '431129': '湖南省永州市江华瑶族自治县',
+  '431200': '湖南省怀化市',
+  '431201': '湖南省怀化市市辖区',
+  '431202': '湖南省怀化市鹤城区',
+  '431221': '湖南省怀化市中方县',
+  '431222': '湖南省怀化市沅陵县',
+  '431223': '湖南省怀化市辰溪县',
+  '431224': '湖南省怀化市溆浦县',
+  '431225': '湖南省怀化市会同县',
+  '431226': '湖南省怀化市麻阳苗族自治县',
+  '431227': '湖南省怀化市新晃侗族自治县',
+  '431228': '湖南省怀化市芷江侗族自治县',
+  '431229': '湖南省怀化市靖州苗族侗族自治县',
+  '431230': '湖南省怀化市通道侗族自治县',
+  '431281': '湖南省怀化市洪江市',
+  '432500': '湖南省娄底地区',
+  '432501': '湖南省娄底地区娄底市',
+  '432502': '湖南省娄底地区冷水江市',
+  '432503': '湖南省娄底地区涟源市',
+  '432522': '湖南省娄底地区双峰县',
+  '432524': '湖南省娄底地区新化县',
+  '433000': '湖南省怀化市',
+  '433001': '湖南省怀化市',
+  '433100': '湖南省湘西土家族苗族自治州',
+  '433101': '湖南省湘西土家族苗族自治州吉首市',
+  '433122': '湖南省湘西土家族苗族自治州泸溪县',
+  '433123': '湖南省湘西土家族苗族自治州凤凰县',
+  '433124': '湖南省湘西土家族苗族自治州花垣县',
+  '433125': '湖南省湘西土家族苗族自治州保靖县',
+  '433126': '湖南省湘西土家族苗族自治州古丈县',
+  '433127': '湖南省湘西土家族苗族自治州永顺县',
+  '433130': '湖南省湘西土家族苗族自治州龙山县',
+  '440000': '广东省',
+  '440100': '广东省广州市',
+  '440101': '广东省广州市市辖区',
+  '440102': '广东省广州市东山区',
+  '440103': '广东省广州市荔湾区',
+  '440104': '广东省广州市越秀区',
+  '440105': '广东省广州市海珠区',
+  '440106': '广东省广州市天河区',
+  '440107': '广东省广州市芳村区',
+  '440111': '广东省广州市白云区',
+  '440112': '广东省广州市黄埔区',
+  '440181': '广东省广州市番禺市',
+  '440182': '广东省广州市花都市',
+  '440183': '广东省广州市增城市',
+  '440184': '广东省广州市从化市',
+  '440200': '广东省韶关市',
+  '440201': '广东省韶关市市辖区',
+  '440202': '广东省韶关市北江区',
+  '440203': '广东省韶关市武江区',
+  '440204': '广东省韶关市浈江区',
+  '440221': '广东省韶关市曲江县',
+  '440222': '广东省韶关市始兴县',
+  '440224': '广东省韶关市仁化县',
+  '440229': '广东省韶关市翁源县',
+  '440232': '广东省韶关市乳源瑶族自治县',
+  '440233': '广东省韶关市新丰县',
+  '440281': '广东省韶关市乐昌市',
+  '440282': '广东省韶关市南雄市',
+  '440300': '广东省深圳市',
+  '440301': '广东省深圳市市辖区',
+  '440303': '广东省深圳市罗湖区',
+  '440304': '广东省深圳市福田区',
+  '440305': '广东省深圳市南山区',
+  '440306': '广东省深圳市宝安区',
+  '440307': '广东省深圳市龙岗区',
+  '440308': '广东省深圳市盐田区',
+  '440400': '广东省珠海市',
+  '440401': '广东省珠海市市辖区',
+  '440402': '广东省珠海市香洲区',
+  '440421': '广东省珠海市斗门县',
+  '440500': '广东省汕头市',
+  '440501': '广东省汕头市市辖区',
+  '440506': '广东省汕头市达濠区',
+  '440507': '广东省汕头市龙湖区',
+  '440508': '广东省汕头市金园区',
+  '440509': '广东省汕头市升平区',
+  '440510': '广东省汕头市河浦区',
+  '440523': '广东省汕头市南澳县',
+  '440582': '广东省汕头市潮阳市',
+  '440583': '广东省汕头市澄海市',
+  '440600': '广东省佛山市',
+  '440601': '广东省佛山市市辖区',
+  '440602': '广东省佛山市城区',
+  '440603': '广东省佛山市石湾区',
+  '440681': '广东省佛山市顺德市',
+  '440682': '广东省佛山市南海市',
+  '440683': '广东省佛山市三水市',
+  '440684': '广东省佛山市高明市',
+  '440700': '广东省江门市',
+  '440701': '广东省江门市市辖区',
+  '440703': '广东省江门市蓬江区',
+  '440704': '广东省江门市江海区',
+  '440781': '广东省江门市台山市',
+  '440782': '广东省江门市新会市',
+  '440783': '广东省江门市开平市',
+  '440784': '广东省江门市鹤山市',
+  '440785': '广东省江门市恩平市',
+  '440800': '广东省湛江市',
+  '440801': '广东省湛江市市辖区',
+  '440802': '广东省湛江市赤坎区',
+  '440803': '广东省湛江市霞山区',
+  '440804': '广东省湛江市坡头区',
+  '440811': '广东省湛江市麻章区',
+  '440823': '广东省湛江市遂溪县',
+  '440825': '广东省湛江市徐闻县',
+  '440881': '广东省湛江市廉江市',
+  '440882': '广东省湛江市雷州市',
+  '440883': '广东省湛江市吴川市',
+  '440900': '广东省茂名市',
+  '440901': '广东省茂名市市辖区',
+  '440902': '广东省茂名市茂南区',
+  '440923': '广东省茂名市电白县',
+  '440981': '广东省茂名市高州市',
+  '440982': '广东省茂名市化州市',
+  '440983': '广东省茂名市信宜市',
+  '441200': '广东省肇庆市',
+  '441201': '广东省肇庆市市辖区',
+  '441202': '广东省肇庆市端州区',
+  '441203': '广东省肇庆市鼎湖区',
+  '441223': '广东省肇庆市广宁县',
+  '441224': '广东省肇庆市怀集县',
+  '441225': '广东省肇庆市封开县',
+  '441226': '广东省肇庆市德庆县',
+  '441283': '广东省肇庆市高要市',
+  '441284': '广东省肇庆市四会市',
+  '441300': '广东省惠州市',
+  '441301': '广东省惠州市市辖区',
+  '441302': '广东省惠州市惠城区',
+  '441322': '广东省惠州市博罗县',
+  '441323': '广东省惠州市惠东县',
+  '441324': '广东省惠州市龙门县',
+  '441381': '广东省惠州市惠阳市',
+  '441400': '广东省梅州市',
+  '441401': '广东省梅州市市辖区',
+  '441402': '广东省梅州市梅江区',
+  '441421': '广东省梅州市梅县',
+  '441422': '广东省梅州市大埔县',
+  '441423': '广东省梅州市丰顺县',
+  '441424': '广东省梅州市五华县',
+  '441426': '广东省梅州市平远县',
+  '441427': '广东省梅州市蕉岭县',
+  '441481': '广东省梅州市兴宁市',
+  '441500': '广东省汕尾市',
+  '441501': '广东省汕尾市市辖区',
+  '441502': '广东省汕尾市城区',
+  '441521': '广东省汕尾市海丰县',
+  '441523': '广东省汕尾市陆河县',
+  '441581': '广东省汕尾市陆丰市',
+  '441600': '广东省河源市',
+  '441601': '广东省河源市市辖区',
+  '441602': '广东省河源市源城区',
+  '441621': '广东省河源市紫金县',
+  '441622': '广东省河源市龙川县',
+  '441623': '广东省河源市连平县',
+  '441624': '广东省河源市和平县',
+  '441625': '广东省河源市东源县',
+  '441700': '广东省阳江市',
+  '441701': '广东省阳江市市辖区',
+  '441702': '广东省阳江市江城区',
+  '441721': '广东省阳江市阳西县',
+  '441723': '广东省阳江市阳东县',
+  '441781': '广东省阳江市阳春市',
+  '441800': '广东省清远市',
+  '441801': '广东省清远市市辖区',
+  '441802': '广东省清远市清城区',
+  '441821': '广东省清远市佛冈县',
+  '441823': '广东省清远市阳山县',
+  '441825': '广东省清远市连山壮族瑶族自治县',
+  '441826': '广东省清远市连南瑶族自治县',
+  '441827': '广东省清远市清新县',
+  '441881': '广东省清远市英德市',
+  '441882': '广东省清远市连州市',
+  '441900': '广东省东莞市',
+  '441901': '广东省东莞市市辖区',
+  '442000': '广东省中山市',
+  '442001': '广东省中山市市辖区',
+  '445100': '广东省潮州市',
+  '445101': '广东省潮州市市辖区',
+  '445102': '广东省潮州市湘桥区',
+  '445121': '广东省潮州市潮安县',
+  '445122': '广东省潮州市饶平县',
+  '445200': '广东省揭阳市',
+  '445201': '广东省揭阳市市辖区',
+  '445202': '广东省揭阳市榕城区',
+  '445221': '广东省揭阳市揭东县',
+  '445222': '广东省揭阳市揭西县',
+  '445224': '广东省揭阳市惠来县',
+  '445281': '广东省揭阳市普宁市',
+  '445300': '广东省云浮市',
+  '445301': '广东省云浮市市辖区',
+  '445302': '广东省云浮市云城区',
+  '445321': '广东省云浮市新兴县',
+  '445322': '广东省云浮市郁南县',
+  '445323': '广东省云浮市云安县',
+  '445381': '广东省云浮市罗定市',
+  '450000': '广西壮族自治区',
+  '450100': '广西壮族自治区南宁市',
+  '450101': '广西壮族自治区南宁市市辖区',
+  '450102': '广西壮族自治区南宁市兴宁区',
+  '450103': '广西壮族自治区南宁市新城区',
+  '450104': '广西壮族自治区南宁市城北区',
+  '450105': '广西壮族自治区南宁市江南区',
+  '450106': '广西壮族自治区南宁市永新区',
+  '450111': '广西壮族自治区南宁市市郊区',
+  '450121': '广西壮族自治区南宁市邕宁县',
+  '450122': '广西壮族自治区南宁市武鸣县',
+  '450200': '广西壮族自治区柳州市',
+  '450201': '广西壮族自治区柳州市市辖区',
+  '450202': '广西壮族自治区柳州市城中区',
+  '450203': '广西壮族自治区柳州市鱼峰区',
+  '450204': '广西壮族自治区柳州市柳南区',
+  '450205': '广西壮族自治区柳州市柳北区',
+  '450211': '广西壮族自治区柳州市市郊区',
+  '450221': '广西壮族自治区柳州市柳江县',
+  '450222': '广西壮族自治区柳州市柳城县',
+  '450300': '广西壮族自治区桂林市',
+  '450301': '广西壮族自治区桂林市市辖区',
+  '450302': '广西壮族自治区桂林市秀峰区',
+  '450303': '广西壮族自治区桂林市叠彩区',
+  '450304': '广西壮族自治区桂林市象山区',
+  '450305': '广西壮族自治区桂林市七星区',
+  '450311': '广西壮族自治区桂林市雁山区',
+  '450321': '广西壮族自治区桂林市阳朔县',
+  '450322': '广西壮族自治区桂林市临桂县',
+  '450323': '广西壮族自治区桂林市灵川县',
+  '450324': '广西壮族自治区桂林市全州县',
+  '450325': '广西壮族自治区桂林市兴安县',
+  '450326': '广西壮族自治区桂林市永福县',
+  '450327': '广西壮族自治区桂林市灌阳县',
+  '450328': '广西壮族自治区桂林市龙胜各族自治县',
+  '450329': '广西壮族自治区桂林市资源县',
+  '450330': '广西壮族自治区桂林市平乐县',
+  '450331': '广西壮族自治区桂林市荔浦县',
+  '450332': '广西壮族自治区桂林市恭城瑶族自治县',
+  '450400': '广西壮族自治区梧州市',
+  '450401': '广西壮族自治区梧州市市辖区',
+  '450403': '广西壮族自治区梧州市万秀区',
+  '450404': '广西壮族自治区梧州市蝶山区',
+  '450411': '广西壮族自治区梧州市市郊区',
+  '450421': '广西壮族自治区梧州市苍梧县',
+  '450422': '广西壮族自治区梧州市藤县',
+  '450423': '广西壮族自治区梧州市蒙山县',
+  '450481': '广西壮族自治区梧州市岑溪市',
+  '450500': '广西壮族自治区北海市',
+  '450501': '广西壮族自治区北海市市辖区',
+  '450502': '广西壮族自治区北海市海城区',
+  '450503': '广西壮族自治区北海市银海区',
+  '450512': '广西壮族自治区北海市铁山港区',
+  '450521': '广西壮族自治区北海市合浦县',
+  '450600': '广西壮族自治区防城港市',
+  '450601': '广西壮族自治区防城港市市辖区',
+  '450602': '广西壮族自治区防城港市港口区',
+  '450603': '广西壮族自治区防城港市防城区',
+  '450621': '广西壮族自治区防城港市上思县',
+  '450681': '广西壮族自治区防城港市东兴市',
+  '450700': '广西壮族自治区钦州市',
+  '450701': '广西壮族自治区钦州市市辖区',
+  '450702': '广西壮族自治区钦州市钦南区',
+  '450703': '广西壮族自治区钦州市钦北区',
+  '450721': '广西壮族自治区钦州市灵山县',
+  '450722': '广西壮族自治区钦州市浦北县',
+  '450800': '广西壮族自治区贵港市',
+  '450801': '广西壮族自治区贵港市市辖区',
+  '450802': '广西壮族自治区贵港市港北区',
+  '450803': '广西壮族自治区贵港市港南区',
+  '450821': '广西壮族自治区贵港市平南县',
+  '450881': '广西壮族自治区贵港市桂平市',
+  '450900': '广西壮族自治区玉林市',
+  '450901': '广西壮族自治区玉林市市辖区',
+  '450902': '广西壮族自治区玉林市玉州区',
+  '450921': '广西壮族自治区玉林市容县',
+  '450922': '广西壮族自治区玉林市陆川县',
+  '450923': '广西壮族自治区玉林市博白县',
+  '450924': '广西壮族自治区玉林市兴业县',
+  '450981': '广西壮族自治区玉林市北流市',
+  '452100': '广西壮族自治区南宁地区',
+  '452101': '广西壮族自治区南宁地区凭祥市',
+  '452122': '广西壮族自治区南宁地区横县',
+  '452123': '广西壮族自治区南宁地区宾阳县',
+  '452124': '广西壮族自治区南宁地区上林县',
+  '452126': '广西壮族自治区南宁地区隆安县',
+  '452127': '广西壮族自治区南宁地区马山县',
+  '452128': '广西壮族自治区南宁地区扶绥县',
+  '452129': '广西壮族自治区南宁地区崇左县',
+  '452130': '广西壮族自治区南宁地区大新县',
+  '452131': '广西壮族自治区南宁地区天等县',
+  '452132': '广西壮族自治区南宁地区宁明县',
+  '452133': '广西壮族自治区南宁地区龙州县',
+  '452200': '广西壮族自治区柳州地区',
+  '452201': '广西壮族自治区柳州地区合山市',
+  '452223': '广西壮族自治区柳州地区鹿寨县',
+  '452224': '广西壮族自治区柳州地区象州县',
+  '452225': '广西壮族自治区柳州地区武宣县',
+  '452226': '广西壮族自治区柳州地区来宾县',
+  '452227': '广西壮族自治区柳州地区融安县',
+  '452228': '广西壮族自治区柳州地区三江侗族自治县',
+  '452229': '广西壮族自治区柳州地区融水苗族自治县',
+  '452230': '广西壮族自治区柳州地区金秀瑶族自治县',
+  '452231': '广西壮族自治区柳州地区忻城县',
+  '452400': '广西壮族自治区贺州地区',
+  '452402': '广西壮族自治区贺州地区贺州市',
+  '452424': '广西壮族自治区贺州地区昭平县',
+  '452427': '广西壮族自治区贺州地区钟山县',
+  '452428': '广西壮族自治区贺州地区富川瑶族自治县',
+  '452600': '广西壮族自治区百色地区',
+  '452601': '广西壮族自治区百色地区百色市',
+  '452622': '广西壮族自治区百色地区田阳县',
+  '452623': '广西壮族自治区百色地区田东县',
+  '452624': '广西壮族自治区百色地区平果县',
+  '452625': '广西壮族自治区百色地区德保县',
+  '452626': '广西壮族自治区百色地区靖西县',
+  '452627': '广西壮族自治区百色地区那坡县',
+  '452628': '广西壮族自治区百色地区凌云县',
+  '452629': '广西壮族自治区百色地区乐业县',
+  '452630': '广西壮族自治区百色地区田林县',
+  '452631': '广西壮族自治区百色地区隆林各族自治县',
+  '452632': '广西壮族自治区百色地区西林县',
+  '452700': '广西壮族自治区河池地区',
+  '452701': '广西壮族自治区河池地区河池市',
+  '452702': '广西壮族自治区河池地区宜州市',
+  '452723': '广西壮族自治区河池地区罗城仫佬族自治县',
+  '452724': '广西壮族自治区河池地区环江毛南族自治县',
+  '452725': '广西壮族自治区河池地区南丹县',
+  '452726': '广西壮族自治区河池地区天峨县',
+  '452727': '广西壮族自治区河池地区凤山县',
+  '452728': '广西壮族自治区河池地区东兰县',
+  '452729': '广西壮族自治区河池地区巴马瑶族自治县',
+  '452730': '广西壮族自治区河池地区都安瑶族自治县',
+  '452731': '广西壮族自治区河池地区大化瑶族自治县',
+  '460000': '海南省',
+  '460001': '海南省三亚市通什市',
+  '460002': '海南省三亚市琼海市',
+  '460003': '海南省三亚市儋州市',
+  '460004': '海南省三亚市琼山市',
+  '460005': '海南省三亚市文昌市',
+  '460006': '海南省三亚市万宁市',
+  '460007': '海南省三亚市东方市',
+  '460025': '海南省三亚市定安县',
+  '460026': '海南省三亚市屯昌县',
+  '460027': '海南省三亚市澄迈县',
+  '460028': '海南省三亚市临高县',
+  '460030': '海南省三亚市白沙黎族自治县',
+  '460031': '海南省三亚市昌江黎族自治县',
+  '460033': '海南省三亚市乐东黎族自治县',
+  '460034': '海南省三亚市陵水黎族自治县',
+  '460035': '海南省三亚市保亭黎族苗族自治县',
+  '460036': '海南省三亚市琼中黎族苗族自治县',
+  '460037': '海南省西沙群岛',
+  '460038': '海南省南沙群岛',
+  '460039': '海南省中沙群岛的岛礁及其海域',
+  '460100': '海南省海口市',
+  '460101': '海南省海口市市辖区',
+  '460102': '海南省海口市振东区',
+  '460103': '海南省海口市新华区',
+  '460104': '海南省海口市秀英区',
+  '460200': '海南省三亚市',
+  '460201': '海南省三亚市市辖区',
+  '500000': '重庆市',
+  '500100': '重庆市市辖区',
+  '500101': '重庆市万州区',
+  '500102': '重庆市涪陵区',
+  '500103': '重庆市渝中区',
+  '500104': '重庆市大渡口区',
+  '500105': '重庆市江北区',
+  '500106': '重庆市沙坪坝区',
+  '500107': '重庆市九龙坡区',
+  '500108': '重庆市南岸区',
+  '500109': '重庆市北碚区',
+  '500110': '重庆市万盛区',
+  '500111': '重庆市双桥区',
+  '500112': '重庆市渝北区',
+  '500113': '重庆市巴南区',
+  '500200': '重庆市县',
+  '500221': '重庆市长寿县',
+  '500222': '重庆市綦江县',
+  '500223': '重庆市潼南县',
+  '500224': '重庆市铜梁县',
+  '500225': '重庆市大足县',
+  '500226': '重庆市荣昌县',
+  '500227': '重庆市璧山县',
+  '500228': '重庆市梁平县',
+  '500229': '重庆市城口县',
+  '500230': '重庆市丰都县',
+  '500231': '重庆市垫江县',
+  '500232': '重庆市武隆县',
+  '500233': '重庆市忠县',
+  '500234': '重庆市开县',
+  '500235': '重庆市云阳县',
+  '500236': '重庆市奉节县',
+  '500237': '重庆市巫山县',
+  '500238': '重庆市巫溪县',
+  '500239': '重庆市黔江土家族苗族自治县',
+  '500240': '重庆市石柱土家族自治县',
+  '500241': '重庆市秀山土家族苗族自治县',
+  '500242': '重庆市酉阳土家族苗族自治县',
+  '500243': '重庆市彭水苗族土家族自治县',
+  '500300': '重庆市(市)',
+  '500381': '重庆市江津市',
+  '500382': '重庆市合川市',
+  '500383': '重庆市永川市',
+  '500384': '重庆市南川市',
+  '510000': '四川省',
+  '510100': '四川省成都市',
+  '510101': '四川省成都市市辖区',
+  '510104': '四川省成都市锦江区',
+  '510105': '四川省成都市青羊区',
+  '510106': '四川省成都市金牛区',
+  '510107': '四川省成都市武侯区',
+  '510108': '四川省成都市成华区',
+  '510112': '四川省成都市龙泉驿区',
+  '510113': '四川省成都市青白江区',
+  '510121': '四川省成都市金堂县',
+  '510122': '四川省成都市双流县',
+  '510123': '四川省成都市温江县',
+  '510124': '四川省成都市郫县',
+  '510125': '四川省成都市新都县',
+  '510129': '四川省成都市大邑县',
+  '510131': '四川省成都市蒲江县',
+  '510132': '四川省成都市新津县',
+  '510181': '四川省成都市都江堰市',
+  '510182': '四川省成都市彭州市',
+  '510183': '四川省成都市邛崃市',
+  '510184': '四川省成都市崇州市',
+  '510300': '四川省自贡市',
+  '510301': '四川省自贡市市辖区',
+  '510302': '四川省自贡市自流井区',
+  '510303': '四川省自贡市贡井区',
+  '510304': '四川省自贡市大安区',
+  '510311': '四川省自贡市沿滩区',
+  '510321': '四川省自贡市荣县',
+  '510322': '四川省自贡市富顺县',
+  '510400': '四川省攀枝花市',
+  '510401': '四川省攀枝花市市辖区',
+  '510402': '四川省攀枝花市东区',
+  '510403': '四川省攀枝花市西区',
+  '510411': '四川省攀枝花市仁和区',
+  '510421': '四川省攀枝花市米易县',
+  '510422': '四川省攀枝花市盐边县',
+  '510500': '四川省泸州市',
+  '510501': '四川省泸州市市辖区',
+  '510502': '四川省泸州市江阳区',
+  '510503': '四川省泸州市纳溪区',
+  '510504': '四川省泸州市龙马潭区',
+  '510521': '四川省泸州市泸县',
+  '510522': '四川省泸州市合江县',
+  '510524': '四川省泸州市叙永县',
+  '510525': '四川省泸州市古蔺县',
+  '510600': '四川省德阳市',
+  '510601': '四川省德阳市市辖区',
+  '510603': '四川省德阳市旌阳区',
+  '510623': '四川省德阳市中江县',
+  '510626': '四川省德阳市罗江县',
+  '510681': '四川省德阳市广汉市',
+  '510682': '四川省德阳市什邡市',
+  '510683': '四川省德阳市绵竹市',
+  '510700': '四川省绵阳市',
+  '510701': '四川省绵阳市市辖区',
+  '510703': '四川省绵阳市涪城区',
+  '510704': '四川省绵阳市游仙区',
+  '510722': '四川省绵阳市三台县',
+  '510723': '四川省绵阳市盐亭县',
+  '510724': '四川省绵阳市安县',
+  '510725': '四川省绵阳市梓潼县',
+  '510726': '四川省绵阳市北川县',
+  '510727': '四川省绵阳市平武县',
+  '510781': '四川省绵阳市江油市',
+  '510800': '四川省广元市',
+  '510801': '四川省广元市市辖区',
+  '510802': '四川省广元市市中区',
+  '510811': '四川省广元市元坝区',
+  '510812': '四川省广元市朝天区',
+  '510821': '四川省广元市旺苍县',
+  '510822': '四川省广元市青川县',
+  '510823': '四川省广元市剑阁县',
+  '510824': '四川省广元市苍溪县',
+  '510900': '四川省遂宁市',
+  '510901': '四川省遂宁市市辖区',
+  '510902': '四川省遂宁市市中区',
+  '510921': '四川省遂宁市蓬溪县',
+  '510922': '四川省遂宁市射洪县',
+  '510923': '四川省遂宁市大英县',
+  '511000': '四川省内江市',
+  '511001': '四川省内江市市辖区',
+  '511002': '四川省内江市市中区',
+  '511011': '四川省内江市东兴区',
+  '511024': '四川省内江市威远县',
+  '511025': '四川省内江市资中县',
+  '511028': '四川省内江市隆昌县',
+  '511100': '四川省乐山市',
+  '511101': '四川省乐山市市辖区',
+  '511102': '四川省乐山市市中区',
+  '511111': '四川省乐山市沙湾区',
+  '511112': '四川省乐山市五通桥区',
+  '511113': '四川省乐山市金口河区',
+  '511123': '四川省乐山市犍为县',
+  '511124': '四川省乐山市井研县',
+  '511126': '四川省乐山市夹江县',
+  '511129': '四川省乐山市沐川县',
+  '511132': '四川省乐山市峨边彝族自治县',
+  '511133': '四川省乐山市马边彝族自治县',
+  '511181': '四川省乐山市峨眉山市',
+  '511300': '四川省南充市',
+  '511301': '四川省南充市市辖区',
+  '511302': '四川省南充市顺庆区',
+  '511303': '四川省南充市高坪区',
+  '511304': '四川省南充市嘉陵区',
+  '511321': '四川省南充市南部县',
+  '511322': '四川省南充市营山县',
+  '511323': '四川省南充市蓬安县',
+  '511324': '四川省南充市仪陇县',
+  '511325': '四川省南充市西充县',
+  '511381': '四川省南充市阆中市',
+  '511500': '四川省宜宾市',
+  '511501': '四川省宜宾市市辖区',
+  '511502': '四川省宜宾市翠屏区',
+  '511521': '四川省宜宾市宜宾县',
+  '511522': '四川省宜宾市南溪县',
+  '511523': '四川省宜宾市江安县',
+  '511524': '四川省宜宾市长宁县',
+  '511525': '四川省宜宾市高县',
+  '511526': '四川省宜宾市珙县',
+  '511527': '四川省宜宾市筠连县',
+  '511528': '四川省宜宾市兴文县',
+  '511529': '四川省宜宾市屏山县',
+  '511600': '四川省广安市',
+  '511601': '四川省广安市市辖区',
+  '511602': '四川省广安市广安区',
+  '511621': '四川省广安市岳池县',
+  '511622': '四川省广安市武胜县',
+  '511623': '四川省广安市邻水县',
+  '511681': '四川省广安市华蓥市',
+  '513000': '四川省达川地区',
+  '513001': '四川省达川地区达川市',
+  '513002': '四川省达川地区万源市',
+  '513021': '四川省达川地区达县',
+  '513022': '四川省达川地区宣汉县',
+  '513023': '四川省达川地区开江县',
+  '513029': '四川省达川地区大竹县',
+  '513030': '四川省达川地区渠县',
+  '513100': '四川省雅安地区',
+  '513101': '四川省雅安地区雅安市',
+  '513122': '四川省雅安地区名山县',
+  '513123': '四川省雅安地区荥经县',
+  '513124': '四川省雅安地区汉源县',
+  '513125': '四川省雅安地区石棉县',
+  '513126': '四川省雅安地区天全县',
+  '513127': '四川省雅安地区芦山县',
+  '513128': '四川省雅安地区宝兴县',
+  '513200': '四川省阿坝藏族羌族自治州',
+  '513221': '四川省阿坝藏族羌族自治州汶川县',
+  '513222': '四川省阿坝藏族羌族自治州理县',
+  '513223': '四川省阿坝藏族羌族自治州茂县',
+  '513224': '四川省阿坝藏族羌族自治州松潘县',
+  '513225': '四川省阿坝藏族羌族自治州九寨沟县',
+  '513226': '四川省阿坝藏族羌族自治州金川县',
+  '513227': '四川省阿坝藏族羌族自治州小金县',
+  '513228': '四川省阿坝藏族羌族自治州黑水县',
+  '513229': '四川省阿坝藏族羌族自治州马尔康县',
+  '513230': '四川省阿坝藏族羌族自治州壤塘县',
+  '513231': '四川省阿坝藏族羌族自治州阿坝县',
+  '513232': '四川省阿坝藏族羌族自治州若尔盖县',
+  '513233': '四川省阿坝藏族羌族自治州红原县',
+  '513300': '四川省甘孜藏族自治州',
+  '513321': '四川省甘孜藏族自治州康定县',
+  '513322': '四川省甘孜藏族自治州泸定县',
+  '513323': '四川省甘孜藏族自治州丹巴县',
+  '513324': '四川省甘孜藏族自治州九龙县',
+  '513325': '四川省甘孜藏族自治州雅江县',
+  '513326': '四川省甘孜藏族自治州道孚县',
+  '513327': '四川省甘孜藏族自治州炉霍县',
+  '513328': '四川省甘孜藏族自治州甘孜县',
+  '513329': '四川省甘孜藏族自治州新龙县',
+  '513330': '四川省甘孜藏族自治州德格县',
+  '513331': '四川省甘孜藏族自治州白玉县',
+  '513332': '四川省甘孜藏族自治州石渠县',
+  '513333': '四川省甘孜藏族自治州色达县',
+  '513334': '四川省甘孜藏族自治州理塘县',
+  '513335': '四川省甘孜藏族自治州巴塘县',
+  '513336': '四川省甘孜藏族自治州乡城县',
+  '513337': '四川省甘孜藏族自治州稻城县',
+  '513338': '四川省甘孜藏族自治州得荣县',
+  '513400': '四川省凉山彝族自治州',
+  '513401': '四川省凉山彝族自治州西昌市',
+  '513422': '四川省凉山彝族自治州木里藏族自治县',
+  '513423': '四川省凉山彝族自治州盐源县',
+  '513424': '四川省凉山彝族自治州德昌县',
+  '513425': '四川省凉山彝族自治州会理县',
+  '513426': '四川省凉山彝族自治州会东县',
+  '513427': '四川省凉山彝族自治州宁南县',
+  '513428': '四川省凉山彝族自治州普格县',
+  '513429': '四川省凉山彝族自治州布拖县',
+  '513430': '四川省凉山彝族自治州金阳县',
+  '513431': '四川省凉山彝族自治州昭觉县',
+  '513432': '四川省凉山彝族自治州喜德县',
+  '513433': '四川省凉山彝族自治州冕宁县',
+  '513434': '四川省凉山彝族自治州越西县',
+  '513435': '四川省凉山彝族自治州甘洛县',
+  '513436': '四川省凉山彝族自治州美姑县',
+  '513437': '四川省凉山彝族自治州雷波县',
+  '513700': '四川省巴中地区',
+  '513701': '四川省巴中地区巴中市',
+  '513721': '四川省巴中地区通江县',
+  '513722': '四川省巴中地区南江县',
+  '513723': '四川省巴中地区平昌县',
+  '513800': '四川省眉山地区',
+  '513821': '四川省眉山地区眉山县',
+  '513822': '四川省眉山地区仁寿县',
+  '513823': '四川省眉山地区彭山县',
+  '513824': '四川省眉山地区洪雅县',
+  '513825': '四川省眉山地区丹棱县',
+  '513826': '四川省眉山地区青神县',
+  '513900': '四川省眉山地区资阳地区',
+  '513901': '四川省眉山地区资阳市',
+  '513902': '四川省眉山地区简阳市',
+  '513921': '四川省眉山地区安岳县',
+  '513922': '四川省眉山地区乐至县',
+  '520000': '贵州省',
+  '520100': '贵州省贵阳市',
+  '520101': '贵州省贵阳市市辖区',
+  '520102': '贵州省贵阳市南明区',
+  '520103': '贵州省贵阳市云岩区',
+  '520111': '贵州省贵阳市花溪区',
+  '520112': '贵州省贵阳市乌当区',
+  '520113': '贵州省贵阳市白云区',
+  '520121': '贵州省贵阳市开阳县',
+  '520122': '贵州省贵阳市息烽县',
+  '520123': '贵州省贵阳市修文县',
+  '520181': '贵州省贵阳市清镇市',
+  '520200': '贵州省六盘水市',
+  '520201': '贵州省六盘水市钟山区',
+  '520202': '贵州省六盘水市盘县特区',
+  '520203': '贵州省六盘水市六枝特区',
+  '520221': '贵州省六盘水市水城县',
+  '520300': '贵州省遵义市',
+  '520301': '贵州省遵义市市辖区',
+  '520302': '贵州省遵义市红花岗区',
+  '520321': '贵州省遵义市遵义县',
+  '520322': '贵州省遵义市桐梓县',
+  '520323': '贵州省遵义市绥阳县',
+  '520324': '贵州省遵义市正安县',
+  '520325': '贵州省遵义市道真仡佬族苗族自治县',
+  '520326': '贵州省遵义市务川仡佬族苗族自治县',
+  '520327': '贵州省遵义市凤冈县',
+  '520328': '贵州省遵义市湄潭县',
+  '520329': '贵州省遵义市余庆县',
+  '520330': '贵州省遵义市习水县',
+  '520381': '贵州省遵义市赤水市',
+  '520382': '贵州省遵义市仁怀市',
+  '522200': '贵州省铜仁地区',
+  '522201': '贵州省铜仁地区铜仁市',
+  '522222': '贵州省铜仁地区江口县',
+  '522223': '贵州省铜仁地区玉屏侗族自治县',
+  '522224': '贵州省铜仁地区石阡县',
+  '522225': '贵州省铜仁地区思南县',
+  '522226': '贵州省铜仁地区印江土家族苗族自治县',
+  '522227': '贵州省铜仁地区德江县',
+  '522228': '贵州省铜仁地区沿河土家族自治县',
+  '522229': '贵州省铜仁地区松桃苗族自治县',
+  '522230': '贵州省铜仁地区万山特区',
+  '522300': '贵州省黔西南布依族苗族自治州',
+  '522301': '贵州省黔西南布依族苗族自治州兴义市',
+  '522322': '贵州省黔西南布依族苗族自治州兴仁县',
+  '522323': '贵州省黔西南布依族苗族自治州普安县',
+  '522324': '贵州省黔西南布依族苗族自治州晴隆县',
+  '522325': '贵州省黔西南布依族苗族自治州贞丰县',
+  '522326': '贵州省黔西南布依族苗族自治州望谟县',
+  '522327': '贵州省黔西南布依族苗族自治州册亨县',
+  '522328': '贵州省黔西南布依族苗族自治州安龙县',
+  '522400': '贵州省毕节地区',
+  '522401': '贵州省毕节地区毕节市',
+  '522422': '贵州省毕节地区大方县',
+  '522423': '贵州省毕节地区黔西县',
+  '522424': '贵州省毕节地区金沙县',
+  '522425': '贵州省毕节地区织金县',
+  '522426': '贵州省毕节地区纳雍县',
+  '522427': '贵州省毕节地区威宁彝族回族苗族自治县',
+  '522428': '贵州省毕节地区赫章县',
+  '522500': '贵州省安顺地区',
+  '522501': '贵州省安顺地区安顺市',
+  '522526': '贵州省安顺地区平坝县',
+  '522527': '贵州省安顺地区普定县',
+  '522528': '贵州省安顺地区关岭布依族苗族自治县',
+  '522529': '贵州省安顺地区镇宁布依族苗族自治县',
+  '522530': '贵州省安顺地区紫云苗族布依族自治县',
+  '522600': '贵州省黔东南苗族侗族自治州',
+  '522601': '贵州省黔东南苗族侗族自治州凯里市',
+  '522622': '贵州省黔东南苗族侗族自治州黄平县',
+  '522623': '贵州省黔东南苗族侗族自治州施秉县',
+  '522624': '贵州省黔东南苗族侗族自治州三穗县',
+  '522625': '贵州省黔东南苗族侗族自治州镇远县',
+  '522626': '贵州省黔东南苗族侗族自治州岑巩县',
+  '522627': '贵州省黔东南苗族侗族自治州天柱县',
+  '522628': '贵州省黔东南苗族侗族自治州锦屏县',
+  '522629': '贵州省黔东南苗族侗族自治州剑河县',
+  '522630': '贵州省黔东南苗族侗族自治州台江县',
+  '522631': '贵州省黔东南苗族侗族自治州黎平县',
+  '522632': '贵州省黔东南苗族侗族自治州榕江县',
+  '522633': '贵州省黔东南苗族侗族自治州从江县',
+  '522634': '贵州省黔东南苗族侗族自治州雷山县',
+  '522635': '贵州省黔东南苗族侗族自治州麻江县',
+  '522636': '贵州省黔东南苗族侗族自治州丹寨县',
+  '522700': '贵州省黔南布依族苗族自治州',
+  '522701': '贵州省黔南布依族苗族自治州都匀市',
+  '522702': '贵州省黔南布依族苗族自治州福泉市',
+  '522722': '贵州省黔南布依族苗族自治州荔波县',
+  '522723': '贵州省黔南布依族苗族自治州贵定县',
+  '522725': '贵州省黔南布依族苗族自治州瓮安县',
+  '522726': '贵州省黔南布依族苗族自治州独山县',
+  '522727': '贵州省黔南布依族苗族自治州平塘县',
+  '522728': '贵州省黔南布依族苗族自治州罗甸县',
+  '522729': '贵州省黔南布依族苗族自治州长顺县',
+  '522730': '贵州省黔南布依族苗族自治州龙里县',
+  '522731': '贵州省黔南布依族苗族自治州惠水县',
+  '522732': '贵州省黔南布依族苗族自治州三都水族自治县',
+  '530000': '云南省',
+  '530100': '云南省昆明市',
+  '530101': '云南省昆明市市辖区',
+  '530102': '云南省昆明市五华区',
+  '530103': '云南省昆明市盘龙区',
+  '530111': '云南省昆明市官渡区',
+  '530112': '云南省昆明市西山区',
+  '530113': '云南省昆明市东川区',
+  '530121': '云南省昆明市呈贡县',
+  '530122': '云南省昆明市晋宁县',
+  '530124': '云南省昆明市富民县',
+  '530125': '云南省昆明市宜良县',
+  '530126': '云南省昆明市石林彝族自治县',
+  '530127': '云南省昆明市嵩明县',
+  '530128': '云南省昆明市禄劝彝族苗族自治县',
+  '530129': '云南省昆明市寻甸回族彝族自治县',
+  '530181': '云南省昆明市安宁市',
+  '530300': '云南省曲靖市',
+  '530301': '云南省曲靖市市辖区',
+  '530302': '云南省曲靖市麒麟区',
+  '530321': '云南省曲靖市马龙县',
+  '530322': '云南省曲靖市陆良县',
+  '530323': '云南省曲靖市师宗县',
+  '530324': '云南省曲靖市罗平县',
+  '530325': '云南省曲靖市富源县',
+  '530326': '云南省曲靖市会泽县',
+  '530328': '云南省曲靖市沾益县',
+  '530381': '云南省曲靖市宣威市',
+  '530400': '云南省玉溪市',
+  '530401': '云南省玉溪市市辖区',
+  '530402': '云南省玉溪市红塔区',
+  '530421': '云南省玉溪市江川县',
+  '530422': '云南省玉溪市澄江县',
+  '530423': '云南省玉溪市通海县',
+  '530424': '云南省玉溪市华宁县',
+  '530425': '云南省玉溪市易门县',
+  '530426': '云南省玉溪市峨山彝族自治县',
+  '530427': '云南省玉溪市新平彝族傣族自治县',
+  '530428': '云南省玉溪市元江哈尼族彝族傣族自治县',
+  '532100': '云南省昭通地区',
+  '532101': '云南省昭通地区昭通市',
+  '532122': '云南省昭通地区鲁甸县',
+  '532123': '云南省昭通地区巧家县',
+  '532124': '云南省昭通地区盐津县',
+  '532125': '云南省昭通地区大关县',
+  '532126': '云南省昭通地区永善县',
+  '532127': '云南省昭通地区绥江县',
+  '532128': '云南省昭通地区镇雄县',
+  '532129': '云南省昭通地区彝良县',
+  '532130': '云南省昭通地区威信县',
+  '532131': '云南省昭通地区水富县',
+  '532300': '云南省楚雄彝族自治州',
+  '532301': '云南省楚雄彝族自治州楚雄市',
+  '532322': '云南省楚雄彝族自治州双柏县',
+  '532323': '云南省楚雄彝族自治州牟定县',
+  '532324': '云南省楚雄彝族自治州南华县',
+  '532325': '云南省楚雄彝族自治州姚安县',
+  '532326': '云南省楚雄彝族自治州大姚县',
+  '532327': '云南省楚雄彝族自治州永仁县',
+  '532328': '云南省楚雄彝族自治州元谋县',
+  '532329': '云南省楚雄彝族自治州武定县',
+  '532331': '云南省楚雄彝族自治州禄丰县',
+  '532500': '云南省红河哈尼族彝族自治州',
+  '532501': '云南省红河哈尼族彝族自治州个旧市',
+  '532502': '云南省红河哈尼族彝族自治州开远市',
+  '532522': '云南省红河哈尼族彝族自治州蒙自县',
+  '532523': '云南省红河哈尼族彝族自治州屏边苗族自治县',
+  '532524': '云南省红河哈尼族彝族自治州建水县',
+  '532525': '云南省红河哈尼族彝族自治州石屏县',
+  '532526': '云南省红河哈尼族彝族自治州弥勒县',
+  '532527': '云南省红河哈尼族彝族自治州泸西县',
+  '532528': '云南省红河哈尼族彝族自治州元阳县',
+  '532529': '云南省红河哈尼族彝族自治州红河县',
+  '532530': '云南省红河哈尼族彝族自治州金平苗族瑶族傣族自治县',
+  '532531': '云南省红河哈尼族彝族自治州绿春县',
+  '532532': '云南省红河哈尼族彝族自治州河口瑶族自治县',
+  '532600': '云南省文山壮族苗族自治州',
+  '532621': '云南省文山壮族苗族自治州文山县',
+  '532622': '云南省文山壮族苗族自治州砚山县',
+  '532623': '云南省文山壮族苗族自治州西畴县',
+  '532624': '云南省文山壮族苗族自治州麻栗坡县',
+  '532625': '云南省文山壮族苗族自治州马关县',
+  '532626': '云南省文山壮族苗族自治州丘北县',
+  '532627': '云南省文山壮族苗族自治州广南县',
+  '532628': '云南省文山壮族苗族自治州富宁县',
+  '532700': '云南省思茅地区',
+  '532701': '云南省思茅地区思茅市',
+  '532722': '云南省思茅地区普洱哈尼族彝族自治县',
+  '532723': '云南省思茅地区墨江哈尼族自治县',
+  '532724': '云南省思茅地区景东彝族自治县',
+  '532725': '云南省思茅地区景谷傣族彝族自治县',
+  '532726': '云南省思茅地区镇沅彝族哈尼族拉祜族自治县',
+  '532727': '云南省思茅地区江城哈尼族彝族自治县',
+  '532728': '云南省思茅地区孟连傣族拉祜族佤族自治县',
+  '532729': '云南省思茅地区澜沧拉祜族自治县',
+  '532730': '云南省思茅地区西盟佤族自治县',
+  '532800': '云南省西双版纳傣族自治州',
+  '532801': '云南省西双版纳傣族自治州景洪市',
+  '532822': '云南省西双版纳傣族自治州勐海县',
+  '532823': '云南省西双版纳傣族自治州勐腊县',
+  '532900': '云南省大理白族自治州',
+  '532901': '云南省大理白族自治州大理市',
+  '532922': '云南省大理白族自治州漾濞彝族自治县',
+  '532923': '云南省大理白族自治州祥云县',
+  '532924': '云南省大理白族自治州宾川县',
+  '532925': '云南省大理白族自治州弥渡县',
+  '532926': '云南省大理白族自治州南涧彝族自治县',
+  '532927': '云南省大理白族自治州巍山彝族回族自治县',
+  '532928': '云南省大理白族自治州永平县',
+  '532929': '云南省大理白族自治州云龙县',
+  '532930': '云南省大理白族自治州洱源县',
+  '532931': '云南省大理白族自治州剑川县',
+  '532932': '云南省大理白族自治州鹤庆县',
+  '533000': '云南省保山地区',
+  '533001': '云南省保山地区保山市',
+  '533022': '云南省保山地区施甸县',
+  '533023': '云南省保山地区腾冲县',
+  '533024': '云南省保山地区龙陵县',
+  '533025': '云南省保山地区昌宁县',
+  '533100': '云南省德宏傣族景颇族自治州',
+  '533101': '云南省德宏傣族景颇族自治州畹町市',
+  '533102': '云南省德宏傣族景颇族自治州瑞丽市',
+  '533103': '云南省德宏傣族景颇族自治州潞西市',
+  '533122': '云南省德宏傣族景颇族自治州梁河县',
+  '533123': '云南省德宏傣族景颇族自治州盈江县',
+  '533124': '云南省德宏傣族景颇族自治州陇川县',
+  '533200': '云南省丽江地区',
+  '533221': '云南省丽江地区丽江纳西族自治县',
+  '533222': '云南省丽江地区永胜县',
+  '533223': '云南省丽江地区华坪县',
+  '533224': '云南省丽江地区宁蒗彝族自治县',
+  '533300': '云南省怒江傈僳族自治州',
+  '533321': '云南省怒江傈僳族自治州泸水县',
+  '533323': '云南省怒江傈僳族自治州福贡县',
+  '533324': '云南省怒江傈僳族自治州贡山独龙族怒族自治县',
+  '533325': '云南省怒江傈僳族自治州兰坪白族普米族自治县',
+  '533400': '云南省迪庆藏族自治州',
+  '533421': '云南省迪庆藏族自治州中甸县',
+  '533422': '云南省迪庆藏族自治州德钦县',
+  '533423': '云南省迪庆藏族自治州维西傈僳族自治县',
+  '533500': '云南省临沧地区',
+  '533521': '云南省临沧地区临沧县',
+  '533522': '云南省临沧地区凤庆县',
+  '533523': '云南省临沧地区云县',
+  '533524': '云南省临沧地区永德县',
+  '533525': '云南省临沧地区镇康县',
+  '533526': '云南省临沧地区双江拉祜族佤族布朗族傣族自治县',
+  '533527': '云南省临沧地区耿马傣族佤族自治县',
+  '533528': '云南省临沧地区沧源佤族自治县',
+  '540000': '西藏自治区',
+  '540100': '西藏自治区拉萨市',
+  '540101': '西藏自治区拉萨市市辖区',
+  '540102': '西藏自治区拉萨市城关区',
+  '540121': '西藏自治区拉萨市林周县',
+  '540122': '西藏自治区拉萨市当雄县',
+  '540123': '西藏自治区拉萨市尼木县',
+  '540124': '西藏自治区拉萨市曲水县',
+  '540125': '西藏自治区拉萨市堆龙德庆县',
+  '540126': '西藏自治区拉萨市达孜县',
+  '540127': '西藏自治区拉萨市墨竹工卡县',
+  '542100': '西藏自治区昌都地区',
+  '542121': '西藏自治区昌都地区昌都县',
+  '542122': '西藏自治区昌都地区江达县',
+  '542123': '西藏自治区昌都地区贡觉县',
+  '542124': '西藏自治区昌都地区类乌齐县',
+  '542125': '西藏自治区昌都地区丁青县',
+  '542126': '西藏自治区昌都地区察雅县',
+  '542127': '西藏自治区昌都地区八宿县',
+  '542128': '西藏自治区昌都地区左贡县',
+  '542129': '西藏自治区昌都地区芒康县',
+  '542132': '西藏自治区昌都地区洛隆县',
+  '542133': '西藏自治区昌都地区边坝县',
+  '542134': '西藏自治区昌都地区盐井县',
+  '542135': '西藏自治区昌都地区碧土县',
+  '542136': '西藏自治区昌都地区妥坝县',
+  '542137': '西藏自治区昌都地区生达县',
+  '542200': '西藏自治区山南地区',
+  '542221': '西藏自治区山南地区乃东县',
+  '542222': '西藏自治区山南地区扎囊县',
+  '542223': '西藏自治区山南地区贡嘎县',
+  '542224': '西藏自治区山南地区桑日县',
+  '542225': '西藏自治区山南地区琼结县',
+  '542226': '西藏自治区山南地区曲松县',
+  '542227': '西藏自治区山南地区措美县',
+  '542228': '西藏自治区山南地区洛扎县',
+  '542229': '西藏自治区山南地区加查县',
+  '542231': '西藏自治区山南地区隆子县',
+  '542232': '西藏自治区山南地区错那县',
+  '542233': '西藏自治区山南地区浪卡子县',
+  '542300': '西藏自治区日喀则地区',
+  '542301': '西藏自治区日喀则地区日喀则市',
+  '542322': '西藏自治区日喀则地区南木林县',
+  '542323': '西藏自治区日喀则地区江孜县',
+  '542324': '西藏自治区日喀则地区定日县',
+  '542325': '西藏自治区日喀则地区萨迦县',
+  '542326': '西藏自治区日喀则地区拉孜县',
+  '542327': '西藏自治区日喀则地区昂仁县',
+  '542328': '西藏自治区日喀则地区谢通门县',
+  '542329': '西藏自治区日喀则地区白朗县',
+  '542330': '西藏自治区日喀则地区仁布县',
+  '542331': '西藏自治区日喀则地区康马县',
+  '542332': '西藏自治区日喀则地区定结县',
+  '542333': '西藏自治区日喀则地区仲巴县',
+  '542334': '西藏自治区日喀则地区亚东县',
+  '542335': '西藏自治区日喀则地区吉隆县',
+  '542336': '西藏自治区日喀则地区聂拉木县',
+  '542337': '西藏自治区日喀则地区萨嘎县',
+  '542338': '西藏自治区日喀则地区岗巴县',
+  '542400': '西藏自治区那曲地区',
+  '542421': '西藏自治区那曲地区那曲县',
+  '542422': '西藏自治区那曲地区嘉黎县',
+  '542423': '西藏自治区那曲地区比如县',
+  '542424': '西藏自治区那曲地区聂荣县',
+  '542425': '西藏自治区那曲地区安多县',
+  '542426': '西藏自治区那曲地区申扎县',
+  '542427': '西藏自治区那曲地区索县',
+  '542428': '西藏自治区那曲地区班戈县',
+  '542429': '西藏自治区那曲地区巴青县',
+  '542430': '西藏自治区那曲地区尼玛县',
+  '542500': '西藏自治区阿里地区',
+  '542521': '西藏自治区阿里地区普兰县',
+  '542522': '西藏自治区阿里地区札达县',
+  '542523': '西藏自治区阿里地区噶尔县',
+  '542524': '西藏自治区阿里地区日土县',
+  '542525': '西藏自治区阿里地区革吉县',
+  '542526': '西藏自治区阿里地区改则县',
+  '542527': '西藏自治区阿里地区措勤县',
+  '542528': '西藏自治区阿里地区隆格尔县',
+  '542600': '西藏自治区林芝地区',
+  '542621': '西藏自治区林芝地区林芝县',
+  '542622': '西藏自治区林芝地区工布江达县',
+  '542623': '西藏自治区林芝地区米林县',
+  '542624': '西藏自治区林芝地区墨脱县',
+  '542625': '西藏自治区林芝地区波密县',
+  '542626': '西藏自治区林芝地区察隅县',
+  '542627': '西藏自治区林芝地区朗县',
+  '610000': '陕西省',
+  '610100': '陕西省西安市',
+  '610101': '陕西省西安市市辖区',
+  '610102': '陕西省西安市新城区',
+  '610103': '陕西省西安市碑林区',
+  '610104': '陕西省西安市莲湖区',
+  '610111': '陕西省西安市灞桥区',
+  '610112': '陕西省西安市未央区',
+  '610113': '陕西省西安市雁塔区',
+  '610114': '陕西省西安市阎良区',
+  '610115': '陕西省西安市临潼区',
+  '610121': '陕西省西安市长安县',
+  '610122': '陕西省西安市蓝田县',
+  '610124': '陕西省西安市周至县',
+  '610125': '陕西省西安市户县',
+  '610126': '陕西省西安市高陵县',
+  '610200': '陕西省铜川市',
+  '610201': '陕西省铜川市市辖区',
+  '610202': '陕西省铜川市城区',
+  '610203': '陕西省铜川市郊区',
+  '610221': '陕西省铜川市耀县',
+  '610222': '陕西省铜川市宜君县',
+  '610300': '陕西省宝鸡市',
+  '610301': '陕西省宝鸡市市辖区',
+  '610302': '陕西省宝鸡市渭滨区',
+  '610303': '陕西省宝鸡市金台区',
+  '610321': '陕西省宝鸡市宝鸡县',
+  '610322': '陕西省宝鸡市凤翔县',
+  '610323': '陕西省宝鸡市岐山县',
+  '610324': '陕西省宝鸡市扶风县',
+  '610326': '陕西省宝鸡市眉县',
+  '610327': '陕西省宝鸡市陇县',
+  '610328': '陕西省宝鸡市千阳县',
+  '610329': '陕西省宝鸡市麟游县',
+  '610330': '陕西省宝鸡市凤县',
+  '610331': '陕西省宝鸡市太白县',
+  '610400': '陕西省咸阳市',
+  '610401': '陕西省咸阳市市辖区',
+  '610402': '陕西省咸阳市秦都区',
+  '610403': '陕西省咸阳市杨陵区',
+  '610404': '陕西省咸阳市渭城区',
+  '610422': '陕西省咸阳市三原县',
+  '610423': '陕西省咸阳市泾阳县',
+  '610424': '陕西省咸阳市乾县',
+  '610425': '陕西省咸阳市礼泉县',
+  '610426': '陕西省咸阳市永寿县',
+  '610427': '陕西省咸阳市彬县',
+  '610428': '陕西省咸阳市长武县',
+  '610429': '陕西省咸阳市旬邑县',
+  '610430': '陕西省咸阳市淳化县',
+  '610431': '陕西省咸阳市武功县',
+  '610481': '陕西省咸阳市兴平市',
+  '610500': '陕西省渭南市',
+  '610501': '陕西省渭南市市辖区',
+  '610502': '陕西省渭南市临渭区',
+  '610521': '陕西省渭南市华县',
+  '610522': '陕西省渭南市潼关县',
+  '610523': '陕西省渭南市大荔县',
+  '610524': '陕西省渭南市合阳县',
+  '610525': '陕西省渭南市澄城县',
+  '610526': '陕西省渭南市蒲城县',
+  '610527': '陕西省渭南市白水县',
+  '610528': '陕西省渭南市富平县',
+  '610581': '陕西省渭南市韩城市',
+  '610582': '陕西省渭南市华阴市',
+  '610600': '陕西省延安市',
+  '610601': '陕西省延安市市辖区',
+  '610602': '陕西省延安市宝塔区',
+  '610621': '陕西省延安市延长县',
+  '610622': '陕西省延安市延川县',
+  '610623': '陕西省延安市子长县',
+  '610624': '陕西省延安市安塞县',
+  '610625': '陕西省延安市志丹县',
+  '610626': '陕西省延安市吴旗县',
+  '610627': '陕西省延安市甘泉县',
+  '610628': '陕西省延安市富县',
+  '610629': '陕西省延安市洛川县',
+  '610630': '陕西省延安市宜川县',
+  '610631': '陕西省延安市黄龙县',
+  '610632': '陕西省延安市黄陵县',
+  '610700': '陕西省汉中市',
+  '610701': '陕西省汉中市市辖区',
+  '610702': '陕西省汉中市汉台区',
+  '610721': '陕西省汉中市南郑县',
+  '610722': '陕西省汉中市城固县',
+  '610723': '陕西省汉中市洋县',
+  '610724': '陕西省汉中市西乡县',
+  '610725': '陕西省汉中市勉县',
+  '610726': '陕西省汉中市宁强县',
+  '610727': '陕西省汉中市略阳县',
+  '610728': '陕西省汉中市镇巴县',
+  '610729': '陕西省汉中市留坝县',
+  '610730': '陕西省汉中市佛坪县',
+  '612400': '陕西省安康地区',
+  '612401': '陕西省安康地区安康市',
+  '612422': '陕西省安康地区汉阴县',
+  '612423': '陕西省安康地区石泉县',
+  '612424': '陕西省安康地区宁陕县',
+  '612425': '陕西省安康地区紫阳县',
+  '612426': '陕西省安康地区岚皋县',
+  '612427': '陕西省安康地区平利县',
+  '612428': '陕西省安康地区镇坪县',
+  '612429': '陕西省安康地区旬阳县',
+  '612430': '陕西省安康地区白河县',
+  '612500': '陕西省商洛地区',
+  '612501': '陕西省商洛地区商州市',
+  '612522': '陕西省商洛地区洛南县',
+  '612523': '陕西省商洛地区丹凤县',
+  '612524': '陕西省商洛地区商南县',
+  '612525': '陕西省商洛地区山阳县',
+  '612526': '陕西省商洛地区镇安县',
+  '612527': '陕西省商洛地区柞水县',
+  '612700': '陕西省榆林地区',
+  '612701': '陕西省榆林地区榆林市',
+  '612722': '陕西省榆林地区神木县',
+  '612723': '陕西省榆林地区府谷县',
+  '612724': '陕西省榆林地区横山县',
+  '612725': '陕西省榆林地区靖边县',
+  '612726': '陕西省榆林地区定边县',
+  '612727': '陕西省榆林地区绥德县',
+  '612728': '陕西省榆林地区米脂县',
+  '612729': '陕西省榆林地区佳县',
+  '612730': '陕西省榆林地区吴堡县',
+  '612731': '陕西省榆林地区清涧县',
+  '612732': '陕西省榆林地区子洲县',
+  '620000': '甘肃省',
+  '620100': '甘肃省兰州市',
+  '620101': '甘肃省兰州市市辖区',
+  '620102': '甘肃省兰州市城关区',
+  '620103': '甘肃省兰州市七里河区',
+  '620104': '甘肃省兰州市西固区',
+  '620105': '甘肃省兰州市安宁区',
+  '620111': '甘肃省兰州市红古区',
+  '620121': '甘肃省兰州市永登县',
+  '620122': '甘肃省兰州市皋兰县',
+  '620123': '甘肃省兰州市榆中县',
+  '620200': '甘肃省嘉峪关市',
+  '620201': '甘肃省嘉峪关市市辖区',
+  '620300': '甘肃省嘉峪关市金昌市',
+  '620301': '甘肃省嘉峪关市市辖区',
+  '620302': '甘肃省嘉峪关市金川区',
+  '620321': '甘肃省嘉峪关市永昌县',
+  '620400': '甘肃省白银市',
+  '620401': '甘肃省白银市市辖区',
+  '620402': '甘肃省白银市白银区',
+  '620403': '甘肃省白银市平川区',
+  '620421': '甘肃省白银市靖远县',
+  '620422': '甘肃省白银市会宁县',
+  '620423': '甘肃省白银市景泰县',
+  '620500': '甘肃省天水市',
+  '620501': '甘肃省天水市市辖区',
+  '620502': '甘肃省天水市秦城区',
+  '620503': '甘肃省天水市北道区',
+  '620521': '甘肃省天水市清水县',
+  '620522': '甘肃省天水市秦安县',
+  '620523': '甘肃省天水市甘谷县',
+  '620524': '甘肃省天水市武山县',
+  '620525': '甘肃省天水市张家川回族自治县',
+  '622100': '甘肃省酒泉地区',
+  '622101': '甘肃省酒泉地区玉门市',
+  '622102': '甘肃省酒泉地区酒泉市',
+  '622103': '甘肃省酒泉地区敦煌市',
+  '622123': '甘肃省酒泉地区金塔县',
+  '622124': '甘肃省酒泉地区肃北蒙古族自治县',
+  '622125': '甘肃省酒泉地区阿克塞哈萨克族自治县',
+  '622126': '甘肃省酒泉地区安西县',
+  '622200': '甘肃省张掖地区',
+  '622201': '甘肃省张掖地区张掖市',
+  '622222': '甘肃省张掖地区肃南裕固族自治县',
+  '622223': '甘肃省张掖地区民乐县',
+  '622224': '甘肃省张掖地区临泽县',
+  '622225': '甘肃省张掖地区高台县',
+  '622226': '甘肃省张掖地区山丹县',
+  '622300': '甘肃省武威地区',
+  '622301': '甘肃省武威地区武威市',
+  '622322': '甘肃省武威地区民勤县',
+  '622323': '甘肃省武威地区古浪县',
+  '622326': '甘肃省武威地区天祝藏族自治县',
+  '622400': '甘肃省定西地区',
+  '622421': '甘肃省定西地区定西县',
+  '622424': '甘肃省定西地区通渭县',
+  '622425': '甘肃省定西地区陇西县',
+  '622426': '甘肃省定西地区渭源县',
+  '622427': '甘肃省定西地区临洮县',
+  '622428': '甘肃省定西地区漳县',
+  '622429': '甘肃省定西地区岷县',
+  '622600': '甘肃省陇南地区',
+  '622621': '甘肃省陇南地区武都县',
+  '622623': '甘肃省陇南地区宕昌县',
+  '622624': '甘肃省陇南地区成县',
+  '622625': '甘肃省陇南地区康县',
+  '622626': '甘肃省陇南地区文县',
+  '622627': '甘肃省陇南地区西和县',
+  '622628': '甘肃省陇南地区礼县',
+  '622629': '甘肃省陇南地区两当县',
+  '622630': '甘肃省陇南地区徽县',
+  '622700': '甘肃省平凉地区',
+  '622701': '甘肃省平凉地区平凉市',
+  '622722': '甘肃省平凉地区泾川县',
+  '622723': '甘肃省平凉地区灵台县',
+  '622724': '甘肃省平凉地区崇信县',
+  '622725': '甘肃省平凉地区华亭县',
+  '622726': '甘肃省平凉地区庄浪县',
+  '622727': '甘肃省平凉地区静宁县',
+  '622800': '甘肃省庆阳地区',
+  '622801': '甘肃省庆阳地区西峰市',
+  '622821': '甘肃省庆阳地区庆阳县',
+  '622822': '甘肃省庆阳地区环县',
+  '622823': '甘肃省庆阳地区华池县',
+  '622824': '甘肃省庆阳地区合水县',
+  '622825': '甘肃省庆阳地区正宁县',
+  '622826': '甘肃省庆阳地区宁县',
+  '622827': '甘肃省庆阳地区镇原县',
+  '622900': '甘肃省临夏回族自治州',
+  '622901': '甘肃省临夏回族自治州临夏市',
+  '622921': '甘肃省临夏回族自治州临夏县',
+  '622922': '甘肃省临夏回族自治州康乐县',
+  '622923': '甘肃省临夏回族自治州永靖县',
+  '622924': '甘肃省临夏回族自治州广河县',
+  '622925': '甘肃省临夏回族自治州和政县',
+  '622926': '甘肃省临夏回族自治州东乡族自治县',
+  '622927': '甘肃省临夏回族自治州积石山保安族东乡族撒拉族自治县',
+  '623000': '甘肃省甘南藏族自治州',
+  '623001': '甘肃省甘南藏族自治州合作市',
+  '623021': '甘肃省甘南藏族自治州临潭县',
+  '623022': '甘肃省甘南藏族自治州卓尼县',
+  '623023': '甘肃省甘南藏族自治州舟曲县',
+  '623024': '甘肃省甘南藏族自治州迭部县',
+  '623025': '甘肃省甘南藏族自治州玛曲县',
+  '623026': '甘肃省甘南藏族自治州碌曲县',
+  '623027': '甘肃省甘南藏族自治州夏河县',
+  '630000': '青海省',
+  '630100': '青海省西宁市',
+  '630101': '青海省西宁市市辖区',
+  '630102': '青海省西宁市城东区',
+  '630103': '青海省西宁市城中区',
+  '630104': '青海省西宁市城西区',
+  '630105': '青海省西宁市城北区',
+  '630121': '青海省西宁市大通回族土族自治县',
+  '632100': '青海省海东地区',
+  '632121': '青海省海东地区平安县',
+  '632122': '青海省海东地区民和回族土族自治县',
+  '632123': '青海省海东地区乐都县',
+  '632124': '青海省海东地区湟中县',
+  '632125': '青海省海东地区湟源县',
+  '632126': '青海省海东地区互助土族自治县',
+  '632127': '青海省海东地区化隆回族自治县',
+  '632128': '青海省海东地区循化撒拉族自治县',
+  '632200': '青海省海北藏族自治州',
+  '632221': '青海省海北藏族自治州门源回族自治县',
+  '632222': '青海省海北藏族自治州祁连县',
+  '632223': '青海省海北藏族自治州海晏县',
+  '632224': '青海省海北藏族自治州刚察县',
+  '632300': '青海省黄南藏族自治州',
+  '632321': '青海省黄南藏族自治州同仁县',
+  '632322': '青海省黄南藏族自治州尖扎县',
+  '632323': '青海省黄南藏族自治州泽库县',
+  '632324': '青海省黄南藏族自治州河南蒙古族自治县',
+  '632500': '青海省海南藏族自治州',
+  '632521': '青海省海南藏族自治州共和县',
+  '632522': '青海省海南藏族自治州同德县',
+  '632523': '青海省海南藏族自治州贵德县',
+  '632524': '青海省海南藏族自治州兴海县',
+  '632525': '青海省海南藏族自治州贵南县',
+  '632600': '青海省果洛藏族自治州',
+  '632621': '青海省果洛藏族自治州玛沁县',
+  '632622': '青海省果洛藏族自治州班玛县',
+  '632623': '青海省果洛藏族自治州甘德县',
+  '632624': '青海省果洛藏族自治州达日县',
+  '632625': '青海省果洛藏族自治州久治县',
+  '632626': '青海省果洛藏族自治州玛多县',
+  '632700': '青海省玉树藏族自治州',
+  '632721': '青海省玉树藏族自治州玉树县',
+  '632722': '青海省玉树藏族自治州杂多县',
+  '632723': '青海省玉树藏族自治州称多县',
+  '632724': '青海省玉树藏族自治州治多县',
+  '632725': '青海省玉树藏族自治州囊谦县',
+  '632726': '青海省玉树藏族自治州曲麻莱县',
+  '632800': '青海省海西蒙古族藏族自治州',
+  '632801': '青海省海西蒙古族藏族自治州格尔木市',
+  '632802': '青海省海西蒙古族藏族自治州德令哈市',
+  '632821': '青海省海西蒙古族藏族自治州乌兰县',
+  '632822': '青海省海西蒙古族藏族自治州都兰县',
+  '632823': '青海省海西蒙古族藏族自治州天峻县',
+  '640000': '宁夏回族自治区',
+  '640100': '宁夏回族自治区银川市',
+  '640101': '宁夏回族自治区银川市市辖区',
+  '640102': '宁夏回族自治区银川市城区',
+  '640103': '宁夏回族自治区银川市新城区',
+  '640111': '宁夏回族自治区银川市郊区',
+  '640121': '宁夏回族自治区银川市永宁县',
+  '640122': '宁夏回族自治区银川市贺兰县',
+  '640200': '宁夏回族自治区石嘴山市',
+  '640201': '宁夏回族自治区石嘴山市市辖区',
+  '640202': '宁夏回族自治区石嘴山市大武口区',
+  '640203': '宁夏回族自治区石嘴山市石嘴山区',
+  '640204': '宁夏回族自治区石嘴山市石炭井区',
+  '640221': '宁夏回族自治区石嘴山市平罗县',
+  '640222': '宁夏回族自治区石嘴山市陶乐县',
+  '640223': '宁夏回族自治区石嘴山市惠农县',
+  '640300': '宁夏回族自治区吴忠市',
+  '640301': '宁夏回族自治区吴忠市市辖区',
+  '640302': '宁夏回族自治区吴忠市利通区',
+  '640321': '宁夏回族自治区吴忠市中卫县',
+  '640322': '宁夏回族自治区吴忠市中宁县',
+  '640323': '宁夏回族自治区吴忠市盐池县',
+  '640324': '宁夏回族自治区吴忠市同心县',
+  '640381': '宁夏回族自治区吴忠市青铜峡市',
+  '640382': '宁夏回族自治区吴忠市灵武市',
+  '642200': '宁夏回族自治区固原地区',
+  '642221': '宁夏回族自治区固原地区固原县',
+  '642222': '宁夏回族自治区固原地区海原县',
+  '642223': '宁夏回族自治区固原地区西吉县',
+  '642224': '宁夏回族自治区固原地区隆德县',
+  '642225': '宁夏回族自治区固原地区泾源县',
+  '642226': '宁夏回族自治区固原地区彭阳县',
+  '650000': '新疆维吾尔自治区',
+  '650100': '新疆维吾尔族自治区乌鲁木齐市',
+  '650101': '新疆维吾尔族自治区乌鲁木齐市市辖区',
+  '650102': '新疆维吾尔族自治区乌鲁木齐市天山区',
+  '650103': '新疆维吾尔族自治区乌鲁木齐市沙依巴克区',
+  '650104': '新疆维吾尔族自治区乌鲁木齐市新市区',
+  '650105': '新疆维吾尔族自治区乌鲁木齐市水磨沟区',
+  '650106': '新疆维吾尔族自治区乌鲁木齐市头屯河区',
+  '650107': '新疆维吾尔族自治区乌鲁木齐市南山矿区',
+  '650108': '新疆维吾尔族自治区乌鲁木齐市东山区',
+  '650121': '新疆维吾尔族自治区乌鲁木齐市乌鲁木齐县',
+  '650200': '新疆维吾尔族自治区克拉玛依市',
+  '650201': '新疆维吾尔族自治区克拉玛依市市辖区',
+  '650202': '新疆维吾尔族自治区克拉玛依市独山子区',
+  '650203': '新疆维吾尔族自治区克拉玛依市克拉玛依区',
+  '650204': '新疆维吾尔族自治区克拉玛依市白碱滩区',
+  '650205': '新疆维吾尔族自治区克拉玛依市乌尔禾区',
+  '652100': '新疆维吾尔族自治区吐鲁番地区',
+  '652101': '新疆维吾尔族自治区吐鲁番地区吐鲁番市',
+  '652122': '新疆维吾尔族自治区吐鲁番地区鄯善县',
+  '652123': '新疆维吾尔族自治区吐鲁番地区托克逊县',
+  '652200': '新疆维吾尔族自治区哈密地区',
+  '652201': '新疆维吾尔族自治区哈密地区哈密市',
+  '652222': '新疆维吾尔族自治区哈密地区巴里坤哈萨克自治县',
+  '652223': '新疆维吾尔族自治区哈密地区伊吾县',
+  '652300': '新疆维吾尔族自治区昌吉回族自治州',
+  '652301': '新疆维吾尔族自治区昌吉回族自治州昌吉市',
+  '652302': '新疆维吾尔族自治区昌吉回族自治州阜康市',
+  '652303': '新疆维吾尔族自治区昌吉回族自治州米泉市',
+  '652323': '新疆维吾尔族自治区昌吉回族自治州呼图壁县',
+  '652324': '新疆维吾尔族自治区昌吉回族自治州玛纳斯县',
+  '652325': '新疆维吾尔族自治区昌吉回族自治州奇台县',
+  '652327': '新疆维吾尔族自治区昌吉回族自治州吉木萨尔县',
+  '652328': '新疆维吾尔族自治区昌吉回族自治州木垒哈萨克自治县',
+  '652700': '新疆维吾尔族自治区博尔塔拉蒙古自治州',
+  '652701': '新疆维吾尔族自治区博尔塔拉蒙古自治州博乐市',
+  '652722': '新疆维吾尔族自治区博尔塔拉蒙古自治州精河县',
+  '652723': '新疆维吾尔族自治区博尔塔拉蒙古自治州温泉县',
+  '652800': '新疆维吾尔族自治区巴音郭楞蒙古自治州',
+  '652801': '新疆维吾尔族自治区巴音郭楞蒙古自治州库尔勒市',
+  '652822': '新疆维吾尔族自治区巴音郭楞蒙古自治州轮台县',
+  '652823': '新疆维吾尔族自治区巴音郭楞蒙古自治州尉犁县',
+  '652824': '新疆维吾尔族自治区巴音郭楞蒙古自治州若羌县',
+  '652825': '新疆维吾尔族自治区巴音郭楞蒙古自治州且末县',
+  '652826': '新疆维吾尔族自治区巴音郭楞蒙古自治州焉耆回族自治县',
+  '652827': '新疆维吾尔族自治区巴音郭楞蒙古自治州和静县',
+  '652828': '新疆维吾尔族自治区巴音郭楞蒙古自治州和硕县',
+  '652829': '新疆维吾尔族自治区巴音郭楞蒙古自治州博湖县',
+  '652900': '新疆维吾尔族自治区阿克苏地区',
+  '652901': '新疆维吾尔族自治区阿克苏地区阿克苏市',
+  '652922': '新疆维吾尔族自治区阿克苏地区温宿县',
+  '652923': '新疆维吾尔族自治区阿克苏地区库车县',
+  '652924': '新疆维吾尔族自治区阿克苏地区沙雅县',
+  '652925': '新疆维吾尔族自治区阿克苏地区新和县',
+  '652926': '新疆维吾尔族自治区阿克苏地区拜城县',
+  '652927': '新疆维吾尔族自治区阿克苏地区乌什县',
+  '652928': '新疆维吾尔族自治区阿克苏地区阿瓦提县',
+  '652929': '新疆维吾尔族自治区阿克苏地区柯坪县',
+  '653000': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州',
+  '653001': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿图什市',
+  '653022': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿克陶县',
+  '653023': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿合奇县',
+  '653024': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州乌恰县',
+  '653100': '新疆维吾尔族自治区喀什地区',
+  '653101': '新疆维吾尔族自治区喀什地区喀什市',
+  '653121': '新疆维吾尔族自治区喀什地区疏附县',
+  '653122': '新疆维吾尔族自治区喀什地区疏勒县',
+  '653123': '新疆维吾尔族自治区喀什地区英吉沙县',
+  '653124': '新疆维吾尔族自治区喀什地区泽普县',
+  '653125': '新疆维吾尔族自治区喀什地区莎车县',
+  '653126': '新疆维吾尔族自治区喀什地区叶城县',
+  '653127': '新疆维吾尔族自治区喀什地区麦盖提县',
+  '653128': '新疆维吾尔族自治区喀什地区岳普湖县',
+  '653129': '新疆维吾尔族自治区喀什地区伽师县',
+  '653130': '新疆维吾尔族自治区喀什地区巴楚县',
+  '653131': '新疆维吾尔族自治区喀什地区塔什库尔干塔吉克自治县',
+  '653200': '新疆维吾尔族自治区和田地区',
+  '653201': '新疆维吾尔族自治区和田地区和田市',
+  '653221': '新疆维吾尔族自治区和田地区和田县',
+  '653222': '新疆维吾尔族自治区和田地区墨玉县',
+  '653223': '新疆维吾尔族自治区和田地区皮山县',
+  '653224': '新疆维吾尔族自治区和田地区洛浦县',
+  '653225': '新疆维吾尔族自治区和田地区策勒县',
+  '653226': '新疆维吾尔族自治区和田地区于田县',
+  '653227': '新疆维吾尔族自治区和田地区民丰县',
+  '654000': '新疆维吾尔族自治区伊犁哈萨克自治州',
+  '654001': '新疆维吾尔族自治区伊犁哈萨克自治州奎屯市',
+  '654100': '新疆维吾尔族自治区伊犁哈萨克自治州伊犁地区',
+  '654101': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁市',
+  '654121': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁县',
+  '654122': '新疆自治区伊犁哈萨克自治州察布查尔锡伯自治县',
+  '654123': '新疆维吾尔族自治区伊犁哈萨克自治州霍城县',
+  '654124': '新疆维吾尔族自治区伊犁哈萨克自治州巩留县',
+  '654125': '新疆维吾尔族自治区伊犁哈萨克自治州新源县',
+  '654126': '新疆维吾尔族自治区伊犁哈萨克自治州昭苏县',
+  '654127': '新疆维吾尔族自治区伊犁哈萨克自治州特克斯县',
+  '654128': '新疆维吾尔族自治区伊犁哈萨克自治州尼勒克县',
+  '654200': '新疆维吾尔族自治区塔城地区',
+  '654201': '新疆维吾尔族自治区塔城地区塔城市',
+  '654202': '新疆维吾尔族自治区塔城地区乌苏市',
+  '654221': '新疆维吾尔族自治区塔城地区额敏县',
+  '654223': '新疆维吾尔族自治区塔城地区沙湾县',
+  '654224': '新疆维吾尔族自治区塔城地区托里县',
+  '654225': '新疆维吾尔族自治区塔城地区裕民县',
+  '654226': '新疆维吾尔族自治区塔城地区和布克赛尔蒙古自治县',
+  '654300': '新疆维吾尔族自治区阿勒泰地区',
+  '654301': '新疆维吾尔族自治区阿勒泰地区阿勒泰市',
+  '654321': '新疆维吾尔族自治区阿勒泰地区布尔津县',
+  '654322': '新疆维吾尔族自治区阿勒泰地区富蕴县',
+  '654323': '新疆维吾尔族自治区阿勒泰地区福海县',
+  '654324': '新疆维吾尔族自治区阿勒泰地区哈巴河县',
+  '654325': '新疆维吾尔族自治区阿勒泰地区青河县',
+  '654326': '新疆维吾尔族自治区阿勒泰地区吉木乃县',
+  '659000': '新疆维吾尔族自治区直辖县级行政单位',
+  '659001': '新疆维吾尔族自治区石河子市'
+}
+
+function IDValidator() {
+  let param = {
+    error: {
+      longNumber: '长数字存在精度问题,请使用字符串传值! Long number is not allowed, because the precision of the Number In JavaScript.'
+    }
+  }
+  let util = {
+    checkArg: function (id) {
+      let argType = (typeof id)
+
+      switch (argType) {
+        case 'number':
+          // long number not allowed
+          id = id.toString()
+          if (id.length > 15) {
+            this.error(param.error.longNumber)
+            return false
+          }
+          break
+        case 'string':
+          break
+        default:
+          return false
+      }
+      id = id.toUpperCase()
+      let code = null
+      if (id.length === 18) {
+        // 18位
+        code = {
+          body: id.slice(0, 17),
+          checkBit: id.slice(-1),
+          type: 18
+        }
+      } else if (id.length === 15) {
+        // 15位
+        code = {
+          body: id,
+          type: 15
+        }
+      } else {
+        return false
+      }
+      return code
+    },
+    // 地址码检查
+    checkAddr: function (addr, GB2260) {
+      let addrInfo = this.getAddrInfo(addr, GB2260)
+      return addrInfo !== false
+    },
+    // 取得地址码信息
+    getAddrInfo: function (addr, GB2260) {
+      GB2260 = GB2260 || null
+      // 查询GB/T2260,没有引入GB2260时略过
+      if (GB2260 === null) {
+        return addr
+      }
+      if (!GB2260.hasOwnProperty(addr)) {
+        // 考虑标准不全的情况,搜索不到时向上搜索
+        let tmpAddr
+        tmpAddr = addr.slice(0, 4) + '00'
+        if (!GB2260.hasOwnProperty(tmpAddr)) {
+          tmpAddr = addr.slice(0, 2) + '0000'
+          if (!GB2260.hasOwnProperty(tmpAddr)) {
+            return false
+          } else {
+            return GB2260[tmpAddr] + '未知地区'
+          }
+        } else {
+          return GB2260[tmpAddr] + '未知地区'
+        }
+      } else {
+        return GB2260[addr]
+      }
+    },
+    // 生日码检查
+    checkBirth: function (birth) {
+      let year, month, day
+      if (birth.length === 8) {
+        year = parseInt(birth.slice(0, 4), 10)
+        month = parseInt(birth.slice(4, 6), 10)
+        day = parseInt(birth.slice(-2), 10)
+      } else if (birth.length === 6) {
+        year = parseInt('19' + birth.slice(0, 2), 10)
+        month = parseInt(birth.slice(2, 4), 10)
+        day = parseInt(birth.slice(-2), 10)
+      } else {
+        return false
+      }
+      // TODO 是否需要判断年份
+      /*
+       * if( year<1800 ){ return false; }
+       */
+      // TODO 按月份检测
+      if (month > 12 || month === 0 || day > 31 || day === 0) {
+        return false
+      }
+
+      return true
+    },
+    // 顺序码检查
+    checkOrder: function (order) {
+      // 暂无需检测
+
+      return true
+    },
+    // 加权
+    weight: function (t) {
+      return Math.pow(2, t - 1) % 11
+    },
+    // 随机整数
+    rand: function (max, min) {
+      min = min || 1
+      return Math.round(Math.random() * (max - min)) + min
+    },
+    // 数字补位
+    str_pad: function (str, len, chr, right) {
+      str = str.toString()
+      len = len || 2
+      chr = chr || '0'
+      right = right || false
+      if (str.length >= len) {
+        return str
+      } else {
+        for (let i = 0, j = len - str.length; i < j; i++) {
+          if (right) {
+            str = str + chr
+          } else {
+            str = chr + str
+          }
+        }
+        return str
+      }
+    },
+    // 抛错
+    error: function (msg) {
+      let e = new Error()
+      e.message = 'IDValidator: ' + msg
+      throw e
+    }
+  }
+  let _IDValidator = function (GB2260) {
+    if (typeof GB2260 !== 'undefined') {
+      this.GB2260 = GB2260
+    }
+    // 建立cache
+    this.cache = {}
+  }
+  _IDValidator.prototype = {
+    isValid: function (id) {
+      let GB2260 = this.GB2260 || null
+      let code = util.checkArg(id)
+      if (code === false) {
+        return false
+      }
+      // 查询cache
+      if (this.cache.hasOwnProperty(id) && typeof (this.cache[id].valid) !== 'undefined') {
+        return this.cache[id].valid
+      } else {
+        if (!this.cache.hasOwnProperty(id)) {
+          this.cache[id] = {}
+        }
+      }
+
+      let addr = code.body.slice(0, 6)
+      let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body.slice(6, 12))
+      let order = code.body.slice(-3)
+
+      if (!(util.checkAddr(addr, GB2260) && util.checkBirth(birth) && util
+          .checkOrder(order))) {
+        this.cache[id].valid = false
+        return false
+      }
+
+      // 15位不含校验码,到此已结束
+      if (code.type === 15) {
+        this.cache[id].valid = true
+        return true
+      }
+
+      /* 校验位部分 */
+
+      // 位置加权
+      let posWeight = []
+      for (let i = 18; i > 1; i--) {
+        let wei = util.weight(i)
+        posWeight[i] = wei
+      }
+
+      // 累加body部分与位置加权的积
+      let bodySum = 0
+      let bodyArr = code.body.split('')
+      for (let j = 0; j < bodyArr.length; j++) {
+        bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j])
+      }
+
+      // 得出校验码
+      let checkBit = 12 - (bodySum % 11)
+      if (checkBit === 10) {
+        checkBit = 'X'
+      } else if (checkBit > 10) {
+        checkBit = checkBit % 11
+      }
+      checkBit = (typeof checkBit === 'number' ? checkBit.toString()
+        : checkBit)
+
+      // 检查校验码
+      if (checkBit !== code.checkBit) {
+        this.cache[id].valid = false
+        return false
+      } else {
+        this.cache[id].valid = true
+        return true
+      }
+    },
+    // 获取年龄
+    getAgeForIdCard: function (idStr) {
+      let len = idStr.length // 身份证编码长度
+      if (len < 15) {
+        return -1
+      } else { // 身份证编码大于15位
+        if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18
+          return -1
+        } else {
+          let date1 = new Date() // 取得当前日期
+          let year1 = date1.getFullYear() // 取得当前年份
+          let month1 = date1.getMonth() // 取得当前月份
+          if (len === 15) { // 15位身份证
+            if (month1 > parseInt(idStr.substr(8, 2))) { // 判断当前月分与编码中的月份大小
+              return year1 - ('19' + idStr.substr(6, 2))
+            } else {
+              return year1 - ('19' + idStr.substr(6, 2)) - 1
+            }
+          } else if (len === 18) { // 18位身份证
+            if (month1 > parseInt(idStr.substr(10, 2))) { // 判断当前月分与编码中的月份大小
+              return year1 - idStr.substr(6, 4)
+            } else {
+              return year1 - idStr.substr(6, 4) - 1
+            }
+          }
+        }
+      }
+    },
+    // 获取性别
+    getSexForIdCard: function (idStr) {
+      let len = idStr.length // 身份证编码长度
+      if (len < 15) {
+        return -1
+      } else { // 身份证编码大于15位
+        if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18
+          return -1
+        } else {
+          if (len === 15) { // 15位身份证
+            return (parseInt(idStr.substring(13, 14)) % 2 === 0) ? 0 : 1
+          } else if (len === 18) { // 18位身份证
+            return (parseInt(idStr.substring(16, 17)) % 2 === 0) ? 0 : 1
+          }
+        }
+      }
+    },
+    // 分析详细信息
+    getInfo: function (id) {
+      let GB2260 = this.GB2260 || null
+      // 号码必须有效
+      if (this.isValid(id) === false) {
+        return false
+      }
+      // TODO 复用此部分
+      let code = util.checkArg(id)
+
+      // 查询cache
+      // 到此时通过isValid已经有了cache记录
+      if (typeof this.cache[id].info !== 'undefined') {
+        return this.cache[id].info
+      }
+
+      let addr = code.body.slice(0, 6)
+      let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body
+        .slice(6, 12))
+      let order = code.body.slice(-3)
+
+      let info = {}
+      info.addrCode = addr
+      if (GB2260 !== null) {
+        info.addr = util.getAddrInfo(addr, GB2260)
+      }
+      info.birth = (code.type === 18 ? (([birth.slice(0, 4),
+        birth.slice(4, 6), birth.slice(-2)]).join('-')) : ((
+        '19' + birth.slice(0, 2), birth.slice(2, 4),
+          birth.slice(-2))).join('-'))
+      info.sex = (order % 2 === 0 ? 0 : 1)
+      info.length = code.type
+      if (code.type === 18) {
+        info.checkBit = code.checkBit
+      }
+
+      // 记录cache
+      this.cache[id].info = info
+
+      return info
+    },
+    // 仿造一个号
+    makeID: function (isFifteen) {
+      let GB2260 = this.GB2260 || null
+
+      // 地址码
+      let addr = null
+      if (GB2260 !== null) {
+        let loopCnt = 0
+        while (addr === null) {
+          // 防止死循环
+          if (loopCnt > 10) {
+            addr = 110101
+            break
+          }
+          let prov = util.str_pad(util.rand(50), 2, '0')
+          let city = util.str_pad(util.rand(20), 2, '0')
+          let area = util.str_pad(util.rand(20), 2, '0')
+          let addrTest = [prov, city, area].join('')
+          if (GB2260[addrTest]) {
+            addr = addrTest
+            break
+          }
+        }
+      } else {
+        addr = 110101
+      }
+
+      // 出生年
+      let yr = util.str_pad(util.rand(99, 50), 2, '0')
+      let mo = util.str_pad(util.rand(12, 1), 2, '0')
+      let da = util.str_pad(util.rand(28, 1), 2, '0')
+      if (isFifteen) {
+        return addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1')
+      }
+
+      yr = '19' + yr
+      let body = addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1')
+
+      // 位置加权
+      let posWeight = []
+      for (let i = 18; i > 1; i--) {
+        let wei = util.weight(i)
+        posWeight[i] = wei
+      }
+
+      // 累加body部分与位置加权的积
+      let bodySum = 0
+      let bodyArr = body.split('')
+      for (let j = 0; j < bodyArr.length; j++) {
+        bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j])
+      }
+
+      // 得出校验码
+      let checkBit = 12 - (bodySum % 11)
+      if (checkBit === 10) {
+        checkBit = 'X'
+      } else if (checkBit > 10) {
+        checkBit = checkBit % 11
+      }
+      checkBit = (typeof checkBit === 'number' ? checkBit.toString()
+        : checkBit)
+
+      return (body + checkBit)
+    }
+
+  }// _IDValidator
+  GB2260 = GB2260 === null ? '' : GB2260
+  return new _IDValidator(GB2260)
+}
+
+export default new IDValidator();
diff --git a/src/utils/config.js b/src/utils/config.js
new file mode 100644
index 0000000..df633de
--- /dev/null
+++ b/src/utils/config.js
@@ -0,0 +1,29 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-09-02 14:03:59
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-05-29 15:20:51
+ * @Description: 
+ */
+/**
+ *   c.k  2017/11/15 创建
+ *   c.y  2018/3/16 修改 (把增加了获取项目的动态配置的方法)
+ *   获取设备的信息以及渠道号
+ *   获取项目的名称,logo,协议等等动态配置
+ */
+
+import jsBridge from './jsBridge'; // 安卓/iOS获取设备的信息已经cn值
+import systemApi from '@/api/index';
+
+// 设置客户端的信息
+function setClientInfo() {
+    // 如果设置是安卓/iOS的话,就通过jsBridge来获取设备信息,以及cn值
+    jsBridge.fetchDeviceInfo();
+}
+
+// 获取项目的配置信息,项目的标题,logo,协议
+function fetchProductConfig() {
+    return systemApi.getJson();
+}
+
+export default {setClientInfo, fetchProductConfig};
diff --git a/src/utils/createUserProtocol.js b/src/utils/createUserProtocol.js
new file mode 100644
index 0000000..8a9d04f
--- /dev/null
+++ b/src/utils/createUserProtocol.js
@@ -0,0 +1,33 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-29 13:52:12
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-11 10:38:26
+ * @Description: 
+ */ 
+
+
+export default function(info) {
+    //不用引入areement2,因为在index.html里面已经导入了
+    let agreement = agreement1;
+    agreement = agreement.replace('商户注册时填写的营业执照号', info.licenseNo);
+    agreement = agreement.replace('商户注册时填写的负责人姓名', info.priName);
+    agreement = agreement.replace(
+        '商户注册时填写的负责人手机号',
+        info.priMblNo
+    );
+    agreement = agreement.replace('商户名称或法人姓名', '');
+    agreement = agreement.replace('商户注册时填写的银行卡号', '');
+    agreement = agreement.replace('商户注册时选择的银行', '');
+    agreement = agreement.replace('商户注册时填写的负责人邮箱', info.priEmail);
+    agreement = agreement.replace('负责人手机号', info.priMblNo);
+    agreement = agreement.replace('商户注册时选择及填写的地址', info.dtlAddr);
+    agreement = agreement.replace(/当天日期年/g, `${new Date().getFullYear()}`);
+    agreement = agreement.replace(
+        /当天日期月/g,
+        `${new Date().getMonth() + 1}`
+    );
+    agreement = agreement.replace(/当天日期日/g, `${new Date().getDate()}`);
+    agreement = agreement.replace(/法人姓名/g, info.legalName);
+    return agreement;
+}
diff --git a/src/utils/dateformat.js b/src/utils/dateformat.js
new file mode 100644
index 0000000..d812901
--- /dev/null
+++ b/src/utils/dateformat.js
@@ -0,0 +1,282 @@
+/*
+ * @Descripttion: 时间格式化函数
+ * @Author:
+ * @LastEditors  : 小明丶
+ * @Date: 2019-03-30 09:24:27
+ * @LastEditTime : 2019-12-26 16:14:07
+ */
+(function (main) {
+  'use strict';
+  var fecha = {};
+  var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
+  var twoDigits = /\d\d?/;
+  var threeDigits = /\d{3}/;
+  var fourDigits = /\d{4}/;
+  var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+  var noop = function () {
+  };
+
+
+  function monthUpdate(arrName) {
+    return function (d, v, i18n) {
+      var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
+      if (~index) {
+        d.month = index;
+      }
+    };
+  }
+
+  function pad(val, len) {
+    val = String(val);
+    len = len || 2;
+    while (val.length < len) {
+      val = '0' + val;
+    }
+    return val;
+  }
+
+  var formatFlags = {
+    D: function(dateObj) {
+      return dateObj.getDay();
+    },
+    DD: function(dateObj) {
+      return pad(dateObj.getDay());
+    },
+    Do: function(dateObj, i18n) {
+      return i18n.DoFn(dateObj.getDate());
+    },
+    d: function(dateObj) {
+      return dateObj.getDate();
+    },
+    dd: function(dateObj) {
+      return pad(dateObj.getDate());
+    },
+    ddd: function(dateObj, i18n) {
+      return i18n.dayNamesShort[dateObj.getDay()];
+    },
+    dddd: function(dateObj, i18n) {
+      return i18n.dayNames[dateObj.getDay()];
+    },
+    M: function(dateObj) {
+      return dateObj.getMonth() + 1;
+    },
+    MM: function(dateObj) {
+      return pad(dateObj.getMonth() + 1);
+    },
+    MMM: function(dateObj, i18n) {
+      return i18n.monthNamesShort[dateObj.getMonth()];
+    },
+    MMMM: function(dateObj, i18n) {
+      return i18n.monthNames[dateObj.getMonth()];
+    },
+    yy: function(dateObj) {
+      return String(dateObj.getFullYear()).substr(2);
+    },
+    yyyy: function(dateObj) {
+      return dateObj.getFullYear();
+    },
+    h: function(dateObj) {
+      return dateObj.getHours() % 12 || 12;
+    },
+    hh: function(dateObj) {
+      return pad(dateObj.getHours() % 12 || 12);
+    },
+    H: function(dateObj) {
+      return dateObj.getHours();
+    },
+    HH: function(dateObj) {
+      return pad(dateObj.getHours());
+    },
+    m: function(dateObj) {
+      return dateObj.getMinutes();
+    },
+    mm: function(dateObj) {
+      return pad(dateObj.getMinutes());
+    },
+    s: function(dateObj) {
+      return dateObj.getSeconds();
+    },
+    ss: function(dateObj) {
+      return pad(dateObj.getSeconds());
+    },
+    S: function(dateObj) {
+      return Math.round(dateObj.getMilliseconds() / 100);
+    },
+    SS: function(dateObj) {
+      return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
+    },
+    SSS: function(dateObj) {
+      return pad(dateObj.getMilliseconds(), 3);
+    },
+    a: function(dateObj, i18n) {
+      return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
+    },
+    A: function(dateObj, i18n) {
+      return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
+    },
+    ZZ: function(dateObj) {
+      var o = dateObj.getTimezoneOffset();
+      return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
+    }
+  };
+
+  var parseFlags = {
+    d: [twoDigits, function (d, v) {
+      d.day = v;
+    }],
+    M: [twoDigits, function (d, v) {
+      d.month = v - 1;
+    }],
+    yy: [twoDigits, function (d, v) {
+      var da = new Date(), cent = +('' + da.getFullYear()).substr(0, 2);
+      d.year = '' + (v > 68 ? cent - 1 : cent) + v;
+    }],
+    h: [twoDigits, function (d, v) {
+      d.hour = v;
+    }],
+    m: [twoDigits, function (d, v) {
+      d.minute = v;
+    }],
+    s: [twoDigits, function (d, v) {
+      d.second = v;
+    }],
+    yyyy: [fourDigits, function (d, v) {
+      d.year = v;
+    }],
+    S: [/\d/, function (d, v) {
+      d.millisecond = v * 100;
+    }],
+    SS: [/\d{2}/, function (d, v) {
+      d.millisecond = v * 10;
+    }],
+    SSS: [threeDigits, function (d, v) {
+      d.millisecond = v;
+    }],
+    D: [twoDigits, noop],
+    ddd: [word, noop],
+    MMM: [word, monthUpdate('monthNamesShort')],
+    MMMM: [word, monthUpdate('monthNames')],
+    a: [word, function (d, v, i18n) {
+      var val = v.toLowerCase();
+      if (val === i18n.amPm[0]) {
+        d.isPm = false;
+      } else if (val === i18n.amPm[1]) {
+        d.isPm = true;
+      }
+    }],
+    ZZ: [/[\+\-]\d\d:?\d\d/, function (d, v) {
+      var parts = (v + '').match(/([\+\-]|\d\d)/gi), minutes;
+
+      if (parts) {
+        minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
+        d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
+      }
+    }]
+  };
+  parseFlags.DD = parseFlags.D;
+  parseFlags.dddd = parseFlags.ddd;
+  parseFlags.Do = parseFlags.dd = parseFlags.d;
+  parseFlags.mm = parseFlags.m;
+  parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
+  parseFlags.MM = parseFlags.M;
+  parseFlags.ss = parseFlags.s;
+  parseFlags.A = parseFlags.a;
+
+
+  fecha.masks = {
+    'default': 'ddd MMM dd yyyy HH:mm:ss',
+    shortDate: 'M/D/yy',
+    mediumDate: 'MMM d, yyyy',
+    longDate: 'MMMM d, yyyy',
+    fullDate: 'dddd, MMMM d, yyyy',
+    shortTime: 'HH:mm',
+    mediumTime: 'HH:mm:ss',
+    longTime: 'HH:mm:ss.SSS'
+  };
+
+
+  fecha.format = function (dateObj, mask, i18nSettings) {
+    var i18n = i18nSettings || fecha.i18n;
+
+    if (typeof dateObj === 'number') {
+      dateObj = new Date(dateObj);
+    }
+
+    if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
+      //throw new Error('Invalid Date in fecha.format');
+    }
+
+    mask = fecha.masks[mask] || mask || fecha.masks['default'];
+
+    return mask.replace(token, function ($0) {
+      return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
+    });
+  };
+
+
+  fecha.parse = function (dateStr, format, i18nSettings) {
+    var i18n = i18nSettings || fecha.i18n;
+
+    if (typeof format !== 'string') {
+      throw new Error('Invalid format in fecha.parse');
+    }
+
+    format = fecha.masks[format] || format;
+
+    if (dateStr.length > 1000) {
+      return false;
+    }
+
+    var isValid = true;
+    var dateInfo = {};
+    format.replace(token, function ($0) {
+      if (parseFlags[$0]) {
+        var info = parseFlags[$0];
+        var index = dateStr.search(info[0]);
+        if (!~index) {
+          isValid = false;
+        } else {
+          dateStr.replace(info[0], function (result) {
+            info[1](dateInfo, result, i18n);
+            dateStr = dateStr.substr(index + result.length);
+            return result;
+          });
+        }
+      }
+
+      return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);
+    });
+
+    if (!isValid) {
+      return false;
+    }
+
+    var today = new Date();
+    if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
+      dateInfo.hour = +dateInfo.hour + 12;
+    } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
+      dateInfo.hour = 0;
+    }
+
+    var date;
+    if (dateInfo.timezoneOffset != null) {
+      dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
+      date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+        dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
+    } else {
+      date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
+        dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
+    }
+    return date;
+  };
+
+  if (typeof module !== 'undefined' && module.exports) {
+    module.exports = fecha;
+  } else if (typeof define === 'function' && define.amd) {
+    define(function () {
+      return fecha;
+    });
+  } else {
+    main.fecha = fecha;
+  }
+})(this);
diff --git a/src/utils/deviceInfo.js b/src/utils/deviceInfo.js
new file mode 100644
index 0000000..6638cae
--- /dev/null
+++ b/src/utils/deviceInfo.js
@@ -0,0 +1,88 @@
+/**
+ * Created by c.k on 2017/11/10.
+ *  获取客户端本地设备信息和渠道编号
+ */
+
+export default {
+    saveDeviceInfo(deviceInfo) {
+        // 外链默认解析地址里面的chanNo,app时解析原生回传的chanNo
+        //   alert(deviceInfo);
+        deviceInfo = JSON.parse(deviceInfo);
+        if (deviceInfo && deviceInfo.childChan) {
+            deviceInfo.isApp = '1';
+        }
+        let configInfo = window.localStorage.getItem('newClientInfo');
+        if (configInfo) {
+            configInfo = JSON.parse(configInfo);
+            for (let key in deviceInfo) {
+                configInfo[key] = deviceInfo[key];
+            }
+            configInfo.ostype = '03';
+
+            window.localStorage.setItem(
+                'newClientInfo',
+                JSON.stringify(configInfo)
+            );
+        }
+        deviceInfo = JSON.stringify(deviceInfo);
+        window.localStorage.setItem('deviceInfo', deviceInfo);
+    },
+    // 获取本地存储的设备信息
+    fetchDeviceInfo() {
+        return window.localStorage.getItem('deviceInfo');
+    },
+    // 获取设备类型
+    getDeviceType() {
+        let browser = {
+            versions() {
+                let u = navigator.userAgent;
+                return {
+                    trident: u.indexOf('Trident') > -1, // IE内核
+                    presto: u.indexOf('Presto') > -1, // opera内核
+                    webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
+                    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, // 火狐内核
+                    mobile: !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端
+                    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
+                    android:
+                        u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或者uc浏览器
+                    iPhone: u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器
+                    iPad: u.indexOf('iPad') > -1, // 是否iPad
+                    webApp: u.indexOf('Safari') === -1, // 是否web应该程序,没有头部与底部
+                    weixin: u.indexOf('MicroMessenger') > -1, // 是否微信 (2015-01-22新增)
+                    qq: u.match(/\sQQ/i) === 'qq' // 是否QQ
+                };
+            },
+            language: (
+                navigator.browserLanguage || navigator.language
+            ).toLowerCase()
+        };
+        var u = navigator.userAgent;
+        var device = ''; //当前设备信息
+        if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {
+            //安卓手机
+            device = 'Android';
+            return 'Android';
+        } else if (u.indexOf('iPhone') > -1) {
+            //苹果手机
+            device = 'IOS';
+            return 'IOS';
+        } else if (u.indexOf('Windows Phone') > -1) {
+            //winphone手机
+            device = 'WindowsPhone';
+            return 'WindowsPhone';
+        } else if (u.indexOf('MicroMessenger') > -1) {
+            device = 'weixin';
+            return 'weixin';
+        }
+        //    let type = browser.versions();
+        //    if (type.android) {
+        //      return 'Android'
+        //    } else if (type.ios || type.iPhone || type.iPad) {
+        //      return 'IOS'
+        //    } else if (type.weixin) {
+        //      return 'weixin'
+        //    } else {
+        //      return 'other'
+        //    }
+    }
+};
diff --git a/src/utils/filters.js b/src/utils/filters.js
new file mode 100644
index 0000000..3346194
--- /dev/null
+++ b/src/utils/filters.js
@@ -0,0 +1,31 @@
+/*
+ * @Descripttion: Vue过滤器
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-05 11:32:33
+ * @LastEditTime: 2019-08-21 09:57:18
+ */
+import dataformat from "./dateformat";
+
+/**
+ * @Descripttion: 格式化电话号码
+ * @param {tel} 电话号码 
+ * @return: 13388327924 >>> 133****7924 
+ */
+export function formatPhone(tel) {
+    return tel.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
+}
+
+
+let list = [
+    {name:'timeformat',fn:dataformat.format},
+    // {name:'phoneformat',fn:formatPhone},
+];
+
+export default {
+    install(Vue,opt){
+        list.forEach(item=>{
+            Vue.filter(item.name,item.fn);        
+        })
+    }
+}
\ No newline at end of file
diff --git a/src/utils/formCheckAndComb.js b/src/utils/formCheckAndComb.js
new file mode 100644
index 0000000..4b1a35b
--- /dev/null
+++ b/src/utils/formCheckAndComb.js
@@ -0,0 +1,194 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-09-02 09:12:30
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-09-02 09:18:52
+ * @Description:
+ */
+/**
+ * Created by c.y
+ * 2018/4/12
+ * form--提交数据组合--例如房抵贷
+ */
+import Vue from 'vue';
+import validate from './validator';
+import IDValidator from './IDValidator';
+
+
+// 把后台返回的null,转换为空字符串, infoObj需要检查
+function changeNullToString (infoObj) {
+  for (let i in infoObj) {
+    infoObj[i] === null ? infoObj[i] = '' : infoObj[i] = infoObj[i];
+  }
+  return infoObj;
+}
+
+// 组合后台返回省,市,区---来满足vux的地址选择插件需要的格式
+// province省 city市 country区
+function getAddressFormat (province, city, country) {
+  let addressList = [];
+  if (!validate.checkValEmpty(province)) {
+    addressList.push(province);
+  }
+  if (!validate.checkValEmpty(city)) {
+    addressList.push(city);
+  }
+  if (!validate.checkValEmpty(country)) {
+    addressList.push(country);
+  }
+  return addressList;
+}
+
+// 判断地址类型的值,是否必填,并进行提示
+// addressList, 代表需要校验的地址数组
+function checkAddressRequired (addressList) {
+  return validate.checkValEmpty(addressList[0]);
+}
+
+// 得到selector的列表
+function getOptionsList (optionList) {
+  let tmpList = [];
+  if (optionList instanceof Array) {
+    optionList.forEach(function (item) {
+      tmpList.push({
+        key: item.code,
+        value: item.name
+      });
+    });
+  }
+  return tmpList;
+}
+
+// 检查必填的字段以及错误提示, requiredList是检查规则, checkInfo要检查的对象
+// context为this对象
+function checkRequiredField (requiredList, checkInfo, context) {
+  let allPassLabel = true;
+  for (let i = 0; i < requiredList.length; i++) {
+    // 如果配置了validator,那么就以validator进行验证,忽略其他验证(validator需要是函数)
+    if (requiredList[i].validator && Object.prototype.toString.call(requiredList[i].validator) === '[object Function]') {
+      if (!requiredList[i].validator(requiredList[i], checkInfo, context)) {
+        allPassLabel = false;
+        return false;
+      }
+    // 如果是地址的话
+    } else if (requiredList[i].type === 'address') {
+      // 对于地址检查,是否为空,为空的话,返回true
+      if (checkAddressRequired(context[requiredList[i].checkKey])) {
+        checkValidateTip(requiredList[i], context);
+        allPassLabel = false;
+        return false;
+      }
+      // 如果是非地址的话,那么第一步检查是否为空
+    } else {
+      // 第一步,先检查是否填写
+      if (validate.checkValEmpty(checkInfo[requiredList[i].key])) {
+        checkValidateTip(requiredList[i], context);
+        allPassLabel = false;
+        return false;
+      }
+      // 如果有patter的话,直接使用pattern,即正则判断(pattern需要正则)
+      if (requiredList[i].pattern && Object.prototype.toString.call(requiredList[i].pattern) === '[object RegExp]') {
+          if(!requiredList[i].pattern.test(checkInfo[requiredList[i].key])) {
+            checkRegularExpreTip(requiredList[i], context);
+            allPassLabel = false;
+            return false;
+          }
+      }
+      // 对于特定类型,进行判断是否添加正确的类型
+      // 如果是名字类型
+      if (requiredList[i].type === 'name') {
+        if (!validate.checkName(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+        // 如果是手机号
+      } else if (requiredList[i].type === 'tel') {
+        if (!validate.checkPhone(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+        // 如果是身份证
+      } else if (requiredList[i].type === 'idCard') {
+        if (!IDValidator.isValid(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+        // 如果是座机
+      } else if (requiredList[i].type === 'lineTel') {
+        if (!validate.checkLandline(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+        // 如果是房屋楼层
+      } else if (requiredList[i].type === 'floor') {
+        if (!validate.checkFloor(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+        // 如果是银行卡
+      }else if (requiredList[i].type === 'bankCardNo') {
+        if (!validate.bankCard(checkInfo[requiredList[i].key])) {
+          checkRegularExpreTip(requiredList[i], context);
+          allPassLabel = false;
+          return false;
+        }
+      }else if (requiredList[i].type === 'isEmail') {
+          if (!validate.checkEmail(checkInfo[requiredList[i].key])) {
+              checkRegularExpreTip(requiredList[i], context);
+              allPassLabel = false;
+              return false;
+          }
+      }
+    }
+  }
+  return allPassLabel;
+}
+
+// 错误提示, requiredItem为检查的对象,context为this对象
+function checkValidateTip (requiredItem, context) {
+  let _this = context;
+  // tipType值为1为输入框,为2的话是下拉选择
+  if (requiredItem.tipType === 1) {
+    // 如果进行正则验证的话,那么提示内容是正确,而一般的提示没有正确的这个提示字
+    // 如果没有type属性的话,那么就是默认的
+    Vue.prototype.$notify('请输入' + requiredItem.message, 'middle');
+    return false;
+  } else if (requiredItem.tipType === 2) {
+    Vue.prototype.$notify('请选择' + requiredItem.message, 'middle');
+    return false;
+  }
+}
+
+// 错题提示,requiredItem为检查的对象,context为this对象
+// 这个是正则匹配的检测或者其他特殊检测的提示
+function checkRegularExpreTip (requiredItem, context) {
+  Vue.prototype.$notify('请输入正确的' + requiredItem.message, 'middle');
+  return false;
+}
+
+// 封装提交数据 submitVal需要提交的val对象
+function packageSubmitInfo (submitVal) {
+  let submitInfo = {};
+  if (submitVal instanceof Object && submitVal !== null) {
+    for (let i in submitVal) {
+        // 对于非必填的话,其值为空的话,那么不传递给后台
+        if (!validate.checkValEmpty(submitVal[i])) {
+          submitInfo[i] = submitVal[i];
+        }
+    }
+  }
+  return submitInfo;
+}
+
+export default {
+  getAddressFormat,
+  getOptionsList,
+  checkRequiredField,
+  packageSubmitInfo,
+  changeNullToString
+};
diff --git a/src/utils/formValidator.js b/src/utils/formValidator.js
new file mode 100644
index 0000000..6dc4f21
--- /dev/null
+++ b/src/utils/formValidator.js
@@ -0,0 +1,101 @@
+/*
+ * @Descripttion: 表单验证工具函数
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-04-01 19:54:53
+ * @LastEditTime: 2019-08-22 14:23:15
+ */
+import IDValidator from './IDValidator';
+
+let fns = {
+    // 参数是否为真
+    isEmpty(value) {
+        return value !== "" && typeof value !== "undefined" && value !== null;
+    },
+    //密码验证
+    isPassword(value) {
+        // 验证密码格式
+        return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(value);
+    },
+    // 验证码验证
+    isCode(value) {
+        return /^\d{4}$/.test(value);
+    },
+    isEmail(value){
+        return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value);
+    },
+    // 验证电话
+    isTel(value) {
+        return /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/.test(value);
+    },
+    //验证身份证
+    isIdCard(value){
+        return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[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)
+    },
+    // idCard check
+    checkIDCard(idCard) {
+        // 验证身份证格式
+        return IDValidator.isValid(idCard);
+    },
+    //验证银行卡号
+    isBankCode(iccid){
+        let initCard = iccid,
+            s1 = 0,
+            s2 = 0;
+        iccid = iccid.substring(0, iccid.length - 1);
+        let reverse = '';
+        for (let i = iccid.length; i > 0; i--) {
+            reverse += iccid.charAt(i - 1);
+        }
+        for (let i = 0; i < reverse.length; i++) {
+            let digit = parseInt(reverse.charAt(i), 10);
+            if (i % 2 != 0) {
+                s1 += digit;
+            } else {
+                s2 += 2 * digit;
+                if (digit >= 5) {
+                    s2 -= 9;
+                }
+            }
+        }
+        let sum = 10 - ((s1 + s2) % 10);
+        if (sum === 10) {
+            sum = 0;
+        }
+        return iccid + sum == initCard;
+    }
+};
+
+let Validator = function (form, rules) {
+    return {
+        // rule demo
+        //rules:>>> [{key:"formkey",message:"",type:"isEmpty",rule:/\d/}]
+        check(callback) {
+            if (!Array.isArray(rules) && rules.length === 0) throw "rules must be instance of Array";
+            let len = rules.length;
+            for (let index = 0; index < len; index++) {
+                const ruleItem = rules[index];
+                let fnName = fns[ruleItem.type];
+                if (fnName && !fnName(form[ruleItem.key])) {
+                    callback(ruleItem);
+                    return false;
+                }
+                // 如果有自定义验证规则
+                let rule = ruleItem.rule;
+                if(typeof rule !=='undefined' && !rule.test(form[ruleItem.key])){
+                    callback(ruleItem);
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+};
+
+
+// export default Validator;
+export default {
+    install(Vue,opt){
+        Vue.prototype.$validator = Validator;
+    }
+}
diff --git a/src/utils/index.js b/src/utils/index.js
new file mode 100644
index 0000000..8ebb489
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,361 @@
+/*
+ * @Descripttion: 工具函数 以 _ 符号作为函数前缀
+ * @Author: TM丶
+ * @LastEditors: 小明丶
+ * @Date: 2019-03-10 22:05:50
+ * @LastEditTime: 2020-03-27 14:17:45
+ */
+
+/**
+ * @Descripttion: 函数节流
+ * @param {method} 执行的方法
+ * @param {delay} 延迟时间
+ * @param {context} 绑定的this值
+ * @return: Function
+ */
+export function _throller(method, delay, context) {
+    var begin = new Date();
+    return function () {
+        var args = arguments,
+            current = new Date();
+        if (current - begin >= delay) {
+            method.apply(context, args);
+            begin = current;
+        }
+    }
+}
+
+/**
+ * @Descripttion: 函数防抖
+ * @param {method} 执行的方法
+ * @param {delay} 延迟时间
+ * @return: Function
+ */
+export function _debounce(method, delay) {
+    let timer = null;
+    return function () {
+        let context = this,
+            args = arguments;
+
+        clearTimeout(timer);
+        timer = setTimeout(function () {
+            method.apply(context, args);
+        }, delay);
+    }
+}
+
+/**
+ * @Descripttion: 字符串参数解析
+ * @demo '?demo=123&test=test'
+ * @return: {demo:123,test:'test'}
+ */
+export function _getQueryArgs(str) {
+    if (str.indexOf('?') === -1) {
+        throw Error('参数错误')
+    }
+    let args = new URLSearchParams(str);
+    return args;
+}
+
+/**
+ * @Descripttion: 将base64转换为文件
+ * @param {dataurl} base64
+ * @param {filename} 要创建的文件名
+ * @return: file
+ */
+export function _dataURLtoFile(dataurl, filename) {
+    var arr = dataurl.split(','),
+        mime = arr[0].match(/:(.*?);/)[1],
+        bstr = atob(arr[1]),
+        n = bstr.length,
+        u8arr = new Uint8Array(n);
+    while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+    }
+    return new File([u8arr], filename, {
+        type: mime
+    });
+}
+
+
+/**
+ * @Descripttion: 文字复制到设备的剪切板
+ * @param {text} 要复制的文字
+ * @return: Boolean
+ */
+export function _copyToClipboard(text) {
+    var textArea = document.createElement('textarea');
+    textArea.style.position = 'fixed';
+    textArea.style.top = 0;
+    textArea.style.left = 0;
+    textArea.style.width = '2em';
+    textArea.style.height = '2em';
+    textArea.style.padding = 0;
+    textArea.style.border = 'none';
+    textArea.style.outline = 'none';
+    textArea.style.boxShadow = 'none';
+    textArea.style.background = 'transparent';
+    textArea.value = text ? text : "";
+    document.body.appendChild(textArea);
+    if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {//区分iPhone设备
+      window.getSelection().removeAllRanges();//这段代码必须放在前面否则无效
+      // var Url2=document.getElementById("biaoios");//要复制文字的节点
+      var range = document.createRange();
+      // 选中需要复制的节点
+      range.selectNode(textArea);
+      // 执行选中元素
+      window.getSelection().addRange(range);
+      // 执行 copy 操作
+      var successful = document.execCommand('copy');
+      // 移除选中的元素
+      window.getSelection().removeAllRanges();
+    } else {
+      textArea.select();
+      var msg = document.execCommand("Copy");
+    }
+    document.body.removeChild(textArea);
+}
+
+
+/**文件转换base64
+ * @param { 文件对象 } file 
+ * @return { Promise }
+ */
+export function _fileToBase64(file) {
+    if (Object.prototype.toString.call(file) !== "[object File]") {
+        console.warn(`file 必须是 文件! >>>${file}`);
+        return
+    }
+    let reader = new FileReader();
+    reader.readAsDataURL(file);
+    return new Promise((resolve, reject) => {
+        reader.onload = function () {
+            resolve(this.result);
+        }
+    })
+}
+
+
+/**
+ * @Descripttion: 图片压缩
+ * @param {path} 图片路径 || base64 
+ * @param {options} {quality:图片质量0-1,width,height}
+ * @return: base64
+ */
+export function _imgCompress(path, options = {}) {
+    return new Promise((resolve, reject) => {
+        let img = new Image();
+        img.src = path;
+        img.onload = function () {
+            let that = this,
+                w = that.width,
+                h = that.height,
+                scale = w / h, // 默认按比例压缩
+                quality = options.quality || 0.3,
+                canvas = document.createElement('canvas'),
+                ctx = canvas.getContext('2d');
+
+            w = options.width || w;
+            h = options.height || (w / scale);
+            canvas.width = w;
+            canvas.height = h;
+            ctx.drawImage(that, 0, 0, w, h);
+            if (options.quality && options.quality <= 1 && options.quality > 0) {
+                quality = options.quality;
+            }
+            let base64 = canvas.toDataURL('image/jpeg', quality);
+            resolve(base64);
+        }
+    })
+}
+
+// 使input=number的maxlength有效
+export function disabledInputStr() {
+    window.addEventListener('input', (event) => {
+        let el = event.target,
+            val = el.value,
+            tagName = el.tagName.toUpperCase();
+        if (tagName === 'INPUT' && el.getAttribute('type') === 'number') {
+            let maxlength = el.getAttribute('maxlength');
+            if (val.length >= maxlength) {
+                el.value = val.slice(0, maxlength);
+                event.preventDefault();
+            }
+        }
+    })
+}
+
+//移动端判断设备类型:安卓 或 ios
+export function judegeDevice() {
+    let type = {
+        isIos: false,
+        isAndroid: false,
+    }
+    var u = navigator.userAgent;
+    if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
+        type.isAndroid = true;
+    } else if (u.indexOf('iPhone') > -1) { //苹果手机
+        type.isIos = true;
+    }
+    return type;
+}
+
+//解决安卓中键盘弹起时顶起页面,导致元素不在可视区内的问题
+export function scrollElement() {
+    if (judegeDevice.isAndroid) {
+        window.addEventListener("resize", function () {
+            let el = document.activeElement;
+            if (el.tagName == "INPUT" || el.tagName == "TEXTAREA") {
+                setTimeout(function () {
+                    // el.scrollIntoViewIfNeeded();
+                    el.scrollIntoView({
+                        behavior: 'smooth',
+                    });
+                }, 16.7);
+            }
+        })
+    }
+}
+
+
+
+/**
+ * @description: 禁止右键、选择、复制
+ */
+export function a() {
+    ['contextmenu', 'selectstart', 'copy'].forEach(function (ev) {
+        document.addEventListener(ev, function (event) {
+            return event.returnValue = false
+        })
+    });
+}
+
+// 根据 用户的机构类型 获取参数
+export function getParams(orgType, id) {
+    if(!id) return {};
+    let obj = {}
+    switch (orgType) {
+        case 1:
+        case 2:
+            // 代理、渠道
+            obj.merList = [id]
+            break;
+        case 3:
+            //商户
+            obj.storeList = [id]
+            break;
+    }
+    return obj
+}
+
+// 解析地区
+export function calcArea(arr){
+    let province_list =[],
+        city_list = [],
+        county_list = [];
+
+    function parseArea(arr) {
+        let obj = {}
+        arr.forEach(item => {
+            obj[item.value] = item.name;
+        })
+        return obj;
+    }
+    
+    arr.forEach(item => {
+        item.value = +item.value;
+        let value = item.value;
+        if (!item.parent) {
+            province_list.push(item)
+        } else if (item.parent % 10000 === 0) {
+            city_list.push(item)
+        } else {
+            county_list.push(item)
+        }
+    })
+    return {
+        province_list:parseArea(province_list),
+        city_list:parseArea(city_list),
+        county_list:parseArea(county_list)
+    }
+}
+// 解析地区
+export function calcAreaTwo(arr){
+    let province_list =[],
+        city_list = [],
+        county_list = [];
+
+    function parseArea(arr) {
+        let obj = {}
+        arr.forEach(item => {
+            obj[item.value] = item.name;
+        })
+        return obj;
+    }
+    
+    arr.forEach(item => {
+        item.value = +item.value;
+        let value = item.value;
+        if (item.value%10000 ===0 ) {
+            province_list.push(item)
+        } else if (item.value % 100 === 0) {
+            city_list.push(item)
+        } else {
+            county_list.push(item)
+        }
+    })
+    return {
+        province_list:parseArea(province_list),
+        city_list:parseArea(city_list),
+        county_list:parseArea(county_list)
+    }
+}
+
+export function compress(img){
+    // 用于压缩图片的canvas
+    let canvas = document.createElement('canvas');
+    let ctx = canvas.getContext('2d');
+
+    //    瓦片canvas
+    var tCanvas = document.createElement('canvas');
+    var tctx = tCanvas.getContext('2d');
+
+    let width = img.width;
+    let height = img.height;
+
+    // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下
+    var ratio;
+    if ((ratio = width * height / 4000000) > 1) {
+        ratio = Math.sqrt(ratio);
+        width /= ratio;
+        height /= ratio;
+    } else {
+        ratio = 1;
+    }
+    canvas.width = width * 2;
+    canvas.height = height * 2;
+    // 铺底色
+    ctx.fillStyle = '#fff';
+    ctx.fillRect(0, 0, canvas.width, canvas.height);
+    // 如果图片像素大于100万则使用瓦片绘制
+    var count;
+    if ((count = width * height / 1000000) > 1) {
+        count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片
+        // 计算每块瓦片的宽和高
+        var nw = ~~(width / count);
+        var nh = ~~(height / count);
+        tCanvas.width = nw;
+        tCanvas.height = nh;
+        for (var i = 0; i < count; i++) {
+            for (var j = 0; j < count; j++) {
+                tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio * 2, nh * ratio * 2, 0, 0, nw, nh);
+                ctx.drawImage(tCanvas, i * nw, j * nh, nw * 2, nh * 2);
+            }
+        }
+    } else {
+        ctx.drawImage(img, 0, 0, width * 2, height * 2);
+    }
+    // 进行最小压缩
+    let ndata = canvas.toDataURL('image/jpeg', 0.8);
+    return ndata;
+}
\ No newline at end of file
diff --git a/src/utils/jsBridge.js b/src/utils/jsBridge.js
new file mode 100644
index 0000000..8c4a6a9
--- /dev/null
+++ b/src/utils/jsBridge.js
@@ -0,0 +1,265 @@
+/**
+ * Created by c.k on 2017/11/20.
+ *  global WebViewJavascriptBridge
+ * */
+import deviceInfo from './deviceInfo';
+// import store from '../store'
+// import statisticHelper from './statisticalHelper'
+// import channelHelper from './channel'
+const setupWebViewJavascriptBridge = callback => {
+    // 注册事件监听
+    if (window.WebViewJavascriptBridge) {
+        return callback(WebViewJavascriptBridge);
+    } else {
+        document.addEventListener(
+            'WebViewJavascriptBridgeReady',
+            () => {
+                callback(WebViewJavascriptBridge);
+            },
+            false
+        );
+    }
+
+    if (window.WVJBCallbacks) {
+        return window.WVJBCallbacks.push(callback);
+    }
+    window.WVJBCallbacks = [callback];
+    let WVJBIframe = document.createElement('iframe');
+    WVJBIframe.style.display = 'none';
+    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
+    document.documentElement.appendChild(WVJBIframe);
+    setTimeout(function() {
+        document.documentElement.removeChild(WVJBIframe);
+    }, 0);
+};
+
+export default {
+    showLog(log) {
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler('showLog', log, function responseCallback(
+                responseData
+            ) {});
+        });
+    },
+    closeApp() {
+        if (window.android && window.android.closeActivity) {
+            window.android.closeActivity();
+        }
+    },
+    // 获取原生设备信息
+    fetchDeviceInfo() {
+        if (deviceInfo.getDeviceType() === 'Android') {
+            if (window.android && window.android.fetchDeviceInfo) {
+                let responseData = window.android.fetchDeviceInfo();
+                deviceInfo.saveDeviceInfo(responseData);
+            }
+        } else {
+            setupWebViewJavascriptBridge(function(bridge) {
+                bridge.callHandler('kJSFetchDeviceInfo', function(
+                    responseData
+                ) {
+                    deviceInfo.saveDeviceInfo(responseData);
+                });
+            });
+        }
+    },
+    // 回传页面链接至原生
+    sendApplyPageUrlToNative() {
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler(
+                'kJSFetchApplyURL',
+                window.location.href,
+                function responseCallback(responseData) {}
+            );
+        });
+    },
+    // 回传页面信息至原生
+    sendApplyPageInfoToNative(info) {
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler(
+                'kJSFetchProductInfo',
+                info,
+                function responseCallback(responseData) {}
+            );
+        });
+    },
+    // 每次启动app时清除之前的登录状态
+    logoutWhenAppLaunch() {
+        // for android
+        // window.forceLogoutWhenAppLaunch = function () {
+        //   store.dispatch('logout')
+        //   // 首次进入app,默认统计第一个按钮点击事件
+        //   statisticHelper.tabbarEventStatistical('loansupermarket');
+        // }
+        // for iOS
+        // setupWebViewJavascriptBridge(function (bridge) {
+        //   bridge.registerHandler('kJSAppLaunch', function (data) {
+        //     store.dispatch('logout')
+        //     // 首次进入app,默认统计第一个按钮点击事件
+        //     statisticHelper.tabbarEventStatistical('loansupermarket');
+        //   })
+        // })
+        // if (!channelHelper.isApp()) {
+        //   statisticHelper.tabbarEventStatistical('loansupermarket');
+        // }
+    },
+    // 隐藏原生启动页
+    hideNativeLaunchImage() {
+        // for android
+        if (window.appNative && window.appNative.hideLaunchView) {
+            window.appNative.hideLaunchView();
+        }
+        // for iOS
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler('kJSHideLaunchImage', function responseCallback(
+                responseData
+            ) {});
+        });
+    },
+    // 隐藏显示原生header
+    showAndHideNativeHeader(show) {
+        // for android
+        if (window.native && window.native.showHeader) {
+            window.native.showHeader(show);
+        }
+        // for iOS
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler(
+                'kJSShowAndHideNativeHeader',
+                show,
+                function responseCallback(responseData) {}
+            );
+        });
+    },
+    // 打开微信
+    openWX() {
+        // for android
+        if (window.android && window.android.openWX) {
+            window.android.openWX();
+        }
+        // for iOS
+        // setupWebViewJavascriptBridge(function (bridge) {
+        //   bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) {
+        //   })
+        // })
+    },
+    // 打开相册
+    openQrCode() {
+        // for android
+        if (window.android && window.android.fetchQrCode) {
+            window.android.fetchQrCode();
+        } else {
+        }
+        // for iOS
+    },
+
+    // 打开QQ
+    openQQ() {
+        // for android
+        if (window.android && window.android.openQQApplication) {
+            window.android.openQQApplication();
+        }
+        // for iOS
+        // setupWebViewJavascriptBridge(function (bridge) {
+        //     bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) {
+        //     })
+        // })
+    },
+    //打开通讯录
+    openConect(callback) {
+        console.log('js打开通讯录');
+        //for iOS
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler('kJSOpenConect', function responseCallback(
+                responseData
+            ) {});
+
+            bridge.registerHandler('sendContectInfo', function(
+                data,
+                responseData
+            ) {
+                if (callback) {
+                    callback(data);
+                }
+            });
+        });
+    },
+    //获取高德地图定位位置信息
+    getAMMapLoactionMsg(callback) {
+        console.log('js获取位置信息');
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler(
+                'kJSGetAMMapLoactionInfo',
+                function responseCallback(responseData) {
+                    // alert(responseData.detail);
+
+                    if (callback) {
+                        callback(responseData);
+                    }
+                }
+            );
+
+            // bridge.registerHandler('sendAMMapLoactionInfo',function (data,responseData) {
+
+            //     // alert(data.address);
+
+            //     if(callback){
+            //           callback(data);
+            //     }
+
+            // })
+        });
+    },
+
+    //调用ios相机
+    openCamera(callback) {
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler('kJSGetCameraInfo', function responseCallback(
+                responseData
+            ) {
+                if (callback) {
+                    callback(responseData);
+                }
+            });
+        });
+    },
+
+    openAlbum(callback) {
+        setupWebViewJavascriptBridge(function(bridge) {
+            bridge.callHandler('kJSGetAlbumInfo', function responseCallback(
+                responseData
+            ) {
+                if (callback) {
+                    callback(responseData);
+                }
+            });
+        });
+    }
+
+    // 检查定位权限是否打开
+    // checkUserAuthorization(callback) {
+    //   // for android
+    //   if (deviceInfo.isAndroidDevice()) {
+    //     if (window.native && window.native.checkUserAuthorization) {
+    //       let isOpen = window.native.checkUserAuthorization();
+    //       if (isOpen && isOpen === 'true') {
+    //         callback(true);
+    //       } else {
+    //         callback(false);
+    //       }
+    //     } else {
+    //       callback(true);
+    //     }
+    //   }
+    //   // for iOS
+    //   setupWebViewJavascriptBridge(function (bridge) {
+    //     bridge.callHandler('kJSCheckUserAuthorization', function responseCallback(responseData) {
+    //       if (responseData && responseData === 'true') {
+    //         callback(true);
+    //       } else {
+    //         callback(false);
+    //       }
+    //     })
+    //   })
+    // }
+};
diff --git a/src/utils/pageBackByAndroid.js b/src/utils/pageBackByAndroid.js
new file mode 100644
index 0000000..bdb31d2
--- /dev/null
+++ b/src/utils/pageBackByAndroid.js
@@ -0,0 +1,43 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-07 17:52:20
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-05-07 18:38:06
+ * @Description: 
+ */
+/**
+ *  android 返回按钮统一调度的方法,
+ *  项目中有两个地方需要修改一个是这个地方,还有有个地方是 index.html 文件
+ */
+import jsBri from './jsBridge';
+import store from '@/store/index';
+
+
+export default {
+    androidBackBtn() {
+        window.backPageByAndroid = function(obj) {
+            let hash = window.sessionStorage.getItem("gotoPagetemp");
+            let footerList =  store.state.footerNav || [];
+            if(footerList && footerList.length){
+                let result = footerList.find(val => {
+                    return val.path === hash;
+                });
+                if (result) {
+                    jsBri.closeApp();
+                } else {
+                    window.history.back();
+                }
+            }else{
+
+                if(hash==='/login'||hash==='/'){
+                    jsBri.closeApp();
+                }else {
+                    window.history.go(-1);
+                }
+            }
+        };
+        window.showOrgIdAndOrgType = function(obj) {
+            window.sessionStorage.setItem('scene_regInfos', obj);
+        };
+    }
+};
diff --git a/src/utils/validator.js b/src/utils/validator.js
new file mode 100644
index 0000000..97e1c7d
--- /dev/null
+++ b/src/utils/validator.js
@@ -0,0 +1,222 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-07 17:52:20
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-03-30 09:33:26
+ * @Description: 
+ */
+/**
+ * TANGIMING 2018-3-9
+ * 这是一个用于存放正则表达式和一些验证方法的插件
+ * 除了存放了目前常用的正则之外,还根据这些正则封装了对应的验证方法
+ */
+import IDValidator from './IDValidator';
+
+export default {
+    // 金额格式化
+    formatMoney(str = 0) {
+        str = str + '';
+        let newStr = '';
+        let count = 0;
+        if (str.indexOf('.') === -1) {
+            for (let i = str.length - 1; i >= 0; i--) {
+                if (count % 3 === 0 && count !== 0) {
+                    newStr = str.charAt(i) + ',' + newStr;
+                } else {
+                    newStr = str.charAt(i) + newStr;
+                }
+                count++;
+            }
+            str = newStr + '.00'; // 自动补小数点后两位
+            return str;
+        } else {
+            for (let i = str.indexOf('.') - 1; i >= 0; i--) {
+                if (count % 3 === 0 && count !== 0) {
+                    newStr = str.charAt(i) + ',' + newStr;
+                } else {
+                    newStr = str.charAt(i) + newStr; // 逐个字符相接起来
+                }
+                count++;
+            }
+            str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3);
+            return str;
+        }
+    },
+    // 身份证 中间用* 显示
+    cardIDHide(cardid) {
+        if (cardid) {
+            return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2');
+        } else {
+            return '';
+        }
+    },
+    //手机号,中间四位*显示
+    formatPhone(phone) {
+        return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
+    },
+    // 电话号码格式
+    checkPhone(phone) {
+        let reg = /^1(3|4|5|6|7|8|9)\d{9}$/
+        //let reg = /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/;
+        return reg.test(phone);
+    },
+    //座机/手机/400号码验证
+    checkCompanyPhone(phone){
+        let reg = /^([0-9]{3,4}-)?[0-9]{7,8}$|^1(3|4|5|6|7|8|9)\d{9}$|^\d{3,4}-\d{3,4}-\d{3,4}$/
+        return reg.test(phone)
+    },
+    checkEmail(email) {
+        // 验证邮箱格式
+        let reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/;
+        // let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;
+        return reg.test(email);
+    },
+    checkVerifyCode(code) {
+        // 验证验证码格式
+        let reg = /^\d{6}$/;
+        return reg.test(code);
+    },
+    checkDynamicCode(code) {
+        // 验证邀请码格式
+        let reg = /^[A-Za-z0-9]{4}$/;
+        return reg.test(code);
+    },
+    // password check
+    checkPassword(password) {
+        // 验证密码格式
+        let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
+        return reg.test(password);
+    },
+    // name check
+    checkName(name) {
+        // 验证用户名格式
+        let reg = /^[\u4E00-\u9FA5]{2,10}$/;
+        return reg.test(name);
+    },
+    //校验真实姓名
+    checkRealName(name) {
+        // 验证用户名格式
+        let reg = /^[\u4E00-\u9FA5]{2,6}$/;
+        return reg.test(name);
+    },
+    //  账户名称的正则表达式
+    checkUsername(name) {
+        let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/;
+        return reg.test(name);
+    },
+    //身份证详细地址验证
+    checkCardAddress(address) { 
+        let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{9,30}$/; 
+        return reg.test(address); 
+    },
+    //详细地址验证
+    checkAddress(address) { 
+        let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{9,30}$/; 
+        return reg.test(address); 
+    },
+    //  统一验证
+    checkCommonField(name) {
+        let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/;
+        return reg.test(name);
+    },
+    // idCard check
+    checkIDCard(idCard) {
+        // 验证身份证格式
+        return IDValidator.isValid(idCard);
+    },
+    isIdcard(val) {
+        let result = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val);
+        return result;
+    },
+    checkValEmpty(str) {
+        // 验证是否为空
+        if (
+            str === undefined ||
+            str === null ||
+            str.length <= 0 ||
+            str === 'undefined'
+        ) {
+            return true;
+        } else {
+            return false;
+        }
+    },
+    // 验证佣金输入金额
+    checkCommission(commission) {
+        // 小于100且后面可以带4个小数点
+        let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/;
+        //一亿以内,保留四位小数
+        //  /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/
+        // 如果通过的话,那么判断小数点的前几位数字
+        return reg.test(commission);
+    },
+    // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写
+    checkChannelNo(channelNo) {
+        let reg = /^[\w\d]{4,8}$/;
+        return reg.test(channelNo);
+    },
+    //验证是否包含空格
+    checkSpace(val) {
+        let reg = /^\s+$/;
+        if (reg.test(val)) {
+            return true;
+        } else {
+            return false;
+        }
+    },
+    //将发送请求中的参数格式化,如果为空则转为null
+    formatReq(obj) {
+        for (let i in obj) {
+            let item = obj[i];
+            if (item === null) continue;
+            if (
+                item === undefined ||
+                item === '' ||
+                item === 'undefined' ||
+                item.length <= 0 ||
+                JSON.stringify(item) == '{}'
+            ) {
+                obj[i] = null;
+            }
+        }
+        return obj;
+    },
+    // 只能输入数字与小数点正则判断
+    checkIntegerAndDot(checkVal) {
+        let dotReg = /\./g;
+        let IntegerReg = /^[1-9]{1}\d{0,5}$/;
+        // 如果输入了多个点,直接不符合要求
+        if (checkVal.match(dotReg) && checkVal.match(dotReg).length > 1) {
+            return false;
+            // 输入了一个点
+        } else if (
+            checkVal.match(dotReg) &&
+            checkVal.match(dotReg).length === 1
+        ) {
+            // 开头与结尾都不能出现点,点的前面与后面必须是数字
+            let strLen = checkVal.length;
+            if (
+                checkVal.indexOf('.') === 0 ||
+                checkVal.indexOf('.') === strLen - 1
+            ) {
+                return false;
+                // 超过个数的限制的话
+            } else {
+                return strLen <= 6;
+            }
+            // 没有小数点的话,那么就是全部数字进行匹配
+        } else if (!checkVal.match(dotReg)) {
+            return IntegerReg.test(checkVal);
+        }
+    },
+    //银行卡验证
+    bankCard(idCard) {
+        let reg =  /^([1-9]{1})(\d{14,30})$/;
+        return reg.test(idCard);
+    },
+    //公司名称校验
+    checkCompany(name){
+        let reg = /^[\u4e00-\u9fa5a-zA-Z]{2,20}$/; 
+        return reg.test(name); 
+    }
+};
diff --git a/src/utils/wechat.js b/src/utils/wechat.js
new file mode 100644
index 0000000..f07446b
--- /dev/null
+++ b/src/utils/wechat.js
@@ -0,0 +1,41 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2020-05-07 18:35:25
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-27 20:10:04
+ * @Description: 
+ */
+
+/**
+ * 微信授权
+ * @param appid 公众号的唯一标识
+ * @param redirect_uri 授权后重定向的回调链接地址(登录后授权了最好返回到登录跳转的主页面), 请使用 urlEncode 对链接进行处理,用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
+ * @param scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
+ * @param state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
+ */
+
+//  export function goWeChat(appid,redirect_uri){
+//         // 拼接微信授权页面链接
+//         var url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`
+        
+//         // 判断用户是否已经授权
+//         if(window.localStorage.edu_ins_client_openId == 'undefined' || !localStorage.edu_ins_client_openId){
+//             window.location.href = url
+//             // 在回调页面去获取到授权返回的code,并且传递给后端
+//         }
+//     }
+    export class  GoWeChat {
+        constructor(appid,redirect_uri){
+            this.appid = appid
+            this.redirect_uri = redirect_uri
+        }
+        gocontract(){
+            // 拼接微信授权页面链接
+            var url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${this.redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`
+             // 判断用户是否已经授权
+            if(window.localStorage.edu_ins_client_openId == 'undefined' || !localStorage.edu_ins_client_openId){
+                window.location.href = url
+                // 在回调页面去获取到授权返回的code,并且传递给后端
+            }
+        }
+    }
diff --git a/src/views/bankCard/index.vue b/src/views/bankCard/index.vue
new file mode 100644
index 0000000..7d19ffe
--- /dev/null
+++ b/src/views/bankCard/index.vue
@@ -0,0 +1,264 @@
+<!--
+ * @Author: your name
+ * @Date: 2021-10-28 17:26:45
+ * @LastEditTime: 2021-11-12 11:20:06
+ * @LastEditors: Please set LastEditors
+ * @Description: In User Settings Edit
+ * @FilePath: \edu_ins_client\src\views\bankCard\index.vue
+-->
+<template>
+  <div class="bankCard_page">
+    <v-navbar title="我的银行卡" back="/home/personal"></v-navbar>
+    <van-form ref='submitFrom' label-width='120px' input-align='right' error-message-align='right'>
+        <!-- <h-cell :disabled='disabled' readonly v-model="mation.goodsName" label="请填写银行名称"></h-cell> -->
+        <van-field
+           
+            v-model="dataFrom.bankName"
+            name="bankName"
+            readonly
+            clickable
+            label="银行名称"
+            placeholder="银行名称"
+            @click="showBankList"
+            :rules="[{ required: true, message: '请填写银行名称' }]"
+        />
+        <van-field
+            :readonly='disabled'
+            v-model="dataFrom.bankCardNo"
+            type="number"
+            name="bankCardNo"
+            label="银行卡号"
+            placeholder="银行卡号"
+            :rules="[{ required: true, message: '请填写银行卡号' }]"
+        />
+        <van-field
+            v-model="dataFrom.bankCardMblNo"
+            :readonly='disabled'
+            type="tel"
+            :maxlength="11"
+            name="bankCardMblNo"
+            label="银行预留手机号"
+            placeholder="银行预留手机号"
+            :rules="[{ required: true, message: '请填写银行预留手机号' },,{validator, message: '手机号格式有误'}]"
+        >
+            <template #button>
+                <van-button   v-if='!disabled&&dataFrom.bankCardMblNo' :disabled='waitTime>0' size="small" @click='sendCode' type="primary">{{codeText}}</van-button>
+            </template>
+        </van-field>
+        <van-field
+            v-model="dataFrom.verCode"
+            :readonly='disabled'
+            v-if='!disabled'
+            name="verCode"
+            label="验证码"
+            placeholder="验证码"
+            :rules="[{ required: true, message: '请输入验证码'}]"
+        />
+        <div style="margin: 16px;">
+            <van-button  v-if='disabled' round block type="info" @click='disabled=false'>换绑</van-button>
+            <van-button  v-if='!disabled' round block  @click='onSubmit' type="info">确认</van-button>
+        </div>
+    </van-form>
+    <van-popup v-model="showPicker" position="bottom" :style="{ height: '40%' }" >   
+        <van-picker
+            show-toolbar
+            :columns="columns"
+            @confirm="onConfirm"
+            @cancel="onCancel"
+            :default-index="defaultIndex" 
+        >
+            <template #title>
+              <form action="/">
+                <van-search v-model="searchValue" @search='onSearch' @input='inputSearch' placeholder="输入银行名称">
+                        <!-- <template #action>
+                            <div @click="onSearch">搜索</div>
+                        </template> -->
+                </van-search>
+              </form>
+            </template>
+        </van-picker>
+    </van-popup>
+  </div>
+</template>
+
+<script>
+import Vue from 'vue';
+import { Form } from 'vant';
+import { Field,Button,Picker,Popup,Search,Dialog } from 'vant';
+
+Vue.use(Form);
+Vue.use(Field);
+Vue.use(Button);
+Vue.use(Picker);
+Vue.use(Popup);
+Vue.use(Search);
+export default {
+  name: '',
+  components: {[Dialog.Component.name]: Dialog.Component,},
+  data() {
+    return {
+      dataFrom:{},
+      submitText:"换绑",
+      columns:[],
+      showPicker:false,
+      searchValue:'',
+      bankCradList:[],
+      defaultIndex:0,
+      disabled:true,
+      codeText:'发送验证码',
+      waitTime:0,
+      timer:null,
+      bankId:"",
+      isClickSend:false,
+    }
+  },
+  methods:{
+    validator(val) {
+      console.log(val)
+      return val.length==11;
+    },
+    onSubmit(values) {
+       if(!this.isClickSend){
+            this.$tool.toast('请先获取验证码');
+            return false
+       }   
+      this.$refs.submitFrom.validate().then(()=>{
+        //  if(!this.dataFrom.bankCardMblNo.length>11){
+        //     this.$tool.toast('手机号格式有误');
+        //     return false
+        //  }   
+          if(!this.disabled){
+            let data ={...values,...this.dataFrom,bankId:this.bankId};
+            this.$api.bindBankCard(data).then(({body})=>{
+               Dialog.alert({
+                  title: '提示',
+                  message: '实名认证成功',
+               });
+              this.disabled =true;
+              clearInterval(this.timer);
+              this.codeText =`发送验证码`;
+              this.waitTime =0;
+              this.dataFrom.verCode ='';
+            }).catch((msg)=>{
+              //  Dialog.alert({
+              //     title: '失败提示',
+              //     message: '绑卡信息有误,请确认信息',
+              //  });
+            });
+          }
+      }).catch(()=>{
+        //验证失败
+      })
+    },
+    onConfirm(value){
+      this.dataFrom.bankName =value.text;
+      this.dataFrom.bankCode =value.code;
+      this.searchValue = '';
+      this.columns = this.bankCradList;
+      this.showPicker = false;
+    },
+    onCancel(){
+      this.showPicker = false;
+      this.searchValue = '';
+      this.columns = this.bankCradList;
+    },
+    showBankList(){
+        if(this.disabled){
+            return true;
+        }
+        sessionStorage.bankList = JSON.stringify(this.columns);
+        this.$router.push({
+          path: "/order-handling/bank-list",
+          query:{isBackName:'backCard'}
+        });
+        // this.showPicker = true;
+        // if(this.dataFrom.bankName){
+        //     this.columns.forEach((b,index)=>{
+        //         if(b.name==this.dataFrom.bankName){
+        //             this.defaultIndex =index; 
+        //         }
+        //     })
+        // }
+    },
+    onSearch(){
+        let arr =[];
+        this.bankCradList.forEach(k=>{
+            if(k.name.indexOf(this.searchValue)>-1){
+              arr.push(k);
+            }
+        });
+        this.columns = arr;
+    },
+    inputSearch(){
+      if(!this.searchValue){
+       this.columns = this.bankCradList; 
+      }
+    },
+    sendCode(){ 
+        let {bankCardMblNo,bankCardNo,bankCode} =this.dataFrom;
+        let data ={bankCardMblNo,bankCardNo,bankCode};
+        let _this =this;
+        if(this.waitTime>0){
+             this.codeText =`${_this.waitTime}秒后重发`;
+             clearInterval(this.timer);
+        }else{
+            this.$api.bankVerCode(data).then(({body})=>{
+                this.isClickSend =true;
+                this.bankId =body.bankId;
+                this.waitTime = 60;
+                this.timer  = setInterval(() => {
+                    this.waitTime--;
+                    this.codeText =`${_this.waitTime}秒后重发`
+                    if (this.waitTime <= 0) {
+                        this.codeText =`发送验证码`
+                        clearInterval(this.timer)
+                    }
+                }, 1000);
+            }); 
+        }
+        
+    }
+  },
+  created(){
+      this.$api.bankCardInfo().then(({body})=>{
+        let {bankCode,bankCardNo,bankCardMblNo} =body;
+        let bankName ='请选择银行';
+        this.columns = body.bankList.map(val=>{
+            if(bankCode == val.code){
+                bankName = val.name;
+            }
+            return {
+                text:val.name,
+                ...val
+            }
+        });
+        this.bankCradList = this.columns;
+        this.dataFrom = {bankCode,bankCardNo,bankCardMblNo,bankName:bankName};
+        let queryObj = this.$route.query;
+        if(queryObj.code){
+          this.dataFrom.bankCode =queryObj.code;
+          this.dataFrom.bankName =queryObj.name;
+          this.disabled =false;
+        }
+      });
+  }
+}
+</script>
+
+<style lang="less">
+.bankCard_page{
+ .van-search{
+   padding: 0;
+   width: 180px;
+ }
+ .van-search>.van-cell{
+   padding: 0;
+ }
+ /deep/ .van-field__control:disabled{
+   color: #999 !important;
+   opacity: 1 !important; 
+   -webkit-text-fill-color:#999 !important;
+   -webkit-opacity:1 !important;
+ }
+}
+</style>
diff --git a/src/views/home.vue b/src/views/home.vue
new file mode 100644
index 0000000..5b0a582
--- /dev/null
+++ b/src/views/home.vue
@@ -0,0 +1,52 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-08 09:28:54
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-05-21 15:38:20
+ * @Description: 
+ -->
+<template>
+  <div class="home-page">
+    <router-view></router-view>
+    <van-tabbar v-model="active" active-color="#5194FE" inactive-color="#666666" route @change="onChange">
+      <van-tabbar-item v-for="(item,index) in footerNav" :key="index" :to="item.to">
+        <template #icon="props">
+          <svg class="icon" aria-hidden="true" style="width:26px;height:26px;">
+            <use v-if="props.active" :xlink:href="'#' + item.icon_h" />
+            <use v-else :xlink:href="'#' + item.icon" />
+          </svg>
+        </template>
+        <span>{{item.title}}</span>
+      </van-tabbar-item>
+    </van-tabbar>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Tabbar, TabbarItem } from "vant";
+import { mapState } from "vuex";
+Vue.use(Tabbar);
+Vue.use(TabbarItem);
+export default {
+  data() {
+    return {
+      active: 0
+    };
+  },
+  computed: {
+    ...mapState(['footerNav']),
+  },
+  created() {
+    if (window.location.search) {
+      // 微信授权登录后返回此页面含有code及state值,将code值发到后端,以获取用户unionId关联电话
+    }
+  },
+  methods: {
+    onChange(){
+      console.log(this.active)
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+</style>
\ No newline at end of file
diff --git a/src/views/homeIndex/home-index.vue b/src/views/homeIndex/home-index.vue
new file mode 100644
index 0000000..cbf5e9b
--- /dev/null
+++ b/src/views/homeIndex/home-index.vue
@@ -0,0 +1,273 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-20 20:29:47
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-08 14:55:26
+ * @Description:
+-->
+<template>
+  <div class="home-index-page">
+    <div class="top-bg-box">
+      <!-- <div class="sweep-box" @click="goOrderHandling">
+        <div class="sweep-top">
+          <i class="iconfont iconsaoyisao"></i>
+        </div>
+        <div class="sweep-bottom">
+          <p>扫一扫</p>
+        </div>
+      </div> -->
+      <div class="btn-box">
+        <button @click="goOrderHandling">办理分期</button>
+      </div>
+      <div class="text-box">
+        <!-- <p>客服电话:028-86043722</p> -->
+        <p>联系邮箱:kefu@finlean.com</p>
+      </div>
+    </div>
+    <van-dialog v-model="show" title="错误提示">
+      <div class="dialog-box">
+        <!-- <p>由于系统问题,暂时无法申请订单,请稍候再试。</p> -->
+        <p>{{errText}}</p>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+<script>
+import Vue from 'vue';
+import { Dialog } from 'vant';
+
+// 全局注册
+Vue.use(Dialog);
+export default {
+  data() {
+    return {
+      show:false,
+      errText:'',
+      businessInfo: {}, //扫码获取商户信息
+      str: "" //二维码获取的字符串
+    };
+  },
+  created() {
+    this.getWXToken();
+
+    // 判断微信接口是否支持
+    wx.checkJsApi({
+      jsApiList: ["checkJsApi", "scanQRCode"], // 需要检测的JS接口列表
+      success: function(res) {}
+    });
+
+  },
+  methods: {
+    /**
+     * 获取当前账号订单进行步骤
+     *
+     *  NO_SCAN(0,"待扫码"),调用扫码
+     *  NO_ID(1,"待上传身份证"),跳转上传身份证页面
+     *  NO_FACE(2,"待人脸识别"),跳转第三方人脸识别
+     *  NO_USER_INFO(3,"待填写个人信息"),跳转个人信息填写页面
+     *  NO_CONT_INFO(4,"待签署合同"),跳转合同签署页面
+     *  NO_IMG_INFO(5,"待上传影像资料"),跳转图片上传页面
+     *  AUDIT(6,"待审核");跳转审核结果页面
+     * **/
+    orderCreateStep() {
+      this.$api.orderCreateStep().then(res => {
+        localStorage.setItem('projId',res.body.projId);
+        // res.body.createStep = 4;
+        if (res.body.createStep == 0) {
+          //调用摄像头
+          this.getCamera();
+        }
+        if (res.body.createStep == 1) {
+          this.$router.push("/order-handling/upload-IDcard");
+        }
+        if (res.body.createStep == 2) {
+            //重新人脸识别,先去协议页面;
+            this.$router.push({
+              path: "/order-handling/face-recognition",
+              query: {isFaceBack:'1'}
+            });
+          // let str = location.host
+          // this.$api
+          //   .getFaceUrl({
+          //     callbackUrl:
+          //       `https://${str}/aic_cus/#/order-handling/face-recognition`
+          //   })
+          //   .then(res => {
+          //     window.location.href = res.body.faceUrl;
+          //   });
+          //this.$router.push('/order-handling/upload-IDcard')
+        }
+        if (res.body.createStep == 3) {
+          this.$router.push("/order-handling/upload-userInfo");
+        }
+        if (res.body.createStep == 4) {
+          window.sessionStorage.backUrl = '/home/index'
+          this.$router.push("/order-handling/contract-signing");
+        }
+        if (res.body.createStep == 5) {
+          this.$router.push(res.body.projId=='100000'?"/order-handling/approval-results":"/order-handling/image-upload");
+        }
+        if (res.body.createStep == 6) {
+          this.$router.push("/order-handling/approval-results");
+        }
+      }).catch(err=>{
+        this.errText = err.errMsg
+        this.show = true
+      })
+    },
+    // 点击获取当前账号在第几步直接跳转到对应步骤
+    goOrderHandling() {
+      this.orderCreateStep();
+    },
+    // 异步准备微信环境
+    checkIsReady() {
+      return new Promise((resolve, reject) => {
+        wx.ready(() => resolve());
+        wx.error(err => reject(console.log(res + "wx.error")));
+      });
+    },
+    // 调取微信jssdk,需要获取token
+    getWXToken() {
+      //let url = window.location.origin + window.location.pathname;
+      let url = location.href.split('#')[0]
+      this.$api.wechatgetSign({ url }).then(
+        res => {
+          // 第二步骤   只需要首页地址分享 ,需要在每次变化时调用
+          wx.config({
+            debug: false, // 开启调试模式
+            appId: res.body.appId,
+            timestamp: res.body.timestamp, // 必填,生成签名的时间戳
+            nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
+            signature: res.body.signature, // 必填,签名,见附录1
+            jsApiList: ["checkJsApi", "scanQRCode"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+          });
+        },
+        error => {
+          console.log(error);
+        }
+      );
+    },
+    //调用摄像头扫码
+    getCamera() {
+      let _this = this;
+      this.checkIsReady().then(() => {
+        if (window.android && window.android.fetchQrCode) {
+          window.android.fetchQrCode();
+        } else {
+          wx.scanQRCode({
+            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+            scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
+            success: function(res) {
+              var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
+              console.log(result);
+              _this.str = res.resultStr;
+              _this.$router.push({
+                path: "/order-handling",
+                query: {
+                  url: _this.str
+                }
+              });
+            }
+          });
+        }
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.home-index-page {
+  & {
+    background: #fff;
+    height: 100vh;
+  }
+  .top-bg-box{
+    &{
+      width: 100%;
+      height: 100vh;
+      background: url('../../../static/img/homeBack.png');
+      background-size: cover;
+      position: relative;
+    }
+    .btn-box{
+      position: absolute;
+      text-align: center;
+      bottom: 147px;
+      width: 100%;
+      button{
+        width:210px;
+        height:40px;
+        background:rgba(255,255,255,1);
+        box-shadow:0px 0px 10px 0px rgba(23,154,198,0.26), 0px -2px 5px 0px rgba(46,150,238,0.3) inset;
+        border-radius:20px;
+        outline: none;
+        border: 0;
+        color: #5194FE;
+      }
+    }
+    .text-box{
+      text-align: center;
+      width: 100%;
+      position: absolute;
+      bottom: 66px;
+      p{
+        font-size:12px;
+        font-family:PingFang SC;
+        font-weight:500;
+        color:rgba(255,255,255,1);
+      }
+      p:nth-of-type(1){
+        margin-bottom: 6px;
+      }
+    }
+  }
+  // .top-bg-box {
+  //   position: relative;
+  //   width: 100vw;
+  //   height: 130px;
+  //   background-image: url("../../../static/img/bg.png");
+  //   background-size: cover;
+  //   .sweep-box {
+  //     width: 120px;
+  //     height: 90px;
+  //     background: rgba(255, 255, 255, 1);
+  //     box-shadow: 0px 0px 15px 0px rgba(26, 100, 225, 0.12);
+  //     border-radius: 8px;
+  //     position: absolute;
+  //     left: 50%;
+  //     top: 78px;
+  //     transform: translateX(-50%);
+  //     text-align: center;
+  //     .sweep-top {
+  //       height: 52px;
+  //       color: #5e9cff;
+  //       line-height: 52px;
+  //       i {
+  //         font-size: 35px;
+  //       }
+  //     }
+  //     .sweep-bottom {
+  //       height: 38px;
+  //       line-height: 38px;
+  //       p {
+  //         font-size: 16px;
+  //         font-family: PingFang SC;
+  //         font-weight: 500;
+  //         color: rgba(51, 51, 51, 1);
+  //       }
+  //     }
+  //   }
+  // }
+  .dialog-box{
+    height: 100px;
+    box-sizing: border-box;
+    padding: 25px 25px ;
+    text-align: left;
+    p{
+      line-height: 20px;
+      color: #666666;
+      font-size: 14px;
+    }
+  }
+}
+</style>
diff --git a/src/views/order-handling/approval-results.vue b/src/views/order-handling/approval-results.vue
new file mode 100644
index 0000000..8b92052
--- /dev/null
+++ b/src/views/order-handling/approval-results.vue
@@ -0,0 +1,326 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 16:38:26
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-13 14:14:09
+ * @Description: 审批结果页面
+-->
+<template>
+  <div class="approval-results-page">
+    <v-navbar title="订单申请"></v-navbar>
+    <div class="steps-box">
+      <div class="steps" :style="{ width: projId == 100001 ? '70%' : '50%' }">
+        <p></p>
+        <div class="step-3">3</div>
+        <div class="step-4">4</div>
+        <div :style="{ left: '170px' }" :class="{ 'step-5': projId == 100001, 'step-6': projId == 100000 }">5</div>
+        <div class="step-6" v-if="projId == 100001">6</div>
+      </div>
+      <div class="zanwei"></div>
+    </div>
+    <!-- 审核结果 -->
+    <div class="mation-box" v-if="state == 1">
+      <p>审核中</p>
+      <p v-if="stepId==100010002">正在审核您的资料,请耐心等待</p>
+      <p v-else>正在进行大数据评估,请耐心等待</p>
+      <img src="../../../static/img/shz.png" />
+    </div>
+    <div class="mation-box" v-if="state == 2">
+      <p>审核未通过</p>
+      <p>您的资料未通过审核</p>
+      <img src="../../../static/img/shsb.png" />
+    </div>
+    <div class="mation-box" v-if="state == 3">
+      <p>审核通过</p>
+      <p>恭喜您,申请已通过!</p>
+      <img src="../../../static/img/shcg.png" />
+    </div>
+    <div class="mation-box" v-if="state == 4">
+      <p>资料重传</p>
+      <p>图片未通过审核,请重新上传</p>
+      <img src="../../../static/img/zlcc.png" />
+    </div>
+    <div class="mation-box" v-if="state == 5">
+      <p>影像资料上传</p>
+      <p>还未上传影像资料</p>
+      <img src="../../../static/img/zlcc.png" />
+    </div>
+    <template v-if="state == 1">
+      <div class="text-box" style="margin-top:20px">
+        <p v-if="stepId==100010002">提示:审核时间平均为15分钟,但在订单较多时,审核时间可能会被延长,我们会尽快为您完成审核,感谢您的理解!(退出页面不影响继续审核)</p>
+        <p v-else>提示:评估时间平均为3分钟,您可离开页面后再返回查看评估结果。若您评估结果为通过的,您可能需要根据页面提示进行下一步操作,感谢您的支持</p>
+      </div>
+      <div v-if="stepId==100010002" class="text-box">
+        <p>人工审核时间:09:00-20:00,非人工审核时间提交的订单,我们会在次日上班后第一时间处理。</p>
+      </div>
+    </template>
+    <template v-if="state == 2">
+      <div class="text-box" style="margin-top:20px">
+        <p>提示:根据目前您提供的资料和信息,我们暂时不能为您提供服务,对此我们深表遗憾,希望您能谅解,期待再次合作!</p>
+      </div>
+    </template>
+    <!-- <template v-if="state == 3">
+      <div class="our-code-box" v-if="code">
+          <p>您的分期交易验证码为</p>
+          <p>
+              <span>【</span>
+              <span class="code">{{code}}</span>
+              <span>】</span>
+          </p>
+      </div>
+      <div v-else class="our-code-box">
+        <p>订单已核销</p>
+      </div>
+      <div class="text-box" style="margin-top:20px">
+        <p>温馨提示:如您确认本次业务为您本人操作且同意按期还款,请将验证码告诉培训机构工作人员!</p>
+      </div>
+    </template> -->
+    <template v-if="state == 4">
+      <div class="text-box" style="margin-top:20px">
+        <p>提示:{{ text }}</p>
+      </div>
+    </template>
+
+    <div class="btn-box">
+      <button @click="goPage">{{ btnText }}</button>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      state: "",
+      code: "",
+      text: "",
+      timer:null,
+      stepId:"",
+      stepName:""
+    };
+  },
+  computed: {
+    btnText() {
+      console.log(this.state+'computed')
+      if (this.state == 1) {
+        return "刷新";
+      }
+      if (this.state == 2) {
+        return "返回首页";
+      }
+      if (this.state == 3) {
+        return "返回首页";
+      }
+      if (this.state == 4||this.state == 5) {
+        return "前往上传";
+      }
+    },
+    projId() {
+      return localStorage.getItem("projId");
+    },
+  },
+  watch:{
+    state(val){
+      if(val==1){
+         this.timer = setInterval(()=>{
+             this.initPage();
+         },5000)
+      }else{
+        clearInterval(this.timer);
+      }
+    }
+  },
+  created() {
+     this.initPage();
+  },
+  methods: {
+    //跳转
+    goPage() {
+      if (this.state == 1) {
+        window.location.reload(true); //强制从服务器重新加载当前页面
+      }
+      if (this.state == 2) {
+        this.$router.push("/home/index");
+      }
+      if (this.state == 3) {
+        this.$router.push("/home/index");
+      }
+      if (this.state == 4||this.state==5) {
+        //跳回资料上传页面
+        this.$router.push("/order-handling/image-upload");
+      }
+    },
+    initPage(){
+       this.$api.initAuditInfo().then(({body}) => {
+          this.state = body.auditStatus; 
+          this.code = body.pickCode;
+          this.text = body.auditMsg;
+          this.stepId = body.stepId;//审核步骤 100010001-机审,100010002-人工审核
+          this.stepName = body.stepName;
+       });
+    }
+  },
+  destroyed(){
+    clearInterval(this.timer);
+  }
+};
+</script>
+<style lang="less" scoped>
+.approval-results-page {
+  & {
+    min-height: 100vh;
+  }
+  .steps-box {
+    .steps {
+      width: 70%;
+      height: 65px;
+      position: relative;
+
+      p {
+        border-bottom: 1px dashed #b3b3b3;
+        height: 32px;
+      }
+      .step-3 {
+        text-align: center;
+        line-height: 30px;
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 18px;
+        top: 19px;
+      }
+      .step-4 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(113, 123, 133, 1);
+        border: 0;
+        border-radius: 50%;
+        color: #fff;
+        position: absolute;
+        left: 90px;
+        top: 19px;
+      }
+      .step-5 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        color: #fff;
+        background: rgba(113, 123, 133, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 170px;
+        top: 19px;
+      }
+      .step-6 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(81, 148, 254, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        position: absolute;
+        left: 240px;
+        top: 19px;
+        color: #fff;
+      }
+      .step-6-width {
+        left: 170px;
+      }
+    }
+  }
+  .mation-box {
+    & {
+      width: 343px;
+      height: 79px;
+      background: rgba(255, 255, 255, 1);
+      box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+      border-radius: 5px;
+      box-sizing: border-box;
+      padding: 16px;
+      position: relative;
+      margin: auto;
+    }
+    p:nth-of-type(1) {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+      margin-bottom: 10px;
+    }
+    p:nth-of-type(2) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+    img {
+      width: 48px;
+      height: 45px;
+      position: absolute;
+      right: 24px;
+      top: 12px;
+    }
+  }
+  .our-code-box {
+    & {
+      text-align: center;
+      margin-top: 36px;
+    }
+    p:nth-of-type(1) {
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+    p:nth-of-type(2) {
+      span:nth-of-type(1),
+      span:nth-of-type(3) {
+        color: #333333;
+        font-size: 14px;
+      }
+      .code {
+        font-size: 14px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #5194fe;
+      }
+    }
+  }
+  .text-box {
+    width: 343px;
+    margin: auto;
+    font-size: 12px;
+    font-family: PingFang SC;
+    font-weight: 500;
+    color: rgba(153, 153, 153, 1);
+    line-height: 17px;
+    p {
+      word-wrap: break-word;
+      word-break: break-all;
+    }
+  }
+  .btn-box {
+    & {
+      text-align: center;
+      margin-top: 56px;
+    }
+    button {
+      width: 320px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      outline: none;
+      border: 0;
+      color: #fff;
+    }
+  }
+}
+</style>
diff --git a/src/views/order-handling/bank-list.vue b/src/views/order-handling/bank-list.vue
new file mode 100644
index 0000000..487cb5e
--- /dev/null
+++ b/src/views/order-handling/bank-list.vue
@@ -0,0 +1,448 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 17:48:41
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2021-11-12 09:23:40
+ * @Description: 银行选择列表
+--> 
+<template>
+  <div class="bank-list-page">
+    <!-- <v-navbar title="选择银行"></v-navbar> -->
+    <van-nav-bar title="选择银行" @click-left="gofront">
+      <template #left>
+        <i class="iconfont iconzuojiantou" style="font-size:18px"></i>
+      </template>
+    </van-nav-bar>
+    <van-search v-model="value" shape="round" background="#F5F5F7" placeholder="搜索" @input="onInput" />
+    <div style="height:30px;line-height:30px;padding-left:16px;box-sizing:border-box;" v-if="!value">
+      <p>热门银行</p>
+    </div>
+    <!-- 热门银行 -->
+    <div class="rm-bank-box" v-if="!value">
+      <div class="bank-box" v-for="(item,i) in bankList" :key="i" @click="getBankCode(item)">
+        <span>{{item.name}}</span>
+      </div>
+    </div>
+    <div class="search-list" v-if="value">
+      <div class="bank-box" v-for="(item,i) in searchBankList" :key="i" :id="item.first" :class="item.first" @click="getBankCode(item)">
+        <span>{{item.name}}</span>
+      </div>
+    </div>
+    <!-- <div style="height:30px;line-height:30px;padding-left:16px;box-sizing:border-box;" v-if="!value">
+      <p>全部银行</p>
+    </div>
+    <div class="all-bank-box" v-if="!value">
+      <div class="bank-box" v-for="(item,i) in otherBankList" :key="i" :id="item.first" :class="item.first" @click="getBankCode(item)">
+        <span>{{item.name}}</span>
+      </div>
+    </div>
+    
+    <div class="letter-list">
+      <p v-for="(item,e) in letterList" :key="e" @click="sortBank(item)">{{item}}</p>
+    </div> -->
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Search } from "vant";
+import { NavBar } from 'vant';
+
+Vue.use(NavBar);
+Vue.use(Search);
+export default {
+  data() {
+    return {
+      value: "",
+      letterList: [
+        "热",
+        "A",
+        "B",
+        "C",
+        "D",
+        "E",
+        "F",
+        "G",
+        "H",
+        "I",
+        "J",
+        "K",
+        "L",
+        "M",
+        "N",
+        "O",
+        "P",
+        "Q",
+        "R",
+        "S",
+        "T",
+        "U",
+        "V",
+        "W",
+        "X",
+        "Y",
+        "Z"
+      ],
+      hotBankList:[
+        {
+          name:'北京银行',
+          code:'4031000',
+          first:'B'
+        },
+        {
+          name:'工商银行',
+          code:'0102',
+          first:'G'
+        },
+        {
+          name:'光大银行',
+          code:'0303',
+          first:'G'
+        },
+        {
+          name:'广发银行',
+          code:'0306',
+          first:'G'
+        },
+        {
+          name:'华夏银行',
+          code:'0304',
+          first:'H'
+        },
+        {
+          name:'建设银行',
+          code:'0105',
+          first:'J'
+        },
+        {
+          name:'交通银行',
+          code:'0301',
+          first:'J'
+        },
+        {
+          name:'民生银行',
+          code:'0305',
+          first:'M'
+        },
+        {
+          name:'农业银行',
+          code:'0103',
+          first:'N'
+        },
+        {
+          name:'平安银行',
+          code:'0307',
+          first:'P'
+        },
+        {
+          name:'浦发银行',
+          code:'0310',
+          first:'P'
+        },
+        {
+          name:'上海银行',
+          code:'4012900',
+          first:'S'
+        },
+        {
+          name:'兴业银行',
+          code:'0309',
+          first:'X'
+        },
+        {
+          name:'邮政储蓄银行',
+          code:'0403',
+          first:'Y'
+        },
+        {
+          name:'中国银行',
+          code:'0104',
+          first:'Z'
+        },
+        {
+          name:'招商银行',
+          code:'0308',
+          first:'Z'
+        },
+        {
+          name:'中信银行',
+          code:'0302',
+          first:'Z'
+        },
+      ],
+      otherBankList:[
+        {
+          name:'北京农商银行',
+          code:'14189200',
+          first:'B'
+        },
+        {
+          name:'重庆农村商业银行',
+          code:'14139200',
+          first:'C'
+        },
+        {
+          name:'重庆银行',
+          code: '04419200',
+          first:'C'
+        },
+        {
+          name:'长沙银行',
+          code:'04619200',
+          first:'C'
+        },
+        {
+          name:'成都农商银行',
+          code:'14229200',
+          first:'C'
+        },
+        {
+          name:'成都银行',
+          code:'04299200',
+          first:'C'
+        },
+        {
+          name:'广东省农村信用社联合社',
+          code:'14509200',
+          first:'G'
+        },
+        {
+          name:'广州农村商业银行',
+          code:'14059200',
+          first:'G'
+        },
+        {
+          name:'广州银行',
+          code:'04139200',
+          first:'G'
+        },
+        {
+          name:'贵州省农村信用社联合社',
+          code:'14369200',
+          first:'G'
+        },
+        {
+          name:'贵州银行',
+          code:'05849200',
+          first:'G'
+        },
+        {
+          name:'贵阳银行',
+          code:'04439200',
+          first:'G'
+        },
+        {
+          name:'广西壮族自治区农村信用社联合社',
+          code:'14439200',
+          first:'G'
+        },
+        {
+          name:'湖北省农村信用社联合社',
+          code:'14109200',
+          first:'H'
+        },
+        {
+          name:'杭州银行',
+          code:'04239200',
+          first:'H'
+        },
+        {
+          name:'海南省农村信用社联合社',
+          code:'14489200',
+          first:'H'
+        },
+        {
+          name:'海南银行',
+          code:'05889200',
+          first:'H'
+        },
+        {
+          name:'河北省农村信用社联合社',
+          code:'14419200',
+          first:'H'
+        },
+        {
+          name:'河北银行',
+          code:'04229200',
+          first:'H'
+        },
+        {
+          name:'江苏银行',
+          code:'05089200',
+          first:'J'
+        },
+        {
+          name:'江西银行',
+          code:'04489200',
+          first:'J'
+        },
+        {
+          name:'南京银行',
+          code:'04249200',
+          first:'N'
+        },
+        {
+          name:'宁波银行',
+          code:'04089200',
+          first:'N'
+        },
+        {
+          name:'上海农村商业银行',
+          code:'14019200',
+          first:'S'
+        },
+        {
+          name:'陕西省农村信用社联合社',
+          code:'14429200',
+          first:'S'
+        },
+        {
+          name:'山西省农村信用社',
+          code:'14559200',
+          first:'S'
+        },
+        {
+          name:'深圳农村商业银行',
+          code:'4025840',
+          first:'S'
+        },
+        {
+          name:'天津银行',
+          code:'04349200',
+          first:'T'
+        },
+        {
+          name:'温州银行',
+          code:'04129200',
+          first:'W'
+        },
+        {
+          name:'厦门银行',
+          code:'04029200',
+          first:'X'
+        },
+        {
+          name:'西安银行',
+          code:'04449200',
+          first:'X'
+        },
+        {
+          name:'云南省农村信用社联合社',
+          code:'14099200',
+          first:'Y'
+        },
+        {
+          name:'浙江民泰商业银行',
+          code:'05259200',
+          first:'Z'
+        },
+        {
+          name:'郑州银行',
+          code:'04359200',
+          first:'Z'
+        },
+      ],
+      searchBankList:[],
+      
+    };
+  },
+  computed:{
+    bankList(){
+      return JSON.parse(sessionStorage.bankList) 
+    },
+  },
+  methods:{
+    // 模糊查询
+    onInput(){
+      this.searchBankList = []
+      this.bankList.forEach(e=>{
+        if(e.name.indexOf(this.value) > -1 && this.value){
+          this.searchBankList.push(e)
+        }
+      })
+      // this.otherBankList.forEach(e=>{
+      //   if(e.name.indexOf(this.value) > -1 && this.value){
+      //     this.searchBankList.push(e)
+      //   }
+      // })
+    },
+    getBankCode(item){
+      let isBackName =this.$route.query.isBackName, url = '';
+      if(isBackName){
+        url = '/bankCard/index'; 
+      }else{
+        url = '/order-handling/contract-signing';
+      }
+      this.$router.push({
+        path:url,
+        query:{
+          code:item.code,
+          name:item.name
+        }
+      })
+    },
+    // 点击字母排序
+    sortBank(item){
+      location.hash = '#' + item
+    },
+    // 返回合同签署页面
+    gofront(){
+      let isBackName =this.$route.query.isBackName;
+      if(isBackName){
+        this.$router.push('/bankCard/index'); 
+      }else{
+        this.$router.push('/order-handling/contract-signing');
+      }
+      
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.bank-list-page {
+  & {
+    min-height: 100vh;
+    background: #edf0f7;
+    position: relative;
+  }
+  .letter-list {
+    position: fixed;
+    width: 16px;
+    height: 80vh;
+    right: 5px;
+    top: 110px;
+    p {
+      font-size: 12px;
+      margin-bottom: 5px;
+      color: #157efb;
+    }
+  }
+  .rm-bank-box {
+    & {
+      background: #fff;
+      box-sizing: border-box;
+      padding: 0 16px ;
+    }
+    .bank-box {
+      height: 44px;
+      line-height: 44px;
+      border-bottom:1px solid #EEEEEE;
+    }
+  }
+  .all-bank-box,.search-list{
+    & {
+      background: #fff;
+      box-sizing: border-box;
+      padding: 0 16px ;
+    }
+    .bank-box {
+      height: 44px;
+      line-height: 44px;
+      border-bottom:1px solid #EEEEEE;
+    }
+  }
+  /deep/.van-search__content--round {
+    border-radius: 0.34rem;
+    background: #fff;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order-handling/contract-signing.vue b/src/views/order-handling/contract-signing.vue
new file mode 100644
index 0000000..d3a257a
--- /dev/null
+++ b/src/views/order-handling/contract-signing.vue
@@ -0,0 +1,659 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 11:14:44
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-16 10:32:23
+ * @Description: 合同签署页面
+-->
+<template>
+  <div class="contract-signing-page">
+    <v-navbar title="订单申请" :back="backUrl"></v-navbar>
+    <div class="steps-box">
+      <div class="steps">
+        <p class="line"></p>
+        <div class="step-2">2</div>
+        <div class="step-3">3</div>
+        <div class="step-4">4</div>
+        <div class="step-5">5</div>
+        <!-- <div class="step-6">6</div> -->
+      </div>
+    </div>
+    <div class="mation-box">
+      <p>合同签署</p>
+      <p>请确保资料填写准确,并仔细阅读合同文件,以便顺利签署</p>
+    </div>
+    <div class="code-info-box">
+      <h-cell v-model="cardInfo.bankName" placeholder="请选择" isLink readonly isMust label="开户银行名称" @click.native="goBankPage"></h-cell>
+      <h-cell v-model="cardInfo.bankCardNo" isMust placeholder="请输入银行卡号" label="银行卡号" max="19"></h-cell>
+      <h-cell v-model="cardInfo.bankCardMblNo" isMust placeholder="请输入银行预留手机号" label="银行预留手机号" max="11"></h-cell>
+      <van-field v-model="verCode" center required clearable label="短信验证码" maxlength="6" placeholder="请输入短信验证码">
+        <template #button>
+          <van-button size="small" plain @click="sendCode" maxlength="6" :disabled="btnDis" type="default">{{btnText}}</van-button>
+        </template>
+      </van-field>
+      <!-- <h-cell v-model="verCode" isMust placeholder="请输入验证码" label="短信验证码">
+        <template slot="v-cell-right">
+          <div class="code-btn">
+            <input type="text" maxlength="6" v-model="verCode" />
+            <button
+              @click="sendCode"
+              :disabled="btnDis"
+              :style="btnDis?'color:#E6E6E6':'color:#62A0FF'"
+            ></button>
+          </div>
+        </template>
+      </h-cell> -->
+    </div>
+    <div class="xieyi-box">
+      <div class="ridio-box">
+        <van-checkbox v-model="checked" icon-size="13px">我已仔细阅读并同意签署</van-checkbox>
+      </div>
+      <div class="text-box">
+        <p>
+          <span @click="goAgr(1)" v-if="cardInfo.contractList.indexOf(1) > -1">《保理付款服务合同》</span>
+          <span @click="goAgr(2)" v-if="cardInfo.contractList.indexOf(2) > -1">《代扣委托书》</span>
+          <span @click="goAgr(3)" v-if="cardInfo.contractList.indexOf(3) > -1">《信息授权函》</span>
+          <span @click="goAgr(5)" v-if="cardInfo.contractList.indexOf(5) > -1">《个人征信查询报送授权书》</span>
+          <span @click="goAgr(6)" v-if="cardInfo.contractList.indexOf(6) > -1">《委托担保合同》</span>
+          <span @click="goAgr(7)" v-if="cardInfo.contractList.indexOf(7) > -1">《融资担保服务申请书》</span>
+          <!-- <span @click="goAgr(4)">《重要信息告知书》</span> -->
+          <span @click="getBankContract" v-show="cardInfo.bankCode!='BCOM'&&cardInfo.bankCode!='CIB'&&cardInfo.bankCode">《{{bankContract}}》</span>
+        </p>
+      </div>
+    </div>
+    <div class="btn-box">
+      <van-button @click="gonext" :loading="btnLoading" :disabled="btnLoading" type="info" loading-text="加载中..." v-show="btnDisable">提交申请</van-button>
+    </div>
+    <van-dialog v-model="show" title="温馨提示" show-cancel-button @cancel="onCancel">
+      <div class="dialog-text-box">
+        <p>{{cardInfo.noticeMsg}}</p>
+      </div>
+    </van-dialog>
+    <van-dialog v-model="showErr" title="提示">
+      <div class="dialog-text-box">
+        <p>{{errMessage}}</p>
+      </div>
+    </van-dialog>
+    <van-image-preview v-model="showPdf" :images="images" @change="onChange" closeable="true" :loop="false" showIndicators="true">
+      <template v-slot:index>第{{ index+1 }}页</template>
+    </van-image-preview>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Checkbox, CheckboxGroup } from "vant";
+import { Dialog } from "vant";
+import { ImagePreview } from 'vant';
+import { Field, Button } from 'vant';
+// 全局注册
+Vue.use(ImagePreview);
+Vue.use(Dialog);
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+Vue.use(Field);
+Vue.use(Button);
+export default {
+  data() {
+    return {
+      index: 0,//合同当前查看页
+      bankContract: '',//银行协议名称
+      backUrl: "",
+      checked: false,
+      show: false,
+      showErr: false,
+      showPdf: false,
+      images: [],//合同图片列表
+      cardInfo: {
+        bankCardMblNo: '',
+        bankCardNo: '',
+        bankCode: '',
+        bankList: [],
+        bankName: '',
+        noticeMsg: '',
+        contractList:[]
+      }, //银行相关信息
+      bankId: '',
+      verCode: "", //验证码
+      btnText: "获取验证码",
+      btnDis: false,
+      errMessage: "",
+      btnDisable: true,
+      btnLoading:false
+    };
+  },
+  created() {
+    //获取顶部返回地址 首页 或者是上一页
+    this.backUrl = window.sessionStorage.backUrl;
+    //判断是否有存储在本地的签约值
+    if (sessionStorage.sigMation) {
+      //有值表示跳往查看了合同
+      this.cardInfo = JSON.parse(sessionStorage.sigMation);
+      this.bankId = sessionStorage.bankId
+      this.verCode = sessionStorage.verCodeContract
+      //第一次获取验证码时间 如果跳转合同页时时间任然大于零,取存储时间继续读秒
+      if (sessionStorage.wait > 0) {
+        this.getSecond(Number(sessionStorage.wait))
+      }
+      //本地有存储签约值时,选择银行卡回跳附值
+      if (this.$route.query.name) {
+        this.show = false;
+        this.cardInfo.bankName = this.$route.query.name;
+        this.cardInfo.bankCode = this.$route.query.code;
+
+      }
+      this.getBankContractName()
+    }
+    else {
+      // 没有本地存储就不是合同页回跳,初始化请求,判断弹窗
+      this.$api.initContInfo().then(res => {
+        this.cardInfo = res.body;
+
+        if (this.$route.query.name) {
+          this.show = false;
+          this.cardInfo.bankName = this.$route.query.name;
+          this.cardInfo.bankCode = this.$route.query.code;
+        }
+        else if (this.$route.query.whichPage) {
+          this.show = false;
+        } else {
+          res.body.bankList.forEach(e => {
+            if (e.code == this.cardInfo.bankCode) {
+              this.cardInfo.bankName = e.name;
+            }
+          });
+          this.show = true;
+        }
+        this.getBankContractName()
+      });
+    }
+  },
+
+  beforeRouteLeave(to, from, next) {
+    // 跳往指定页面清空信息
+    if (
+      to.path == "/home/index" ||
+      to.path == "/order-handling/upload-userInfo" ||
+      to.path == "/order-handling/bank-list" ||
+      to.path == "/order-handling/image-upload"
+    ) {
+      sessionStorage.sigMation = "";
+    }
+    next();
+  },
+  methods: {
+    onChange(index) {
+      this.index = index;
+    },
+    //协议页面
+    goAgr(which) {
+
+      // 根据点击请求获取 合同图片列表
+      this.$api.getContInfo({
+        contType: which
+      }).then(res => {
+        this.images = res.body.contUrls
+        this.showPdf = true
+      })
+    },
+    // 获取银行协议名称
+    getBankContractName() {
+
+      if (this.cardInfo.bankCode == 'ICBC') {
+        this.bankContract = '中国工商银行快捷支付业务服务协议'
+      }
+      if (this.cardInfo.bankCode == 'ABC') {
+        this.bankContract = '农业银行快捷支付业务协议'
+      }
+      if (this.cardInfo.bankCode == 'CCB') {
+        this.bankContract = '中国建设银行总对总快捷客户授权协议'
+      }
+      if (this.cardInfo.bankCode == 'BOC') {
+        this.bankContract = '中国银行股份有限公司借记卡快捷支付服务协议'
+      }
+      if (this.cardInfo.bankCode == 'CITIC') {
+        this.bankContract = '中信银行借记卡快捷支付线上服务协议'
+      }
+      if (this.cardInfo.bankCode == 'CEB') {
+        this.bankContract = '中国光大银行客户信息验证授权协议'
+      }
+      if (this.cardInfo.bankCode == 'PAB') {
+        this.bankContract = '平安银行快捷支付业务服务协议'
+      }
+      if (this.cardInfo.bankCode == 'PSBC') {
+        this.bankContract = '中国邮政储蓄银行借记卡快捷支付业务线上服务协议'
+      }
+      if (this.cardInfo.bankCode == 'SHB') {
+        this.bankContract = '上海银行快捷支付业务线上服务协议'
+      }
+      if (this.cardInfo.bankCode == 'SPDB') {
+        this.bankContract = '浦发银行快捷支付协议'
+      }
+      if (this.cardInfo.bankCode == 'CMBC') {
+        this.bankContract = '中国民生银行快捷支付业务用户协议'
+      }
+      if (this.cardInfo.bankCode == 'CMB') {
+        this.bankContract = '招商银行快捷支付业务线上用户服务协议'
+      }
+      if (this.cardInfo.bankCode == 'GDB') {
+        this.bankContract = '广发银行—宝付快捷支付业务线上服务协议'
+      }
+      if (this.cardInfo.bankCode == '') {
+        this.bankContract = ''
+      }
+    },
+    // 获取银行协议
+    getBankContract() {
+      sessionStorage.sigMation = JSON.stringify(this.cardInfo);
+      sessionStorage.bankId = this.bankId
+      sessionStorage.verCodeContract = this.verCode
+      let agrUrl = ''
+      let title = '服务协议'
+      if (this.cardInfo.bankCode == 'ICBC') {
+        agrUrl = './static/bankPdf/ICBC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'ABC') {
+        agrUrl = './static/bankPdf/ABC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'CCB') {
+        agrUrl = './static/bankPdf/CCB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'BOC') {
+        agrUrl = './static/bankPdf/BOC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'CITIC') {
+        agrUrl = './static/bankPdf/CITIC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'CEB') {
+        agrUrl = './static/bankPdf/CEB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'PAB') {
+        agrUrl = './static/bankPdf/PAB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'PSBC') {
+        agrUrl = './static/bankPdf/PSBC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'SHB') {
+        agrUrl = './static/bankPdf/SHB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'SPDB') {
+        agrUrl = './static/bankPdf/SPDB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'CMBC') {
+        agrUrl = './static/bankPdf/CMBC.pdf'
+      }
+      if (this.cardInfo.bankCode == 'CMB') {
+        agrUrl = './static/bankPdf/CMB.pdf'
+      }
+      if (this.cardInfo.bankCode == 'GDB') {
+        agrUrl = './static/bankPdf/GDB.pdf'
+      }
+      this.$router.push({
+        path: '/agreement',
+        query: {
+          tit: title,
+          agrUrl: agrUrl
+        }
+      })
+    },
+    //跳转银行卡选择页面
+    goBankPage() {
+      sessionStorage.bankList = JSON.stringify(this.cardInfo.bankList);
+      this.$router.push({
+        path: "/order-handling/bank-list"
+      });
+    },
+    //下一步
+    gonext() {
+      let v = this.$tool;
+      if (v.checkValEmpty(this.cardInfo.bankName)) {
+        v.toast("请选择开户银行名称");
+        return;
+      }
+      if (v.checkValEmpty(this.cardInfo.bankCardNo)) {
+        v.toast("请输入银行卡号");
+        return;
+      }
+      if (!v.bankCard(this.cardInfo.bankCardNo)) {
+        v.toast("请输入正确的银行卡号");
+        return;
+      }
+      if (v.checkValEmpty(this.cardInfo.bankCardMblNo)) {
+        v.toast("请输入预留手机号");
+        return;
+      }
+      if (!v.checkPhone(this.cardInfo.bankCardMblNo)) {
+        v.toast("请输入正确的手机号");
+        return;
+      }
+      if (v.checkValEmpty(this.bankId)) {
+        v.toast("请先获取验证码");
+        return;
+      }
+      if (v.checkValEmpty(this.verCode)) {
+        v.toast("请输入验证码");
+        return;
+      }
+      if (!this.checked) {
+        v.toast("请在阅读并确认协议后勾选用户协议");
+        return;
+      }
+      let projId = localStorage.getItem('projId');
+      this.btnLoading = true;
+      this.$api.saveContInfo({ ...this.cardInfo, verCode: this.verCode, bankId: this.bankId }).then(res => {
+        this.btnLoading = false;
+        sessionStorage.sigMation = "";
+        if (projId == 100000) {
+          // F0订单跳转申请结果
+            this.$router.push({ path: '/order-handling/approval-results'});
+        } else {
+          // F1跳转
+          if(res.body.isPass==1){
+            // 1审核通过
+            this.$router.push({ path: "/order-handling/image-upload" });
+          }else{
+            this.$router.push({ path: '/order-handling/approval-results'});
+          }
+        }
+      }).catch(err => {
+          this.errMessage = err;
+          this.showErr = true;
+          this.btnLoading = false;
+        });
+    },
+    //弹窗取消
+    onCancel() {
+      this.$router.push(window.sessionStorage.backUrl);
+    },
+    //获取验证码
+    sendCode() {
+      let v = this.$tool;
+      if (v.checkValEmpty(this.cardInfo.bankName)) {
+        v.toast("请选择开户行");
+        return;
+      }
+      if (v.checkValEmpty(this.cardInfo.bankCardNo)) {
+        v.toast("请输入银行卡号");
+        return;
+      }
+      if (!v.bankCard(this.cardInfo.bankCardNo)) {
+        v.toast("请输入正确的银行卡号");
+        return;
+      }
+      if (v.checkValEmpty(this.cardInfo.bankCardMblNo)) {
+        v.toast("请输入预留手机号");
+        return;
+      }
+      if (!v.checkPhone(this.cardInfo.bankCardMblNo)) {
+        v.toast("请输入正确的手机号");
+        return;
+      }
+
+      this.$api
+        .bankVerCode({
+          bankCardMblNo: this.cardInfo.bankCardMblNo,
+          bankCardNo: this.cardInfo.bankCardNo,
+          bankCode: this.cardInfo.bankCode,
+        })
+        .then(res => {
+          this.getSecond(60);
+          this.bankId = res.body.bankId;
+        })
+        .catch(err => {
+          let str = err.errMsg.split("秒")[0];
+          let miao = str.split("请")[1];
+          if (miao) {
+            this.getSecond(Number(miao));
+            //this.btnDisable = false;
+          }
+        });
+    },
+    //发送验证码现在函数
+    getSecond(wait) {
+      let _this = this;
+      let _wait = wait;
+      if (wait == 0) {
+        this.btnText = "获取验证码";
+        wait = _wait;
+        this.btnDis = false;
+      } else {
+        this.btnDis = true;
+        this.btnText = "验证码(" + wait + "s)";
+        wait--;
+        sessionStorage.wait = wait
+        setTimeout(function () {
+          _this.getSecond(wait);
+        }, 1000);
+      }
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.contract-signing-page {
+  & {
+    min-height: 100vh;
+  }
+  .van-cell {
+    padding: 10px 8px;
+  }
+  .van-cell--required::before {
+    left: 2px;
+  }
+  .steps-box {
+    & {
+    }
+    .steps {
+      width: 100%;
+      height: 65px;
+      position: relative;
+      box-sizing: border-box;
+      display: flex;
+      display: -webkit-flex;
+      justify-content: space-around;
+      -webkit-justify-content: space-around;
+      align-items: center;
+      -webkit-align-items: center;
+
+      .line {
+        position: absolute;
+        right: 10%;
+        width: 90%;
+        border-bottom: 1px dashed #b3b3b3;
+        //height: 32px;
+      }
+      .step-2 {
+        z-index: 10;
+        text-align: center;
+        line-height: 30px;
+
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 18px;
+        // top: 19px;
+      }
+      .step-3 {
+        z-index: 10;
+        text-align: center;
+        line-height: 30px;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border: 0;
+        border-radius: 50%;
+        color: #fff;
+        // position: absolute;
+        // left: 90px;
+        // top: 19px;
+      }
+      .step-4 {
+        z-index: 10;
+        text-align: center;
+        line-height: 30px;
+        width: 30px;
+        height: 30px;
+        background: rgba(81, 148, 254, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 170px;
+        // top: 19px;
+        color: #fff;
+      }
+      .step-5 {
+        z-index: 10;
+        text-align: center;
+        line-height: 30px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 250px;
+        // top: 19px;
+      }
+      .step-6 {
+        z-index: 10;
+        text-align: center;
+        line-height: 30px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // right: 18px;
+        // top: 19px;
+      }
+    }
+  }
+  .mation-box {
+    width: 343px;
+    height: 79px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+    border-radius: 5px;
+    margin: auto;
+    box-sizing: border-box;
+    padding: 16px 15px;
+    p:nth-of-type(1) {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+      margin-bottom: 10px;
+    }
+    p:nth-of-type(2) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+  }
+  .code-info-box {
+    & {
+      box-sizing: border-box;
+      margin-top: 15px;
+      padding: 0 26px;
+    }
+    .code-btn {
+      width: 100%;
+      text-align: right;
+      display: flex;
+      position: relative;
+      // border-left: 1px solid #e6e6e6;
+      // margin-left: 5px;
+      input {
+        width: 40%;
+        border: none;
+        outline: none;
+        text-align: right;
+      }
+      // button::before{
+      //   content: '';
+      //   width: 1px;
+      //   height: 13px;
+      //   background: #E6E6E6;
+      //   position: absolute;
+      //   left: 100px;
+      // }
+      button {
+        width: 60%;
+        font-size: 14px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        text-decoration: underline;
+        color: rgba(81, 148, 254, 1);
+        background: #fff;
+        border: 0;
+        outline: none;
+        text-align: right;
+      }
+    }
+  }
+  .xieyi-box {
+    & {
+      margin-top: 25px;
+    }
+    .ridio-box {
+      box-sizing: border-box;
+      padding-left: 16px;
+    }
+    .text-box {
+      box-sizing: border-box;
+      padding-left: 10px;
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(81, 148, 254, 1);
+      p {
+        padding-left: 20px;
+      }
+    }
+  }
+  .btn-box {
+    & {
+      margin-top: 32px;
+      text-align: center;
+      padding-bottom: 32px;
+    }
+    button {
+      width: 320px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      border: 0;
+      outline: none;
+      color: #fff;
+    }
+  }
+  .dialog-text-box {
+    padding: 24px;
+    box-sizing: border-box;
+    overflow: scroll;
+    height: 302px;
+    p {
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #999;
+      line-height: 25px;
+    }
+  }
+  /deep/.van-dialog {
+    width: 313px;
+    height: 400px;
+    position: absolute;
+    left: 0;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    margin: auto;
+    transform: translate3d(0, 0, 0);
+  }
+}
+</style>
diff --git a/src/views/order-handling/face-recognition.vue b/src/views/order-handling/face-recognition.vue
new file mode 100644
index 0000000..ca7ae13
--- /dev/null
+++ b/src/views/order-handling/face-recognition.vue
@@ -0,0 +1,350 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 09:09:32
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-08 16:37:47
+ * @Description: 人脸识别结果页面
+-->
+<template>
+  <div class="face-recognition-page">
+    <v-navbar title="订单申请"></v-navbar>
+    <div class="steps-box">
+      <div class="zhanwei"></div>
+      <div class="steps">
+        <p></p>
+        <div class="step-1">1</div>
+        <div class="step-2">2</div>
+        <div class="step-3">3</div>
+        <div class="step-4">4</div>
+      </div>
+    </div>
+    <div v-if="!isFaceBack">
+        <div class="mation-box" v-if="state==1">
+          <div class="left">
+            <p>人脸识别成功</p>
+            <p>身份验证成功,点击下一步完善信息</p>
+          </div>
+          <div class="right">
+            <img src="../../../static/img/rlsbz.png" alt />
+          </div>
+        </div>
+        <div class="mation-box" v-if="state==2">
+          <div class="left">
+            <p>人脸识别中</p>
+            <p>正在进行身份验证,请稍后</p>
+          </div>
+          <div class="right">
+            <img src="../../../static/img/rlsbz.png" alt />
+          </div>
+        </div>
+        <div class="mation-box" v-if="state==0">
+          <div class="left">
+            <p>人脸识别失败</p>
+            <p>身份认证失败,请重新识别</p>
+          </div>
+          <div class="right">
+            <img src="../../../static/img/rlsbsb.png" alt />
+          </div>
+        </div>
+        <div class="mation-box" v-if="state==3">
+          <div class="left">
+            <p>人脸识别失败</p>
+            <p>身份认证次数超限,禁止继续识别</p>
+          </div>
+          <div class="right">
+            <img src="../../../static/img/rlsbsb.png" alt />
+          </div>
+        </div>
+    </div>
+    <div v-else class="new_box">
+       <div class="new_box_right">
+            <img src="../../../static/img/rlsbz.png" alt />
+       </div>
+      <p>为了满足您的业务需求,需要您使用认证服务,服务可能采集如下信息:</p>
+      <div class="do_list">
+        <p>操作人姓名、证件号</p>
+        <p>网络运营商注册手机号(仅手机认证获取)</p>
+        <p>银行卡或预留手机号(仅银行卡认证获取)</p>
+        <p>操作人人脸视频(仅人脸识别获取)</p>
+      </div>
+      <div class="ridio-box" style="margin-bottom:10px;">
+        <van-checkbox v-model="checked"  icon-size="13px">
+          <p class="xieyi">
+            <span>我已阅读并同意</span>
+            <span @click.stop="showAgree(1)"> 《认证服务协议》</span>
+            <span @click.stop="showAgree(2)"> 《用户隐私政策》</span>
+          </p>
+        </van-checkbox>
+      </div>
+      <div class="ridio-box">
+        <van-checkbox v-model="checkede" icon-size="13px">我同意e签宝采集人脸照片并提供给深圳市景天商业保理有限公司(对接专用)用于实名认证</van-checkbox>
+      </div>
+    </div>
+    <div class="btn-box">
+      <button  @click="goNext">{{btnText}}</button>
+    </div>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Checkbox, CheckboxGroup } from "vant";
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+export default {
+  data() {
+    return {
+      state: 1,
+      btnText: "下一步",
+      isFaceBack:this.$route.query.isFaceBack,
+      checked:true,
+      checkede:true
+    };
+  },
+  created() {
+    if(!this.isFaceBack){
+       this.getres()
+    }else{
+      this.btnText='开始认证';
+    }
+  },
+  methods: {
+    // 获取识别结果
+    getres() {
+      this.$api.findFaceResult().then(res => {
+        this.state = res.body.faceResult;
+        if (res.body.faceResult == 0) {
+          this.btnText = "开始认证";
+        }
+        if (res.body.faceResult == 1) {
+          this.btnText = "下一步";
+        }
+        if (res.body.faceResult == 2) {
+          this.btnText = "刷新";
+        }
+        if (res.body.faceResult == 3) {
+          this.btnText = "禁止继续识别";
+        }
+      });
+    },
+    goNext() {
+      if(this.isFaceBack){
+        let v = this.$tool;
+        if (!this.checked) {
+          v.toast("请阅读并同意认证服务协议,用户隐私政策");
+          return;
+        }
+        if (!this.checkede) {
+          v.toast("请同意e签宝采集人脸照片");
+          return;
+        }
+        this.goToFace(); 
+      }else{
+        if (this.state == 0) {
+          this.goToFace();  
+        }
+        if (this.state == 1) {
+          this.$router.push("/order-handling/upload-userInfo");
+        }
+        if (this.state == 2) {
+          this.getres()
+        }
+        if (this.state == 3) {
+          this.$router.push("/home/index");
+        }
+      }
+    },
+    showAgree(type){
+        this.$router.push({
+          path:'/agreement',
+          query:{
+            from:'face',
+            tit:type==1?'认证服务协议':"用户隐私政策",
+            agrUrl:type==1?'./static/rzfwxy.pdf':'./static/yhyszc.pdf'
+          }
+        })
+    },
+    goToFace(){
+      let str = location.host
+      this.$api.getFaceUrl({callbackUrl:`https://${str}/aic_cus/#/order-handling/face-recognition`}).then(res => {
+          window.location.href = res.body.faceUrl;
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.face-recognition-page {
+  .new_box{
+    padding: 16px;
+    display: flex;
+    justify-content: center;
+    align-items: flex-start;
+    flex-direction: column;
+    line-height: 1.5;
+  }
+  .new_box_right{
+     width: 100%;
+     text-align: center;
+     margin-bottom: 24px;
+      img {
+        width: 96px;
+        height: 90px;
+      }
+  }
+  .do_list{
+    margin:16px 0;
+    p{
+      padding-left: 8px;
+      position: relative;
+      &::before{
+        content:'';
+        position: absolute;
+        left:0px;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 3px;
+        height: 3px;
+        border-radius: 50%;
+        background-color: #333;
+      }
+    }
+  }
+  .xieyi {
+    span:nth-of-type(1) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+    span:nth-of-type(2) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #5194fe;
+    }
+    span:nth-of-type(3) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #5194fe;
+    }
+  }
+  .steps-box {
+    & {
+      display: flex;
+    }
+    .zhanwei {
+      width: 25%;
+    }
+    .steps {
+      width: 75%;
+      height: 65px;
+      position: relative;
+      p {
+        border-bottom: 1px dashed #b3b3b3;
+        height: 32px;
+      }
+      .step-1 {
+        text-align: center;
+        line-height: 30px;
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: -15px;
+        top: 19px;
+      }
+      .step-2 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(81, 148, 254, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        color: #fff;
+        position: absolute;
+        left: 55px;
+        top: 19px;
+      }
+      .step-3 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 130px;
+        top: 19px;
+      }
+      .step-4 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 210px;
+        top: 19px;
+      }
+    }
+  }
+  .mation-box {
+    width: 343px;
+    height: auto;
+    padding-bottom: 10px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+    margin: auto;
+    display: flex;
+    .left {
+      width: 60%;
+      padding-left: 17px;
+      padding-top: 16px;
+      p:nth-of-type(1) {
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(51, 51, 51, 1);
+        margin-bottom: 10px;
+      }
+      p:nth-of-type(2) {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(153, 153, 153, 1);
+      }
+    }
+    .right {
+      width: 40%;
+      padding-top: 12px;
+      text-align: center;
+      img {
+        width: 48px;
+        height: 45px;
+      }
+    }
+  }
+  .btn-box {
+    & {
+      text-align: center;
+      margin-top: 56px;
+    }
+    button {
+      width: 320px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      outline: none;
+      border: 0;
+      color: #fff;
+    }
+  }
+}
+</style>
diff --git a/src/views/order-handling/image-upload.vue b/src/views/order-handling/image-upload.vue
new file mode 100644
index 0000000..467d796
--- /dev/null
+++ b/src/views/order-handling/image-upload.vue
@@ -0,0 +1,212 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 14:42:58
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-06 09:30:49
+ * @Description: 图像上传页面
+-->
+<template>
+  <div class="image-upload-page">
+    <v-navbar title="订单申请" :back="url"></v-navbar>
+    <div class="steps-box">
+      <div class="steps">
+        <p></p>
+        <div class="step-3">3</div>
+        <div class="step-4">4</div>
+        <div class="step-5">5</div>
+        <div class="step-6">6</div>
+      </div>
+      <div class="zanwei"></div>
+    </div>
+    <div class="mation-box">
+      <p>图片资料上传</p>
+      <p>请确保图片清晰可见,以便顺利申请</p>
+    </div>
+    <div class="upload-box">
+      <UploadFile
+        :fileType="1"
+        title="首付凭证"
+        :hasTips="true"
+        :typeId="this.$route.query.typeId"
+        :sourceType="this.$route.query.zfbVersion"
+        :picList="uploadObj.contImgUrls"
+      ></UploadFile>
+      <UploadFile
+        :fileType="2"
+        title="现场合照"
+        :hasTips="true"
+        :typeId="this.$route.query.typeId"
+        :sourceType="this.$route.query.zfbVersion"
+        :picList="uploadObj.localeImgUrls"
+      ></UploadFile>
+      <UploadFile
+        :fileType="3"
+        title="资料证明"
+        :hasTips="false"
+        :typeId="this.$route.query.typeId"
+        :sourceType="this.$route.query.zfbVersion"
+        :picList="uploadObj.proofImgUrls"
+      ></UploadFile>
+    </div>
+    <div class="btn-box">
+        <button @click="submitApp">提交申请</button>
+    </div>
+  </div>
+</template>
+<script>
+import UploadFile from "../../components/upload/uploadImg";
+export default {
+    components:{
+        UploadFile
+    },
+  data() {
+    return {
+      url:'',
+      uploadObj: {
+        contImgUrls:[],//首付凭证
+        localeImgUrls:[],//现场合照
+        proofImgUrls:[],//证明资料
+      }
+    };
+  },
+  beforeRouteEnter (to, from, next) {
+    // ...
+    next(vm=>{
+      if(from.path=='/order-handling/contract-signing'){
+        vm.url = '/order-handling/contract-signing'
+        //window.sessionStorage.backUrl = '/order-handling/image-upload'
+      }
+    })
+  },
+  methods:{
+      submitApp(){
+          let v = this.$tool
+          if(this.uploadObj.contImgUrls.length == 0){
+            v.toast('请上传首付凭证')
+            return
+          }
+          if(this.uploadObj.localeImgUrls.length == 0){
+            v.toast('请上现场合照')
+            return
+          }
+          this.$api.saveImgInfo({
+            ...this.uploadObj
+          }).then(res=>{
+            this.$router.push('/order-handling/approval-results')
+          })
+      }
+  }
+};
+</script>
+<style lang="less" scoped>
+.image-upload-page {
+  & {
+    min-height: 100vh;
+  }
+  .steps-box {
+    & {
+    }
+    .steps {
+      width: 70%;
+      height: 65px;
+      position: relative;
+
+      p {
+        border-bottom: 1px dashed #b3b3b3;
+        height: 32px;
+      }
+      .step-3 {
+        text-align: center;
+        line-height: 30px;
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 18px;
+        top: 19px;
+      }
+      .step-4 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(113, 123, 133, 1);
+        border: 0;
+        border-radius: 50%;
+        color: #fff;
+        position: absolute;
+        left: 90px;
+        top: 19px;
+      }
+      .step-5 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(81, 148, 254, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        position: absolute;
+        left: 170px;
+        top: 19px;
+        color: #fff;
+      }
+      .step-6 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 240px;
+        top: 19px;
+      }
+    }
+  }
+  .mation-box {
+    padding: 16px 18px;
+    box-sizing: border-box;
+    width: 343px;
+    height: 79px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+    border-radius: 5px;
+    margin: auto;
+    p:nth-of-type(1) {
+      margin-bottom: 10px;
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+    p:nth-of-type(2) {
+      font-size: 13px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+  }
+  .upload-box{
+      padding: 16px;
+  }
+  .btn-box{
+      &{
+          text-align: center;
+          padding-bottom: 32px;
+      }
+      button{
+            width:325px;
+            height:44px;
+            background:rgba(81,148,254,1);
+            border-radius:22px;
+            outline: none;
+            border: 0;
+            color: #fff;
+      }
+  }
+}
+</style>
diff --git a/src/views/order-handling/order-handling.vue b/src/views/order-handling/order-handling.vue
new file mode 100644
index 0000000..2445682
--- /dev/null
+++ b/src/views/order-handling/order-handling.vue
@@ -0,0 +1,121 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-21 19:43:21
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-02-28 17:28:09
+ * @Description: 扫码办单订单信息页面
+--> 
+<template>
+  <div class="order-handling-page">
+    <v-navbar
+      title="订单详情"
+      titleColor="#fff"
+      background="linear-gradient(60deg,rgba(75,137,250,1),rgba(105,167,255,1))"
+    >
+      <template slot="left-back">
+        <div>
+          <i
+            class="iconfont iconzuojiantou"
+            style="font-size:22px;font-weight:blod;color:#fff"
+            @click="$router.go(-1)"
+          ></i>
+        </div>
+      </template>
+    </v-navbar>
+    <div class="info-box">
+      <h-cell readonly v-model="mation.goodsName" label="商品名称"></h-cell>
+      <h-cell readonly v-model="mation.goodsModel" label="规格"></h-cell>
+      <h-cell readonly v-model="mation.goodsAmt" label="成交价格"></h-cell>
+      <h-cell readonly v-model="mation.insAmt" label="分期金额"></h-cell>
+      <h-cell readonly v-model="mation.insTerm" label="期数"></h-cell>
+    </div>
+    <div class="goPlan">
+      <van-cell title="还款试算" is-link @click="goRepayment" />
+    </div>
+    <div class="btn-box">
+      <button class="btn" @click="goOrder">开始申请</button>
+    </div>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Cell, CellGroup } from "vant";
+
+Vue.use(Cell);
+Vue.use(CellGroup);
+export default {
+  data() {
+    return {
+      mation: {},
+      orderUrl:''
+    };
+  },
+  created() {
+    this.$api.createTrial({ orderUrl: this.$route.query.url}).then(res => {
+        this.mation = res.body;
+        localStorage.setItem('projId',res.body.projId);
+    });
+  },
+  methods: {
+    //跳转还款计划
+    goRepayment() {
+      window.sessionStorage.setItem('order-repayPlans',JSON.stringify(this.mation.repayPlans))
+      this.$router.push({
+        path: "/order/repayment-plan",
+        query: {
+          repayPlans: this.mation.repayPlans
+        }
+      });
+    },
+    //创建订单并且跳转
+    goOrder() {
+      this.$api.orderCreate({orderUrl: this.$route.query.url})
+        .then(res => {
+          this.$router.push({
+            path: "/order-handling/upload-IDcard",
+            query: {}
+          });
+        });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.order-handling-page {
+  & {
+    min-height: 100vh;
+    background: @c-back;
+  }
+  .info-box {
+    padding: 0 26px;
+    background: #fff;
+  }
+  .goPlan {
+    background: #fff;
+    margin-top: 11px;
+    /deep/.van-cell {
+      padding: 0.2rem 26px;
+    }
+  }
+  .btn-box {
+    & {
+      text-align: center;
+      margin-top: 36px;
+    }
+    .btn {
+      width: 320px;
+      height: 44px;
+      background: linear-gradient(
+        90deg,
+        rgba(82, 142, 255, 1),
+        rgba(105, 167, 255, 1)
+      );
+      box-shadow: 0px 7px 10px 0px rgba(85, 146, 255, 0.3);
+      border-radius: 22px;
+      color: #fff;
+      outline: none;
+      border: 0;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order-handling/upload-IDcard.vue b/src/views/order-handling/upload-IDcard.vue
new file mode 100644
index 0000000..52379a0
--- /dev/null
+++ b/src/views/order-handling/upload-IDcard.vue
@@ -0,0 +1,351 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-23 11:05:09
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-08 14:54:57
+ * @Description: 上传身份证
+-->
+<template>
+  <div class="upload-IDcard-page">
+    <v-navbar title="订单申请"></v-navbar>
+    <div class="steps-box">
+      <div></div>
+      <div class="steps">
+        <p></p>
+        <div class="step-1">1</div>
+        <div class="step-2">2</div>
+        <div class="step-3">3</div>
+      </div>
+    </div>
+    <div class="tit-box">
+      <p>身份证照片上传</p>
+      <p>请确保照片清晰可见,以便顺利申请</p>
+    </div>
+    <div class="idcard-box">
+      <upLoadIdCard :cardBack="idCardMation.idBackUrl" :cardFont="idCardMation.idFrontUrl"></upLoadIdCard>
+    </div>
+    <div class="id-mation-box">
+      <div class="tit">
+        <p>请核对身份证信息</p>
+      </div>
+      <div class="mation">
+        <h-cell v-model="idCardMation.usrIdName" isMust  label="姓名"></h-cell>
+        <h-cell v-model="idCardMation.usrIdCard" isMust readonly label="身份证号"></h-cell>
+        <h-cell v-model="idCardMation.sex" readonly isMust label="性别"></h-cell>
+        <h-cell v-model="idCardMation.idCardAddr" isMust label="身份证地址"></h-cell>
+        <h-cell v-model="idDate" readonly isLink isMust label="有效期" @click.native="isShoTime = true"></h-cell>
+      </div>
+    </div>
+    <div class="btn-box">
+      <button @click="goNext">下一步</button>
+    </div>
+    <van-popup v-model="isShoTime" position="bottom">
+      <div class="text-center-g flex-around-g time-label">
+        <p
+          class="flex-1-g"
+          :class="[timeIndex===0 ? 'active':'']"
+          @click="setTimeIndex(0)"
+        >开始:{{startDay}}</p>
+        <p
+          class="flex-1-g"
+          :class="[timeIndex===1 ? 'active':'']"
+          @click="setTimeIndex(1)"
+        >结束:{{endDay}}</p>
+      </div>
+      <van-datetime-picker
+        ref="timepicker"
+        item-height='45'
+        visible-item-count='4'
+        :show-toolbar="false"
+        v-model="currentDate"
+        @change="setTime"
+        :min-date="minDate"
+        :max-date="maxDate"
+        type="date"
+      />
+      <van-button class="btn-time" @click="refreshData">确定</van-button>
+    </van-popup>
+  </div>
+</template>
+<script>
+import Bus from "../../bus";
+import Vue from "vue";
+import { DatetimePicker } from "vant";
+import { Popup } from "vant";
+
+Vue.use(Popup);
+Vue.use(DatetimePicker);
+export default {
+  data() {
+    return {
+      readOnlyName: false,
+      readOnlyId: false,
+      readOnlySex: false,
+      minDate: new Date(1990, 0, 1),
+      maxDate: new Date(2030, 11, 31),
+      startDay: "", // 开始时间
+      endDay: "", //结束时间
+      timeIndex: 0,
+      isShoTime: false,
+      timePicker: null,
+      currentDate: new Date(1990, 0, 1),
+      idCardMation: {}, //身份证相关信息
+      //idCardUserInfo:{},//身份证照片信息
+    };
+  },
+  computed: {
+    idDate() {
+      if (
+        this.idCardMation.idCardValidBegin &&
+        this.idCardMation.idCardValidEnd
+      ) {
+        return (
+          this.idCardMation.idCardValidBegin +
+          "-" +
+          this.idCardMation.idCardValidEnd
+        );
+      }
+    },
+    // cardBack() {
+    //   return this.idCardMation.idBackUrl;
+    // },
+    // cardFont() {
+    //   return this.idCardMation.idFrontUrl;
+    // }
+  },
+  created() {
+    this.$api.createInitIdInfo().then(res => {
+      this.idCardMation = res.body;
+      if (this.idCardMation.usrIdName) {
+        this.readOnlyName = true;
+      }
+      if (this.idCardMation.usrIdCard) {
+        this.readOnlyId = true;
+      }
+      if (this.idCardMation.sex) {
+        this.readOnlySex = true;
+      }
+    });
+  },
+  beforeUpdate(){
+    let _this = this
+    Bus.$on('getIdUserInfo',(msg)=>{
+      _this.idCardMation = msg
+    })
+  },
+  methods: {
+    //设置时间
+    setTime(picker, arr) {
+      if (!this.timepicker && picker) {
+        this.timePicker = picker;
+      }
+      let v = arr ? arr : picker.getValues(),
+        time = v[0] + "." + v[1] + "." + v[2];
+      if (this.timeIndex === 0) {
+        this.startDay = time;
+      } else {
+        this.endDay = time;
+      }
+    },
+    setTimeIndex(index) {
+      this.timeIndex = index;
+      this.setPickerValue();
+    },
+    // 设置日期的值
+    setPickerValue() {
+      if (this.timePicker) {
+        let timeArr = [];
+        if (this.timeIndex === 0) {
+          timeArr = this.startDay;
+        } else {
+          timeArr = this.endDay;
+        }
+        this.currentDate = new Date(timeArr);
+      }
+    },
+    // 时间切换刷新统计数据
+    refreshData() {
+      if (this.timePicker) {
+        let arr = this.timePicker.getValues();
+        this.setTime(null, arr);
+        this.idCardMation.idCardValidBegin = this.startDay;
+        this.idCardMation.idCardValidEnd = this.endDay;
+      }
+      this.isShoTime = false;
+    },
+    // 下一步
+    goNext() {
+      let v = this.$tool;
+      if(v.checkValEmpty(this.idCardMation.idFrontUrl)){
+        v.toast('请上传身份证正面')
+        return
+      }
+      if(v.checkValEmpty(this.idCardMation.idBackUrl)){
+        v.toast('请上传身份证反面')
+        return
+      }
+      if(v.checkValEmpty(this.idCardMation.idCardAddr)){
+        v.toast('请输入身份证详细地址')
+        return
+      }
+      // if(!v.checkValEmpty(this.idCardMation.idCardAddr)){
+      //   v.toast('请输入正确的身份证详细地址')
+      //   return
+      // }
+      this.$api.saveIdInfo({...this.idCardMation,}).then(res => {
+          let str = location.host
+          //保存成功后获取人脸识别地址
+          // this.$api.getFaceUrl({
+          //   callbackUrl:`https://${str}/aic_cus/#/order-handling/face-recognition`
+          // }).then(res=>{
+          //   window.location.href = res.body.faceUrl
+          // })
+          this.$router.push({
+            path: "/order-handling/face-recognition",
+            query: {isFaceBack:'1'}
+          });
+      });
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.upload-IDcard-page {
+  & {
+    min-height: 100vh;
+  }
+  .steps-box {
+    & {
+      display: flex;
+    }
+    div {
+      width: 50%;
+    }
+    .steps {
+      height: 65px;
+      position: relative;
+      p {
+        border-bottom: 1px dashed #b3b3b3;
+        height: 32px;
+      }
+      .step-1 {
+        text-align: center;
+        line-height: 30px;
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(81, 148, 254, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        position: absolute;
+        left: -15px;
+        top: 19px;
+      }
+      .step-2 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 55px;
+        top: 19px;
+      }
+      .step-3 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        position: absolute;
+        left: 130px;
+        top: 19px;
+      }
+    }
+  }
+  .tit-box {
+    & {
+      width: 343px;
+      height: 75px;
+      background: rgba(255, 255, 255, 1);
+      box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+      border-radius: 5px;
+      margin: auto;
+      box-sizing: border-box;
+      padding: 16px 17px;
+    }
+    p:nth-of-type(1) {
+      margin-bottom: 10px;
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+    p:nth-of-type(2) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+  }
+  .idcard-box {
+    & {
+      margin-top: 29px;
+    }
+  }
+  .id-mation-box {
+    & {
+      box-sizing: border-box;
+      padding-left: 17px;
+      margin-top: 27px;
+    }
+    .tit {
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+    .mation {
+      box-sizing: border-box;
+      padding: 0 26px;
+    }
+  }
+  .btn-box {
+    text-align: center;
+    margin-top: 32px;
+    padding-bottom: 37px;
+    button {
+      width: 320px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      color: #fff;
+      border: 0;
+      outline: none;
+    }
+  }
+  .time-label {
+    .lh(65px);
+    color: @c-text-999;
+
+    .active {
+      color: @c-text-default;
+    }
+  }
+  .btn-time {
+    display: block;
+    text-align: center;
+    line-height: 40px;
+    width: 320px;
+    height: 40px;
+    background-color: @c-bg-default;
+    color: @c-text-fff;
+    border-radius: 22px;
+    margin: 15px auto;
+  }
+}
+</style>
diff --git a/src/views/order-handling/upload-userInfo.vue b/src/views/order-handling/upload-userInfo.vue
new file mode 100644
index 0000000..e39ba05
--- /dev/null
+++ b/src/views/order-handling/upload-userInfo.vue
@@ -0,0 +1,654 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-25 09:59:53
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-20 09:47:46
+ * @Description: 信息填写页面
+--> 
+<template>
+  <div class="upload-userinfo-page">
+    <v-navbar title="订单申请"></v-navbar>
+    <div class="steps-box">
+      <div class="steps">
+        <p></p>
+        <div class="step-1">1</div>
+        <div class="step-2">2</div>
+        <div class="step-3">3</div>
+        <div class="step-4">4</div>
+        <div class="step-5">5</div>
+      </div>
+    </div>
+    <div class="mation-box">
+      <p>个人信息填写</p>
+      <p>请确保资料填写的准确性,以便顺利申请</p>
+    </div>
+    <div class="user-info-box">
+      <h-cell
+        v-model="degree"
+        placeholder="请选择"
+        label="最高学历"
+        readonly
+        isLink
+        isMust
+        @click.native="getSelect(1)"
+      ></h-cell>
+      <h-cell
+        v-model="socialIdentity"
+        placeholder="请选择"
+        label="社会身份"
+        readonly
+        isLink
+        isMust
+        @click.native="getSelect(2)"
+      ></h-cell>
+      <h-cell
+        v-model="areListHome"
+        placeholder="请选择"
+        label="现居住地址"
+        readonly
+        isLink
+        isMust
+        @click.native="getSelect(3)"
+      ></h-cell>
+      <h-cell max="30" v-model="userMation.homeAddr" isMust placeholder="请输入居住详细地址" label="居住详细地址"></h-cell>
+      <h-cell max="20" v-model="userMation.email" isMust placeholder="请输入电子邮箱" label="电子邮箱" @blur="changeEmail"></h-cell>
+      <h-cell
+        v-if="userMation.socialIdentity != 2&&userMation.socialIdentity != 3"
+        max="20"
+        isMust
+        v-model="userMation.companyName"
+        placeholder="请输入公司名称"
+        label="公司名称"
+      ></h-cell>
+      <h-cell
+        v-if="userMation.socialIdentity != 2&&userMation.socialIdentity != 3"
+        v-model="userMation.companyPhone"
+        isMust
+        placeholder="请输入公司电话"
+        label="公司电话"
+        max="11"
+      ></h-cell>
+      <h-cell
+        v-if="userMation.socialIdentity != 2&&userMation.socialIdentity != 3"
+        v-model="areListMer"
+        placeholder="请选择"
+        label="公司地址"
+        readonly
+        isLink
+        isMust
+        @click.native="getSelect(4)"
+      ></h-cell>
+      <h-cell
+        v-if="userMation.socialIdentity != 2&&userMation.socialIdentity != 3"
+        max="30"
+        isMust
+        v-model="userMation.companyAddr"
+        placeholder="请输入公司详细地址"
+        label="公司详细地址"
+      ></h-cell>
+      <h-cell v-model="userMation.contactName1" isMust placeholder="请输入第一联系人姓名" label="第一联系人姓名"></h-cell>
+      <h-cell
+        v-model="contactRelation1"
+        placeholder="请选择"
+        label="第一联系人关系"
+        readonly
+        isLink
+        isMust
+        @click.native="getSelect(5)"
+      ></h-cell>
+      <h-cell
+        v-model="userMation.contactMblNo1"
+        placeholder="请输入第一联系人手机号"
+        label="第一联系人手机号"
+        isMust
+        max="11"
+      ></h-cell>
+      <h-cell  v-model="userMation.contactName2" :isMust='isMustReq' placeholder="请输入第二联系人姓名" label="第二联系人姓名"></h-cell>
+      <h-cell
+        v-model="contactRelation2"
+        placeholder="请选择"
+        label="第二联系人关系"
+        :isMust='isMustReq'
+        readonly
+        isLink
+        @click.native="getSelect(6)"
+      ></h-cell>
+      <h-cell
+        v-model="userMation.contactMblNo2"
+        :isMust='isMustReq'
+        placeholder="请输入第二联系人手机号"
+        label="第二联系人手机号"
+        max="11"
+      ></h-cell>
+      <h-cell
+        v-if=" projId == 100001"
+        v-model="contactRelation3"
+        placeholder="请选择"
+        label="第三联系人关系"
+        readonly
+        isLink
+        @click.native="getSelect(7)"
+      ></h-cell>
+      <h-cell  v-if=" projId == 100001" v-model="userMation.contactName3"  placeholder="请输入第三联系人姓名" label="第三联系人姓名"></h-cell>
+      <h-cell
+        v-if=" projId == 100001"
+        v-model="userMation.contactMblNo3"
+        placeholder="请输入第三联系人手机号"
+        label="第三联系人手机号"
+        max="11"
+      ></h-cell>
+    </div>
+    <div class="btn-box">
+      <button @click="goNext">下一步</button>
+    </div>
+    <van-popup v-model="showPickerOne" round position="bottom">
+      <van-picker
+        value-key="name"
+        show-toolbar
+        :columns="columnsOne"
+        @cancel="showPickerOne = false"
+        @confirm="onConfirmOne"
+      />
+    </van-popup>
+    <van-popup v-model="showPickerTwo" round position="bottom">
+      <van-picker
+        value-key="text"
+        show-toolbar
+        item-height="50"
+        visible-item-count="5"
+        :columns="columnsTwo"
+        @cancel="showPickerTwo = false"
+        @confirm="onConfirmTwo"
+      />
+    </van-popup>
+    <van-popup v-model="showPickerThree" round position="bottom">
+      <van-picker
+        value-key="name"
+        show-toolbar
+        item-height="50"
+        visible-item-count="5"
+        :columns="columnsThree"
+        @cancel="showPickerThree = false"
+        @confirm="onConfirmThree"
+      />
+    </van-popup>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Picker } from "vant";
+import { Popup } from "vant";
+
+Vue.use(Popup);
+Vue.use(Picker);
+export default {
+  data() {
+    return {
+      showPickerOne: false,
+      showPickerTwo: false,
+      showPickerThree:false,
+      columnsOne: [], //其他选择
+      columnsTwo: [], //地区选择
+      columnsThree:[],
+      userMation: {}, //个人信息对象
+      areListHome: "", //显示的居中地址
+      areListMer: "", //显示的公司地址
+      homeOrMer: "", //用于判断弹出层附值
+      degree: "",
+      socialIdentity: "",
+      contactRelation1: "",
+      contactRelation2: "",
+      contactRelation3:"",
+      isMustReq:false
+    };
+  },
+  computed: {
+    projId() {
+      return localStorage.getItem("projId");
+    },
+  },
+  created() {
+    this.columnsTwo = this.$store.state.areaList;
+    this.$api.initUserInfo().then(res => {
+      this.userMation = res.body;
+      this.isMustReq =  res.body.projId == 100001;
+      //返显最高学历
+      res.body.degreeList.forEach(e => {
+        if (e.code == res.body.degree) {
+          this.degree = e.name;
+        }
+      });
+      //返显社会角色
+      res.body.socialIdentityList.forEach(e => {
+        if (e.code == res.body.socialIdentity) {
+          this.socialIdentity = e.name;
+        }
+      });
+      //返显联系一关系
+      res.body.contactRelation1List.forEach(e => {
+        if (e.code == res.body.contactRelation1) {
+          this.contactRelation1 = e.name;
+        }
+      });
+      //返显联系二关系
+      res.body.contactRelation2List.forEach(e => {
+        if (e.code == res.body.contactRelation2) {
+          this.contactRelation2 = e.name;
+        }
+      });
+      res.body.contactRelation3List.forEach(e => {
+        if (e.code == res.body.contactRelation3) {
+          this.contactRelation3 = e.name;
+        }
+      });
+      // 返显居住地区
+      var pr = "",
+        ci = "",
+        ar = "";
+      this.$store.state.areaList.forEach(e => {
+        if (e.code == res.body.homeProv) {
+          pr = e.text;
+          e.children.forEach(i => {
+            if (i.code == res.body.homeCity) {
+              ci = i.text;
+              i.children.forEach(c => {
+                if (c.code == res.body.homeArea) {
+                  ar = c.text;
+                }
+              });
+            }
+          });
+        }
+      });
+      if (pr && ci && ar) {
+        this.areListHome = pr + "/" + ci + "/" + ar;
+      }
+
+      //返显公司地址
+      var pr2 = "",
+        ci2 = "",
+        ar2 = "";
+      this.$store.state.areaList.forEach(e => {
+        if (e.code == res.body.companyProv) {
+          pr2 = e.text;
+          e.children.forEach(i => {
+            if (i.code == res.body.companyCity) {
+              ci2 = i.text;
+              i.children.forEach(c => {
+                if (c.code == res.body.companyArea) {
+                  ar2 = c.text;
+                }
+              });
+            }
+          });
+        }
+      });
+      if (pr2 && ci2 && ar2) {
+        this.areListHome = pr2 + "/" + ci2 + "/" + ar2;
+      }
+    });
+  },
+  methods: {
+    changeEmail(){
+       let isHave = this.userMation.email.indexOf("@");
+       let email = this.userMation.email;
+       if(isHave>-1&&email){
+          let beforeStr = email.substring(0,isHave);
+          let afterStr = email.substring(isHave+1,email.length);
+          this.userMation.email = beforeStr+"@"+afterStr;
+       }
+    },
+    // 下一步
+    goNext() {
+      let v = this.$tool;
+      if (v.checkValEmpty(this.degree)) {
+        v.toast("请选择最高学历");
+        return;
+      }
+      if (v.checkValEmpty(this.socialIdentity)) {
+        v.toast("请选择社会身份");
+        return;
+      }
+      if (v.checkValEmpty(this.areListHome)) {
+        v.toast("请选择居住地址");
+        return;
+      }
+      if (v.checkValEmpty(this.userMation.homeAddr)) {
+        v.toast("请输入居住详细地址");
+        return;
+      }
+      // if (!v.checkAddress(this.userMation.homeAddr)) {
+      //   v.toast("请输入正确的居住详细地址");
+      //   return;
+      // }
+      if (v.checkValEmpty(this.userMation.email)) {
+        v.toast("请输入电子邮箱");
+        return;
+      }
+      if (!v.checkEmail(this.userMation.email)) {
+        v.toast("请输入正确的电子邮箱");
+        return;
+      }
+      if (this.userMation.socialIdentity != 2 && this.userMation.socialIdentity != 3) {
+        if (v.checkValEmpty(this.userMation.companyName)) {
+          v.toast("请输入公司名称");
+          return;
+        }
+        if (!v.checkCompany(this.userMation.companyName)) {
+          v.toast("请输入正确的公司名称");
+          return;
+        }
+        if (v.checkValEmpty(this.userMation.companyPhone)) {
+          v.toast("请输入公司电话");
+          return;
+        }
+        // if (!v.checkCompanyPhone(this.userMation.companyPhone)) {
+        //   v.toast("请输入正确的公司电话");
+        //   return;
+        // }
+        if (v.checkValEmpty(this.areListMer)) {
+          v.toast("请选择公司地址");
+          return;
+        }
+        if (v.checkValEmpty(this.userMation.companyAddr)) {
+          v.toast("请输入公司详细地址");
+          return;
+        }
+        // if (!v.checkAddress(this.userMation.companyAddr)) {
+        //   v.toast("请输入正确的公司详细地址");
+        //   return;
+        // }
+      }
+      if (v.checkValEmpty(this.userMation.contactName1)) {
+        v.toast("请输入第一联系人姓名");
+        return;
+      }
+      // if (!v.checkRealName(this.userMation.contactName1)) {
+      //   v.toast("请输入正确的第一联系人姓名");
+      //   return;
+      // }
+      if (v.checkValEmpty(this.contactRelation1)) {
+        v.toast("请选择第一联系人关系");
+        return;
+      }
+      if (v.checkValEmpty(this.userMation.contactMblNo1)) {
+        v.toast("请输入第一联系人手机号");
+        return;
+      }
+      if (!v.checkPhone(this.userMation.contactMblNo1)) {
+        v.toast("请输入正确的第一联系人手机号");
+        return;
+      }
+   
+      // F1项目添加第二联系人必填
+      if(this.isMustReq){
+        if (v.checkValEmpty(this.userMation.contactName2)) {
+          v.toast("请输入第二联系人姓名");
+          return;
+        }
+        // if (!v.checkRealName(this.userMation.contactName2)) {
+        //   v.toast("请输入正确的第二联系人姓名");
+        //   return;
+        // }
+        if (v.checkValEmpty(this.contactRelation2)) {
+          v.toast("请选择第二联系人关系");
+          return;
+        }
+        if (v.checkValEmpty(this.userMation.contactMblNo2)) {
+          v.toast("请输入第二联系人手机号");
+          return;
+        }
+        if (!v.checkPhone(this.userMation.contactMblNo2)) {
+          v.toast("请输入正确的第二联系人手机号");
+          return;
+        }
+        // 第三联系人
+        if (v.checkValEmpty(this.userMation.contactName2)) {
+          v.toast("请输入第二联系人姓名");
+          return;
+        }
+        // if (!v.checkRealName(this.userMation.contactName2)) {
+        //   v.toast("请输入正确的第二联系人姓名");
+        //   return;
+        // }
+        // if (v.checkValEmpty(this.contactRelation3)) {
+        //   v.toast("请选择第二联系人关系");
+        //   return;
+        // }
+        // if (v.checkValEmpty(this.userMation.contactMblNo3)) {
+        //   v.toast("请输入第二联系人手机号");
+        //   return;
+        // }
+        // if (!v.checkPhone(this.userMation.contactMblNo3)) {
+        //   v.toast("请输入正确的第二联系人手机号");
+        //   return;
+        // }
+      }
+      this.$api.saveUserInfo({...this.userMation}).then(res => {
+          this.$router.push({
+            path: "/order-handling/contract-signing",
+          });
+          window.sessionStorage.backUrl = "/order-handling/upload-userInfo"
+        });
+    },
+    // 弹出层选择
+    getSelect(i) {
+      this.homeOrMer = i;
+      if (i == 1) {
+        this.showPickerOne = true;
+        this.columnsOne = this.userMation.degreeList;
+      }
+      if (i == 2) {
+        this.showPickerOne = true;
+        this.columnsOne = this.userMation.socialIdentityList;
+      }
+      if (i == 3) {
+        this.showPickerTwo = true;
+        // this.columnsTwo = this.$store.state.areaList;
+      }
+      if (i == 4) {
+        this.showPickerTwo = true;
+        // this.columnsTwo = this.$store.state.areaList;
+      }
+      if (i == 5) {
+        this.showPickerOne = true;
+        this.columnsOne = this.userMation.contactRelation1List;
+
+      }
+      if (i == 6) {
+        this.showPickerOne = true;
+        this.columnsOne = this.userMation.contactRelation2List;
+        console.log(this.userMation.contactRelation2List);
+      }
+      if (i == 7) {
+        this.showPickerThree = true;
+        this.columnsThree = this.userMation.contactRelation3List;
+        console.log(this.userMation.contactRelation3List);
+      }
+    },
+    // 其他选择确定
+    onConfirmOne(picker, value, index) {
+      if (this.homeOrMer == 1) {
+        this.userMation.degree = picker.code;
+        this.degree = picker.name;
+      }
+      if (this.homeOrMer == 2) {
+        this.userMation.socialIdentity = picker.code;
+        this.socialIdentity = picker.name;
+      }
+      if (this.homeOrMer == 5) {
+        this.userMation.contactRelation1 = picker.code;
+        this.contactRelation1 = picker.name;
+      }
+      if (this.homeOrMer == 6) {
+        this.userMation.contactRelation2 = picker.code;
+        this.contactRelation2 = picker.name;
+      }
+      this.showPickerOne = false;
+    },
+    // 地区选择确定
+    onConfirmTwo(picker, value, index) {
+      if (this.homeOrMer == 3) {
+        this.userMation.homeProv = this.columnsTwo[value[0]].code;
+        this.userMation.homeCity = this.columnsTwo[value[0]].children[
+          value[1]
+        ].code;
+        this.userMation.homeArea = this.columnsTwo[value[0]].children[
+          value[1]
+        ].children[value[2]].code;
+        this.areListHome = picker[0] + "/" + picker[1] + "/" + picker[2];
+      }
+      if (this.homeOrMer == 4) {
+        this.userMation.companyProv = this.columnsTwo[value[0]].code;
+        this.userMation.companyCity = this.columnsTwo[value[0]].children[
+          value[1]
+        ].code;
+        this.userMation.companyArea = this.columnsTwo[value[0]].children[
+          value[1]
+        ].children[value[2]].code;
+        this.areListMer = picker[0] + "/" + picker[1] + "/" + picker[2];
+      }
+      this.showPickerTwo = false;
+    },
+    onConfirmThree(picker, value, index){
+      this.userMation.contactRelation3 = picker.code;
+      this.contactRelation3 = picker.name;
+      this.showPickerThree = false;
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.upload-userinfo-page {
+  & {
+    min-height: 100vh;
+  }
+  .steps-box {
+    .steps {
+      width: 100%;
+      height: 65px;
+      position: relative;
+      padding: 0 18px;
+      box-sizing: border-box;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      -webkit-align-items: center;
+      p {
+        border-bottom: 1px dashed #b3b3b3;
+        width: 90%;
+        position: absolute;
+        z-index: -1;
+      }
+      .step-1 {
+        text-align: center;
+        line-height: 30px;
+        color: #fff;
+        width: 30px;
+        height: 30px;
+        background: rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 18px;
+        // top: 19px;
+      }
+      .step-2 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(113, 123, 133, 1);
+        border: 0;
+        border-radius: 50%;
+        color: #fff;
+        // position: absolute;
+        // left: 90px;
+        // top: 19px;
+      }
+      .step-3 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(81, 148, 254, 1);
+        box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 170px;
+        // top: 19px;
+        color: #fff;
+      }
+      .step-4 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // left: 250px;
+        // top: 19px;
+      }
+      .step-5 {
+        text-align: center;
+        line-height: 28px;
+        width: 28px;
+        height: 28px;
+        background: rgba(255, 255, 255, 1);
+        border: 1px solid rgba(113, 123, 133, 1);
+        border-radius: 50%;
+        // position: absolute;
+        // right: 18px;
+        // top: 19px;
+      }
+    }
+  }
+  .mation-box {
+    width: 343px;
+    height: 79px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+    border-radius: 5px;
+    margin: auto;
+    box-sizing: border-box;
+    padding: 16px 17px;
+    p:nth-of-type(1) {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+      margin-bottom: 10px;
+    }
+    p:nth-of-type(2) {
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+    }
+  }
+  .user-info-box {
+    & {
+      box-sizing: border-box;
+      padding: 0 16px;
+      margin-top: 15px;
+    }
+  }
+  .btn-box {
+    & {
+      text-align: center;
+      margin-top: 32px;
+      padding-bottom: 46px;
+    }
+    button {
+      width: 320px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      outline: none;
+      border: 0;
+      color: #fff;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order/active-repayment.vue b/src/views/order/active-repayment.vue
new file mode 100644
index 0000000..d4766b9
--- /dev/null
+++ b/src/views/order/active-repayment.vue
@@ -0,0 +1,415 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-22 16:13:05
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-05 17:55:53
+ * @Description: 主动还款页面
+-->
+<template>
+  <div class="active-repayment-page">
+    <v-navbar title="主动还款" :back="'/order/order-detail?id=' + $route.query.id"></v-navbar>
+    <div class="mation-box">
+      <van-checkbox-group v-model="result" @change="onChange" style="width: 100%">
+        <!-- <div class="info-box" v-for="(item,index) in list" :key="index"> -->
+        <van-collapse v-model="activeNames" style="width: 100%">
+          <van-collapse-item style="width: 100%" :name="item.seqNo" v-for="(item, index) in list" :key="index" ref="keyplan">
+            <template #title>
+              <div class="tit-box">
+                <van-checkbox @click.prevent.stop.native="onClick(item)" v-model="item.checked" :name="item.seqNo" :disabled="item.canRepay == 0 ? true : false">第{{ item.seqNo }}期</van-checkbox>
+                <div>应还总额</div>
+                <div>¥{{ item.totalAmt }}</div>
+                <div v-if="item.rpySts == 1">
+                  <p style="line-height: 16px">已还</p>
+                </div>
+              </div>
+            </template>
+            <!-- 内容 -->
+            <div class="content-box">
+              <p>
+                <span>应还本金</span>
+                <span>¥{{ item.rpyAmt }}</span>
+              </p>
+              <p>
+                <span>应还服务费</span>
+                <span>¥{{ item.rpySerFee }}</span>
+              </p>
+              <p>
+                <span>应还滞纳金</span>
+                <span>¥{{ item.rpyLateFee }}</span>
+              </p>
+              <p>
+                <span>应还日期</span>
+                <span>{{ item.rpyDay }}</span>
+              </p>
+            </div>
+          </van-collapse-item>
+        </van-collapse>
+        <!-- </div> -->
+      </van-checkbox-group>
+    </div>
+    <!-- 占位 -->
+    <div style="height: 100px; width: 100vw"></div>
+    <div class="footer-box">
+      <div class="text-box">
+        <p>主动还款必须按照应还顺序依次还款</p>
+        <p>不支持跳期还款</p>
+      </div>
+      <div class="play-box">
+        <p>
+          <span>应还总额:</span>
+          <span>¥{{ repayAmt }}</span>
+        </p>
+        <button class="btn" @click="pay">确认支付</button>
+      </div>
+    </div>
+    <van-popup v-model="yzmShow">
+      <div class="yzmbox">
+        <van-icon name="cross" size="18" class="yzmbox-close" @click="yzmShow = false" />
+        <p style="font-size: 16px; color: #000">请输入短信验证码</p>
+        <div class="yzmbox-contnet">
+          <div class="yzmbox-contnet-yzm">
+            <span>将发送到手机号:</span>
+            <span>{{ userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/, "$1****$2") }}</span>
+          </div>
+        </div>
+        <div class="yzmbox-contnet-get">
+          <input type="text" v-model="yzmVal" placeholder="请输入验证码" />
+          <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{ yzmText }}</span>
+        </div>
+        <van-button class="showbtn" block round @click="yzmYes">确 认 支 付</van-button>
+      </div>
+    </van-popup>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Collapse, CollapseItem } from "vant";
+import { Checkbox, CheckboxGroup, Button, Popup, Icon } from "vant";
+import { mapState } from "vuex";
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+Vue.use(Collapse);
+Vue.use(CollapseItem);
+Vue.use(Button);
+Vue.use(Popup);
+Vue.use(Icon);
+export default {
+  data() {
+    return {
+      activeNames: [],
+      list: [],
+      result: [],
+      repayTerms: [], //还款期数
+      repayAmt: 0, //还款金额
+      yzmShow: false,
+      yzmVal: "",
+      yzmText:'发送验证码',
+      Open: true, //倒计时开关
+    };
+  },
+  created() {
+    this.init();
+  },
+  computed: {
+    ...mapState(["userinfo"]),
+  },
+  methods: {
+    init() {
+      this.$api
+        .initRepay({
+          orderId: this.$route.query.id,
+        })
+        .then((res) => {
+          this.list = res.body.repayPlans || [];
+        });
+    },
+    pay() {
+      if(this.repayAmt>0){
+         this.yzmShow = true;
+      }else{
+
+      }
+    },
+    onChange() {
+      //判断数组元素个数
+      if (this.result.length > 0) {
+        this.$api
+          .repayTrial({ repayTerms: this.result, orderId: this.$route.query.id })
+          .then((res) => {
+            this.repayAmt = res.body.totalAmt;
+          })
+          .catch((err) => {
+            //捕捉错误  清空选项重新选择
+            this.result = [];
+            this.list.forEach((e) => {
+              e.checked = false;
+            });
+          });
+      } else {
+        //this.activeNames = []
+        this.repayAmt = 0;
+      }
+      console.log(this.activeNames);
+    },
+    onClick(item) {
+      //此点击函数只是用来阻止事件冒泡
+      console.log("点击了", item);
+    },
+    /**主动还款**/
+    yzmYes() {
+        if (this.yzmVal == "" || this.yzmVal == null) {
+            this.$notify({ type: "danger", message: "验证码为空!" });
+        } else{
+           this.$api.repay({orderId: this.$route.query.id,repayAmt: this.repayAmt, repayTerms: this.result,verCode:this.yzmVal}).then((res) => {
+              this.$router.push({
+                path: "/order/pay-result",
+                query: {
+                  orderId: this.$route.query.id,
+                  repayId: res.body.repayId,
+                  model: 1, //1-主动还款行为 2-提前结清行为
+                },
+              });
+            });
+        }
+    },
+    getYzm() {
+      let sendParams = { mblNo: this.userinfo.mblNo, verCodeType: 20 };
+      if (this.Open) {
+        this.$api.getVerCode(sendParams).then((res) => {
+            this.Open = false;
+            let num = 60;
+            this.yzmText = num + "秒后重发";
+            let _this = this;
+            _this.timer = setInterval(() => {
+              num--;
+              if (num === 0) {
+                clearInterval(_this.timer);
+                _this.Open = true;
+                _this.yzmText = "重新发送";
+              } else {
+                _this.yzmText = num + "秒后重发";
+              }
+            }, 1000);
+          })
+          .catch(() => {
+            this.Open = true;
+          });
+      }
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.active-repayment-page {
+  & {
+    min-height: 100vh;
+    background: #f5f5f7;
+    position: relative;
+  }
+  /deep/.van-collapse-item {
+    width: 100%;
+    background: rgba(255, 255, 255, 1);
+    border: 1px solid rgba(225, 237, 255, 1);
+    border-radius: 5px;
+    margin-bottom: 8px;
+  }
+  /deep/[class*="van-hairline"]::after {
+    position: absolute;
+    box-sizing: border-box;
+    content: " ";
+    pointer-events: none;
+    top: -50%;
+    right: -50%;
+    bottom: -50%;
+    left: -50%;
+    border: 0;
+    -webkit-transform: scale(0.5);
+    transform: scale(0.5);
+  }
+  .mation-box {
+    & {
+      background: #fff;
+      display: flex;
+      justify-content: center;
+      padding: 20px 16px;
+      box-sizing: border-box;
+      height: auto;
+      margin-top: 10px;
+    }
+    .info-box {
+      width: 343px;
+      height: 44px;
+      background: rgba(255, 255, 255, 1);
+      border: 1px solid rgba(225, 237, 255, 1);
+      border-radius: 5px;
+      margin-bottom: 8px;
+    }
+    .tit-box {
+      & {
+        //width: 100%;
+        display: flex;
+        z-index: 100;
+        //justify-content: space-between;
+      }
+      div:nth-of-type(1) {
+        width: 80px;
+      }
+      div:nth-of-type(2) {
+        width: 70px;
+        font-size: 13px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(153, 153, 153, 1);
+      }
+      div:nth-of-type(3) {
+        //width: 80px;
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: rgba(51, 51, 51, 1);
+      }
+      div:nth-of-type(4) {
+        margin-left: 12px;
+        text-align: center;
+        p {
+          display: inline-block;
+          width: 40px;
+          height: 16px;
+          font-size: 12px;
+          font-family: PingFang SC;
+          font-weight: 500;
+          background: rgba(240, 246, 255, 1);
+          border: 1px solid rgba(81, 148, 254, 1);
+          border-radius: 3px;
+          color: #5194fe;
+        }
+      }
+    }
+    .content-box {
+      & {
+        color: #999999;
+      }
+      p {
+        span {
+          display: inline-block;
+          width: 49%;
+        }
+        span:nth-of-type(2) {
+          text-align: right;
+        }
+      }
+      p:nth-of-type(2) {
+        margin: 11px 0;
+      }
+      p:nth-of-type(4) {
+        margin-top: 11px;
+      }
+    }
+  }
+  .footer-box {
+    & {
+      position: absolute;
+      bottom: 0;
+    }
+    .text-box {
+      & {
+        height: 39px;
+        width: 100vw;
+        text-align: center;
+      }
+      p {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(153, 153, 153, 1);
+        line-height: 15px;
+      }
+    }
+    .play-box {
+      & {
+        width: 100vw;
+        height: 49px;
+        background: #fff;
+        position: relative;
+        line-height: 49px;
+        box-sizing: border-box;
+        padding-left: 16px;
+      }
+      .btn {
+        width: 120px;
+        height: 49px;
+        background: rgba(81, 148, 254, 1);
+        color: #fff;
+        border: 0;
+        outline: none;
+        position: absolute;
+        top: 0;
+        right: 0;
+      }
+      p {
+        span:nth-of-type(1) {
+          font-size: 14px;
+          font-family: PingFang SC;
+          font-weight: 500;
+          color: rgba(51, 51, 51, 1);
+        }
+        span:nth-of-type(2) {
+          font-size: 16px;
+          font-family: PingFang SC;
+          font-weight: bold;
+          color: rgba(255, 102, 102, 1);
+        }
+      }
+    }
+  }
+  .yzmbox {
+    box-sizing: border-box;
+    width: 280px;
+    height: 225px;
+    position: relative;
+    overflow: hidden;
+    .flex("", center, center, column);
+    text-align: center;
+    border-radius: 6px;
+    background: #fff;
+    padding-top: 30px;
+    .van-button--block {
+      width: 90%;
+      margin-top: 15px;
+    }
+    &-close {
+      color: #999;
+      font-size: 16px;
+      position: absolute;
+      right: 8px;
+      top: 8px;
+    }
+    &-contnet {
+      margin-top: 11px;
+      color: #999;
+      font-size: 14px;
+      &-yzm {
+        .flex(center, center);
+        span {
+          font-size: 14px;
+        }
+      }
+      &-get {
+        width: 80%;
+        margin: 0 10%;
+        margin-top: 15px;
+        .flex(space-between, center);
+        input {
+          border: none;
+          width: 45%;
+          background: #fff;
+          height: 30px;
+        }
+        &-yzm {
+          color: @c-default;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/order/contract.vue b/src/views/order/contract.vue
new file mode 100644
index 0000000..f2f16c7
--- /dev/null
+++ b/src/views/order/contract.vue
@@ -0,0 +1,145 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-19 09:42:54
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-10-27 09:49:54
+ * @Description: 相关合同页面
+--> 
+<template>
+  <div class="contract-page">
+    <v-navbar title="相关合同"></v-navbar>
+    <div class="contract-box">
+      <!-- <h-cell v-if="contract1" label="《保理付款服务合同》" isLink readonly @click="goPdf(1)"></h-cell> -->
+      <h-cell v-if="contract2" label="《代扣委托书》" isLink readonly @click="goPdf(2)"></h-cell>
+      <h-cell v-if="contract3" label="《信息授权函》" isLink readonly @click="goPdf(3)"></h-cell>
+      <!-- <h-cell v-if="contract4" label="《重要信息告知书》" isLink readonly @click="goPdf(4)"></h-cell> -->
+      <h-cell v-if="contract5" label="《个人征信查询报送授权书》" isLink readonly @click="goPdf(5)"></h-cell>
+      <h-cell v-if="contract6" label="《委托担保合同》" isLink readonly @click="goPdf(6)"></h-cell>
+      <h-cell v-if="contract7" label="《融资担保服务申请书》" isLink readonly @click="goPdf(7)"></h-cell>
+    </div>
+    <van-image-preview v-model="show" :images="images" @change="onChange" closeable="true" :loop="false" showIndicators="true">
+      <template v-slot:index>第{{ index+1 }}页</template>
+    </van-image-preview>
+  </div>
+</template>
+<script>
+import Vue from 'vue';
+import { ImagePreview } from 'vant';
+
+// 全局注册
+Vue.use(ImagePreview);
+export default {
+  data() {
+    return {
+      show: false,
+      index: 0,
+      images: [
+        'https://img.yzcdn.cn/vant/apple-1.jpg',
+        'https://img.yzcdn.cn/vant/apple-2.jpg',
+      ],
+    }
+  },
+  computed: {
+    contract1() {
+      return JSON.parse(sessionStorage.contract1Urls)
+    },
+    contract2() {
+      return JSON.parse(sessionStorage.contract2Urls)
+    },
+    contract3() {
+      return JSON.parse(sessionStorage.contract3Urls)
+    },
+    contract4() {
+      return JSON.parse(sessionStorage.contract4Urls)
+    },
+    contract5() {
+      return JSON.parse(sessionStorage.contract5Urls)
+    },
+    contract6() {
+      return JSON.parse(sessionStorage.contract6Urls)
+    },
+    contract7() {
+      return JSON.parse(sessionStorage.contract7Urls)
+    },
+  },
+  methods: {
+    onChange(index) {
+      this.index = index;
+    },
+    goPdf(i) {
+      let url = ''
+      let tit = ''
+      switch (i) {
+        case 1:
+          this.images = JSON.parse(sessionStorage.contract1Urls)
+          tit = '保理付款服务合同'
+          break;
+        case 2:
+          this.images = JSON.parse(sessionStorage.contract2Urls)
+          tit = '代扣委托书'
+          break;
+        case 3:
+          this.images = JSON.parse(sessionStorage.contract3Urls)
+          tit = '信息授权函'
+          break;
+        case 4:
+          this.images = JSON.parse(sessionStorage.contract4Urls)
+          tit = '重要信息告知书'
+          break;
+        case 5:
+          this.images = JSON.parse(sessionStorage.contract5Urls)
+          tit = '个人征信查询报送授权书'
+          break;
+        case 6:
+          this.images = JSON.parse(sessionStorage.contract6Urls)
+          tit = '委托担保合同'
+          break;
+        case 7:
+          this.images = JSON.parse(sessionStorage.contract7Urls)
+          tit = '融资担保服务申请书'
+          break;
+      }
+      this.show = true
+      // this.$router.push({
+      //     path:"/agreement2",
+      //     query:{
+      //         tit:tit,
+      //         url:url
+      //     }
+      // })
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+.contract-page {
+  & {
+    min-height: 100vh;
+    background: #f5f5f7;
+  }
+  .contract-box {
+    background: #fff;
+    margin-top: 10px;
+    padding: 0 27px 0 25px;
+    /deep/.v-cell-box {
+      .left {
+        width: 80%;
+      }
+    }
+  }
+  /deep/.van-image-preview__close-icon--top-right {
+    top: 0.12rem;
+    right: 0.32rem;
+  }
+  /deep/.van-image-preview__image {
+    top: 35px;
+  }
+  /deep/.van-image__error,
+  .van-image__img,
+  .van-image__loading {
+    display: block;
+    width: 100%;
+    height: 95%;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order/my-order.vue b/src/views/order/my-order.vue
new file mode 100644
index 0000000..79e11c5
--- /dev/null
+++ b/src/views/order/my-order.vue
@@ -0,0 +1,115 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-21 16:46:50
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-14 16:57:03
+ * @Description: 我的订单
+--> 
+<template>
+    <div class="my-order-page"> 
+        <v-navbar title="我的订单" back="/home/personal"></v-navbar>
+        <h-list height="90vh" background="#f5f5f5" v-if="mation.length > 0" >
+            <div class="mation-box" v-for="(item,index) in mation" :key="index" @click="goDetail(item)">
+                <div>
+                    <span>订单号</span>
+                    <span>{{item.orderId}}</span>
+                </div>
+                 <div>
+                    <span>订单状态</span>
+                    <span>{{item.statusName}}</span>
+                </div>
+                <div>
+                    <span>逾期状态</span>
+                    <span>{{item.overStatusName}}</span>
+                </div>
+            </div>
+        </h-list>
+        <div class="noinfo-box" v-else>
+            <img src="../../assets/img/noinfo.png" alt="">
+            <p>暂无订单</p>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            mation:[],
+            loading:false,
+            finished:false,
+            orderId:''
+        }
+    },
+    created(){
+       this.init()
+    },
+    methods:{
+        init(){
+            this.$api.orderUserList().then(res=>{
+                this.mation = res.body.items
+            })
+        },
+        goDetail(item){
+            if(item.canDtl==1){
+                this.$router.push({
+                    path:'/order/order-detail',
+                    query:{
+                        id:item.orderId
+                    }
+                })
+            }
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+    .my-order-page{
+        &{
+            height: 100vh;
+            background: @c-back;
+            position: relative;
+        }
+        .mation-box{
+            width:343px;
+            background:rgba(255,255,255,1);
+            box-shadow:0px 4px 12px 0px rgba(12,85,188,0.08);
+            border-radius:5px;
+            margin-top: 10px;
+            box-sizing: border-box;
+            padding: 17px;
+            div:nth-of-type(2){
+                margin: 13px 0;
+            }
+            div{
+                span{
+                    display: inline-block;
+                    width: 49%;
+                }
+                span:nth-of-type(1){
+                    font-size:13px;
+                    font-family:PingFang SC;
+                    font-weight:500;
+                    color:rgba(153,153,153,1);
+                }
+                span:nth-of-type(2){
+                    font-size:13px;
+                    font-family:PingFang SC;
+                    font-weight:500;
+                    color:rgba(51,51,51,1);
+                    text-align: right;
+                }
+            }
+        }
+        .noinfo-box{
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%,-50%);
+            text-align: center;
+            img{
+                width: 222px;
+                height: 130px;
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/views/order/order-detail.vue b/src/views/order/order-detail.vue
new file mode 100644
index 0000000..a7aca15
--- /dev/null
+++ b/src/views/order/order-detail.vue
@@ -0,0 +1,329 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-21 17:31:49
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-08 16:12:18
+ * @Description: 订单详情
+-->
+<template>
+  <div class="order-detail-page">
+    <v-navbar
+      title="订单详情"
+      titleColor="#fff"
+      background="linear-gradient(60deg,rgba(75,137,250,1),rgba(105,167,255,1))"
+    >
+      <template slot="left-back">
+        <div>
+          <i
+            class="iconfont iconzuojiantou"
+            style="font-size:22px;font-weight:blod;color:#fff"
+            @click="$router.push('/order/my-order')"
+          ></i>
+        </div>
+      </template>
+    </v-navbar>
+    <div class="business-info-box">
+      <div class="business-top">
+        <div class="box">
+          <img src="../../../static/img/pic.png" alt />
+          <span>商品信息</span>
+        </div>
+      </div>
+      <div class="business-mation">
+        <h-cell label="商品名称" v-model="orderInfo.goodsName" readonly></h-cell>
+        <h-cell label="规格" v-model="orderInfo.goodsModel" readonly></h-cell>
+        <h-cell label="成交价格" v-model="orderInfo.goodsAmt" readonly></h-cell>
+      </div>
+    </div>
+    <div class="fenqi-info-box">
+      <div class="fenqi-top">
+        <div class="box">
+          <img src="../../../static/img/pic.png" alt />
+          <span>分期信息</span>
+        </div>
+      </div>
+      <div class="fenqi-mation">
+        <h-cell label="分期金额" v-model="orderInfo.insAmt" readonly></h-cell>
+        <h-cell label="期数" v-model="insTerm" readonly></h-cell>
+        <h-cell label="应还总额" v-model="orderInfo.repayTotalAmt" readonly></h-cell>
+        <h-cell label="交易日期" v-model="orderInfo.payTime" readonly></h-cell>
+        <h-cell label="订单状态" v-model="orderInfo.statusName" readonly></h-cell>
+        <h-cell label="还款状态" v-model="orderInfo.overStatusName" readonly></h-cell>
+        <h-cell v-if="orderInfo.repayPlans" label="还款计划表" isLink readonly @click="goRepaymentPlan"></h-cell>
+      </div>
+    </div>
+    <div style="margin-top:10px;padding:0 26px;background:#fff" v-if="orderInfo.contract2Urls || orderInfo.contract3Urls || orderInfo.contract4Urls || orderInfo.contract5Urls  || orderInfo.contract6Urls  || orderInfo.contract7Urls">
+        <!-- <div style="margin-top:10px;padding:0 26px;background:#fff" v-if="orderInfo.contract2Urls || orderInfo.contract3Urls || orderInfo.contract4Urls"> -->
+      <!-- orderInfo.contract1Urls || 合同一保理合同暂时不要 -->
+      <h-cell label="相关合同" @click="goContract" isLink readonly></h-cell>
+    </div>
+    <div class="btn-box">
+      <button class="btn-jxsq" v-if="orderInfo.applyBtn==1" @click="doItNext">继续申请</button>
+      <button class="btn-qx" v-if="orderInfo.cancelBtn==1" @click="show=!show">取消订单</button>
+      <button class="btn-jq" v-if="orderInfo.preCloseBtn==1" @click="goSettle">提前结清</button>
+      <button class="btn-hk" v-if="orderInfo.repayBtn==1" @click="goRepayment">主动还款</button>
+    </div>
+    <van-dialog
+      @confirm="onConfirm"
+      v-model="show"
+      show-cancel-button
+      confirmButtonColor="#333333"
+      cancelButtonColor="#666666"
+    >
+      <div class="title-box">
+        <p>确定取消此订单吗?</p>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Dialog } from "vant";
+
+Vue.use(Dialog);
+export default {
+  data() {
+    return {
+      show: false,
+      orderInfo: {},
+      step:'',//步骤
+      insTerm:'',//期数
+    };
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    /**初始化**/
+    init() {
+      this.$api.orderUserDetail({orderId: this.$route.query.id }).then(res => {
+          this.orderInfo = res.body;
+          this.insTerm = res.body.insTerm+'期'
+      });
+    },
+    /**订单取消**/
+    onConfirm() {
+      this.$api
+        .orderUserCancel({
+          orderId: this.orderInfo.orderId
+        })
+        .then(res => {
+          this.$tool.toast("订单取消成功");
+          this.init()
+        });
+    },
+    /**跳转还款计划表**/
+    goRepaymentPlan() {
+      this.$router.push({
+        path: "/order/repayment-plan",
+        query: {
+          id: this.orderInfo.orderId
+        }
+      });
+    },
+    /**跳转提前结清**/
+    goSettle() {
+      this.$api.initPreClose({ orderId: this.$route.query.id }).then(({ body }) => {
+            this.$router.push({
+              path: "/order/settlementEarly",
+              query: {
+                id: this.orderInfo.orderId
+              }
+            });
+      })
+    },
+    /**跳转主动还款**/
+    goRepayment() {
+      this.$router.push({
+        path: "/order/active-repayment",
+        query: {
+          id: this.orderInfo.orderId
+        }
+      });
+    },
+    /**继续申请**/
+    doItNext(){
+      this.$api.orderCreateStep().then(res=>{
+        let createStep = res.body.createStep;
+        localStorage.setItem('projId',res.body.projId);
+        this.step = createStep
+        if (res.body.createStep == 0) {
+          this.$router.push('/home/index')
+        }
+        if (res.body.createStep == 1) {
+          this.$router.push("/order-handling/upload-IDcard");
+        }
+        if (res.body.createStep == 2) {
+            //重新人脸识别,先去协议页面;
+            this.$router.push({
+              path: "/order-handling/face-recognition",
+              query: {isFaceBack:'1'}
+            });
+          // let str = location.host
+          // this.$api.getFaceUrl({callbackUrl:`https://${str}/aic_cus/#/order-handling/face-recognition`}).then(res => {
+          //     window.location.href = res.body.faceUrl;
+          // });
+        }
+        if (res.body.createStep == 3) {
+          this.$router.push("/order-handling/upload-userInfo");
+        }
+        if (res.body.createStep == 4) {
+          this.$router.push("/order-handling/contract-signing");
+        }
+        if (res.body.createStep == 5) {
+          this.$router.push(res.body.projId=='100000'?"/order-handling/approval-results":"/order-handling/image-upload");
+        }
+        if (res.body.createStep == 6) {
+          this.$router.push("/order-handling/approval-results");
+        }
+      })
+    },
+    /**跳转相关合同页**/
+    goContract(){
+      sessionStorage.contract1Urls = JSON.stringify(this.orderInfo.contract1Urls)
+      sessionStorage.contract2Urls = JSON.stringify(this.orderInfo.contract2Urls)
+      sessionStorage.contract3Urls = JSON.stringify(this.orderInfo.contract3Urls)
+      sessionStorage.contract4Urls = JSON.stringify(this.orderInfo.contract4Urls)
+      sessionStorage.contract5Urls = JSON.stringify(this.orderInfo.contract5Urls)
+      sessionStorage.contract6Urls = JSON.stringify(this.orderInfo.contract6Urls)
+      sessionStorage.contract7Urls = JSON.stringify(this.orderInfo.contract7Urls)
+      this.$router.push({
+        path:'/order/contract',
+        query:{
+           orderId: this.$route.query.id
+        }
+      })
+    },
+    goToSettle(){
+
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+.order-detail-page {
+  & {
+    min-height: 100vh;
+    background: @c-back;
+    padding-bottom: 29px;
+  }
+  /deep/.v-cell-box .input[disabled] {
+    opacity: 1;
+    -webkit-opacity: 1;
+    color: #333;
+    -webkit-text-fill-color: #333;
+}
+  .business-info-box {
+    & {
+      width: 100%;
+      background: #fff;
+    }
+    .business-top {
+      font-size: 15px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: rgba(51, 51, 51, 1);
+      padding: 0 10px;
+      .box {
+        border-bottom: 1px solid #e6e6e6;
+        padding: 17px 6px;
+      }
+      img {
+        width: 6px;
+        height: 13px;
+      }
+    }
+    .business-mation {
+      padding: 0 26px;
+    }
+    div:last-of-type {
+      border: 0;
+    }
+  }
+  .fenqi-info-box {
+    & {
+      width: 100%;
+      background: #fff;
+      margin-top: 10px;
+    }
+    .fenqi-top {
+      font-size: 15px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: rgba(51, 51, 51, 1);
+      padding: 0 10px;
+      .box {
+        border-bottom: 1px solid #e6e6e6;
+        padding: 17px 6px;
+      }
+      img {
+        width: 6px;
+        height: 13px;
+      }
+    }
+    .fenqi-mation {
+      padding: 0 26px;
+    }
+    div:last-of-type {
+      border: 0;
+    }
+  }
+  .btn-box {
+    & {
+      text-align: center;
+      margin-top: 32px;
+    }
+    .btn-jxsq {
+      width: 155px;
+      height: 44px;
+      background: rgba(231, 240, 255, 1);
+      border: 1px solid rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      outline: none;
+      color: #5194fe;
+      margin-right: 13px;
+    }
+    .btn-jq {
+      width: 155px;
+      height: 44px;
+      background: rgba(231, 240, 255, 1);
+      border: 1px solid rgba(81, 148, 254, 1);
+      border-radius: 22px;
+      outline: none;
+      color: #5194fe;
+      margin-right: 13px;
+    }
+    .btn-hk {
+      outline: none;
+      border: 0;
+      color: #fff;
+      width: 155px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+    }
+    .btn-qx {
+      outline: none;
+      border: 0;
+      color: #fff;
+      width: 155px;
+      height: 44px;
+      background: rgba(81, 148, 254, 1);
+      border-radius: 22px;
+    }
+  }
+  .title-box {
+    & {
+      height: 100px;
+      line-height: 100px;
+      text-align: center;
+    }
+    p {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+  }
+}
+</style>
diff --git a/src/views/order/pay-result.vue b/src/views/order/pay-result.vue
new file mode 100644
index 0000000..9f4830b
--- /dev/null
+++ b/src/views/order/pay-result.vue
@@ -0,0 +1,157 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-19 15:59:27
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2021-10-29 16:51:54
+ * @Description: 支付结果页面
+--> 
+<template>
+  <div class="pay-result-page">
+    <v-navbar title="支付结果"></v-navbar>
+    <div class="result-box">
+      <img :src="url" alt />
+      <!-- <img src="../../../static/img/faile.png" alt />
+      <img src="../../../static/img/ing.png" alt /> -->
+      <p>{{titleText}}</p>
+      <p>{{tipText}}</p>
+    </div>
+    <div class="btn-box">
+        <button @click="goBack" v-if="preSettleStatus == 2">返回</button>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      preSettleStatus:'',
+      url: "./static/img/ing.png", //图片地址
+      titleText: "支付中", //标题文字
+      tipText: "正在进行支付,请稍后…", //提示文字
+      timer: "" //定时器
+    };
+  },
+  created() {
+      this.init()
+  },
+  methods: {
+    init() {
+      //判断用户查询哪一个行为的支付结果
+      if(this.$route.query.model == 1){
+          this.$api.findRepayResult({ repayId: this.$route.query.repayId}).then(res => {
+          this.preSettleStatus = res.body.repaySts
+          if (res.body.repaySts == 2) {
+            this.url = "./static/img/faile.png";
+            this.titleText = "支付失败";
+            this.tipText = res.body.failMsg;
+          }
+          if (res.body.repaySts == 1) {
+            this.url = "./static/img/success.png";
+            this.titleText = "支付成功";
+            this.tipText = "支付成功,跳转中请稍后…";
+            this.timer = setTimeout(()=>{
+                this.goBack()
+            },3000)
+          }
+          if (res.body.repaySts == 0) {
+            this.url = "./static/img/ing.png";
+            this.titleText = "支付中";
+            this.tipText = "正在进行支付,请稍后…";
+             
+          }
+        });
+      }
+      if(this.$route.query.model == 2){
+          this.$api
+        .preSettleStatus({
+          orderId: this.$route.query.orderId
+        })
+        .then(res => {
+          this.preSettleStatus = res.body.status
+          if (res.body.status == 2) {
+            this.url = "./static/img/faile.png";
+            this.titleText = "支付失败";
+            this.tipText = res.body.msg;
+          }
+          if (res.body.status == 1) {
+            this.url = "./static/img/success.png";
+            this.titleText = "支付成功";
+            this.tipText = "支付成功,跳转中请稍后…";
+            this.timer = setTimeout(()=>{
+                this.goBack()
+            },3000)
+          }
+          if (res.body.status == 0) {
+            this.url = "./static/img/ing.png";
+            this.titleText = "支付中";
+            this.tipText = "正在进行支付,请稍后…";
+            this.timer = setInterval(()=>{
+                this.init()
+            },3000)
+          }
+        });
+      }
+      
+    },
+    goBack(){
+        this.$router.push({
+            path:'/order/order-detail',
+            query:{
+                id:this.$route.query.orderId
+            }
+        })
+    }
+  },
+  beforeDestroy(){
+      clearInterval(this.timer)
+      clearTimeout(this.timer)
+  }
+};
+</script>
+<style lang="less" scoped>
+.pay-result-page {
+  & {
+    min-height: 100vh;
+    background: @c-back;
+  }
+  .result-box {
+    & {
+      background: #fff;
+      text-align: center;
+      margin-top: 10px;
+      padding: 31px 0 24px;
+    }
+    img {
+      width: 83px;
+      height: 81px;
+    }
+    p:nth-of-type(1) {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+      margin-top: 20px;
+    }
+    p:nth-of-type(2) {
+      font-size: 14px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(153, 153, 153, 1);
+      margin-top: 12px;
+    }
+  }
+  .btn-box{
+      text-align: center;
+      margin-top: 32px;
+      button{
+          width:320px;
+          height:44px;
+          background:rgba(81,148,254,1);
+          border-radius:22px;
+          border: 0;
+          outline: none;
+          color: #fff;
+      }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order/repayment-plan.vue b/src/views/order/repayment-plan.vue
new file mode 100644
index 0000000..f3bf019
--- /dev/null
+++ b/src/views/order/repayment-plan.vue
@@ -0,0 +1,483 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-13 17:26:17
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-15 17:53:43
+ * @Description: 还款试算-订单详情还款计划表
+ -->
+<template>
+    <div class="repayment-plan-page">
+        <v-navbar :title="isPlan?'还款计划表':'还款试算'" fixed></v-navbar>
+        <div class='repayment_box'>
+            <!-- <div class='repayment_small_box'> -->
+                <!-- <div style="height:10px"></div> -->
+                 <div v-if='isAllReplay' class="primary_btn"  @click="checkAll" >
+                        <van-checkbox icon-size='14px' v-model="checkedAll">全选</van-checkbox>
+                </div>
+                <div class='repayment_small_box'>
+                    <van-collapse v-model="activeNames" accordion style='padding-bottom:50px;' >
+                        <van-checkbox-group v-model="result" ref="checkboxGroup" @change='changeRadion'>
+                            <div v-for="(item,index) in tremList" :key="index" class='chckout'>
+                                <van-checkbox  v-if='isAllReplay&&item.canRepay==1' @click.stop='changeRad' :name="item.seqNo" icon-size='14px'> </van-checkbox>
+                                <van-collapse-item  :name="index">
+                                    <template #title>
+                                        <div>
+                                            <span>{{'第'+(index+1)+'期'}}</span>
+                                        </div> 
+                                    </template>
+                                    <div class="detail-box">
+                                        <div class="text-box">
+                                            <span>应还日期:</span>
+                                            <span>{{item.rpyDay}}</span>
+                                        </div>
+                                        <div class="text-box">
+                                            <span>{{isPlan?'应还本金:':'应还总额:'}}</span>
+                                            <span v-if="isPlan">¥{{item.rpyAmt}}</span>
+                                            <span v-else>¥{{item.totalAmt}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>应还服务费:</span>
+                                            <span>¥{{item.rpySerFee}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>应还滞纳金:</span>
+                                            <span>¥{{item.rpyLateFee}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>实还日期:</span>
+                                            <span>{{item.realRpyTime}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>实还本金:</span>
+                                            <span>¥{{item.realAmt}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>实还服务费:</span>
+                                            <span>¥{{item.realSerFee}}</span>
+                                        </div>
+                                        <div v-if="isPlan" class="text-box">
+                                            <span>实还滞纳金:</span>
+                                            <span>¥{{item.realLateFee}}</span>
+                                        </div>
+                                    </div>
+                                </van-collapse-item>
+                            </div>
+                        </van-checkbox-group>
+                    </van-collapse>
+                    <!-- <div class='btn_class' v-if='!isAllReplay&&showReplayArr.length>0'>
+                        <van-button size='normal' block type="info" @click="goPay">立即还款</van-button>
+                    </div>
+                    <div class='btn_replay primary_btn' v-else>
+                        <div class='payment_money' v-if='totalAmt'>
+                            <span>本次共计需还</span>
+                            <span>{{totalAmt}}</span>
+                        </div>
+                        <div v-if="totalAmt&&havaRadion" >
+                            <van-button  size="small" type="info" @click="yzmShow=true">确认还款</van-button>
+                            <van-button  size="small" type="default" @click="canelReplay">取消</van-button>
+                        </div>
+                    </div> -->
+                </div>
+        </div>
+         <!-- 短信验证码弹窗 -->
+        <van-popup v-model="yzmShow">
+            <div class="yzmbox">
+                <van-icon  name="cross"  size="18"  class="yzmbox-close" @click="yzmShow = false" />
+                <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+                <div class="yzmbox-contnet">
+                    <div class="yzmbox-contnet-yzm">
+                        <span>将发送到手机号:</span>
+                        <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/,'$1****$2')}}</span>   
+                    </div>
+                </div>
+                <div class="yzmbox-contnet-get">
+                    <input type="text"  v-model="yzmVal" placeholder="请输入验证码"/>
+                    <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{yzmText}}</span>    
+                </div>
+                <van-button class="showbtn" block round @click="yzmYes">确认</van-button> 
+            </div>
+        </van-popup>
+    </div>
+</template>
+<script>
+import Vue from 'vue';
+import { mapState } from 'vuex';
+import { Collapse, CollapseItem ,Button,Checkbox, CheckboxGroup,Popup,Icon,Dialog } from 'vant';
+Vue.use(Collapse);
+Vue.use(CollapseItem);
+Vue.use(Button);
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+Vue.use(Popup);
+Vue.use(Icon);
+export default {
+    components: {[Dialog.Component.name]: Dialog.Component},
+    data(){
+        return{
+            activeNames: ['1'],
+            tremList:[],
+            result: [],
+            checkedAll:false,
+            isAllReplay:false,//是否是可还款状态
+            yzmShow:false,
+            yzmVal:"",
+            Open: true, //倒计时开关
+            yzmText: '获取验证码',
+            showReplayArr:[],
+            totalAmt:'',
+            orderId:'',
+            timer:null,
+            havaRadion:true,
+            getStatusTime:null,
+            repayId:'',
+            repayPStatus:1,
+        }
+    },
+    computed: {
+        ...mapState(['userinfo']),
+        isPlan(){
+            if(this.$route.query.id){
+                return true
+            }else{
+                return false
+            }
+        }
+    },
+    methods:{
+       init() {
+            this.$api.initRepay({orderId:this.$route.query.id}).then(res => {
+                this.tremList  = (res.body.repayPlans || []).map((val,index)=>{
+                        return {
+                            ...val,
+                            id:val.orderId+index,
+                            checked:false
+                        }
+                });
+                let arr = [];
+                res.body.repayPlans.forEach(val=>{
+                    if(val.canRepay==1){
+                        arr.push(val.canRepay);
+                    }
+                });
+                this.showReplayArr = arr;
+            });
+      },
+      checkAll() {
+        if(!this.checkedAll){
+          this.$refs.checkboxGroup.toggleAll(true);
+        }else{
+          this.result=[];
+        }
+      },
+      goPay(index) {
+        this.isAllReplay =!this.isAllReplay;
+      },
+      getYzm(){
+         let sendParams = {mblNo: this.userinfo.mblNo, verCodeType: 20};
+            if (this.Open) {
+                this.$api.getVerCode(sendParams).then((res) => {
+                    this.Open = false;
+                    let num = 60;
+                    this.yzmText = num + '秒后重发';
+                    let _this = this;
+                    _this.timer = setInterval(() => {
+                        num--;
+                        if (num === 0) {
+                            clearInterval( _this.timer);
+                            _this.Open = true;
+                            _this.yzmText = '重新发送';
+                        } else {
+                            _this.yzmText = num + '秒后重发';
+                        }
+                    }, 1000);
+                }).catch(() => {
+                    this.Open = true;
+                });
+            }  
+      },
+      yzmYes() {
+        if (this.yzmVal == "" || this.yzmVal == null) {
+            this.$notify({ type: "danger", message: "验证码为空!" });
+        } else {
+            this.$api.repay({orderId: parseInt(this.$route.query.id),repayAmt:this.totalAmt, repayTerms:this.result,verCode:this.yzmVal}).then(({body}) => {
+                this.yzmShow = false;
+                clearInterval(this.timer);
+                this.yzmVal = "";
+                this.yzmText ='获取验证码';
+                this.isAllReplay =false;
+                this.Open = true;
+                this.totalAmt ='';
+                this.result=[];
+                this.repayId = body.repayId;//还款还款行为ID
+                this.checkReolayStatus();
+            });
+            
+        }
+      },
+      checkReolayStatus(){
+            this.$api.findRepayResult({repayId:this.repayId}).then(({body})=>{
+                if(this.getStatusTime!==null){
+                clearInterval(this.getStatusTime);
+                }
+                // 0-支付中,1-支付成功,2-支付失败
+                // failMsg: "支付金额为0,不需要调用授权支付接口流程"
+                // repaySts: 1
+                // repayStsName: "支付成功"
+                // this.repayPStatus = body.repaySts;
+                if(body.repaySts==1){
+                Dialog.alert({
+                    title: '提示',
+                    message:body.repayStsName? body.repayStsName:'还款成功',
+                }).then(res=>{
+                    clearInterval(this.getStatusTime);
+                })
+                }else if(body.repaySts==2){
+                Dialog.alert({
+                    title: '提示',
+                    message:body.repayStsName? body.repayStsName:'还款失败',
+                }).then(res=>{
+                    clearInterval(this.getStatusTime);
+                })
+                }else{
+                    // 状态为还款中时不许操作其他未还款的
+                Dialog.alert({
+                    title: '提示',
+                    message:body.repayStsName? body.failMsg:'还款中',
+                }).then(() => {
+                        this.getStatusTime = setInterval(() => {
+                            this.checkReolayStatus();
+                        }, 2000);
+                });
+                }
+                this.init();
+            });
+      },
+        changeRadion(e){
+            this.havaRadion = this.result.length>0;
+            if(this.result==0){
+            this.totalAmt =''; 
+            }
+            if(this.showReplayArr.length!==e.length){
+                this.checkedAll =false;
+            }else{
+                this.checkedAll =true;
+            }
+            if(e.length>0){
+                let  max;
+           //遍历数组,默认arr中的某一个元素为最大值,进行逐一比较
+                for(let i=0; i<e.length; i++){
+              //外层循环一次,就拿arr[i] 和 内层循环arr.legend次的 arr[j] 做对比
+                    for(var j=i; j<e.length; j++){
+                        if(e[i]>e[j]){
+                            //如果arr[j]大就把此时的值赋值给最大值变量max
+                 max=e[j];
+                            e[j]=e[i];
+                            e[i]=max;
+                        }
+                    }
+                }
+                this.$api.repayTrial({orderId:this.$route.query.id,repayTerms:e}).then(res => {   
+                    this.totalAmt =   res.body.totalAmt;     
+                }).catch(err=>{
+                    this.totalAmt = 0;
+                });
+            }
+        
+        },
+        canelReplay(){
+            this.isAllReplay=false;
+            this.result=[];
+            this.checkedAll=false;
+            this.totalAmt=0;
+        },
+        changeRad(){
+            
+        }
+    },
+    created(){
+        let tremList = JSON.parse(window.sessionStorage.getItem('order-repayPlans'));
+        if(tremList){
+          this.tremList = (JSON.parse(window.sessionStorage.getItem('order-repayPlans')) || []).map((val,index)=>{
+            return {
+                ...val,
+                id:val.orderId+index
+            }
+          });
+        }else{
+          this.init();
+        }
+    },
+    beforeDestroy(){
+       clearInterval(this.getStatusTime);
+       clearInterval(this.timer);
+       sessionStorage.removeItem('order-repayPlans');
+    }
+}
+</script>
+<style lang="less" scoped>
+    .repayment-plan-page{
+        padding-top: 44px;
+        &{
+            min-height: 100vh;
+            background-color:#fff;
+            padding-bottom: 24px;
+            box-sizing: border-box;
+        }
+        .repayment_box{
+            height:calc(100vh - 44px);
+            overflow: hidden;
+        }
+        .repayment_small_box{
+            height:calc(100vh - 44px);
+            overflow: scroll;
+            padding-bottom: 50px;
+            // box-sizing: border-box;
+        }
+        .detail-box{
+            background: @c-back;
+            display: flex;
+            flex-wrap: wrap;
+            .text-box{
+                display: inline-block;
+                width: 50%;
+                color:rgba(153,153,153,1);
+                font-weight:500;
+                margin: 6px 0;
+                span:nth-of-type(2){
+                    color:rgba(51,51,51,1);
+                }
+            }
+        }
+        .btn_class{
+            width: 100%;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            margin-top: 20px;
+        }
+        .van-button--block{
+            width: 90%;
+        }
+        .primary_btn{
+            box-sizing: border-box;
+            width: 100%;
+            padding: 0.2rem 0.32rem;
+            overflow: hidden;
+            color: #323233;
+            font-size: 0.28rem;
+            line-height: 0.48rem;
+            background-color: #fff;
+        }
+        .btn_replay{
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            margin-top: 40px;
+            position: absolute;
+            bottom: 0;
+            left: 0;
+        }
+        .payment_money{
+            color: #666;
+            span{
+                &:last-child{
+                    font-size: 18px;
+                    color: #333;
+                    font-weight: bold;
+                }
+            }
+        }
+        .yzmbox {
+                box-sizing: border-box;
+                width: 280px;
+                height: 225px;
+                position: relative;
+                overflow: hidden;
+                .flex("", center, center, column);
+                text-align: center;
+                border-radius: 6px;
+                background: #fff;
+                padding-top: 30px;
+                .van-button--block{
+                    width: 90%;
+                    margin-top: 15px;
+                }
+                &-close {
+                    color: #999;
+                    font-size: 16px;
+                    position: absolute;
+                    right: 8px;
+                    top: 8px;
+                }
+                &-contnet {
+                    margin-top: 11px;
+                    color: #999;
+                    font-size: 14px;
+                    &-yzm {
+                    .flex(center, center);
+                    span {
+                        font-size: 14px;
+                    }
+                    }
+                    &-get {
+                        width: 80%;
+                        margin: 0 10%;
+                        margin-top: 15px;
+                        .flex(space-between, center);
+                        input {
+                            border: none;
+                            width: 45%;
+                            background: #fff;
+                            height: 30px;
+                        }
+                        &-yzm {
+                            color: @c-default;
+                        }
+                    }
+                }
+        }
+        .chckout{
+            display: flex;
+            justify-content: flex-start;
+            align-items: flex-start;
+            padding: 0 0.32rem;
+            overflow: hidden;
+            color: #323233;
+            box-sizing: border-box;
+            .van-checkbox{
+                width: 20px;
+                height: 44px;
+                overflow: hidden;
+                color: #323233;
+                font-size: 0.28rem;
+                line-height: 44px;
+                background-color: #fff;
+                box-sizing: border-box;
+                display: flex;
+                justify-content:center;
+                align-items: center;
+            }
+           
+        }
+        .van-collapse-item{
+            width: 100%;
+            
+        }
+        /deep/.van-cell--clickable{
+            padding-left: 0 !important; 
+            padding-left: 0.16rem;
+        }
+        /deep/.van-collapse-item__title{
+            padding-left: 0 !important; 
+            padding-left: 0.16rem;
+        }
+        /deep/.van-collapse-item__content {
+            padding: 0.32rem;
+            color: #969799;
+            font-size: 0.26rem;
+            line-height: 1.5;
+            background-color: @c-back;
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/views/order/settle.vue b/src/views/order/settle.vue
new file mode 100644
index 0000000..be80e8b
--- /dev/null
+++ b/src/views/order/settle.vue
@@ -0,0 +1,301 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-22 11:36:16
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-06-23 13:42:58
+ * @Description: 提前结清
+--> 
+<template>
+  <div class="settle-page">
+    <v-navbar title="提前结清" :back="'/order/order-detail?id='+$route.query.id"></v-navbar>
+    <div class="fenqi-info-box">
+      <div class="info-top">
+        <div class="box">
+          <img src="../../../static/img/pic.png" alt />
+          <span>分期信息</span>
+        </div>
+      </div>
+      <div class="mation-box">
+        <h-cell v-model="order.insAmt" readonly label="分期金额"></h-cell>
+        <h-cell v-model="order.insTerm" readonly label="分期期数"></h-cell>
+      </div>
+      <div class="v-collapse-box">
+        <van-collapse v-model="activeNames">
+          <van-collapse-item name="1">
+            <template #title>
+              <div class="cell-box" @click="getActive">
+                <div class="left">
+                  <span>当前应还金额</span>
+                  <div ref="jiantou" class="jiantou-you"></div>
+                </div>
+                <div class="right">
+                  <p>¥{{order.curTotalAmt}}</p>
+                </div>
+              </div>
+            </template>
+            <div class="active-box">
+              <div class="text-box">
+                <span>当期应还:</span>
+                <span>{{order.curRpyAmt}}</span>
+              </div>
+              <div class="text-box">
+                <span>往期应还:</span>
+                <span>¥{{order.pastRpyAmt}}</span>
+              </div>
+            </div>
+          </van-collapse-item>
+        </van-collapse>
+      </div>
+      <div class="mation-box">
+        <h-cell v-model="order.remainAmt" readonly label="剩余本金"></h-cell>
+        <h-cell v-model="order.settleFeeAmt" readonly label="提前结清手续费"></h-cell>
+      </div>
+    </div>
+    <div class="footer-box">
+      <div class="text-box">
+        <p>提前结清会产生对应的手续费</p>
+        <p>提前结清手续费=剩余本金 * 提前结清费率</p>
+      </div>
+      <div class="play-box">
+        <p>
+          <span>应还总额:</span>
+          <span>¥{{order.totalAmt}}</span>
+        </p>
+        <button class="btn" @click="doPay">确认支付</button>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import { Collapse, CollapseItem } from "vant";
+
+Vue.use(Collapse);
+Vue.use(CollapseItem);
+export default {
+  data() {
+    return {
+      active: false,
+      activeNames: [],
+      repayAmt:'',//结清金额
+      order:{},//订单相关信息
+    };
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    /**初始化**/
+    init() {
+      this.$api.initPreClose({
+        orderId:this.$route.query.id
+      }).then(res=>{
+        this.order = res.body || []
+        this.order.insAmt = '¥'+this.order.insAmt
+        this.order.insTerm = this.order.insTerm+'期'
+        this.order.settleFeeAmt = '¥'+this.order.settleFeeAmt
+        this.order.remainAmt = '¥'+this.order.remainAmt
+      })
+    },
+    /**展开控制**/
+    getActive() {
+      this.active = !this.active;
+      if (this.active) {
+        this.$refs.jiantou.style.transform = "rotate(90deg)";
+        this.$refs.jiantou.style.transition = "transform 0.3s linear";
+        //this.$refs.jiantou.style.top = "8px";
+      } else {
+        this.$refs.jiantou.style.transform = "rotate(0deg)";
+        this.$refs.jiantou.style.transition = "transform 0.3s linear";
+      }
+    },
+    /**确认支付**/ 
+    doPay(){
+      this.$api.preClose({
+        orderId:this.$route.query.id,
+        repayAmt:this.order.totalAmt
+      }).then(res=>{
+          //支付跳转支付宝结果页面
+          this.$router.push({
+            path:'/order/pay-result',
+            query:{
+              orderId:this.$route.query.id,
+              model:2 //1-主动还款行为 2-提前结清行为
+            }
+          })
+      })
+      
+    },
+  }
+};
+</script>
+<style lang="less" scoped>
+.settle-page {
+  & {
+    min-height: 100vh;
+    background: @c-back;
+  }
+  /deep/.van-collapse-item__content {
+    padding: 0;
+  }
+  /deep/.van-cell__right-icon {
+    margin-left: 0.1rem;
+    color: #969799;
+    display: none;
+  }
+  /deep/.van-cell--clickable {
+    cursor: pointer;
+    padding: 0 26px;
+  }
+  /deep/.van-hairline--top-bottom::after,
+  .van-hairline-unset--top-bottom::after {
+    border-width: 0;
+  }
+  .fenqi-info-box {
+    & {
+      background: #fff;
+      margin-top: 10px;
+    }
+    .info-top {
+      font-size: 15px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: rgba(51, 51, 51, 1);
+      padding: 0 10px;
+      .box {
+        border-bottom: 1px solid #e6e6e6;
+        padding: 17px 6px;
+      }
+      img {
+        width: 6px;
+        height: 13px;
+      }
+    }
+    .mation-box {
+      & {
+        padding: 0 26px;
+      }
+      div:last-of-type {
+        border: 0;
+      }
+    }
+    .cell-box {
+      & {
+        padding: 0.2rem 0;
+        border-top: 1px solid #eeeeee;
+        border-bottom: 1px solid #eeeeee;
+      }
+      .left,
+      .right {
+        display: inline-block;
+        width: 49%;
+      }
+      .right {
+        text-align: right;
+        p{
+          color: rgba(153, 153, 153, 1);
+        }
+      }
+      .left {
+        font-size: 14px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #666666;
+        position: relative;
+        // span::after{
+        //   content: '';
+        //   position: absolute;
+        //   top: 5px;
+        //   left: 90px;
+        //   width: 0;
+        //   height: 0;
+        //   border: 6px solid transparent;
+        //   border-left-color: #5194fe;
+        // }
+        .jiantou-you {
+          position: absolute;
+          top: 5px;
+          left: 90px;
+          width: 0;
+          height: 0;
+          border: 6px solid transparent;
+          border-left-color: #5194fe;
+        }
+      }
+    }
+    .active-box {
+      background: @c-back;
+      display: flex;
+      flex-wrap: wrap;
+      box-sizing: border-box;
+      padding: 15px 22px;
+      .text-box {
+        display: inline-block;
+        width: 50%;
+        color: rgba(153, 153, 153, 1);
+        font-weight: 500;
+        margin: 6px 0;
+        span:nth-of-type(2) {
+          color: rgba(51, 51, 51, 1);
+        }
+      }
+    }
+  }
+  .footer-box {
+    & {
+      position: fixed;
+      bottom: 0;
+    }
+    .text-box {
+      & {
+        height: 39px;
+        width: 100vw;
+        text-align: center;
+      }
+      p {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(153, 153, 153, 1);
+        line-height: 15px;
+      }
+    }
+    .play-box {
+      & {
+        width: 100vw;
+        height: 49px;
+        background: #fff;
+        position: relative;
+        line-height: 49px;
+        box-sizing: border-box;
+        padding-left: 16px;
+      }
+      .btn {
+        width: 120px;
+        height: 49px;
+        background: rgba(81, 148, 254, 1);
+        color: #fff;
+        border: 0;
+        outline: none;
+        position: absolute;
+        top: 0;
+        right: 0;
+      }
+      p {
+        span:nth-of-type(1) {
+          font-size: 14px;
+          font-family: PingFang SC;
+          font-weight: 500;
+          color: rgba(51, 51, 51, 1);
+        }
+        span:nth-of-type(2) {
+          font-size: 16px;
+          font-family: PingFang SC;
+          font-weight: bold;
+          color: rgba(255, 102, 102, 1);
+        }
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/order/settlementEarly.vue b/src/views/order/settlementEarly.vue
new file mode 100644
index 0000000..d91cb0d
--- /dev/null
+++ b/src/views/order/settlementEarly.vue
@@ -0,0 +1,352 @@
+<!--
+ * @Author: zxq
+ * @Date: 2022-06-14 11:03:17
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-16 10:06:39
+ * @Description: Description
+ * @FilePath: \edu_ins_client\src\views\order\settlementEarly.vue
+-->
+<template>
+  <div class="settlement_early">
+    <v-navbar title="全部应还"></v-navbar>
+    <div class="settle_box">
+      <div>结清待支付总额(元)</div>
+      <div>{{ order.totalAmt }}</div>
+      <div>服务费{{ order.settleFeeAmt }}元</div>
+      <div>
+        <button class="btn-jq" @click="goSettle">提前结清</button>
+      </div>
+    </div>
+   
+    <div class="info-top">
+      <div class="box">
+        <img src="../../../static/img/pic.png" alt />
+        <span>未还期数</span>
+      </div>
+      <div>
+        <van-collapse v-model="activeNames" style="width:100%">
+          <van-collapse-item style="width:100%" :name="item.seqNo" v-for="item in repayPlans" :key="item.seqNo" ref="keyplan">
+            <template #title>
+              <div class="tit-box">
+                <!-- <van-checkbox @click.prevent.stop.native="onClick(item)" v-model="item.checked" :name="item.seqNo" :disabled="item.canRepay == 0 ? true : false">第{{ item.seqNo }}期</van-checkbox> -->
+                <!-- <div>应还总额</div> -->
+                <div style="width:150px;">
+                    <span>{{item.rpyDay}}账单</span>
+                </div>
+                <div>¥{{ item.totalAmt }}</div>
+                <div v-if="item.rpySts == 1">
+                  <p style="line-height: 16px;">已还</p>
+                </div>
+              </div>
+            </template>
+            <!-- 内容 -->
+            <div class="content-box">
+              <p>
+                <span>应还本金</span>
+                <span>¥{{ item.rpyAmt }}</span>
+              </p>
+              <p>
+                <span>应还服务费</span>
+                <span>¥{{ item.rpySerFee }}</span>
+              </p>
+              <p>
+                <span>应还滞纳金</span>
+                <span>¥{{ item.rpyLateFee }}</span>
+              </p>
+              <p>
+                <span>应还总额</span>
+                <span>¥{{ item.totalAmt }}</span>
+              </p>
+              <p>
+                <span>应还日期</span>
+                <span>{{ item.rpyDay }}</span>
+              </p>
+            </div>
+          </van-collapse-item>
+        </van-collapse>
+      </div>
+      <div class="text-box">
+            <p>提前结清会产生对应的手续费</p>
+            <p>提前结清手续费=剩余本金 * 提前结清费率</p>
+      </div>
+    </div>
+    <van-popup v-model="yzmShow">
+        <div class="yzmbox">
+            <van-icon  name="cross"  size="18"  class="yzmbox-close" @click="yzmShow = false" />
+            <p style="font-size:16px;color:#000;">请输入短信验证码</p>
+            <div class="yzmbox-contnet">
+                <div class="yzmbox-contnet-yzm">
+                    <span>将发送到手机号:</span>
+                    <span>{{userinfo.mblNo.replace(/(\d{3})\d*(\d{4})/,'$1****$2')}}</span>   
+                </div>
+            </div>
+            <div class="yzmbox-contnet-get">
+                <input type="text"  v-model="yzmVal" placeholder="请输入验证码"/>
+                <span class="yzmbox-contnet-get-yzm" @click="getYzm">{{yzmText}}</span>    
+            </div>
+            <van-button class="showbtn" block round @click="yzmYes">确认</van-button> 
+        </div>
+    </van-popup>
+  </div>
+</template>
+
+<script>
+import { Collapse, CollapseItem ,Button,Popup,Icon} from "vant";
+import { mapState } from 'vuex';
+Vue.use(Collapse);
+Vue.use(Button);
+Vue.use(Popup);
+Vue.use(Icon);
+Vue.use(CollapseItem);
+export default {
+  data() {
+    return {
+      order: {},
+      repayPlans: [],
+      activeNames: ["1"],
+      yzmShow:false,
+      yzmVal:'',
+      yzmText:'发送验证码',
+      Open: true, //倒计时开关
+    };
+  },
+  created() {
+    this.init();
+  },
+  computed: {
+    ...mapState(['userinfo'])
+  },
+  methods: {
+    init() {
+      this.$api.initPreClose({ orderId: this.$route.query.id }).then(({ body }) => {
+        this.order = body.preSettInfo || {};
+        this.repayPlans = body.repayPlans;
+      });
+    },
+    goSettle() {
+        this.yzmShow = true;
+        // this.$api.preClose({
+        //     orderId:this.$route.query.id,
+        //     repayAmt:this.order.totalAmt
+        // }).then(res=>{
+        //     //支付跳转支付宝结果页面
+        //     this.$router.push({
+        //         path:'/order/pay-result',
+        //         query:{
+        //         orderId:this.$route.query.id,
+        //         model:2 //1-主动还款行为 2-提前结清行为
+        //         }
+        //     })
+        // })
+    },
+    yzmYes() {
+        if (this.yzmVal == "" || this.yzmVal == null) {
+            this.$notify({ type: "danger", message: "验证码为空!" });
+        } else {
+            this.$api.preClose({orderId: parseInt(this.$route.query.id),verCode:this.yzmVal}).then(({body}) => {
+                this.yzmShow = false;
+                clearInterval(this.timer);
+                  this.$router.push({
+                    path:'/order/pay-result',
+                    query:{
+                      orderId:this.$route.query.id,
+                      model:2 //1-主动还款行为 2-提前结清行为
+                    }
+                })
+            });
+            
+        }
+    },
+    getYzm(){
+         let sendParams = {mblNo: this.userinfo.mblNo, verCodeType: 20};
+            if (this.Open) {
+                this.$api.getVerCode(sendParams).then((res) => {
+                    this.Open = false;
+                    let num = 60;
+                    this.yzmText = num + '秒后重发';
+                    let _this = this;
+                    _this.timer = setInterval(() => {
+                        num--;
+                        if (num === 0) {
+                            clearInterval( _this.timer);
+                            _this.Open = true;
+                            _this.yzmText = '重新发送';
+                        } else {
+                            _this.yzmText = num + '秒后重发';
+                        }
+                    }, 1000);
+                }).catch(() => {
+                    this.Open = true;
+                });
+            }  
+      },
+  },
+};
+</script>
+
+<style scoped lang="less">
+.settlement_early {
+  background-color: #f5f5f7;
+  padding-bottom: 50px;
+}
+.settle_box {
+  width: 100%;
+  padding: 16px 0;
+  box-sizing: border-box;
+  text-align: center;
+  background-color: #fff;
+  > div {
+    margin-bottom: 16px;
+    &:first-child {
+      font-size: 16px;
+    }
+    &:nth-child(2){
+       font-size: 18px;
+       font-weight: bold;
+    }
+  }
+}
+.btn-jq {
+  width: 155px;
+  height: 44px;
+  background: #5194fe;
+  border: 1px solid rgba(81, 148, 254, 1);
+  border-radius: 22px;
+  outline: none;
+  color: #fff;
+  margin-right: 13px;
+}
+.info-top {
+  font-size: 15px;
+  font-family: PingFang SC;
+  font-weight: bold;
+  color: rgba(51, 51, 51, 1);
+  padding: 0 10px;
+  .box {
+    border-bottom: 1px solid #e6e6e6;
+    padding: 17px 6px;
+  }
+  img {
+    width: 6px;
+    height: 13px;
+  }
+}
+.tit-box {
+  & {
+    display: flex;
+    z-index: 100;
+  }
+  div:nth-of-type(1) {
+    width: 80px;
+  }
+  div:nth-of-type(2) {
+    width: 70px;
+    font-size: 13px;
+    font-family: PingFang SC;
+    font-weight: 500;
+    color: rgba(153, 153, 153, 1);
+  }
+  div:nth-of-type(3) {
+    //width: 80px;
+    font-size: 16px;
+    font-family: PingFang SC;
+    font-weight: bold;
+    color: rgba(51, 51, 51, 1);
+  }
+  div:nth-of-type(4) {
+    margin-left: 12px;
+    text-align: center;
+    p {
+      display: inline-block;
+      width: 40px;
+      height: 16px;
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      background: rgba(240, 246, 255, 1);
+      border: 1px solid rgba(81, 148, 254, 1);
+      border-radius: 3px;
+      color: #5194fe;
+    }
+  }
+}
+.content-box {
+  & {
+    color: #999;
+  }
+  p {
+      margin-top: 11px;
+    span {
+      display: inline-block;
+      width: 49%;
+    }
+    span:nth-of-type(2) {
+      text-align: right;
+    }
+  }
+}
+.text-box {
+    margin-top: 16px;
+  & {
+    height: 39px;
+    width: 100vw;
+    text-align: center;
+  }
+  p {
+    font-size: 12px;
+    font-family: PingFang SC;
+    font-weight: 500;
+    color: rgba(153, 153, 153, 1);
+    line-height: 15px;
+  }
+}
+  .yzmbox {
+          box-sizing: border-box;
+          width: 280px;
+          height: 225px;
+          position: relative;
+          overflow: hidden;
+          .flex("", center, center, column);
+          text-align: center;
+          border-radius: 6px;
+          background: #fff;
+          padding-top: 30px;
+          .van-button--block{
+              width: 90%;
+              margin-top: 15px;
+          }
+          &-close {
+              color: #999;
+              font-size: 16px;
+              position: absolute;
+              right: 8px;
+              top: 8px;
+          }
+          &-contnet {
+              margin-top: 11px;
+              color: #999;
+              font-size: 14px;
+              &-yzm {
+              .flex(center, center);
+              span {
+                  font-size: 14px;
+              }
+              }
+              &-get {
+                  width: 80%;
+                  margin: 0 10%;
+                  margin-top: 15px;
+                  .flex(space-between, center);
+                  input {
+                      border: none;
+                      width: 45%;
+                      background: #fff;
+                      height: 30px;
+                  }
+                  &-yzm {
+                      color: @c-default;
+                  }
+              }
+          }
+  }
+</style>
diff --git a/src/views/personal/personal-center.vue b/src/views/personal/personal-center.vue
new file mode 100644
index 0000000..cca9d3b
--- /dev/null
+++ b/src/views/personal/personal-center.vue
@@ -0,0 +1,186 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-05-21 16:03:42
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-15 09:41:41
+ * @Description: 
+--> 
+<template>
+  <div class="personal-center-page">
+    <div class="top-box">
+      <div class="top-img-box">
+        <img :src="mation.headimgurl" alt="头像" />
+      </div>
+      <div class="top-info-box">
+        <p>{{mation.nickname}}</p>
+        <p>{{userinfo.mblNo}}</p>
+      </div>
+      <div :class="{'fn-box':true,'fn_box1':!userinfo.hasBankCard,'fn_box':userinfo.hasBankCard}">
+        <div @click="goMyOrder">
+          <img src="../../../static/img/order.png" alt  />
+          <p :style="{color:overStatus>0?'red':'#000'}">我的订单</p>
+        </div>
+        <div @click="goMybankCard" v-if='userinfo.hasBankCard'>
+          <img src="../../../static/img/bankCard.png" alt   />
+          <p>我的银行卡</p>
+        </div>
+        <div  @click="logout">
+          <img src="../../../static/img/logout.png" alt/>
+          <p @click="logout">退出登录</p>
+        </div>
+      </div>
+    </div>
+    <van-dialog className="dio-box" confirmButtonColor="#333" cancelButtonColor="#666666" @confirm="onConfirm" v-model="show" show-cancel-button>
+      <div class="box">
+        <p>确定退出登录吗?</p>
+      </div>
+    </van-dialog>
+  </div>
+</template>
+<script>
+import Vue from 'vue';
+import { Dialog } from 'vant';
+import { mapState } from 'vuex';
+
+
+Vue.use(Dialog);
+export default {
+  data() {
+    return {
+      show:false,
+      overStatus:0
+    };
+  },
+  computed:{
+    ...mapState(['userinfo']),
+    mation(){
+      if(localStorage.edu_ins_client_userMation){
+        return JSON.parse(localStorage.edu_ins_client_userMation) 
+      }
+    }
+  },
+  created(){
+    this.getBaseInfo()
+  },
+  methods: {
+    goMyOrder() {
+      this.$router.push("/order/my-order");
+    },
+    logout(){
+      this.show = true
+    },
+    goMybankCard(){
+      this.$router.push('/bankCard/index')
+    },
+    onConfirm(){
+      this.$api.logout().then(res=>{
+        //清除openId session等存储,跳转登录页面
+        localStorage.clear()
+        sessionStorage.clear()
+        this.$router.push('/')
+      })
+    },
+    getBaseInfo(){
+       this.$api.baseInfo().then(({body})=>{
+         this.overStatus = body.overStatus;
+      })
+    }
+
+  }
+};
+</script>
+<style lang="less" scoped>
+.personal-center-page {
+  & {
+    height: 100vh;
+    background: #fff;
+  }
+  .top-box {
+    width: 100vw;
+    height: 205px;
+    background-image: url("../../../static/img/bgwd.png");
+    background-size: cover;
+    text-align: center;
+    box-sizing: border-box;
+    padding-top: 26px;
+    position: relative;
+    .top-img-box {
+      display: inline-block;
+      width: 75px;
+      height: 75px;
+      margin-bottom: 16px;
+      
+      img {
+        width: 100%;
+        height: 100%;
+        border-radius: 50%;
+      }
+    }
+    .top-info-box {
+      p:nth-of-type(1) {
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: bold;
+        color: rgba(255, 255, 255, 1);
+        margin-bottom: 10px;
+      }
+      p:nth-of-type(2) {
+        font-size: 16px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(255, 255, 255, 1);
+      }
+    }
+    .fn-box {
+      & {
+        width: 343px;
+        height: 90px;
+        background: rgba(255, 255, 255, 1);
+        box-shadow: 0px 0px 10px 0px rgba(26, 94, 216, 0.12);
+        border-radius: 8px;
+        position: absolute;
+        left: 50%;
+        top: 173px;
+        transform: translateX(-50%);
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+      }
+      div {
+        padding-top: 21px;
+        img {
+          width: 22px;
+          height: 22px;
+          margin-bottom: 7px;
+        }
+        p {
+          font-size: 14px;
+          font-family: PingFang SC;
+          font-weight: 500;
+          color: rgba(0, 0, 0, 1);
+        }
+      }
+    }
+  }
+  .fn_box{
+    div {
+        width: 30%;
+    }
+  }
+  .fn_box1{
+    div {
+        width: 50%;
+    }
+  }
+  .dio-box{
+    width:280px;
+    //height:150px;
+    background:rgba(255,255,255,1);
+    border-radius:5px;
+    .box{
+      line-height: 80px;
+      text-align: center;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/user/agreement.vue b/src/views/user/agreement.vue
new file mode 100644
index 0000000..35c1926
--- /dev/null
+++ b/src/views/user/agreement.vue
@@ -0,0 +1,115 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-23 16:31:23
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2020-07-01 11:28:29
+ * @Description: 
+--> 
+<template>
+  <div class="pdf" v-show="fileType === 'pdf'">
+    <v-navbar :title="$route.query.tit" :back='backUrl'></v-navbar>
+    <!-- <embed :src="pdfUrl" :style="{height: '100vh'}" style="width: 100%" /> -->
+    <pdf
+      :src="pdfSrc"
+      :page="currentPage"
+      @num-pages="pageCount=$event"
+      @page-loaded="currentPage=$event"
+      @loaded="loadPdfHandler"
+    ></pdf>
+    <div class="arrow">
+     
+      <span @click="changePdfPage(0)" class="turn" :class="{grey: currentPage==1}">上一页</span>
+      {{currentPage}} / {{pageCount}}
+     
+      <span @click="changePdfPage(1)" class="turn" :class="{grey: currentPage==pageCount}">下一页</span>
+    </div>
+  </div>
+</template>
+<script>
+import pdf from "vue-pdf";
+import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
+export default {
+  metaInfo: {
+    meta: [
+      { charset: "utf-8" },
+      {
+        name: "viewport",
+        content:
+          "width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=2,user-scalable=yes"
+      }
+    ]
+  },
+  components: { pdf }, // props: ['pdfSrc'],
+  data() {
+    return {
+      currentPage: 0, // pdf文件页码
+      pageCount: 0, // pdf文件总页数
+      fileType: "pdf", // 文件类型
+      pdfSrc: "" // pdf文件地址
+    };
+  },
+  computed:{
+    backUrl(){
+      if(this.$route.query.from == 'login'){
+        return "/login?whichPage=1"
+      }else if(this.$route.query.from == 'sig'){
+        return "/order-handling/contract-signing?whichPage=1"
+      }
+    }
+  },
+  created() {
+    //this.pdfUrl = pdf.createLoadingTask({ url: data.url, CMapReaderFactory })
+    //this.pdfSrc = this.$route.query
+    // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
+    //this.pdfUrl = './static/web/viewer.html?'
+    //this.pdfUrl = './static/web/viewer.html?file=' + 'https://t.finlean.com/jttech/M00/01/04/rBEX617ytmKAEKtoAAb34lu1n7Q194.pdf', +'PDF'
+    this.pdfSrc = pdf.createLoadingTask({url:this.$route.query.agrUrl,CMapReaderFactory});
+  },
+  methods: {
+    // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
+    changePdfPage(val) {
+      // console.log(val)
+      if (val === 0 && this.currentPage > 1) {
+        this.currentPage--;
+        //console.log(this.currentPage);
+      }
+      if (val === 1 && this.currentPage < this.pageCount) {
+        this.currentPage++;
+        //console.log(this.currentPage);
+      }
+    }, // pdf加载时
+    loadPdfHandler(e) {
+      this.currentPage = 1; // 加载的时候先加载第一页
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+  .pdf{
+    canvas{
+      height: 90vh;
+    }
+    .arrow{
+      &{
+        position: fixed;
+        width: 100%;
+        height: 50px;
+        text-align: center;
+        line-height: 50px;
+        background: #fcfcfc;
+        bottom: 0;
+        span:nth-of-type(1){
+          display: inline-block;
+          width: 30vw;
+          text-align: left;
+        }
+        span:nth-of-type(2){
+          display: inline-block;
+          width: 30vw;
+          text-align: right;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/user/agreement2.vue b/src/views/user/agreement2.vue
new file mode 100644
index 0000000..acd75a9
--- /dev/null
+++ b/src/views/user/agreement2.vue
@@ -0,0 +1,113 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-23 16:31:23
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-16 16:43:01
+ * @Description: 
+--> 
+<template>
+  <div class="pdf" v-show="fileType === 'pdf'">
+    <v-navbar :title="$route.query.tit"></v-navbar>
+    <!-- <c-pdf pdfurl="http://t.finlean.com/jttech/M00/01/04/rBEX617ytmKAEKtoAAb34lu1n7Q194.pdf"></c-pdf> -->
+    <embed :src="pdfUrl" :style="{height: '100vh'}" style="width: 100%" />
+    <!-- <pdf
+      :src="pdfSrc"
+      :page="currentPage"
+      @num-pages="pageCount=$event"
+      @page-loaded="currentPage=$event"
+      @loaded="loadPdfHandler"
+    ></pdf>
+    <div class="arrow">
+     
+      <span @click="changePdfPage(0)" class="turn" :class="{grey: currentPage==1}">上一页</span>
+      {{currentPage}} / {{pageCount}}
+     
+      <span @click="changePdfPage(1)" class="turn" :class="{grey: currentPage==pageCount}">下一页</span>
+    </div> -->
+  </div>
+</template> 
+<script>
+// import CPdf from "../../components/pdf/cpdf";
+//import pdf from "vue-pdf";
+// import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
+export default {
+  metaInfo: {
+    meta: [
+      { charset: "utf-8" },
+      {
+        name: "viewport",
+        content:
+          "width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=2,user-scalable=yes"
+      }
+    ]
+  },
+  components: { CPdf }, // props: ['pdfSrc'],
+  data() {
+    return {
+      currentPage: 0, // pdf文件页码
+      pageCount: 0, // pdf文件总页数
+      fileType: "pdf", // 文件类型
+      pdfSrc: "" // pdf文件地址
+    };
+  },
+  created() {
+    //this.pdfUrl = pdf.createLoadingTask({ url: data.url, CMapReaderFactory })
+    //this.pdfSrc = this.$route.query
+    // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
+    //this.pdfUrl = './static/web/viewer.html?'
+    
+    //this.pdfUrl = './static/web/viewer.html?file=' + this.$route.query.url, +'PDF'
+    this.pdfUrl = './static/web/viewer.html?file=' + 'https://t.finlean.com/jttech/M00/01/04/rBEX617ytmKAEKtoAAb34lu1n7Q194.pdf', +'PDF'
+    
+    //this.pdfSrc = pdf.createLoadingTask({url:this.$route.query.agrUrl,CMapReaderFactory});
+  },
+  
+  
+  methods: {
+    // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
+    changePdfPage(val) {
+      // console.log(val)
+      if (val === 0 && this.currentPage > 1) {
+        this.currentPage--;
+        //console.log(this.currentPage);
+      }
+      if (val === 1 && this.currentPage < this.pageCount) {
+        this.currentPage++;
+        //console.log(this.currentPage);
+      }
+    }, // pdf加载时
+    loadPdfHandler(e) {
+      this.currentPage = 1; // 加载的时候先加载第一页
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+  .pdf{
+    canvas{
+      height: 90vh;
+    }
+    .arrow{
+      &{
+        position: fixed;
+        width: 100%;
+        height: 50px;
+        text-align: center;
+        line-height: 50px;
+        background: #fcfcfc;
+        bottom: 0;
+        span:nth-of-type(1){
+          display: inline-block;
+          width: 30vw;
+          text-align: left;
+        }
+        span:nth-of-type(2){
+          display: inline-block;
+          width: 30vw;
+          text-align: right;
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/user/front-login.vue b/src/views/user/front-login.vue
new file mode 100644
index 0000000..6f57fbf
--- /dev/null
+++ b/src/views/user/front-login.vue
@@ -0,0 +1,73 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2020-06-04 09:55:50
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-07-12 11:01:46
+ * @Description:
+-->
+<template>
+  <div></div>
+</template>
+<script>
+import { mapActions } from "vuex";
+import Vue from "vue";
+import { RadioGroup, Radio } from "vant";
+import { Checkbox, CheckboxGroup } from "vant";
+import { GoWeChat } from "../../utils/wechat";
+
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+Vue.use(Radio);
+Vue.use(RadioGroup);
+
+export default {
+  data() {
+    return {};
+  },
+  created() {
+    var _this = this;
+    // localStorage.edu_ins_client_openId = 'oJbj21YwUatdNaYf3iEPwwGtWuUg'
+    // localStorage.edu_ins_client_userMation = '{"openid":"oGGPLs2yZ5tiBnB9iYcZrV60DoqM","nickname":"乌卡拉卡","sex":"1","province":"四川","city":"成都","country":"中国","headimgurl":"http://thirdwx.qlogo.cn/mmopen/vi_32/sYsBGsncFia9ql7K5stRibY61BSjDkPkNQFiasqdHiczTwbnX7JeZhcrp49RZD9icFTDLd2JqUjIrHHVw0f52kE4Uibw/132"}'
+    // this.$router.push("/login");
+    //本地是否存储有openId,有就调用openId登录
+    if (localStorage.edu_ins_client_openId && localStorage.edu_ins_client_openId != undefined) {
+      //this.$router.push("/login");
+      this.openIdLogin({
+          vm: _this,
+          openId: localStorage.edu_ins_client_openId
+        });
+    } else {
+      this.loginBut();
+    }
+  },
+  methods: {
+    ...mapActions(["login", "getVercode", "openIdLogin"]),
+    //截取code值
+    getUrlCode(name) {
+      return (
+        decodeURIComponent(
+          (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+            location.href
+          ) || [, ""])[1].replace(/\+/g, "%20")
+        ) || null
+      );
+    },
+    //登录验证
+    loginBut() {
+        // 无openId跳转授权,有就执行openId登录
+      //if (!localStorage.edu_ins_client_openId || localStorage.edu_ins_client_openId == undefined) {
+        let url = location.host
+        //console.log(location.href)
+        //console.log("准备跳转");   wx594ab33e0466eccf
+        //var str = encodeURIComponent("https://t.finlean.com/aic_cus/#/login");
+        var str = encodeURIComponent(`https://${url}/aic_cus/#/login`);
+        //goWeChat("wx9bfa36fe433b079a", str); //四个参数appid-公众号id,redirect_uri-回调链接,scope-授权模式,state-重定向将会带上的state参数
+        var fn = new GoWeChat("wx581e3447c6cad0d6", str);
+        fn.gocontract()
+      // } else {
+
+      // }
+    }
+  }
+};
+</script>
diff --git a/src/views/user/login.vue b/src/views/user/login.vue
new file mode 100644
index 0000000..735ffa8
--- /dev/null
+++ b/src/views/user/login.vue
@@ -0,0 +1,359 @@
+<!--
+ * @Author: 小明丶
+ * @Date: 2019-08-15 10:20:56
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-06-16 11:34:10
+ * @Description: 登录页面
+ -->
+<template>
+  <div class="login-page">
+    <div class="logo-box">
+      <div class="logo-img-box">
+        <img src="../../../static/img/logo.png" alt="logo" class="logo-pic" />
+      </div>
+      <p>小纷助学</p>
+    </div>
+    <h-ipt
+      icon="iconxingming"
+      :maxlength="11"
+      type="text"
+      :getClose="true"
+      v-model="mblNo"
+      placeholder="请输入手机号"
+      class="myipt"
+    ></h-ipt>
+    <h-ipt icon="iconmima" :maxlength="6" v-model="verCode" placeholder="请输入短信验证码" class="myiptTwo">
+      <template slot="right">
+        <div>
+          <button
+            class="getcode"
+            :disabled="btnDis"
+            :style="btnDis?'color:#E6E6E6':'color:#62A0FF'"
+            @click="sendCode"
+          >{{btnText}}</button>
+        </div>
+      </template>
+    </h-ipt>
+    <div class="text-box">
+      <van-checkbox v-model="checked" shape="round" icon-size="16px">
+        <template #default>
+          <p class="xieyi">
+            <span>我已阅读并同意</span>
+            <span @click.stop="showAgree(1)">《隐私政策》</span>
+            <span @click.stop="showAgree(2)">《用户注册服务协议》</span>
+          </p>
+        </template>
+      </van-checkbox>
+    </div>
+    <div class="btn-box">
+      <button @click="loginBut">登录</button>
+    </div>
+    <!-- <div class="idcard-box">
+      <upLoadIdCard :cardBack="idCardMation.idBackUrl" :cardFont="idCardMation.idFrontUrl"></upLoadIdCard>
+    </div> -->
+  </div>
+</template>
+
+<script>
+import { mapActions } from "vuex";
+import Vue from "vue";
+import { RadioGroup, Radio } from "vant";
+import { Checkbox, CheckboxGroup } from "vant";
+import { Popup } from "vant";
+import { Icon } from "vant";
+Vue.use(Icon);
+Vue.use(Popup);
+Vue.use(Checkbox);
+Vue.use(CheckboxGroup);
+Vue.use(Radio);
+Vue.use(RadioGroup);
+
+export default {
+  data() {
+    return {
+      checked: false, //协议勾选
+      radio: "",
+      //数据
+      // 18108048791 1234qwer
+      mblNo: "", //用户手机号
+      verCode: "", //验证码
+      openId: 456, //微信openId
+      //点击显示密码为明文,眼睛的样式也是根据这个来判断的
+      pwdType: "password",
+      test: false,
+      loginImg: "static/img/logo.png",
+      timer: "",
+      showSend: true,
+      btnText: "发送验证码",
+      btnDis: false,
+      miao: 60,
+      code: "",
+      ShowAgreen: false, //协议展示框
+      Agreend: "", //协议
+    };
+  },
+  created() {
+    // 存储倒计时
+    if(this.$route.query.whichPage && sessionStorage.beforeDate){
+      this.miao = Math.round(new Date().getTime()/1000 - sessionStorage.beforeDate/1000)
+      if(this.miao < 60){
+        this.getSecond(60 - this.miao)
+      }else{
+        this.miao = 60
+      }
+    }
+    if(sessionStorage.mblNo){
+      this.mblNo = sessionStorage.mblNo
+    }
+    if(sessionStorage.verCode){
+      this.verCode = sessionStorage.verCode
+    }
+   
+    this.code = this.getUrlCode("code");
+    console.log('this.code:',this.code)
+    console.log('this.$route.query.whichPage:',this.$route.query.whichPage)
+    if (this.code && !this.$route.query.whichPage) {
+      this.$api.wechatUserInfo({ code: this.code}).then(res => {
+          console.log('res.body.openid:',res.body.openid)
+          localStorage.edu_ins_client_openId = res.body.openid;
+          localStorage.edu_ins_client_userMation = JSON.stringify(res.body);
+      });
+    }
+  },
+  methods: {
+    ...mapActions(["login", "getVercode", "openIdLogin"]),
+    //截取code值
+    getUrlCode(name) {
+      return (
+        decodeURIComponent(
+          (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+            location.href
+          ) || [, ""])[1].replace(/\+/g, "%20")
+        ) || null
+      );
+    },
+    //登录验证
+    loginBut() {
+      let v = this.$tool;
+      if (v.checkValEmpty(this.mblNo)) {
+        v.toast("请输入手机号");
+        return;
+      }
+      if (!v.checkPhone(this.mblNo)) {
+        v.toast("请输入正确手机号");
+        return;
+      }
+      if (v.checkValEmpty(this.verCode)) {
+        v.toast("请输入验证码");
+        return;
+      }
+      if (!this.checked) {
+        v.toast("请确认并勾选用户协议");
+        return;
+      }
+      this.login({
+        vm: this,
+        mblNo: this.mblNo,
+        verCode: this.verCode,
+        openId: localStorage.edu_ins_client_openId
+      });
+    },
+    sendCode() {
+      let v = this.$tool;
+      if (v.checkValEmpty(this.mblNo)) {
+        v.toast("请输入手机号");
+        return;
+      }
+      if (!v.checkPhone(this.mblNo)) {
+        v.toast("请输入正确手机号");
+        return;
+      }
+      this.$api.getVerCode({
+        mblNo: this.mblNo,
+        verCodeType: 1
+      }).then(res=>{
+        sessionStorage.beforeDate = new Date().getTime()
+        this.getSecond(60);
+      })
+      // this.$store.dispatch("getVercode", {
+      //   vm: this,
+      //   mblNo: this.mblNo,
+      //   verCodeType: 1
+      // });
+     
+    },
+    //发送验证码计时函数
+    getSecond(wait) {
+      let _this = this;
+      let _wait = wait;
+      if (wait == 0) {
+        this.btnText = "获取验证码";
+        wait = _wait;
+        this.btnDis = false;
+        clearTimeout(this.timer)
+      } else {
+        this.btnDis = true;
+        this.btnText = "验证码(" + wait + "s)";
+        wait--;
+        this.timer = setTimeout(function() {
+          _this.getSecond(wait);
+        }, 1000);
+      }
+    },
+    // 展示协议
+    showAgree(which) {
+      sessionStorage.mblNo = this.mblNo
+      sessionStorage.verCode = this.verCode
+      if(which == 1){
+        this.$router.push({
+          path:'/agreement',
+          query:{
+            from:'login',
+            tit:'隐私协议',
+            agrUrl:'./static/ys.pdf'
+          }
+        })
+      }
+      if(which == 2){
+        this.$router.push({
+          path:'/agreement',
+          query:{
+            from:'login',
+            tit:'用户注册服务协议',
+            agrUrl:'./static/zc.pdf'
+          }
+        })
+      }
+    },
+  },
+  
+  beforeRouteLeave (to, from, next) {
+    // ...
+    
+    clearTimeout(this.timer)
+    next()
+  }
+};
+</script>
+<style lang="less" scoped>
+.login-page {
+  padding-top: 42px;
+  box-sizing: border-box;
+  .logo-box {
+    & {
+      text-align: center;
+      font-size: 18px;
+      margin-bottom: 30px;
+    }
+    img {
+      width: 55px;
+      height: 83px;
+    }
+    .logo-img-box {
+      display: inline-block;
+      width: 100px;
+      height: 100px;
+      background: rgba(255, 255, 255, 1);
+      box-shadow: 0px 0px 12px 0px rgba(34, 105, 209, 0.2);
+      border-radius: 15px;
+      box-sizing: border-box;
+      padding-top: 11px;
+    }
+    p {
+      margin-top: 16px;
+      font-size: 17px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(51, 51, 51, 1);
+    }
+  }
+  .myipt {
+    margin-top: 51px;
+  }
+  .myiptTwo {
+    margin-top: 20px;
+    margin-bottom: 17px;
+  }
+  .getcode {
+    font-size: 13px;
+    font-family: PingFang SC;
+    font-weight: 500;
+    text-decoration: underline;
+    color: rgba(98, 160, 255, 1);
+    outline: none;
+    height: 30px;
+    border: 0;
+    background: #fff;
+  }
+  .text-box {
+    & {
+      width: 100%;
+      padding: 0 10%;
+      box-sizing: border-box;
+    }
+    .xieyi {
+      span:nth-of-type(1) {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: rgba(153, 153, 153, 1);
+      }
+      span:nth-of-type(2) {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #5194fe;
+      }
+      span:nth-of-type(3) {
+        font-size: 12px;
+        font-family: PingFang SC;
+        font-weight: 500;
+        color: #5194fe;
+      }
+    }
+  }
+  .btn-box {
+    & {
+      width: 100%;
+      text-align: center;
+      margin-top: 37px;
+    }
+    button {
+      width: 80%;
+      height: 44px;
+      background: linear-gradient(
+        90deg,
+        rgba(82, 142, 255, 1),
+        rgba(105, 167, 255, 1)
+      );
+      box-shadow: 0px 8px 15px 0px rgba(91, 152, 255, 0.28);
+      border-radius: 22px;
+      outline: none;
+      border: 0;
+      color: #fff;
+    }
+  }
+  .agreenBox {
+    width: 80vw;
+    height: 70vh;
+    padding: 60px 20px 30px 20px;
+    position: relative;
+  }
+
+  .agreen-html {
+    width: 100%;
+    height: 100%;
+    overflow: scroll;
+    box-sizing: border-box;
+  }
+
+  .close-agreen {
+    .lh(30px);
+    .flex(center, center);
+
+    .van-icon {
+      font-size: @font-16;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/static/LICENSE b/static/LICENSE
new file mode 100644
index 0000000..f433b1a
--- /dev/null
+++ b/static/LICENSE
@@ -0,0 +1,177 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
diff --git a/static/bankPdf/ABC.pdf b/static/bankPdf/ABC.pdf
new file mode 100644
index 0000000..23b5408
--- /dev/null
+++ b/static/bankPdf/ABC.pdf
Binary files differ
diff --git a/static/bankPdf/ADC.pdf b/static/bankPdf/ADC.pdf
new file mode 100644
index 0000000..23b5408
--- /dev/null
+++ b/static/bankPdf/ADC.pdf
Binary files differ
diff --git a/static/bankPdf/BOC.pdf b/static/bankPdf/BOC.pdf
new file mode 100644
index 0000000..e44f6e4
--- /dev/null
+++ b/static/bankPdf/BOC.pdf
Binary files differ
diff --git a/static/bankPdf/CCB.pdf b/static/bankPdf/CCB.pdf
new file mode 100644
index 0000000..9344934
--- /dev/null
+++ b/static/bankPdf/CCB.pdf
Binary files differ
diff --git a/static/bankPdf/CEB.pdf b/static/bankPdf/CEB.pdf
new file mode 100644
index 0000000..4cd0ef3
--- /dev/null
+++ b/static/bankPdf/CEB.pdf
Binary files differ
diff --git a/static/bankPdf/CITIC.pdf b/static/bankPdf/CITIC.pdf
new file mode 100644
index 0000000..c822932
--- /dev/null
+++ b/static/bankPdf/CITIC.pdf
Binary files differ
diff --git a/static/bankPdf/CMB.pdf b/static/bankPdf/CMB.pdf
new file mode 100644
index 0000000..2c3d97c
--- /dev/null
+++ b/static/bankPdf/CMB.pdf
Binary files differ
diff --git a/static/bankPdf/CMBC.pdf b/static/bankPdf/CMBC.pdf
new file mode 100644
index 0000000..1b5ad6a
--- /dev/null
+++ b/static/bankPdf/CMBC.pdf
Binary files differ
diff --git a/static/bankPdf/GDB.pdf b/static/bankPdf/GDB.pdf
new file mode 100644
index 0000000..fd3bee1
--- /dev/null
+++ b/static/bankPdf/GDB.pdf
Binary files differ
diff --git a/static/bankPdf/ICBC.pdf b/static/bankPdf/ICBC.pdf
new file mode 100644
index 0000000..0e13995
--- /dev/null
+++ b/static/bankPdf/ICBC.pdf
Binary files differ
diff --git a/static/bankPdf/PAB.pdf b/static/bankPdf/PAB.pdf
new file mode 100644
index 0000000..8e73599
--- /dev/null
+++ b/static/bankPdf/PAB.pdf
Binary files differ
diff --git a/static/bankPdf/PSBC.pdf b/static/bankPdf/PSBC.pdf
new file mode 100644
index 0000000..a69637a
--- /dev/null
+++ b/static/bankPdf/PSBC.pdf
Binary files differ
diff --git a/static/bankPdf/SHB.pdf b/static/bankPdf/SHB.pdf
new file mode 100644
index 0000000..5bcb930
--- /dev/null
+++ b/static/bankPdf/SHB.pdf
Binary files differ
diff --git a/static/bankPdf/SPDB.pdf b/static/bankPdf/SPDB.pdf
new file mode 100644
index 0000000..0eb014f
--- /dev/null
+++ b/static/bankPdf/SPDB.pdf
Binary files differ
diff --git a/static/bl.pdf b/static/bl.pdf
new file mode 100644
index 0000000..971a9e6
--- /dev/null
+++ b/static/bl.pdf
Binary files differ
diff --git a/static/dk.pdf b/static/dk.pdf
new file mode 100644
index 0000000..a9aa65c
--- /dev/null
+++ b/static/dk.pdf
Binary files differ
diff --git a/static/img/bankCard.png b/static/img/bankCard.png
new file mode 100644
index 0000000..a2fda2f
--- /dev/null
+++ b/static/img/bankCard.png
Binary files differ
diff --git a/static/img/bg.png b/static/img/bg.png
new file mode 100644
index 0000000..f35878c
--- /dev/null
+++ b/static/img/bg.png
Binary files differ
diff --git a/static/img/bgwd.png b/static/img/bgwd.png
new file mode 100644
index 0000000..6fcacf9
--- /dev/null
+++ b/static/img/bgwd.png
Binary files differ
diff --git a/static/img/faile.png b/static/img/faile.png
new file mode 100644
index 0000000..4f2ddea
--- /dev/null
+++ b/static/img/faile.png
Binary files differ
diff --git a/static/img/homeBack.png b/static/img/homeBack.png
new file mode 100644
index 0000000..559d548
--- /dev/null
+++ b/static/img/homeBack.png
Binary files differ
diff --git a/static/img/idcardf.png b/static/img/idcardf.png
new file mode 100644
index 0000000..7022574
--- /dev/null
+++ b/static/img/idcardf.png
Binary files differ
diff --git a/static/img/idcardz.png b/static/img/idcardz.png
new file mode 100644
index 0000000..f3b56be
--- /dev/null
+++ b/static/img/idcardz.png
Binary files differ
diff --git a/static/img/ing.png b/static/img/ing.png
new file mode 100644
index 0000000..855286e
--- /dev/null
+++ b/static/img/ing.png
Binary files differ
diff --git a/static/img/logo.png b/static/img/logo.png
new file mode 100644
index 0000000..9b320b1
--- /dev/null
+++ b/static/img/logo.png
Binary files differ
diff --git a/static/img/logout.png b/static/img/logout.png
new file mode 100644
index 0000000..de9f1eb
--- /dev/null
+++ b/static/img/logout.png
Binary files differ
diff --git a/static/img/noinfo.png b/static/img/noinfo.png
new file mode 100644
index 0000000..10ebf14
--- /dev/null
+++ b/static/img/noinfo.png
Binary files differ
diff --git a/static/img/order.png b/static/img/order.png
new file mode 100644
index 0000000..75b6446
--- /dev/null
+++ b/static/img/order.png
Binary files differ
diff --git a/static/img/pic.png b/static/img/pic.png
new file mode 100644
index 0000000..f038457
--- /dev/null
+++ b/static/img/pic.png
Binary files differ
diff --git a/static/img/rlsbsb.png b/static/img/rlsbsb.png
new file mode 100644
index 0000000..f06a35d
--- /dev/null
+++ b/static/img/rlsbsb.png
Binary files differ
diff --git a/static/img/rlsbz.png b/static/img/rlsbz.png
new file mode 100644
index 0000000..aad1c7b
--- /dev/null
+++ b/static/img/rlsbz.png
Binary files differ
diff --git a/static/img/shcg.png b/static/img/shcg.png
new file mode 100644
index 0000000..a2b935b
--- /dev/null
+++ b/static/img/shcg.png
Binary files differ
diff --git a/static/img/shsb.png b/static/img/shsb.png
new file mode 100644
index 0000000..30aafa9
--- /dev/null
+++ b/static/img/shsb.png
Binary files differ
diff --git a/static/img/shz.png b/static/img/shz.png
new file mode 100644
index 0000000..a31c93f
--- /dev/null
+++ b/static/img/shz.png
Binary files differ
diff --git a/static/img/success.png b/static/img/success.png
new file mode 100644
index 0000000..ed40d81
--- /dev/null
+++ b/static/img/success.png
Binary files differ
diff --git a/static/img/touxiang.png b/static/img/touxiang.png
new file mode 100644
index 0000000..d7c6a5b
--- /dev/null
+++ b/static/img/touxiang.png
Binary files differ
diff --git a/static/img/zlcc.png b/static/img/zlcc.png
new file mode 100644
index 0000000..f9e710a
--- /dev/null
+++ b/static/img/zlcc.png
Binary files differ
diff --git a/static/jquery/jquery.js b/static/jquery/jquery.js
new file mode 100644
index 0000000..f627c05
--- /dev/null
+++ b/static/jquery/jquery.js
@@ -0,0 +1,719 @@
+/*!
+* jQuery JavaScript Library v3.5.1
+* https://jquery.com/
+*
+* Includes Sizzle.js
+* https://sizzlejs.com/
+*
+* Copyright JS Foundation and other contributors
+* Released under the MIT license
+* https://jquery.org/license
+*
+* Date: 2020-05-04T22:49Z
+*/(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document");}
+return factory(w);};}else{factory(global);}})(typeof window!=="undefined"?window:this,function(window,noGlobal){"use strict";var arr=[];var getProto=Object.getPrototypeOf;var slice=arr.slice;var flat=arr.flat?function(array){return arr.flat.call(array);}:function(array){return arr.concat.apply([],array);};var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};var isFunction=function isFunction(obj){return typeof obj==="function"&&typeof obj.nodeType!=="number";};var isWindow=function isWindow(obj){return obj!=null&&obj===obj.window;};var document=window.document;var preservedScriptAttributes={type:true,src:true,nonce:true,noModule:true};function DOMEval(code,node,doc){doc=doc||document;var i,val,script=doc.createElement("script");script.text=code;if(node){for(i in preservedScriptAttributes){val=node[i]||node.getAttribute&&node.getAttribute(i);if(val){script.setAttribute(i,val);}}}
+doc.head.appendChild(script).parentNode.removeChild(script);}
+function toType(obj){if(obj==null){return obj+"";}
+return typeof obj==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":typeof obj;}
+var
+version="3.5.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context);};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,length:0,toArray:function(){return slice.call(this);},get:function(num){if(num==null){return slice.call(this);}
+return num<0?this[num+this.length]:this[num];},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;return ret;},each:function(callback){return jQuery.each(this,callback);},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},slice:function(){return this.pushStack(slice.apply(this,arguments));},first:function(){return this.eq(0);},last:function(){return this.eq(-1);},even:function(){return this.pushStack(jQuery.grep(this,function(_elem,i){return(i+1)%2;}));},odd:function(){return this.pushStack(jQuery.grep(this,function(_elem,i){return i%2;}));},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j<len?[this[j]]:[]);},end:function(){return this.prevObject||this.constructor();},push:push,sort:arr.sort,splice:arr.splice};jQuery.extend=jQuery.fn.extend=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[i]||{};i++;}
+if(typeof target!=="object"&&!isFunction(target)){target={};}
+if(i===length){target=this;i--;}
+for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){copy=options[name];if(name==="__proto__"||target===copy){continue;}
+if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=Array.isArray(copy)))){src=target[name];if(copyIsArray&&!Array.isArray(src)){clone=[];}else if(!copyIsArray&&!jQuery.isPlainObject(src)){clone={};}else{clone=src;}
+copyIsArray=false;target[name]=jQuery.extend(deep,clone,copy);}else if(copy!==undefined){target[name]=copy;}}}}
+return target;};jQuery.extend({expando:"jQuery"+(version+Math.random()).replace(/\D/g,""),isReady:true,error:function(msg){throw new Error(msg);},noop:function(){},isPlainObject:function(obj){var proto,Ctor;if(!obj||toString.call(obj)!=="[object Object]"){return false;}
+proto=getProto(obj);if(!proto){return true;}
+Ctor=hasOwn.call(proto,"constructor")&&proto.constructor;return typeof Ctor==="function"&&fnToString.call(Ctor)===ObjectFunctionString;},isEmptyObject:function(obj){var name;for(name in obj){return false;}
+return true;},globalEval:function(code,options,doc){DOMEval(code,{nonce:options&&options.nonce},doc);},each:function(obj,callback){var length,i=0;if(isArrayLike(obj)){length=obj.length;for(;i<length;i++){if(callback.call(obj[i],i,obj[i])===false){break;}}}else{for(i in obj){if(callback.call(obj[i],i,obj[i])===false){break;}}}
+return obj;},makeArray:function(arr,results){var ret=results||[];if(arr!=null){if(isArrayLike(Object(arr))){jQuery.merge(ret,typeof arr==="string"?[arr]:arr);}else{push.call(ret,arr);}}
+return ret;},inArray:function(elem,arr,i){return arr==null?-1:indexOf.call(arr,elem,i);},merge:function(first,second){var len=+second.length,j=0,i=first.length;for(;j<len;j++){first[i++]=second[j];}
+first.length=i;return first;},grep:function(elems,callback,invert){var callbackInverse,matches=[],i=0,length=elems.length,callbackExpect=!invert;for(;i<length;i++){callbackInverse=!callback(elems[i],i);if(callbackInverse!==callbackExpect){matches.push(elems[i]);}}
+return matches;},map:function(elems,callback,arg){var length,value,i=0,ret=[];if(isArrayLike(elems)){length=elems.length;for(;i<length;i++){value=callback(elems[i],i,arg);if(value!=null){ret.push(value);}}}else{for(i in elems){value=callback(elems[i],i,arg);if(value!=null){ret.push(value);}}}
+return flat(ret);},guid:1,support:support});if(typeof Symbol==="function"){jQuery.fn[Symbol.iterator]=arr[Symbol.iterator];}
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(_i,name){class2type["[object "+name+"]"]=name.toLowerCase();});function isArrayLike(obj){var length=!!obj&&"length"in obj&&obj.length,type=toType(obj);if(isFunction(obj)||isWindow(obj)){return false;}
+return type==="array"||length===0||typeof length==="number"&&length>0&&(length-1)in obj;}
+var Sizzle=/*!
+* Sizzle CSS Selector Engine v2.3.5
+* https://sizzlejs.com/
+*
+* Copyright JS Foundation and other contributors
+* Released under the MIT license
+* https://js.foundation/
+*
+* Date: 2020-03-14
+*/(function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date(),preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),nonnativeSelectorCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true;}
+return 0;},hasOwn=({}).hasOwnProperty,arr=[],pop=arr.pop,pushNative=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i<len;i++){if(list[i]===elem){return i;}}
+return-1;},booleans="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|"+
+"ismap|loop|multiple|open|readonly|required|scoped",whitespace="[\\x20\\t\\r\\n\\f]",identifier="(?:\\\\[\\da-fA-F]{1,6}"+whitespace+
+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",attributes="\\["+whitespace+"*("+identifier+")(?:"+whitespace+
+"*([*^$|!~]?=)"+whitespace+
+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+identifier+"))|)"+
+whitespace+"*\\]",pseudos=":("+identifier+")(?:\\(("+
+"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|"+
+"((?:\\\\.|[^\\\\()[\\]]|"+attributes+")*)|"+
+".*"+
+")\\)|)",rwhitespace=new RegExp(whitespace+"+","g"),rtrim=new RegExp("^"+whitespace+"+|((?:^|[^\\\\])(?:\\\\.)*)"+
+whitespace+"+$","g"),rcomma=new RegExp("^"+whitespace+"*,"+whitespace+"*"),rcombinators=new RegExp("^"+whitespace+"*([>+~]|"+whitespace+")"+whitespace+
+"*"),rdescend=new RegExp(whitespace+"|>"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={"ID":new RegExp("^#("+identifier+")"),"CLASS":new RegExp("^\\.("+identifier+")"),"TAG":new RegExp("^("+identifier+"|[*])"),"ATTR":new RegExp("^"+attributes),"PSEUDO":new RegExp("^"+pseudos),"CHILD":new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+
+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+
+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),"bool":new RegExp("^(?:"+booleans+")$","i"),"needsContext":new RegExp("^"+whitespace+
+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+
+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rhtml=/HTML$/i,rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\[\\da-fA-F]{1,6}"+whitespace+"?|\\\\([^\\r\\n\\f])","g"),funescape=function(escape,nonHex){var high="0x"+escape.slice(1)-0x10000;return nonHex?nonHex:high<0?String.fromCharCode(high+0x10000):String.fromCharCode(high>>10|0xD800,high&0x3FF|0xDC00);},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){if(asCodePoint){if(ch==="\0"){return "\uFFFD";}
+return ch.slice(0,-1)+"\\"+
+ch.charCodeAt(ch.length-1).toString(16)+" ";}
+return "\\"+ch;},unloadHandler=function(){setDocument();},inDisabledFieldset=addCombinator(function(elem){return elem.disabled===true&&elem.nodeName.toLowerCase()==="fieldset";},{dir:"parentNode",next:"legend"});try{push.apply((arr=slice.call(preferredDoc.childNodes)),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType;}catch(e){push={apply:arr.length?function(target,els){pushNative.apply(target,slice.call(els));}:function(target,els){var j=target.length,i=0;while((target[j++]=els[i++])){}
+target.length=j-1;}};}
+function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results;}
+if(!seed){setDocument(context);context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if((m=match[1])){if(nodeType===9){if((elem=context.getElementById(m))){if(elem.id===m){results.push(elem);return results;}}else{return results;}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results;}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results;}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results;}}
+if(support.qsa&&!nonnativeSelectorCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))&&(nodeType!==1||context.nodeName.toLowerCase()!=="object")){newSelector=selector;newContext=context;if(nodeType===1&&(rdescend.test(selector)||rcombinators.test(selector))){newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;if(newContext!==context||!support.scope){if((nid=context.getAttribute("id"))){nid=nid.replace(rcssescape,fcssescape);}else{context.setAttribute("id",(nid=expando));}}
+groups=tokenize(selector);i=groups.length;while(i--){groups[i]=(nid?"#"+nid:":scope")+" "+
+toSelector(groups[i]);}
+newSelector=groups.join(",");}
+try{push.apply(results,newContext.querySelectorAll(newSelector));return results;}catch(qsaError){nonnativeSelectorCache(selector,true);}finally{if(nid===expando){context.removeAttribute("id");}}}}}
+return select(selector.replace(rtrim,"$1"),context,results,seed);}
+function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()];}
+return(cache[key+" "]=value);}
+return cache;}
+function markFunction(fn){fn[expando]=true;return fn;}
+function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el);}catch(e){return false;}finally{if(el.parentNode){el.parentNode.removeChild(el);}
+el=null;}}
+function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler;}}
+function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&a.sourceIndex-b.sourceIndex;if(diff){return diff;}
+if(cur){while((cur=cur.nextSibling)){if(cur===b){return-1;}}}
+return a?1:-1;}
+function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type;};}
+function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type;};}
+function createDisabledPseudo(disabled){return function(elem){if("form"in elem){if(elem.parentNode&&elem.disabled===false){if("label"in elem){if("label"in elem.parentNode){return elem.parentNode.disabled===disabled;}else{return elem.disabled===disabled;}}
+return elem.isDisabled===disabled||elem.isDisabled!==!disabled&&inDisabledFieldset(elem)===disabled;}
+return elem.disabled===disabled;}else if("label"in elem){return elem.disabled===disabled;}
+return false;};}
+function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[(j=matchIndexes[i])]){seed[j]=!(matches[j]=seed[j]);}}});});}
+function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context;}
+support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var namespace=elem.namespaceURI,docElem=(elem.ownerDocument||elem).documentElement;return!rhtml.test(namespace||docElem&&docElem.nodeName||"HTML");};setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;if(doc==document||doc.nodeType!==9||!doc.documentElement){return document;}
+document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if(preferredDoc!=document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow){if(subWindow.addEventListener){subWindow.addEventListener("unload",unloadHandler,false);}else if(subWindow.attachEvent){subWindow.attachEvent("onunload",unloadHandler);}}
+support.scope=assert(function(el){docElem.appendChild(el).appendChild(document.createElement("div"));return typeof el.querySelectorAll!=="undefined"&&!el.querySelectorAll(":scope fieldset div").length;});support.attributes=assert(function(el){el.className="i";return!el.getAttribute("className");});support.getElementsByTagName=assert(function(el){el.appendChild(document.createComment(""));return!el.getElementsByTagName("*").length;});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(el){docElem.appendChild(el).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length;});if(support.getById){Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId;};};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[];}};}else{Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId;};};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem];}
+elems=context.getElementsByName(id);i=0;while((elem=elems[i++])){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem];}}}
+return[];}};}
+Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag);}else if(support.qsa){return context.querySelectorAll(tag);}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while((elem=results[i++])){if(elem.nodeType===1){tmp.push(elem);}}
+return tmp;}
+return results;};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className);}};rbuggyMatches=[];rbuggyQSA=[];if((support.qsa=rnative.test(document.querySelectorAll))){assert(function(el){var input;docElem.appendChild(el).innerHTML="<a id='"+expando+"'></a>"+
+"<select id='"+expando+"-\r\\' msallowcapture=''>"+
+"<option selected=''></option></select>";if(el.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")");}
+if(!el.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")");}
+if(!el.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=");}
+input=document.createElement("input");input.setAttribute("name","");el.appendChild(input);if(!el.querySelectorAll("[name='']").length){rbuggyQSA.push("\\["+whitespace+"*name"+whitespace+"*="+
+whitespace+"*(?:''|\"\")");}
+if(!el.querySelectorAll(":checked").length){rbuggyQSA.push(":checked");}
+if(!el.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]");}
+el.querySelectorAll("\\\f");rbuggyQSA.push("[\\r\\n\\f]");});assert(function(el){el.innerHTML="<a href='' disabled='disabled'></a>"+
+"<select disabled='disabled'><option/></select>";var input=document.createElement("input");input.setAttribute("type","hidden");el.appendChild(input).setAttribute("name","D");if(el.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=");}
+if(el.querySelectorAll(":enabled").length!==2){rbuggyQSA.push(":enabled",":disabled");}
+docElem.appendChild(el).disabled=true;if(el.querySelectorAll(":disabled").length!==2){rbuggyQSA.push(":enabled",":disabled");}
+el.querySelectorAll("*,:x");rbuggyQSA.push(",.*:");});}
+if((support.matchesSelector=rnative.test((matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)))){assert(function(el){support.disconnectedMatch=matches.call(el,"*");matches.call(el,"[s!='']:x");rbuggyMatches.push("!=",pseudos);});}
+rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16));}:function(a,b){if(b){while((b=b.parentNode)){if(b===a){return true;}}}
+return false;};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0;}
+var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare;}
+compare=(a.ownerDocument||a)==(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||(!support.sortDetached&&b.compareDocumentPosition(a)===compare)){if(a==document||a.ownerDocument==preferredDoc&&contains(preferredDoc,a)){return-1;}
+if(b==document||b.ownerDocument==preferredDoc&&contains(preferredDoc,b)){return 1;}
+return sortInput?(indexOf(sortInput,a)-indexOf(sortInput,b)):0;}
+return compare&4?-1:1;}:function(a,b){if(a===b){hasDuplicate=true;return 0;}
+var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a==document?-1:b==document?1:aup?-1:bup?1:sortInput?(indexOf(sortInput,a)-indexOf(sortInput,b)):0;}else if(aup===bup){return siblingCheck(a,b);}
+cur=a;while((cur=cur.parentNode)){ap.unshift(cur);}
+cur=b;while((cur=cur.parentNode)){bp.unshift(cur);}
+while(ap[i]===bp[i]){i++;}
+return i?siblingCheck(ap[i],bp[i]):ap[i]==preferredDoc?-1:bp[i]==preferredDoc?1:0;};return document;};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements);};Sizzle.matchesSelector=function(elem,expr){setDocument(elem);if(support.matchesSelector&&documentIsHTML&&!nonnativeSelectorCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret;}}catch(e){nonnativeSelectorCache(expr,true);}}
+return Sizzle(expr,document,null,[elem]).length>0;};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!=document){setDocument(context);}
+return contains(context,elem);};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!=document){setDocument(elem);}
+var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null;};Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape);};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg);};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while((elem=results[i++])){if(elem===results[i]){j=duplicates.push(i);}}
+while(j--){results.splice(duplicates[j],1);}}
+sortInput=null;return results;};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while((node=elem[i++])){ret+=getText(node);}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent;}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem);}}}else if(nodeType===3||nodeType===4){return elem.nodeValue;}
+return ret;};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{"ATTR":function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" ";}
+return match.slice(0,4);},"CHILD":function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0]);}
+match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+((match[7]+match[8])||match[3]==="odd");}else if(match[3]){Sizzle.error(match[0]);}
+return match;},"PSEUDO":function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null;}
+if(match[3]){match[2]=match[4]||match[5]||"";}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess);}
+return match.slice(0,3);}},filter:{"TAG":function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true;}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName;};},"CLASS":function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+
+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"");});},"ATTR":function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!=";}
+if(!operator){return true;}
+result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false;};},"CHILD":function(type,what,_argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode;}:function(elem,_context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while((node=node[dir])){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false;}}
+start=dir=type==="only"&&!start&&"nextSibling";}
+return true;}
+start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while((node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break;}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex;}
+if(diff===false){while((node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop())){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff];}
+if(node===elem){break;}}}}}
+diff-=last;return diff===first||(diff%first===0&&diff/first>=0);}};},"PSEUDO":function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument);}
+if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i]);}}):function(elem){return fn(elem,0,args);};}
+return fn;}},pseudos:{"not":markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,_context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if((elem=unmatched[i])){seed[i]=!(matches[i]=elem);}}}):function(elem,_context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop();};}),"has":markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0;};}),"contains":markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||getText(elem)).indexOf(text)>-1;};}),"lang":markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang);}
+lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if((elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang"))){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0;}}while((elem=elem.parentNode)&&elem.nodeType===1);return false;};}),"target":function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id;},"root":function(elem){return elem===docElem;},"focus":function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex);},"enabled":createDisabledPseudo(false),"disabled":createDisabledPseudo(true),"checked":function(elem){var nodeName=elem.nodeName.toLowerCase();return(nodeName==="input"&&!!elem.checked)||(nodeName==="option"&&!!elem.selected);},"selected":function(elem){if(elem.parentNode){elem.parentNode.selectedIndex;}
+return elem.selected===true;},"empty":function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false;}}
+return true;},"parent":function(elem){return!Expr.pseudos["empty"](elem);},"header":function(elem){return rheader.test(elem.nodeName);},"input":function(elem){return rinputs.test(elem.nodeName);},"button":function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button";},"text":function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text");},"first":createPositionalPseudo(function(){return[0];}),"last":createPositionalPseudo(function(_matchIndexes,length){return[length-1];}),"eq":createPositionalPseudo(function(_matchIndexes,length,argument){return[argument<0?argument+length:argument];}),"even":createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i<length;i+=2){matchIndexes.push(i);}
+return matchIndexes;}),"odd":createPositionalPseudo(function(matchIndexes,length){var i=1;for(;i<length;i+=2){matchIndexes.push(i);}
+return matchIndexes;}),"lt":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument>length?length:argument;for(;--i>=0;){matchIndexes.push(i);}
+return matchIndexes;}),"gt":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i<length;){matchIndexes.push(i);}
+return matchIndexes;})}};Expr.pseudos["nth"]=Expr.pseudos["eq"];for(i in{radio:true,checkbox:true,file:true,password:true,image:true}){Expr.pseudos[i]=createInputPseudo(i);}
+for(i in{submit:true,reset:true}){Expr.pseudos[i]=createButtonPseudo(i);}
+function setFilters(){}
+setFilters.prototype=Expr.filters=Expr.pseudos;Expr.setFilters=new setFilters();tokenize=Sizzle.tokenize=function(selector,parseOnly){var matched,match,tokens,type,soFar,groups,preFilters,cached=tokenCache[selector+" "];if(cached){return parseOnly?0:cached.slice(0);}
+soFar=selector;groups=[];preFilters=Expr.preFilter;while(soFar){if(!matched||(match=rcomma.exec(soFar))){if(match){soFar=soFar.slice(match[0].length)||soFar;}
+groups.push((tokens=[]));}
+matched=false;if((match=rcombinators.exec(soFar))){matched=match.shift();tokens.push({value:matched,type:match[0].replace(rtrim," ")});soFar=soFar.slice(matched.length);}
+for(type in Expr.filter){if((match=matchExpr[type].exec(soFar))&&(!preFilters[type]||(match=preFilters[type](match)))){matched=match.shift();tokens.push({value:matched,type:type,matches:match});soFar=soFar.slice(matched.length);}}
+if(!matched){break;}}
+return parseOnly?soFar.length:soFar?Sizzle.error(selector):tokenCache(selector,groups).slice(0);};function toSelector(tokens){var i=0,len=tokens.length,selector="";for(;i<len;i++){selector+=tokens[i].value;}
+return selector;}
+function addCombinator(matcher,combinator,base){var dir=combinator.dir,skip=combinator.next,key=skip||dir,checkNonElements=base&&key==="parentNode",doneName=done++;return combinator.first?function(elem,context,xml){while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){return matcher(elem,context,xml);}}
+return false;}:function(elem,context,xml){var oldCache,uniqueCache,outerCache,newCache=[dirruns,doneName];if(xml){while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){if(matcher(elem,context,xml)){return true;}}}}else{while((elem=elem[dir])){if(elem.nodeType===1||checkNonElements){outerCache=elem[expando]||(elem[expando]={});uniqueCache=outerCache[elem.uniqueID]||(outerCache[elem.uniqueID]={});if(skip&&skip===elem.nodeName.toLowerCase()){elem=elem[dir]||elem;}else if((oldCache=uniqueCache[key])&&oldCache[0]===dirruns&&oldCache[1]===doneName){return(newCache[2]=oldCache[2]);}else{uniqueCache[key]=newCache;if((newCache[2]=matcher(elem,context,xml))){return true;}}}}}
+return false;};}
+function elementMatcher(matchers){return matchers.length>1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false;}}
+return true;}:matchers[0];}
+function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i<len;i++){Sizzle(selector,contexts[i],results);}
+return results;}
+function condense(unmatched,map,filter,context,xml){var elem,newUnmatched=[],i=0,len=unmatched.length,mapped=map!=null;for(;i<len;i++){if((elem=unmatched[i])){if(!filter||filter(elem,context,xml)){newUnmatched.push(elem);if(mapped){map.push(i);}}}}
+return newUnmatched;}
+function setMatcher(preFilter,selector,matcher,postFilter,postFinder,postSelector){if(postFilter&&!postFilter[expando]){postFilter=setMatcher(postFilter);}
+if(postFinder&&!postFinder[expando]){postFinder=setMatcher(postFinder,postSelector);}
+return markFunction(function(seed,results,context,xml){var temp,i,elem,preMap=[],postMap=[],preexisting=results.length,elems=seed||multipleContexts(selector||"*",context.nodeType?[context]:context,[]),matcherIn=preFilter&&(seed||!selector)?condense(elems,preMap,preFilter,context,xml):elems,matcherOut=matcher?postFinder||(seed?preFilter:preexisting||postFilter)?[]:results:matcherIn;if(matcher){matcher(matcherIn,matcherOut,context,xml);}
+if(postFilter){temp=condense(matcherOut,postMap);postFilter(temp,[],context,xml);i=temp.length;while(i--){if((elem=temp[i])){matcherOut[postMap[i]]=!(matcherIn[postMap[i]]=elem);}}}
+if(seed){if(postFinder||preFilter){if(postFinder){temp=[];i=matcherOut.length;while(i--){if((elem=matcherOut[i])){temp.push((matcherIn[i]=elem));}}
+postFinder(null,(matcherOut=[]),temp,xml);}
+i=matcherOut.length;while(i--){if((elem=matcherOut[i])&&(temp=postFinder?indexOf(seed,elem):preMap[i])>-1){seed[temp]=!(results[temp]=elem);}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml);}else{push.apply(results,matcherOut);}}});}
+function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext;},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1;},implicitRelative,true),matchers=[function(elem,context,xml){var ret=(!leadingRelative&&(xml||context!==outermostContext))||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret;}];for(;i<len;i++){if((matcher=Expr.relative[tokens[i].type])){matchers=[addCombinator(elementMatcher(matchers),matcher)];}else{matcher=Expr.filter[tokens[i].type].apply(null,tokens[i].matches);if(matcher[expando]){j=++i;for(;j<len;j++){if(Expr.relative[tokens[j].type]){break;}}
+return setMatcher(i>1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i<j&&matcherFromTokens(tokens.slice(i,j)),j<len&&matcherFromTokens((tokens=tokens.slice(j))),j<len&&toSelector(tokens));}
+matchers.push(matcher);}}
+return elementMatcher(matchers);}
+function matcherFromGroupMatchers(elementMatchers,setMatchers){var bySet=setMatchers.length>0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=(dirruns+=contextBackup==null?1:Math.random()||0.1),len=elems.length;if(outermost){outermostContext=context==document||context||outermost;}
+for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!=document){setDocument(elem);xml=!documentIsHTML;}
+while((matcher=elementMatchers[j++])){if(matcher(elem,context||document,xml)){results.push(elem);break;}}
+if(outermost){dirruns=dirrunsUnique;}}
+if(bySet){if((elem=!matcher&&elem)){matchedCount--;}
+if(seed){unmatched.push(elem);}}}
+matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while((matcher=setMatchers[j++])){matcher(unmatched,setMatched,context,xml);}
+if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results);}}}
+setMatched=condense(setMatched);}
+push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&(matchedCount+setMatchers.length)>1){Sizzle.uniqueSort(results);}}
+if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup;}
+return unmatched;};return bySet?markFunction(superMatcher):superMatcher;}
+compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector);}
+i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached);}else{elementMatchers.push(cached);}}
+cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector;}
+return cached;};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize((selector=compiled.selector||selector));results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results;}else if(compiled){context=context.parentNode;}
+selector=selector.slice(tokens.shift().value.length);}
+i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[(type=token.type)]){break;}
+if((find=Expr.find[type])){if((seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context))){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results;}
+break;}}}}
+(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results;};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(el){return el.compareDocumentPosition(document.createElement("fieldset"))&1;});if(!assert(function(el){el.innerHTML="<a href='#'></a>";return el.firstChild.getAttribute("href")==="#";})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2);}});}
+if(!support.attributes||!assert(function(el){el.innerHTML="<input/>";el.firstChild.setAttribute("value","");return el.firstChild.getAttribute("value")==="";})){addHandle("value",function(elem,_name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue;}});}
+if(!assert(function(el){return el.getAttribute("disabled")==null;})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null;}});}
+return Sizzle;})(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break;}
+matched.push(elem);}}
+return matched;};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n);}}
+return matched;};var rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase();};var rsingleTag=(/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i);function winnow(elements,qualifier,not){if(isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not;});}
+if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return(elem===qualifier)!==not;});}
+if(typeof qualifier!=="string"){return jQuery.grep(elements,function(elem){return(indexOf.call(qualifier,elem)>-1)!==not;});}
+return jQuery.filter(qualifier,elements,not);}
+jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")";}
+if(elems.length===1&&elem.nodeType===1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[];}
+return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1;}));};jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i<len;i++){if(jQuery.contains(self[i],this)){return true;}}}));}
+ret=this.pushStack([]);for(i=0;i<len;i++){jQuery.find(selector,self[i],ret);}
+return len>1?jQuery.uniqueSort(ret):ret;},filter:function(selector){return this.pushStack(winnow(this,selector||[],false));},not:function(selector){return this.pushStack(winnow(this,selector||[],true));},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length;}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this;}
+root=root||rootjQuery;if(typeof selector==="string"){if(selector[0]==="<"&&selector[selector.length-1]===">"&&selector.length>=3){match=[null,selector,null];}else{match=rquickExpr.exec(selector);}
+if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(isFunction(this[match])){this[match](context[match]);}else{this.attr(match,context[match]);}}}
+return this;}else{elem=document.getElementById(match[2]);if(elem){this[0]=elem;this.length=1;}
+return this;}}else if(!context||context.jquery){return(context||root).find(selector);}else{return this.constructor(context).find(selector);}}else if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(isFunction(selector)){return root.ready!==undefined?root.ready(selector):selector(jQuery);}
+return jQuery.makeArray(selector,this);};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i<l;i++){if(jQuery.contains(this,targets[i])){return true;}}});},closest:function(selectors,context){var cur,i=0,l=this.length,matched=[],targets=typeof selectors!=="string"&&jQuery(selectors);if(!rneedsContext.test(selectors)){for(;i<l;i++){for(cur=this[i];cur&&cur!==context;cur=cur.parentNode){if(cur.nodeType<11&&(targets?targets.index(cur)>-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break;}}}}
+return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched);},index:function(elem){if(!elem){return(this[0]&&this[0].parentNode)?this.first().prevAll().length:-1;}
+if(typeof elem==="string"){return indexOf.call(jQuery(elem),this[0]);}
+return indexOf.call(this,elem.jquery?elem[0]:elem);},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))));},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector));}});function sibling(cur,dir){while((cur=cur[dir])&&cur.nodeType!==1){}
+return cur;}
+jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function(elem){return dir(elem,"parentNode");},parentsUntil:function(elem,_i,until){return dir(elem,"parentNode",until);},next:function(elem){return sibling(elem,"nextSibling");},prev:function(elem){return sibling(elem,"previousSibling");},nextAll:function(elem){return dir(elem,"nextSibling");},prevAll:function(elem){return dir(elem,"previousSibling");},nextUntil:function(elem,_i,until){return dir(elem,"nextSibling",until);},prevUntil:function(elem,_i,until){return dir(elem,"previousSibling",until);},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem);},children:function(elem){return siblings(elem.firstChild);},contents:function(elem){if(elem.contentDocument!=null&&getProto(elem.contentDocument)){return elem.contentDocument;}
+if(nodeName(elem,"template")){elem=elem.content||elem;}
+return jQuery.merge([],elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until;}
+if(selector&&typeof selector==="string"){matched=jQuery.filter(selector,matched);}
+if(this.length>1){if(!guaranteedUnique[name]){jQuery.uniqueSort(matched);}
+if(rparentsprev.test(name)){matched.reverse();}}
+return this.pushStack(matched);};});var rnothtmlwhite=(/[^\x20\t\r\n\f]+/g);function createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=true;});return object;}
+jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var
+firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=locked||options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex<list.length){if(list[firingIndex].apply(memory[0],memory[1])===false&&options.stopOnFalse){firingIndex=list.length;memory=false;}}}
+if(!options.memory){memory=false;}
+firing=false;if(locked){if(memory){list=[];}else{list="";}}},self={add:function(){if(list){if(memory&&!firing){firingIndex=list.length-1;queue.push(memory);}
+(function add(args){jQuery.each(args,function(_,arg){if(isFunction(arg)){if(!options.unique||!self.has(arg)){list.push(arg);}}else if(arg&&arg.length&&toType(arg)!=="string"){add(arg);}});})(arguments);if(memory&&!firing){fire();}}
+return this;},remove:function(){jQuery.each(arguments,function(_,arg){var index;while((index=jQuery.inArray(arg,list,index))>-1){list.splice(index,1);if(index<=firingIndex){firingIndex--;}}});return this;},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0;},empty:function(){if(list){list=[];}
+return this;},disable:function(){locked=queue=[];list=memory="";return this;},disabled:function(){return!list;},lock:function(){locked=queue=[];if(!memory&&!firing){list=memory="";}
+return this;},locked:function(){return!!locked;},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire();}}
+return this;},fire:function(){self.fireWith(this,arguments);return this;},fired:function(){return!!fired;}};return self;};function Identity(v){return v;}
+function Thrower(ex){throw ex;}
+function adoptValue(value,resolve,reject,noValue){var method;try{if(value&&isFunction((method=value.promise))){method.call(value).done(resolve).fail(reject);}else if(value&&isFunction((method=value.then))){method.call(value,resolve,reject);}else{resolve.apply(undefined,[value].slice(noValue));}}catch(value){reject.apply(undefined,[value]);}}
+jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state="pending",promise={state:function(){return state;},always:function(){deferred.done(arguments).fail(arguments);return this;},"catch":function(fn){return promise.then(null,fn);},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(_i,tuple){var fn=isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);}else{newDefer[tuple[0]+"With"](this,fn?[returned]:arguments);}});});fns=null;}).promise();},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(depth<maxDepth){return;}
+returned=handler.apply(that,args);if(returned===deferred.promise()){throw new TypeError("Thenable self-resolution");}
+then=returned&&(typeof returned==="object"||typeof returned==="function")&&returned.then;if(isFunction(then)){if(special){then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special));}else{maxDepth++;then.call(returned,resolve(maxDepth,deferred,Identity,special),resolve(maxDepth,deferred,Thrower,special),resolve(maxDepth,deferred,Identity,deferred.notifyWith));}}else{if(handler!==Identity){that=undefined;args=[returned];}
+(special||deferred.resolveWith)(that,args);}},process=special?mightThrow:function(){try{mightThrow();}catch(e){if(jQuery.Deferred.exceptionHook){jQuery.Deferred.exceptionHook(e,process.stackTrace);}
+if(depth+1>=maxDepth){if(handler!==Thrower){that=undefined;args=[e];}
+deferred.rejectWith(that,args);}}};if(depth){process();}else{if(jQuery.Deferred.getStackHook){process.stackTrace=jQuery.Deferred.getStackHook();}
+window.setTimeout(process);}};}
+return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith));tuples[1][3].add(resolve(0,newDefer,isFunction(onFulfilled)?onFulfilled:Identity));tuples[2][3].add(resolve(0,newDefer,isFunction(onRejected)?onRejected:Thrower));}).promise();},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise;}},deferred={};jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString;},tuples[3-i][2].disable,tuples[3-i][3].disable,tuples[0][2].lock,tuples[0][3].lock);}
+list.add(tuple[3].fire);deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?undefined:this,arguments);return this;};deferred[tuple[0]+"With"]=list.fireWith;});promise.promise(deferred);if(func){func.call(deferred,deferred);}
+return deferred;},when:function(singleValue){var
+remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),master=jQuery.Deferred(),updateFunc=function(i){return function(value){resolveContexts[i]=this;resolveValues[i]=arguments.length>1?slice.call(arguments):value;if(!(--remaining)){master.resolveWith(resolveContexts,resolveValues);}};};if(remaining<=1){adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject,!remaining);if(master.state()==="pending"||isFunction(resolveValues[i]&&resolveValues[i].then)){return master.then();}}
+while(i--){adoptValue(resolveValues[i],updateFunc(i),master.reject);}
+return master.promise();}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){if(window.console&&window.console.warn&&error&&rerrorNames.test(error.name)){window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack);}};jQuery.readyException=function(error){window.setTimeout(function(){throw error;});};var readyList=jQuery.Deferred();jQuery.fn.ready=function(fn){readyList.then(fn).catch(function(error){jQuery.readyException(error);});return this;};jQuery.extend({isReady:false,readyWait:1,ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return;}
+jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return;}
+readyList.resolveWith(document,[jQuery]);}});jQuery.ready.then=readyList.then;function completed(){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);jQuery.ready();}
+if(document.readyState==="complete"||(document.readyState!=="loading"&&!document.documentElement.doScroll)){window.setTimeout(jQuery.ready);}else{document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed);}
+var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key==null;if(toType(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw);}}else if(value!==undefined){chainable=true;if(!isFunction(value)){raw=true;}
+if(bulk){if(raw){fn.call(elems,value);fn=null;}else{bulk=fn;fn=function(elem,_key,value){return bulk.call(jQuery(elem),value);};}}
+if(fn){for(;i<len;i++){fn(elems[i],key,raw?value:value.call(elems[i],i,fn(elems[i],key)));}}}
+if(chainable){return elems;}
+if(bulk){return fn.call(elems);}
+return len?fn(elems[0],key):emptyGet;};var rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g;function fcamelCase(_all,letter){return letter.toUpperCase();}
+function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase);}
+var acceptData=function(owner){return owner.nodeType===1||owner.nodeType===9||!(+owner.nodeType);};function Data(){this.expando=jQuery.expando+Data.uid++;}
+Data.uid=1;Data.prototype={cache:function(owner){var value=owner[this.expando];if(!value){value={};if(acceptData(owner)){if(owner.nodeType){owner[this.expando]=value;}else{Object.defineProperty(owner,this.expando,{value:value,configurable:true});}}}
+return value;},set:function(owner,data,value){var prop,cache=this.cache(owner);if(typeof data==="string"){cache[camelCase(data)]=value;}else{for(prop in data){cache[camelCase(prop)]=data[prop];}}
+return cache;},get:function(owner,key){return key===undefined?this.cache(owner):owner[this.expando]&&owner[this.expando][camelCase(key)];},access:function(owner,key,value){if(key===undefined||((key&&typeof key==="string")&&value===undefined)){return this.get(owner,key);}
+this.set(owner,key,value);return value!==undefined?value:key;},remove:function(owner,key){var i,cache=owner[this.expando];if(cache===undefined){return;}
+if(key!==undefined){if(Array.isArray(key)){key=key.map(camelCase);}else{key=camelCase(key);key=key in cache?[key]:(key.match(rnothtmlwhite)||[]);}
+i=key.length;while(i--){delete cache[key[i]];}}
+if(key===undefined||jQuery.isEmptyObject(cache)){if(owner.nodeType){owner[this.expando]=undefined;}else{delete owner[this.expando];}}},hasData:function(owner){var cache=owner[this.expando];return cache!==undefined&&!jQuery.isEmptyObject(cache);}};var dataPriv=new Data();var dataUser=new Data();var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/[A-Z]/g;function getData(data){if(data==="true"){return true;}
+if(data==="false"){return false;}
+if(data==="null"){return null;}
+if(data===+data+""){return+data;}
+if(rbrace.test(data)){return JSON.parse(data);}
+return data;}
+function dataAttr(elem,key,data){var name;if(data===undefined&&elem.nodeType===1){name="data-"+key.replace(rmultiDash,"-$&").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=getData(data);}catch(e){}
+dataUser.set(elem,key,data);}else{data=undefined;}}
+return data;}
+jQuery.extend({hasData:function(elem){return dataUser.hasData(elem)||dataPriv.hasData(elem);},data:function(elem,name,data){return dataUser.access(elem,name,data);},removeData:function(elem,name){dataUser.remove(elem,name);},_data:function(elem,name,data){return dataPriv.access(elem,name,data);},_removeData:function(elem,name){dataPriv.remove(elem,name);}});jQuery.fn.extend({data:function(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;if(key===undefined){if(this.length){data=dataUser.get(elem);if(elem.nodeType===1&&!dataPriv.get(elem,"hasDataAttrs")){i=attrs.length;while(i--){if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=camelCase(name.slice(5));dataAttr(elem,name,data[name]);}}}
+dataPriv.set(elem,"hasDataAttrs",true);}}
+return data;}
+if(typeof key==="object"){return this.each(function(){dataUser.set(this,key);});}
+return access(this,function(value){var data;if(elem&&value===undefined){data=dataUser.get(elem,key);if(data!==undefined){return data;}
+data=dataAttr(elem,key);if(data!==undefined){return data;}
+return;}
+this.each(function(){dataUser.set(this,key,value);});},null,value,arguments.length>1,null,true);},removeData:function(key){return this.each(function(){dataUser.remove(this,key);});}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=dataPriv.get(elem,type);if(data){if(!queue||Array.isArray(data)){queue=dataPriv.access(elem,type,jQuery.makeArray(data));}else{queue.push(data);}}
+return queue||[];}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type);};if(fn==="inprogress"){fn=queue.shift();startLength--;}
+if(fn){if(type==="fx"){queue.unshift("inprogress");}
+delete hooks.stop;fn.call(elem,next,hooks);}
+if(!startLength&&hooks){hooks.empty.fire();}},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key]);})});}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--;}
+if(arguments.length<setter){return jQuery.queue(this[0],type);}
+return data===undefined?this:this.each(function(){var queue=jQuery.queue(this,type,data);jQuery._queueHooks(this,type);if(type==="fx"&&queue[0]!=="inprogress"){jQuery.dequeue(this,type);}});},dequeue:function(type){return this.each(function(){jQuery.dequeue(this,type);});},clearQueue:function(type){return this.queue(type||"fx",[]);},promise:function(type,obj){var tmp,count=1,defer=jQuery.Deferred(),elements=this,i=this.length,resolve=function(){if(!(--count)){defer.resolveWith(elements,[elements]);}};if(typeof type!=="string"){obj=type;type=undefined;}
+type=type||"fx";while(i--){tmp=dataPriv.get(elements[i],type+"queueHooks");if(tmp&&tmp.empty){count++;tmp.empty.add(resolve);}}
+resolve();return defer.promise(obj);}});var pnum=(/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;var rcssNum=new RegExp("^(?:([+-])=|)("+pnum+")([a-z%]*)$","i");var cssExpand=["Top","Right","Bottom","Left"];var documentElement=document.documentElement;var isAttached=function(elem){return jQuery.contains(elem.ownerDocument,elem);},composed={composed:true};if(documentElement.getRootNode){isAttached=function(elem){return jQuery.contains(elem.ownerDocument,elem)||elem.getRootNode(composed)===elem.ownerDocument;};}
+var isHiddenWithinTree=function(elem,el){elem=el||elem;return elem.style.display==="none"||elem.style.display===""&&isAttached(elem)&&jQuery.css(elem,"display")==="none";};function adjustCSS(elem,prop,valueParts,tween){var adjusted,scale,maxIterations=20,currentValue=tween?function(){return tween.cur();}:function(){return jQuery.css(elem,prop,"");},initial=currentValue(),unit=valueParts&&valueParts[3]||(jQuery.cssNumber[prop]?"":"px"),initialInUnit=elem.nodeType&&(jQuery.cssNumber[prop]||unit!=="px"&&+initial)&&rcssNum.exec(jQuery.css(elem,prop));if(initialInUnit&&initialInUnit[3]!==unit){initial=initial/2;unit=unit||initialInUnit[3];initialInUnit=+initial||1;while(maxIterations--){jQuery.style(elem,prop,initialInUnit+unit);if((1-scale)*(1-(scale=currentValue()/initial||0.5))<=0){maxIterations=0;}
+initialInUnit=initialInUnit/scale;}
+initialInUnit=initialInUnit*2;jQuery.style(elem,prop,initialInUnit+unit);valueParts=valueParts||[];}
+if(valueParts){initialInUnit=+initialInUnit||+initial||0;adjusted=valueParts[1]?initialInUnit+(valueParts[1]+1)*valueParts[2]:+valueParts[2];if(tween){tween.unit=unit;tween.start=initialInUnit;tween.end=adjusted;}}
+return adjusted;}
+var defaultDisplayMap={};function getDefaultDisplay(elem){var temp,doc=elem.ownerDocument,nodeName=elem.nodeName,display=defaultDisplayMap[nodeName];if(display){return display;}
+temp=doc.body.appendChild(doc.createElement(nodeName));display=jQuery.css(temp,"display");temp.parentNode.removeChild(temp);if(display==="none"){display="block";}
+defaultDisplayMap[nodeName]=display;return display;}
+function showHide(elements,show){var display,elem,values=[],index=0,length=elements.length;for(;index<length;index++){elem=elements[index];if(!elem.style){continue;}
+display=elem.style.display;if(show){if(display==="none"){values[index]=dataPriv.get(elem,"display")||null;if(!values[index]){elem.style.display="";}}
+if(elem.style.display===""&&isHiddenWithinTree(elem)){values[index]=getDefaultDisplay(elem);}}else{if(display!=="none"){values[index]="none";dataPriv.set(elem,"display",display);}}}
+for(index=0;index<length;index++){if(values[index]!=null){elements[index].style.display=values[index];}}
+return elements;}
+jQuery.fn.extend({show:function(){return showHide(this,true);},hide:function(){return showHide(this);},toggle:function(state){if(typeof state==="boolean"){return state?this.show():this.hide();}
+return this.each(function(){if(isHiddenWithinTree(this)){jQuery(this).show();}else{jQuery(this).hide();}});}});var rcheckableType=(/^(?:checkbox|radio)$/i);var rtagName=(/<([a-z][^\/\0>\x20\t\r\n\f]*)/i);var rscriptType=(/^$|^module$|\/(?:java|ecma)script/i);(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement("div")),input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;div.innerHTML="<textarea>x</textarea>";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;div.innerHTML="<option></option>";support.option=!!div.lastChild;})();var wrapMap={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;if(!support.option){wrapMap.optgroup=wrapMap.option=[1,"<select multiple='multiple'>","</select>"];}
+function getAll(context,tag){var ret;if(typeof context.getElementsByTagName!=="undefined"){ret=context.getElementsByTagName(tag||"*");}else if(typeof context.querySelectorAll!=="undefined"){ret=context.querySelectorAll(tag||"*");}else{ret=[];}
+if(tag===undefined||tag&&nodeName(context,tag)){return jQuery.merge([context],ret);}
+return ret;}
+function setGlobalEval(elems,refElements){var i=0,l=elems.length;for(;i<l;i++){dataPriv.set(elems[i],"globalEval",!refElements||dataPriv.get(refElements[i],"globalEval"));}}
+var rhtml=/<|&#?\w+;/;function buildFragment(elems,context,scripts,selection,ignored){var elem,tmp,tag,wrap,attached,j,fragment=context.createDocumentFragment(),nodes=[],i=0,l=elems.length;for(;i<l;i++){elem=elems[i];if(elem||elem===0){if(toType(elem)==="object"){jQuery.merge(nodes,elem.nodeType?[elem]:elem);}else if(!rhtml.test(elem)){nodes.push(context.createTextNode(elem));}else{tmp=tmp||fragment.appendChild(context.createElement("div"));tag=(rtagName.exec(elem)||["",""])[1].toLowerCase();wrap=wrapMap[tag]||wrapMap._default;tmp.innerHTML=wrap[1]+jQuery.htmlPrefilter(elem)+wrap[2];j=wrap[0];while(j--){tmp=tmp.lastChild;}
+jQuery.merge(nodes,tmp.childNodes);tmp=fragment.firstChild;tmp.textContent="";}}}
+fragment.textContent="";i=0;while((elem=nodes[i++])){if(selection&&jQuery.inArray(elem,selection)>-1){if(ignored){ignored.push(elem);}
+continue;}
+attached=isAttached(elem);tmp=getAll(fragment.appendChild(elem),"script");if(attached){setGlobalEval(tmp);}
+if(scripts){j=0;while((elem=tmp[j++])){if(rscriptType.test(elem.type||"")){scripts.push(elem);}}}}
+return fragment;}
+var
+rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true;}
+function returnFalse(){return false;}
+function expectSync(elem,type){return(elem===safeActiveElement())===(type==="focus");}
+function safeActiveElement(){try{return document.activeElement;}catch(err){}}
+function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined;}
+for(type in types){on(elem,type,selector,data,types[type],one);}
+return elem;}
+if(data==null&&fn==null){fn=selector;data=selector=undefined;}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined;}else{fn=data;data=selector;selector=undefined;}}
+if(fn===false){fn=returnFalse;}else if(!fn){return elem;}
+if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments);};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++);}
+return elem.each(function(){jQuery.event.add(this,types,fn,data,selector);});}
+jQuery.event={global:{},add:function(elem,types,handler,data,selector){var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(!acceptData(elem)){return;}
+if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector;}
+if(selector){jQuery.find.matchesSelector(documentElement,selector);}
+if(!handler.guid){handler.guid=jQuery.guid++;}
+if(!(events=elemData.events)){events=elemData.events=Object.create(null);}
+if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):undefined;};}
+types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue;}
+special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle);}}}
+if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}}
+if(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else{handlers.push(handleObj);}
+jQuery.event.global[type]=true;}},remove:function(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(!elemData||!(events=elemData.events)){return;}
+types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true);}
+continue;}
+special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--;}
+if(special.remove){special.remove.call(elem,handleObj);}}}
+if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle);}
+delete events[type];}}
+if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events");}},dispatch:function(nativeEvent){var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),event=jQuery.event.fix(nativeEvent),handlers=(dataPriv.get(this,"events")||Object.create(null))[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;for(i=1;i<arguments.length;i++){args[i]=arguments[i];}
+event.delegateTarget=this;if(special.preDispatch&&special.preDispatch.call(this,event)===false){return;}
+handlerQueue=jQuery.event.handlers.call(this,event,handlers);i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){if(!event.rnamespace||handleObj.namespace===false||event.rnamespace.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation();}}}}}
+if(special.postDispatch){special.postDispatch.call(this,event);}
+return event.result;},handlers:function(event,handlers){var i,handleObj,sel,matchedHandlers,matchedSelectors,handlerQueue=[],delegateCount=handlers.delegateCount,cur=event.target;if(delegateCount&&cur.nodeType&&!(event.type==="click"&&event.button>=1)){for(;cur!==this;cur=cur.parentNode||this){if(cur.nodeType===1&&!(event.type==="click"&&cur.disabled===true)){matchedHandlers=[];matchedSelectors={};for(i=0;i<delegateCount;i++){handleObj=handlers[i];sel=handleObj.selector+" ";if(matchedSelectors[sel]===undefined){matchedSelectors[sel]=handleObj.needsContext?jQuery(sel,this).index(cur)>-1:jQuery.find(sel,this,null,[cur]).length;}
+if(matchedSelectors[sel]){matchedHandlers.push(handleObj);}}
+if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers});}}}}
+cur=this;if(delegateCount<handlers.length){handlerQueue.push({elem:cur,handlers:handlers.slice(delegateCount)});}
+return handlerQueue;},addProp:function(name,hook){Object.defineProperty(jQuery.Event.prototype,name,{enumerable:true,configurable:true,get:isFunction(hook)?function(){if(this.originalEvent){return hook(this.originalEvent);}}:function(){if(this.originalEvent){return this.originalEvent[name];}},set:function(value){Object.defineProperty(this,name,{enumerable:true,configurable:true,writable:true,value:value});}});},fix:function(originalEvent){return originalEvent[jQuery.expando]?originalEvent:new jQuery.Event(originalEvent);},special:{load:{noBubble:true},click:{setup:function(data){var el=this||data;if(rcheckableType.test(el.type)&&el.click&&nodeName(el,"input")){leverageNative(el,"click",returnTrue);}
+return false;},trigger:function(data){var el=this||data;if(rcheckableType.test(el.type)&&el.click&&nodeName(el,"input")){leverageNative(el,"click");}
+return true;},_default:function(event){var target=event.target;return rcheckableType.test(target.type)&&target.click&&nodeName(target,"input")&&dataPriv.get(target,"click")||nodeName(target,"a");}},beforeunload:{postDispatch:function(event){if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result;}}}}};function leverageNative(el,type,expectSync){if(!expectSync){if(dataPriv.get(el,type)===undefined){jQuery.event.add(el,type,returnTrue);}
+return;}
+dataPriv.set(el,type,false);jQuery.event.add(el,type,{namespace:false,handler:function(event){var notAsync,result,saved=dataPriv.get(this,type);if((event.isTrigger&1)&&this[type]){if(!saved.length){saved=slice.call(arguments);dataPriv.set(this,type,saved);notAsync=expectSync(this,type);this[type]();result=dataPriv.get(this,type);if(saved!==result||notAsync){dataPriv.set(this,type,false);}else{result={};}
+if(saved!==result){event.stopImmediatePropagation();event.preventDefault();return result.value;}}else if((jQuery.event.special[type]||{}).delegateType){event.stopPropagation();}}else if(saved.length){dataPriv.set(this,type,{value:jQuery.event.trigger(jQuery.extend(saved[0],jQuery.Event.prototype),saved.slice(1),this)});event.stopImmediatePropagation();}}});}
+jQuery.removeEvent=function(elem,type,handle){if(elem.removeEventListener){elem.removeEventListener(type,handle);}};jQuery.Event=function(src,props){if(!(this instanceof jQuery.Event)){return new jQuery.Event(src,props);}
+if(src&&src.type){this.originalEvent=src;this.type=src.type;this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&src.returnValue===false?returnTrue:returnFalse;this.target=(src.target&&src.target.nodeType===3)?src.target.parentNode:src.target;this.currentTarget=src.currentTarget;this.relatedTarget=src.relatedTarget;}else{this.type=src;}
+if(props){jQuery.extend(this,props);}
+this.timeStamp=src&&src.timeStamp||Date.now();this[jQuery.expando]=true;};jQuery.Event.prototype={constructor:jQuery.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:false,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(e&&!this.isSimulated){e.preventDefault();}},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopPropagation();}},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&!this.isSimulated){e.stopImmediatePropagation();}
+this.stopPropagation();}};jQuery.each({altKey:true,bubbles:true,cancelable:true,changedTouches:true,ctrlKey:true,detail:true,eventPhase:true,metaKey:true,pageX:true,pageY:true,shiftKey:true,view:true,"char":true,code:true,charCode:true,key:true,keyCode:true,button:true,buttons:true,clientX:true,clientY:true,offsetX:true,offsetY:true,pointerId:true,pointerType:true,screenX:true,screenY:true,targetTouches:true,toElement:true,touches:true,which:function(event){var button=event.button;if(event.which==null&&rkeyEvent.test(event.type)){return event.charCode!=null?event.charCode:event.keyCode;}
+if(!event.which&&button!==undefined&&rmouseEvent.test(event.type)){if(button&1){return 1;}
+if(button&2){return 3;}
+if(button&4){return 2;}
+return 0;}
+return event.which;}},jQuery.event.addProp);jQuery.each({focus:"focusin",blur:"focusout"},function(type,delegateType){jQuery.event.special[type]={setup:function(){leverageNative(this,type,expectSync);return false;},trigger:function(){leverageNative(this,type);return true;},delegateType:delegateType};});jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;if(!related||(related!==target&&!jQuery.contains(target,related))){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix;}
+return ret;}};});jQuery.fn.extend({on:function(types,selector,data,fn){return on(this,types,selector,data,fn);},one:function(types,selector,data,fn){return on(this,types,selector,data,fn,1);},off:function(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){handleObj=types.handleObj;jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this;}
+if(typeof types==="object"){for(type in types){this.off(type,selector,types[type]);}
+return this;}
+if(selector===false||typeof selector==="function"){fn=selector;selector=undefined;}
+if(fn===false){fn=returnFalse;}
+return this.each(function(){jQuery.event.remove(this,types,fn,selector);});}});var
+rnoInnerhtml=/<script|<style|<link/i,rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rcleanScript=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function manipulationTarget(elem,content){if(nodeName(elem,"table")&&nodeName(content.nodeType!==11?content:content.firstChild,"tr")){return jQuery(elem).children("tbody")[0]||elem;}
+return elem;}
+function disableScript(elem){elem.type=(elem.getAttribute("type")!==null)+"/"+elem.type;return elem;}
+function restoreScript(elem){if((elem.type||"").slice(0,5)==="true/"){elem.type=elem.type.slice(5);}else{elem.removeAttribute("type");}
+return elem;}
+function cloneCopyEvent(src,dest){var i,l,type,pdataOld,udataOld,udataCur,events;if(dest.nodeType!==1){return;}
+if(dataPriv.hasData(src)){pdataOld=dataPriv.get(src);events=pdataOld.events;if(events){dataPriv.remove(dest,"handle events");for(type in events){for(i=0,l=events[type].length;i<l;i++){jQuery.event.add(dest,type,events[type][i]);}}}}
+if(dataUser.hasData(src)){udataOld=dataUser.access(src);udataCur=jQuery.extend({},udataOld);dataUser.set(dest,udataCur);}}
+function fixInput(src,dest){var nodeName=dest.nodeName.toLowerCase();if(nodeName==="input"&&rcheckableType.test(src.type)){dest.checked=src.checked;}else if(nodeName==="input"||nodeName==="textarea"){dest.defaultValue=src.defaultValue;}}
+function domManip(collection,args,callback,ignored){args=flat(args);var fragment,first,scripts,hasScripts,node,doc,i=0,l=collection.length,iNoClone=l-1,value=args[0],valueIsFunction=isFunction(value);if(valueIsFunction||(l>1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value))){return collection.each(function(index){var self=collection.eq(index);if(valueIsFunction){args[0]=value.call(this,index,self.html());}
+domManip(self,args,callback,ignored);});}
+if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first;}
+if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i<l;i++){node=fragment;if(i!==iNoClone){node=jQuery.clone(node,true,true);if(hasScripts){jQuery.merge(scripts,getAll(node,"script"));}}
+callback.call(collection[i],node,i);}
+if(hasScripts){doc=scripts[scripts.length-1].ownerDocument;jQuery.map(scripts,restoreScript);for(i=0;i<hasScripts;i++){node=scripts[i];if(rscriptType.test(node.type||"")&&!dataPriv.access(node,"globalEval")&&jQuery.contains(doc,node)){if(node.src&&(node.type||"").toLowerCase()!=="module"){if(jQuery._evalUrl&&!node.noModule){jQuery._evalUrl(node.src,{nonce:node.nonce||node.getAttribute("nonce")},doc);}}else{DOMEval(node.textContent.replace(rcleanScript,""),node,doc);}}}}}}
+return collection;}
+function remove(elem,selector,keepData){var node,nodes=selector?jQuery.filter(selector,elem):elem,i=0;for(;(node=nodes[i])!=null;i++){if(!keepData&&node.nodeType===1){jQuery.cleanData(getAll(node));}
+if(node.parentNode){if(keepData&&isAttached(node)){setGlobalEval(getAll(node,"script"));}
+node.parentNode.removeChild(node);}}
+return elem;}
+jQuery.extend({htmlPrefilter:function(html){return html;},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=isAttached(elem);if(!support.noCloneChecked&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0,l=srcElements.length;i<l;i++){fixInput(srcElements[i],destElements[i]);}}
+if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0,l=srcElements.length;i<l;i++){cloneCopyEvent(srcElements[i],destElements[i]);}}else{cloneCopyEvent(elem,clone);}}
+destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"));}
+return clone;},cleanData:function(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem=elems[i])!==undefined;i++){if(acceptData(elem)){if((data=elem[dataPriv.expando])){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type);}else{jQuery.removeEvent(elem,type,data.handle);}}}
+elem[dataPriv.expando]=undefined;}
+if(elem[dataUser.expando]){elem[dataUser.expando]=undefined;}}}}});jQuery.fn.extend({detach:function(selector){return remove(this,selector,true);},remove:function(selector){return remove(this,selector);},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=value;}});},null,value,arguments.length);},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem);}});},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild);}});},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this);}});},after:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling);}});},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.textContent="";}}
+return this;},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents);});},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined&&elem.nodeType===1){return elem.innerHTML;}
+if(typeof value==="string"&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i<l;i++){elem=this[i]||{};if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.innerHTML=value;}}
+elem=0;}catch(e){}}
+if(elem){this.empty().append(value);}},null,value,arguments.length);},replaceWith:function(){var ignored=[];return domManip(this,arguments,function(elem){var parent=this.parentNode;if(jQuery.inArray(this,ignored)<0){jQuery.cleanData(getAll(this));if(parent){parent.replaceChild(elem,this);}}},ignored);}});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var elems,ret=[],insert=jQuery(selector),last=insert.length-1,i=0;for(;i<=last;i++){elems=i===last?this:this.clone(true);jQuery(insert[i])[original](elems);push.apply(ret,elems.get());}
+return this.pushStack(ret);};});var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var getStyles=function(elem){var view=elem.ownerDocument.defaultView;if(!view||!view.opener){view=window;}
+return view.getComputedStyle(elem);};var swap=function(elem,options,callback){var ret,name,old={};for(name in options){old[name]=elem.style[name];elem.style[name]=options[name];}
+ret=callback.call(elem);for(name in options){elem.style[name]=old[name];}
+return ret;};var rboxStyle=new RegExp(cssExpand.join("|"),"i");(function(){function computeStyleTests(){if(!div){return;}
+container.style.cssText="position:absolute;left:-11111px;width:60px;"+
+"margin-top:1px;padding:0;border:0";div.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;"+
+"margin:auto;border:1px;padding:1px;"+
+"width:60%;top:1%";documentElement.appendChild(container).appendChild(div);var divStyle=window.getComputedStyle(div);pixelPositionVal=divStyle.top!=="1%";reliableMarginLeftVal=roundPixelMeasures(divStyle.marginLeft)===12;div.style.right="60%";pixelBoxStylesVal=roundPixelMeasures(divStyle.right)===36;boxSizingReliableVal=roundPixelMeasures(divStyle.width)===36;div.style.position="absolute";scrollboxSizeVal=roundPixelMeasures(div.offsetWidth/3)===12;documentElement.removeChild(container);div=null;}
+function roundPixelMeasures(measure){return Math.round(parseFloat(measure));}
+var pixelPositionVal,boxSizingReliableVal,scrollboxSizeVal,pixelBoxStylesVal,reliableTrDimensionsVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");if(!div.style){return;}
+div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";jQuery.extend(support,{boxSizingReliable:function(){computeStyleTests();return boxSizingReliableVal;},pixelBoxStyles:function(){computeStyleTests();return pixelBoxStylesVal;},pixelPosition:function(){computeStyleTests();return pixelPositionVal;},reliableMarginLeft:function(){computeStyleTests();return reliableMarginLeftVal;},scrollboxSize:function(){computeStyleTests();return scrollboxSizeVal;},reliableTrDimensions:function(){var table,tr,trChild,trStyle;if(reliableTrDimensionsVal==null){table=document.createElement("table");tr=document.createElement("tr");trChild=document.createElement("div");table.style.cssText="position:absolute;left:-11111px";tr.style.height="1px";trChild.style.height="9px";documentElement.appendChild(table).appendChild(tr).appendChild(trChild);trStyle=window.getComputedStyle(tr);reliableTrDimensionsVal=parseInt(trStyle.height)>3;documentElement.removeChild(table);}
+return reliableTrDimensionsVal;}});})();function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);if(computed){ret=computed.getPropertyValue(name)||computed[name];if(ret===""&&!isAttached(elem)){ret=jQuery.style(elem,name);}
+if(!support.pixelBoxStyles()&&rnumnonpx.test(ret)&&rboxStyle.test(name)){width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth;}}
+return ret!==undefined?ret+"":ret;}
+function addGetHookIf(conditionFn,hookFn){return{get:function(){if(conditionFn()){delete this.get;return;}
+return(this.get=hookFn).apply(this,arguments);}};}
+var cssPrefixes=["Webkit","Moz","ms"],emptyStyle=document.createElement("div").style,vendorProps={};function vendorPropName(name){var capName=name[0].toUpperCase()+name.slice(1),i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in emptyStyle){return name;}}}
+function finalPropName(name){var final=jQuery.cssProps[name]||vendorProps[name];if(final){return final;}
+if(name in emptyStyle){return name;}
+return vendorProps[name]=vendorPropName(name)||name;}
+var
+rdisplayswap=/^(none|table(?!-c[ea]).+)/,rcustomProp=/^--/,cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"};function setPositiveNumber(_elem,value,subtract){var matches=rcssNum.exec(value);return matches?Math.max(0,matches[2]-(subtract||0))+(matches[3]||"px"):value;}
+function boxModelAdjustment(elem,dimension,box,isBorderBox,styles,computedVal){var i=dimension==="width"?1:0,extra=0,delta=0;if(box===(isBorderBox?"border":"content")){return 0;}
+for(;i<4;i+=2){if(box==="margin"){delta+=jQuery.css(elem,box+cssExpand[i],true,styles);}
+if(!isBorderBox){delta+=jQuery.css(elem,"padding"+cssExpand[i],true,styles);if(box!=="padding"){delta+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}else{extra+=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}}else{if(box==="content"){delta-=jQuery.css(elem,"padding"+cssExpand[i],true,styles);}
+if(box!=="margin"){delta-=jQuery.css(elem,"border"+cssExpand[i]+"Width",true,styles);}}}
+if(!isBorderBox&&computedVal>=0){delta+=Math.max(0,Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-
+computedVal-
+delta-
+extra-
+0.5))||0;}
+return delta;}
+function getWidthOrHeight(elem,dimension,extra){var styles=getStyles(elem),boxSizingNeeded=!support.boxSizingReliable()||extra,isBorderBox=boxSizingNeeded&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",valueIsBorderBox=isBorderBox,val=curCSS(elem,dimension,styles),offsetProp="offset"+dimension[0].toUpperCase()+dimension.slice(1);if(rnumnonpx.test(val)){if(!extra){return val;}
+val="auto";}
+if((!support.boxSizingReliable()&&isBorderBox||!support.reliableTrDimensions()&&nodeName(elem,"tr")||val==="auto"||!parseFloat(val)&&jQuery.css(elem,"display",false,styles)==="inline")&&elem.getClientRects().length){isBorderBox=jQuery.css(elem,"boxSizing",false,styles)==="border-box";valueIsBorderBox=offsetProp in elem;if(valueIsBorderBox){val=elem[offsetProp];}}
+val=parseFloat(val)||0;return(val+
+boxModelAdjustment(elem,dimension,extra||(isBorderBox?"border":"content"),valueIsBorderBox,styles,val))+"px";}
+jQuery.extend({cssHooks:{opacity:{get:function(elem,computed){if(computed){var ret=curCSS(elem,"opacity");return ret===""?"1":ret;}}}},cssNumber:{"animationIterationCount":true,"columnCount":true,"fillOpacity":true,"flexGrow":true,"flexShrink":true,"fontWeight":true,"gridArea":true,"gridColumn":true,"gridColumnEnd":true,"gridColumnStart":true,"gridRow":true,"gridRowEnd":true,"gridRowStart":true,"lineHeight":true,"opacity":true,"order":true,"orphans":true,"widows":true,"zIndex":true,"zoom":true},cssProps:{},style:function(elem,name,value,extra){if(!elem||elem.nodeType===3||elem.nodeType===8||!elem.style){return;}
+var ret,type,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name),style=elem.style;if(!isCustomProp){name=finalPropName(origName);}
+hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(value!==undefined){type=typeof value;if(type==="string"&&(ret=rcssNum.exec(value))&&ret[1]){value=adjustCSS(elem,name,ret);type="number";}
+if(value==null||value!==value){return;}
+if(type==="number"&&!isCustomProp){value+=ret&&ret[3]||(jQuery.cssNumber[origName]?"":"px");}
+if(!support.clearCloneStyle&&value===""&&name.indexOf("background")===0){style[name]="inherit";}
+if(!hooks||!("set"in hooks)||(value=hooks.set(elem,value,extra))!==undefined){if(isCustomProp){style.setProperty(name,value);}else{style[name]=value;}}}else{if(hooks&&"get"in hooks&&(ret=hooks.get(elem,false,extra))!==undefined){return ret;}
+return style[name];}},css:function(elem,name,extra,styles){var val,num,hooks,origName=camelCase(name),isCustomProp=rcustomProp.test(name);if(!isCustomProp){name=finalPropName(origName);}
+hooks=jQuery.cssHooks[name]||jQuery.cssHooks[origName];if(hooks&&"get"in hooks){val=hooks.get(elem,true,extra);}
+if(val===undefined){val=curCSS(elem,name,styles);}
+if(val==="normal"&&name in cssNormalTransform){val=cssNormalTransform[name];}
+if(extra===""||extra){num=parseFloat(val);return extra===true||isFinite(num)?num||0:val;}
+return val;}});jQuery.each(["height","width"],function(_i,dimension){jQuery.cssHooks[dimension]={get:function(elem,computed,extra){if(computed){return rdisplayswap.test(jQuery.css(elem,"display"))&&(!elem.getClientRects().length||!elem.getBoundingClientRect().width)?swap(elem,cssShow,function(){return getWidthOrHeight(elem,dimension,extra);}):getWidthOrHeight(elem,dimension,extra);}},set:function(elem,value,extra){var matches,styles=getStyles(elem),scrollboxSizeBuggy=!support.scrollboxSize()&&styles.position==="absolute",boxSizingNeeded=scrollboxSizeBuggy||extra,isBorderBox=boxSizingNeeded&&jQuery.css(elem,"boxSizing",false,styles)==="border-box",subtract=extra?boxModelAdjustment(elem,dimension,extra,isBorderBox,styles):0;if(isBorderBox&&scrollboxSizeBuggy){subtract-=Math.ceil(elem["offset"+dimension[0].toUpperCase()+dimension.slice(1)]-
+parseFloat(styles[dimension])-
+boxModelAdjustment(elem,dimension,"border",false,styles)-
+0.5);}
+if(subtract&&(matches=rcssNum.exec(value))&&(matches[3]||"px")!=="px"){elem.style[dimension]=value;value=jQuery.css(elem,dimension);}
+return setPositiveNumber(elem,value,subtract);}};});jQuery.cssHooks.marginLeft=addGetHookIf(support.reliableMarginLeft,function(elem,computed){if(computed){return(parseFloat(curCSS(elem,"marginLeft"))||elem.getBoundingClientRect().left-
+swap(elem,{marginLeft:0},function(){return elem.getBoundingClientRect().left;}))+"px";}});jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function(value){var i=0,expanded={},parts=typeof value==="string"?value.split(" "):[value];for(;i<4;i++){expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];}
+return expanded;}};if(prefix!=="margin"){jQuery.cssHooks[prefix+suffix].set=setPositiveNumber;}});jQuery.fn.extend({css:function(name,value){return access(this,function(elem,name,value){var styles,len,map={},i=0;if(Array.isArray(name)){styles=getStyles(elem);len=name.length;for(;i<len;i++){map[name[i]]=jQuery.css(elem,name[i],false,styles);}
+return map;}
+return value!==undefined?jQuery.style(elem,name,value):jQuery.css(elem,name);},name,value,arguments.length>1);}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing);}
+jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px");},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this);},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration);}else{this.pos=eased=percent;}
+this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this);}
+if(hooks&&hooks.set){hooks.set(this);}else{Tween.propHooks._default.set(this);}
+return this;}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop];}
+result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result;},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween);}else if(tween.elem.nodeType===1&&(jQuery.cssHooks[tween.prop]||tween.elem.style[finalPropName(tween.prop)]!=null)){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit);}else{tween.elem[tween.prop]=tween.now;}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now;}}};jQuery.easing={linear:function(p){return p;},swing:function(p){return 0.5-Math.cos(p*Math.PI)/2;},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var
+fxNow,inProgress,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function schedule(){if(inProgress){if(document.hidden===false&&window.requestAnimationFrame){window.requestAnimationFrame(schedule);}else{window.setTimeout(schedule,jQuery.fx.interval);}
+jQuery.fx.tick();}}
+function createFxNow(){window.setTimeout(function(){fxNow=undefined;});return(fxNow=Date.now());}
+function genFx(type,includeWidth){var which,i=0,attrs={height:type};includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type;}
+if(includeWidth){attrs.opacity=attrs.width=type;}
+return attrs;}
+function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index<length;index++){if((tween=collection[index].call(animation,prop,value))){return tween;}}}
+function defaultPrefilter(elem,props,opts){var prop,value,toggle,hooks,oldfire,propTween,restoreDisplay,display,isBox="width"in props||"height"in props,anim=this,orig={},style=elem.style,hidden=elem.nodeType&&isHiddenWithinTree(elem),dataShow=dataPriv.get(elem,"fxshow");if(!opts.queue){hooks=jQuery._queueHooks(elem,"fx");if(hooks.unqueued==null){hooks.unqueued=0;oldfire=hooks.empty.fire;hooks.empty.fire=function(){if(!hooks.unqueued){oldfire();}};}
+hooks.unqueued++;anim.always(function(){anim.always(function(){hooks.unqueued--;if(!jQuery.queue(elem,"fx").length){hooks.empty.fire();}});});}
+for(prop in props){value=props[prop];if(rfxtypes.test(value)){delete props[prop];toggle=toggle||value==="toggle";if(value===(hidden?"hide":"show")){if(value==="show"&&dataShow&&dataShow[prop]!==undefined){hidden=true;}else{continue;}}
+orig[prop]=dataShow&&dataShow[prop]||jQuery.style(elem,prop);}}
+propTween=!jQuery.isEmptyObject(props);if(!propTween&&jQuery.isEmptyObject(orig)){return;}
+if(isBox&&elem.nodeType===1){opts.overflow=[style.overflow,style.overflowX,style.overflowY];restoreDisplay=dataShow&&dataShow.display;if(restoreDisplay==null){restoreDisplay=dataPriv.get(elem,"display");}
+display=jQuery.css(elem,"display");if(display==="none"){if(restoreDisplay){display=restoreDisplay;}else{showHide([elem],true);restoreDisplay=elem.style.display||restoreDisplay;display=jQuery.css(elem,"display");showHide([elem]);}}
+if(display==="inline"||display==="inline-block"&&restoreDisplay!=null){if(jQuery.css(elem,"float")==="none"){if(!propTween){anim.done(function(){style.display=restoreDisplay;});if(restoreDisplay==null){display=style.display;restoreDisplay=display==="none"?"":display;}}
+style.display="inline-block";}}}
+if(opts.overflow){style.overflow="hidden";anim.always(function(){style.overflow=opts.overflow[0];style.overflowX=opts.overflow[1];style.overflowY=opts.overflow[2];});}
+propTween=false;for(prop in orig){if(!propTween){if(dataShow){if("hidden"in dataShow){hidden=dataShow.hidden;}}else{dataShow=dataPriv.access(elem,"fxshow",{display:restoreDisplay});}
+if(toggle){dataShow.hidden=!hidden;}
+if(hidden){showHide([elem],true);}
+anim.done(function(){if(!hidden){showHide([elem]);}
+dataPriv.remove(elem,"fxshow");for(prop in orig){jQuery.style(elem,prop,orig[prop]);}});}
+propTween=createTween(hidden?dataShow[prop]:0,prop,anim);if(!(prop in dataShow)){dataShow[prop]=propTween.start;if(hidden){propTween.end=propTween.start;propTween.start=0;}}}}
+function propFilter(props,specialEasing){var index,name,easing,value,hooks;for(index in props){name=camelCase(index);easing=specialEasing[name];value=props[index];if(Array.isArray(value)){easing=value[1];value=props[index]=value[0];}
+if(index!==name){props[name]=value;delete props[index];}
+hooks=jQuery.cssHooks[name];if(hooks&&"expand"in hooks){value=hooks.expand(value);delete props[name];for(index in value){if(!(index in props)){props[index]=value[index];specialEasing[index]=easing;}}}else{specialEasing[name]=easing;}}}
+function Animation(elem,properties,options){var result,stopped,index=0,length=Animation.prefilters.length,deferred=jQuery.Deferred().always(function(){delete tick.elem;}),tick=function(){if(stopped){return false;}
+var currentTime=fxNow||createFxNow(),remaining=Math.max(0,animation.startTime+animation.duration-currentTime),temp=remaining/animation.duration||0,percent=1-temp,index=0,length=animation.tweens.length;for(;index<length;index++){animation.tweens[index].run(percent);}
+deferred.notifyWith(elem,[animation,percent,remaining]);if(percent<1&&length){return remaining;}
+if(!length){deferred.notifyWith(elem,[animation,1,0]);}
+deferred.resolveWith(elem,[animation]);return false;},animation=deferred.promise({elem:elem,props:jQuery.extend({},properties),opts:jQuery.extend(true,{specialEasing:{},easing:jQuery.easing._default},options),originalProperties:properties,originalOptions:options,startTime:fxNow||createFxNow(),duration:options.duration,tweens:[],createTween:function(prop,end){var tween=jQuery.Tween(elem,animation.opts,prop,end,animation.opts.specialEasing[prop]||animation.opts.easing);animation.tweens.push(tween);return tween;},stop:function(gotoEnd){var index=0,length=gotoEnd?animation.tweens.length:0;if(stopped){return this;}
+stopped=true;for(;index<length;index++){animation.tweens[index].run(1);}
+if(gotoEnd){deferred.notifyWith(elem,[animation,1,0]);deferred.resolveWith(elem,[animation,gotoEnd]);}else{deferred.rejectWith(elem,[animation,gotoEnd]);}
+return this;}}),props=animation.props;propFilter(props,animation.opts.specialEasing);for(;index<length;index++){result=Animation.prefilters[index].call(animation,elem,props,animation.opts);if(result){if(isFunction(result.stop)){jQuery._queueHooks(animation.elem,animation.opts.queue).stop=result.stop.bind(result);}
+return result;}}
+jQuery.map(props,createTween,animation);if(isFunction(animation.opts.start)){animation.opts.start.call(elem,animation);}
+animation.progress(animation.opts.progress).done(animation.opts.done,animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);jQuery.fx.timer(jQuery.extend(tick,{elem:elem,anim:animation,queue:animation.opts.queue}));return animation;}
+jQuery.Animation=jQuery.extend(Animation,{tweeners:{"*":[function(prop,value){var tween=this.createTween(prop,value);adjustCSS(tween.elem,prop,rcssNum.exec(value),tween);return tween;}]},tweener:function(props,callback){if(isFunction(props)){callback=props;props=["*"];}else{props=props.match(rnothtmlwhite);}
+var prop,index=0,length=props.length;for(;index<length;index++){prop=props[index];Animation.tweeners[prop]=Animation.tweeners[prop]||[];Animation.tweeners[prop].unshift(callback);}},prefilters:[defaultPrefilter],prefilter:function(callback,prepend){if(prepend){Animation.prefilters.unshift(callback);}else{Animation.prefilters.push(callback);}}});jQuery.speed=function(speed,easing,fn){var opt=speed&&typeof speed==="object"?jQuery.extend({},speed):{complete:fn||!fn&&easing||isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&!isFunction(easing)&&easing};if(jQuery.fx.off){opt.duration=0;}else{if(typeof opt.duration!=="number"){if(opt.duration in jQuery.fx.speeds){opt.duration=jQuery.fx.speeds[opt.duration];}else{opt.duration=jQuery.fx.speeds._default;}}}
+if(opt.queue==null||opt.queue===true){opt.queue="fx";}
+opt.old=opt.complete;opt.complete=function(){if(isFunction(opt.old)){opt.old.call(this);}
+if(opt.queue){jQuery.dequeue(this,opt.queue);}};return opt;};jQuery.fn.extend({fadeTo:function(speed,to,easing,callback){return this.filter(isHiddenWithinTree).css("opacity",0).show().end().animate({opacity:to},speed,easing,callback);},animate:function(prop,speed,easing,callback){var empty=jQuery.isEmptyObject(prop),optall=jQuery.speed(speed,easing,callback),doAnimation=function(){var anim=Animation(this,jQuery.extend({},prop),optall);if(empty||dataPriv.get(this,"finish")){anim.stop(true);}};doAnimation.finish=doAnimation;return empty||optall.queue===false?this.each(doAnimation):this.queue(optall.queue,doAnimation);},stop:function(type,clearQueue,gotoEnd){var stopQueue=function(hooks){var stop=hooks.stop;delete hooks.stop;stop(gotoEnd);};if(typeof type!=="string"){gotoEnd=clearQueue;clearQueue=type;type=undefined;}
+if(clearQueue){this.queue(type||"fx",[]);}
+return this.each(function(){var dequeue=true,index=type!=null&&type+"queueHooks",timers=jQuery.timers,data=dataPriv.get(this);if(index){if(data[index]&&data[index].stop){stopQueue(data[index]);}}else{for(index in data){if(data[index]&&data[index].stop&&rrun.test(index)){stopQueue(data[index]);}}}
+for(index=timers.length;index--;){if(timers[index].elem===this&&(type==null||timers[index].queue===type)){timers[index].anim.stop(gotoEnd);dequeue=false;timers.splice(index,1);}}
+if(dequeue||!gotoEnd){jQuery.dequeue(this,type);}});},finish:function(type){if(type!==false){type=type||"fx";}
+return this.each(function(){var index,data=dataPriv.get(this),queue=data[type+"queue"],hooks=data[type+"queueHooks"],timers=jQuery.timers,length=queue?queue.length:0;data.finish=true;jQuery.queue(this,type,[]);if(hooks&&hooks.stop){hooks.stop.call(this,true);}
+for(index=timers.length;index--;){if(timers[index].elem===this&&timers[index].queue===type){timers[index].anim.stop(true);timers.splice(index,1);}}
+for(index=0;index<length;index++){if(queue[index]&&queue[index].finish){queue[index].finish.call(this);}}
+delete data.finish;});}});jQuery.each(["toggle","show","hide"],function(_i,name){var cssFn=jQuery.fn[name];jQuery.fn[name]=function(speed,easing,callback){return speed==null||typeof speed==="boolean"?cssFn.apply(this,arguments):this.animate(genFx(name,true),speed,easing,callback);};});jQuery.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback);};});jQuery.timers=[];jQuery.fx.tick=function(){var timer,i=0,timers=jQuery.timers;fxNow=Date.now();for(;i<timers.length;i++){timer=timers[i];if(!timer()&&timers[i]===timer){timers.splice(i--,1);}}
+if(!timers.length){jQuery.fx.stop();}
+fxNow=undefined;};jQuery.fx.timer=function(timer){jQuery.timers.push(timer);jQuery.fx.start();};jQuery.fx.interval=13;jQuery.fx.start=function(){if(inProgress){return;}
+inProgress=true;schedule();};jQuery.fx.stop=function(){inProgress=null;};jQuery.fx.speeds={slow:600,fast:200,_default:400};jQuery.fn.delay=function(time,type){time=jQuery.fx?jQuery.fx.speeds[time]||time:time;type=type||"fx";return this.queue(type,function(next,hooks){var timeout=window.setTimeout(next,time);hooks.stop=function(){window.clearTimeout(timeout);};});};(function(){var input=document.createElement("input"),select=document.createElement("select"),opt=select.appendChild(document.createElement("option"));input.type="checkbox";support.checkOn=input.value!=="";support.optSelected=opt.selected;input=document.createElement("input");input.value="t";input.type="radio";support.radioValue=input.value==="t";})();var boolHook,attrHandle=jQuery.expr.attrHandle;jQuery.fn.extend({attr:function(name,value){return access(this,jQuery.attr,name,value,arguments.length>1);},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name);});}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return;}
+if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value);}
+if(nType!==1||!jQuery.isXMLDoc(elem)){hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:undefined);}
+if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return;}
+if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}
+elem.setAttribute(name,value+"");return value;}
+if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret;}
+ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret;},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val;}
+return value;}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&elem.nodeType===1){while((name=attrNames[i++])){elem.removeAttribute(name);}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name);}else{elem.setAttribute(name,name);}
+return name;}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(_i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){handle=attrHandle[lowercaseName];attrHandle[lowercaseName]=ret;ret=getter(elem,name,isXML)!=null?lowercaseName:null;attrHandle[lowercaseName]=handle;}
+return ret;};});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1);},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name];});}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return;}
+if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name];}
+if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret;}
+return(elem[name]=value);}
+if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret;}
+return elem[name];},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");if(tabindex){return parseInt(tabindex,10);}
+if(rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href){return 0;}
+return-1;}}},propFix:{"for":"htmlFor","class":"className"}});if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent&&parent.parentNode){parent.parentNode.selectedIndex;}
+return null;},set:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex;}}}};}
+jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this;});function stripAndCollapse(value){var tokens=value.match(rnothtmlwhite)||[];return tokens.join(" ");}
+function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||"";}
+function classesToArray(value){if(Array.isArray(value)){return value;}
+if(typeof value==="string"){return value.match(rnothtmlwhite)||[];}
+return[];}
+jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)));});}
+classes=classesToArray(value);if(classes.length){while((elem=this[i++])){curValue=getClass(elem);cur=elem.nodeType===1&&(" "+stripAndCollapse(curValue)+" ");if(cur){j=0;while((clazz=classes[j++])){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" ";}}
+finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue);}}}}
+return this;},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)));});}
+if(!arguments.length){return this.attr("class","");}
+classes=classesToArray(value);if(classes.length){while((elem=this[i++])){curValue=getClass(elem);cur=elem.nodeType===1&&(" "+stripAndCollapse(curValue)+" ");if(cur){j=0;while((clazz=classes[j++])){while(cur.indexOf(" "+clazz+" ")>-1){cur=cur.replace(" "+clazz+" "," ");}}
+finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue);}}}}
+return this;},toggleClass:function(value,stateVal){var type=typeof value,isValidValue=type==="string"||Array.isArray(value);if(typeof stateVal==="boolean"&&isValidValue){return stateVal?this.addClass(value):this.removeClass(value);}
+if(isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal);});}
+return this.each(function(){var className,i,self,classNames;if(isValidValue){i=0;self=jQuery(this);classNames=classesToArray(value);while((className=classNames[i++])){if(self.hasClass(className)){self.removeClass(className);}else{self.addClass(className);}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){dataPriv.set(this,"__className__",className);}
+if(this.setAttribute){this.setAttribute("class",className||value===false?"":dataPriv.get(this,"__className__")||"");}}});},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while((elem=this[i++])){if(elem.nodeType===1&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1){return true;}}
+return false;}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,valueIsFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret;}
+ret=elem.value;if(typeof ret==="string"){return ret.replace(rreturn,"");}
+return ret==null?"":ret;}
+return;}
+valueIsFunction=isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return;}
+if(valueIsFunction){val=value.call(this,i,jQuery(this).val());}else{val=value;}
+if(val==null){val="";}else if(typeof val==="number"){val+="";}else if(Array.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+"";});}
+hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val;}});}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:stripAndCollapse(jQuery.text(elem));}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one",values=one?null:[],max=one?index+1:options.length;if(index<0){i=max;}else{i=one?index:0;}
+for(;i<max;i++){option=options[i];if((option.selected||i===index)&&!option.disabled&&(!option.parentNode.disabled||!nodeName(option.parentNode,"optgroup"))){value=jQuery(option).val();if(one){return value;}
+values.push(value);}}
+return values;},set:function(elem,value){var optionSet,option,options=elem.options,values=jQuery.makeArray(value),i=options.length;while(i--){option=options[i];if(option.selected=jQuery.inArray(jQuery.valHooks.option.get(option),values)>-1){optionSet=true;}}
+if(!optionSet){elem.selectedIndex=-1;}
+return values;}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(Array.isArray(value)){return(elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1);}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value;};}});support.focusin="onfocusin"in window;var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,stopPropagationCallback=function(e){e.stopPropagation();};jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,lastElement,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=lastElement=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return;}
+if(rfocusMorph.test(type+jQuery.event.triggered)){return;}
+if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort();}
+ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem;}
+data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return;}
+if(!onlyHandlers&&!special.noBubble&&!isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode;}
+for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur;}
+if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window);}}
+i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){lastElement=cur;event.type=i>1?bubbleType:special.bindType||type;handle=(dataPriv.get(cur,"events")||Object.create(null))[event.type]&&dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data);}
+handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault();}}}
+event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&isFunction(elem[type])&&!isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null;}
+jQuery.event.triggered=type;if(event.isPropagationStopped()){lastElement.addEventListener(type,stopPropagationCallback);}
+elem[type]();if(event.isPropagationStopped()){lastElement.removeEventListener(type,stopPropagationCallback);}
+jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp;}}}}
+return event.result;},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event(),event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem);}});jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this);});},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true);}}});if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event));};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this.document||this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true);}
+dataPriv.access(doc,fix,(attaches||0)+1);},teardown:function(){var doc=this.ownerDocument||this.document||this,attaches=dataPriv.access(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix);}else{dataPriv.access(doc,fix,attaches);}}};});}
+var location=window.location;var nonce={guid:Date.now()};var rquery=(/\?/);jQuery.parseXML=function(data){var xml;if(!data||typeof data!=="string"){return null;}
+try{xml=(new window.DOMParser()).parseFromString(data,"text/xml");}catch(e){xml=undefined;}
+if(!xml||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data);}
+return xml;};var
+rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v);}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add);}});}else if(!traditional&&toType(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add);}}else{add(prefix,obj);}}
+jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+
+encodeURIComponent(value==null?"":value);};if(a==null){return "";}
+if(Array.isArray(a)||(a.jquery&&!jQuery.isPlainObject(a))){jQuery.each(a,function(){add(this.name,this.value);});}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add);}}
+return s.join("&");};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this;}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type));}).map(function(_i,elem){var val=jQuery(this).val();if(val==null){return null;}
+if(Array.isArray(val)){return jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")};});}
+return{name:elem.name,value:val.replace(rCRLF,"\r\n")};}).get();}});var
+r20=/%20/g,rhash=/#.*$/,rantiCache=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/mg,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");originAnchor.href=location.href;function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*";}
+var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(isFunction(func)){while((dataType=dataTypes[i++])){if(dataType[0]==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func);}else{(structure[dataType]=structure[dataType]||[]).push(func);}}}};}
+function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=(structure===transports);function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false;}else if(seekingTransport){return!(selected=dataTypeOrTransport);}});return selected;}
+return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*");}
+function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:(deep||(deep={})))[key]=src[key];}}
+if(deep){jQuery.extend(true,target,deep);}
+return target;}
+function ajaxHandleResponses(s,jqXHR,responses){var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type");}}
+if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break;}}}
+if(dataTypes[0]in responses){finalDataType=dataTypes[0];}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break;}
+if(!firstDataType){firstDataType=type;}}
+finalDataType=finalDataType||firstDataType;}
+if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType);}
+return responses[finalDataType];}}
+function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv];}}
+current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response;}
+if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType);}
+prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev;}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2];}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1]);}
+break;}}}}
+if(conv!==true){if(conv&&s.throws){response=conv(response);}else{try{response=conv(response);}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current};}}}}}}
+return{state:"success",data:response};}
+jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:rlocalProtocol.test(location.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target);},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined;}
+options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders){responseHeaders={};while((match=rheaders.exec(responseHeadersString))){responseHeaders[match[1].toLowerCase()+" "]=(responseHeaders[match[1].toLowerCase()+" "]||[]).concat(match[2]);}}
+match=responseHeaders[key.toLowerCase()+" "];}
+return match==null?null:match.join(", ");},getAllResponseHeaders:function(){return completed?responseHeadersString:null;},setRequestHeader:function(name,value){if(completed==null){name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name;requestHeaders[name]=value;}
+return this;},overrideMimeType:function(type){if(completed==null){s.mimeType=type;}
+return this;},statusCode:function(map){var code;if(map){if(completed){jqXHR.always(map[jqXHR.status]);}else{for(code in map){statusCode[code]=[statusCode[code],map[code]];}}}
+return this;},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText);}
+done(0,finalText);return this;}};deferred.promise(jqXHR);s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""];if(s.crossDomain==null){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url;urlAnchor.href=urlAnchor.href;s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!==urlAnchor.protocol+"//"+urlAnchor.host;}catch(e){s.crossDomain=true;}}
+if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional);}
+inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(completed){return jqXHR;}
+fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart");}
+s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url.replace(rhash,"");if(!s.hasContent){uncached=s.url.slice(cacheURL.length);if(s.data&&(s.processData||typeof s.data==="string")){cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data;}
+if(s.cache===false){cacheURL=cacheURL.replace(rantiCache,"$1");uncached=(rquery.test(cacheURL)?"&":"?")+"_="+(nonce.guid++)+
+uncached;}
+s.url=cacheURL+uncached;}else if(s.data&&s.processData&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0){s.data=s.data.replace(r20,"+");}
+if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL]);}
+if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL]);}}
+if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType);}
+jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+
+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i]);}
+if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||completed)){return jqXHR.abort();}
+strAbort="abort";completeDeferred.add(s.complete);jqXHR.done(s.success);jqXHR.fail(s.error);transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport");}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s]);}
+if(completed){return jqXHR;}
+if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout");},s.timeout);}
+try{completed=false;transport.send(requestHeaders,done);}catch(e){if(completed){throw e;}
+done(-1,e);}}
+function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(completed){return;}
+completed=true;if(timeoutTimer){window.clearTimeout(timeoutTimer);}
+transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses);}
+if(!isSuccess&&jQuery.inArray("script",s.dataTypes)>-1){s.converters["text script"]=function(){};}
+response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified;}
+modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified;}}
+if(status===204||s.type==="HEAD"){statusText="nocontent";}else if(status===304){statusText="notmodified";}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error;}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0;}}}
+jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR]);}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error]);}
+jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error]);}
+completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!(--jQuery.active)){jQuery.event.trigger("ajaxStop");}}}
+return jqXHR;},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script");}});jQuery.each(["get","post"],function(_i,method){jQuery[method]=function(url,data,callback,type){if(isFunction(data)){type=type||callback;callback=data;data=undefined;}
+return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url));};});jQuery.ajaxPrefilter(function(s){var i;for(i in s.headers){if(i.toLowerCase()==="content-type"){s.contentType=s.headers[i]||"";}}});jQuery._evalUrl=function(url,options,doc){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:true,async:false,global:false,converters:{"text script":function(){}},dataFilter:function(response){jQuery.globalEval(response,options,doc);}});};jQuery.fn.extend({wrapAll:function(html){var wrap;if(this[0]){if(isFunction(html)){html=html.call(this[0]);}
+wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0]);}
+wrap.map(function(){var elem=this;while(elem.firstElementChild){elem=elem.firstElementChild;}
+return elem;}).append(this);}
+return this;},wrapInner:function(html){if(isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i));});}
+return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html);}else{self.append(html);}});},wrap:function(html){var htmlIsFunction=isFunction(html);return this.each(function(i){jQuery(this).wrapAll(htmlIsFunction?html.call(this,i):html);});},unwrap:function(selector){this.parent(selector).not("body").each(function(){jQuery(this).replaceWith(this.childNodes);});return this;}});jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem);};jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length);};jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest();}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&("withCredentials"in xhrSupported);support.ajax=xhrSupported=!!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain){return{send:function(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i];}}
+if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType);}
+if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest";}
+for(i in headers){xhr.setRequestHeader(i,headers[i]);}
+callback=function(type){return function(){if(callback){callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.ontimeout=xhr.onreadystatechange=null;if(type==="abort"){xhr.abort();}else if(type==="error"){if(typeof xhr.status!=="number"){complete(0,"error");}else{complete(xhr.status,xhr.statusText);}}else{complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,(xhr.responseType||"text")!=="text"||typeof xhr.responseText!=="string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders());}}};};xhr.onload=callback();errorCallback=xhr.onerror=xhr.ontimeout=callback("error");if(xhr.onabort!==undefined){xhr.onabort=errorCallback;}else{xhr.onreadystatechange=function(){if(xhr.readyState===4){window.setTimeout(function(){if(callback){errorCallback();}});}};}
+callback=callback("abort");try{xhr.send(options.hasContent&&options.data||null);}catch(e){if(callback){throw e;}}},abort:function(){if(callback){callback();}}};}});jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false;}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+
+"application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text;}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false;}
+if(s.crossDomain){s.type="GET";}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain||s.scriptAttrs){var script,callback;return{send:function(_,complete){script=jQuery("<script>").attr(s.scriptAttrs||{}).prop({charset:s.scriptCharset,src:s.url}).on("load error",callback=function(evt){script.remove();callback=null;if(evt){complete(evt.type==="error"?404:200,evt.type);}});document.head.appendChild(script[0]);},abort:function(){if(callback){callback();}}};}});var oldCallbacks=[],rjsonp=/(=)\?(?=&|$)|\?\?/;jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var callback=oldCallbacks.pop()||(jQuery.expando+"_"+(nonce.guid++));this[callback]=true;return callback;}});jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var callbackName,overwritten,responseContainer,jsonProp=s.jsonp!==false&&(rjsonp.test(s.url)?"url":typeof s.data==="string"&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&rjsonp.test(s.data)&&"data");if(jsonProp||s.dataTypes[0]==="jsonp"){callbackName=s.jsonpCallback=isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback;if(jsonProp){s[jsonProp]=s[jsonProp].replace(rjsonp,"$1"+callbackName);}else if(s.jsonp!==false){s.url+=(rquery.test(s.url)?"&":"?")+s.jsonp+"="+callbackName;}
+s.converters["script json"]=function(){if(!responseContainer){jQuery.error(callbackName+" was not called");}
+return responseContainer[0];};s.dataTypes[0]="json";overwritten=window[callbackName];window[callbackName]=function(){responseContainer=arguments;};jqXHR.always(function(){if(overwritten===undefined){jQuery(window).removeProp(callbackName);}else{window[callbackName]=overwritten;}
+if(s[callbackName]){s.jsonpCallback=originalSettings.jsonpCallback;oldCallbacks.push(callbackName);}
+if(responseContainer&&isFunction(overwritten)){overwritten(responseContainer[0]);}
+responseContainer=overwritten=undefined;});return "script";}});support.createHTMLDocument=(function(){var body=document.implementation.createHTMLDocument("").body;body.innerHTML="<form></form><form></form>";return body.childNodes.length===2;})();jQuery.parseHTML=function(data,context,keepScripts){if(typeof data!=="string"){return[];}
+if(typeof context==="boolean"){keepScripts=context;context=false;}
+var base,parsed,scripts;if(!context){if(support.createHTMLDocument){context=document.implementation.createHTMLDocument("");base=context.createElement("base");base.href=document.location.href;context.head.appendChild(base);}else{context=document;}}
+parsed=rsingleTag.exec(data);scripts=!keepScripts&&[];if(parsed){return[context.createElement(parsed[1])];}
+parsed=buildFragment([data],context,scripts);if(scripts&&scripts.length){jQuery(scripts).remove();}
+return jQuery.merge([],parsed.childNodes);};jQuery.fn.load=function(url,params,callback){var selector,type,response,self=this,off=url.indexOf(" ");if(off>-1){selector=stripAndCollapse(url.slice(off));url=url.slice(0,off);}
+if(isFunction(params)){callback=params;params=undefined;}else if(params&&typeof params==="object"){type="POST";}
+if(self.length>0){jQuery.ajax({url:url,type:type||"GET",dataType:"html",data:params}).done(function(responseText){response=arguments;self.html(selector?jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector):responseText);}).always(callback&&function(jqXHR,status){self.each(function(){callback.apply(this,response||[jqXHR.responseText,status,jqXHR]);});});}
+return this;};jQuery.expr.pseudos.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem;}).length;};jQuery.offset={setOffset:function(elem,options,i){var curPosition,curLeft,curCSSTop,curTop,curOffset,curCSSLeft,calculatePosition,position=jQuery.css(elem,"position"),curElem=jQuery(elem),props={};if(position==="static"){elem.style.position="relative";}
+curOffset=curElem.offset();curCSSTop=jQuery.css(elem,"top");curCSSLeft=jQuery.css(elem,"left");calculatePosition=(position==="absolute"||position==="fixed")&&(curCSSTop+curCSSLeft).indexOf("auto")>-1;if(calculatePosition){curPosition=curElem.position();curTop=curPosition.top;curLeft=curPosition.left;}else{curTop=parseFloat(curCSSTop)||0;curLeft=parseFloat(curCSSLeft)||0;}
+if(isFunction(options)){options=options.call(elem,i,jQuery.extend({},curOffset));}
+if(options.top!=null){props.top=(options.top-curOffset.top)+curTop;}
+if(options.left!=null){props.left=(options.left-curOffset.left)+curLeft;}
+if("using"in options){options.using.call(elem,props);}else{if(typeof props.top==="number"){props.top+="px";}
+if(typeof props.left==="number"){props.left+="px";}
+curElem.css(props);}}};jQuery.fn.extend({offset:function(options){if(arguments.length){return options===undefined?this:this.each(function(i){jQuery.offset.setOffset(this,options,i);});}
+var rect,win,elem=this[0];if(!elem){return;}
+if(!elem.getClientRects().length){return{top:0,left:0};}
+rect=elem.getBoundingClientRect();win=elem.ownerDocument.defaultView;return{top:rect.top+win.pageYOffset,left:rect.left+win.pageXOffset};},position:function(){if(!this[0]){return;}
+var offsetParent,offset,doc,elem=this[0],parentOffset={top:0,left:0};if(jQuery.css(elem,"position")==="fixed"){offset=elem.getBoundingClientRect();}else{offset=this.offset();doc=elem.ownerDocument;offsetParent=elem.offsetParent||doc.documentElement;while(offsetParent&&(offsetParent===doc.body||offsetParent===doc.documentElement)&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.parentNode;}
+if(offsetParent&&offsetParent!==elem&&offsetParent.nodeType===1){parentOffset=jQuery(offsetParent).offset();parentOffset.top+=jQuery.css(offsetParent,"borderTopWidth",true);parentOffset.left+=jQuery.css(offsetParent,"borderLeftWidth",true);}}
+return{top:offset.top-parentOffset.top-jQuery.css(elem,"marginTop",true),left:offset.left-parentOffset.left-jQuery.css(elem,"marginLeft",true)};},offsetParent:function(){return this.map(function(){var offsetParent=this.offsetParent;while(offsetParent&&jQuery.css(offsetParent,"position")==="static"){offsetParent=offsetParent.offsetParent;}
+return offsetParent||documentElement;});}});jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top="pageYOffset"===prop;jQuery.fn[method]=function(val){return access(this,function(elem,method,val){var win;if(isWindow(elem)){win=elem;}else if(elem.nodeType===9){win=elem.defaultView;}
+if(val===undefined){return win?win[prop]:elem[method];}
+if(win){win.scrollTo(!top?val:win.pageXOffset,top?val:win.pageYOffset);}else{elem[method]=val;}},method,val,arguments.length);};});jQuery.each(["top","left"],function(_i,prop){jQuery.cssHooks[prop]=addGetHookIf(support.pixelPosition,function(elem,computed){if(computed){computed=curCSS(elem,prop);return rnumnonpx.test(computed)?jQuery(elem).position()[prop]+"px":computed;}});});jQuery.each({Height:"height",Width:"width"},function(name,type){jQuery.each({padding:"inner"+name,content:type,"":"outer"+name},function(defaultExtra,funcName){jQuery.fn[funcName]=function(margin,value){var chainable=arguments.length&&(defaultExtra||typeof margin!=="boolean"),extra=defaultExtra||(margin===true||value===true?"margin":"border");return access(this,function(elem,type,value){var doc;if(isWindow(elem)){return funcName.indexOf("outer")===0?elem["inner"+name]:elem.document.documentElement["client"+name];}
+if(elem.nodeType===9){doc=elem.documentElement;return Math.max(elem.body["scroll"+name],doc["scroll"+name],elem.body["offset"+name],doc["offset"+name],doc["client"+name]);}
+return value===undefined?jQuery.css(elem,type,extra):jQuery.style(elem,type,value,extra);},type,chainable?margin:undefined,chainable);};});});jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(_i,type){jQuery.fn[type]=function(fn){return this.on(type,fn);};});jQuery.fn.extend({bind:function(types,data,fn){return this.on(types,null,data,fn);},unbind:function(types,fn){return this.off(types,null,fn);},delegate:function(selector,types,data,fn){return this.on(types,selector,data,fn);},undelegate:function(selector,types,fn){return arguments.length===1?this.off(selector,"**"):this.off(types,selector||"**",fn);},hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver);}});jQuery.each(("blur focus focusin focusout resize scroll click dblclick "+
+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+
+"change select submit keydown keypress keyup contextmenu").split(" "),function(_i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name);};});var rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;jQuery.proxy=function(fn,context){var tmp,args,proxy;if(typeof context==="string"){tmp=fn[context];context=fn;fn=tmp;}
+if(!isFunction(fn)){return undefined;}
+args=slice.call(arguments,2);proxy=function(){return fn.apply(context||this,args.concat(slice.call(arguments)));};proxy.guid=fn.guid=fn.guid||jQuery.guid++;return proxy;};jQuery.holdReady=function(hold){if(hold){jQuery.readyWait++;}else{jQuery.ready(true);}};jQuery.isArray=Array.isArray;jQuery.parseJSON=JSON.parse;jQuery.nodeName=nodeName;jQuery.isFunction=isFunction;jQuery.isWindow=isWindow;jQuery.camelCase=camelCase;jQuery.type=toType;jQuery.now=Date.now;jQuery.isNumeric=function(obj){var type=jQuery.type(obj);return(type==="number"||type==="string")&&!isNaN(obj-parseFloat(obj));};jQuery.trim=function(text){return text==null?"":(text+"").replace(rtrim,"");};if(typeof define==="function"&&define.amd){define("jquery",[],function(){return jQuery;});}
+var
+_jQuery=window.jQuery,_$=window.$;jQuery.noConflict=function(deep){if(window.$===jQuery){window.$=_$;}
+if(deep&&window.jQuery===jQuery){window.jQuery=_jQuery;}
+return jQuery;};if(typeof noGlobal==="undefined"){window.jQuery=window.$=jQuery;}
+return jQuery;});
\ No newline at end of file
diff --git a/static/rzfwxy.pdf b/static/rzfwxy.pdf
new file mode 100644
index 0000000..411de62
--- /dev/null
+++ b/static/rzfwxy.pdf
Binary files differ
diff --git a/static/xx.pdf b/static/xx.pdf
new file mode 100644
index 0000000..d116240
--- /dev/null
+++ b/static/xx.pdf
Binary files differ
diff --git a/static/yhyszc.pdf b/static/yhyszc.pdf
new file mode 100644
index 0000000..4853ee8
--- /dev/null
+++ b/static/yhyszc.pdf
Binary files differ
diff --git a/static/ys.pdf b/static/ys.pdf
new file mode 100644
index 0000000..e73736e
--- /dev/null
+++ b/static/ys.pdf
Binary files differ
diff --git a/static/zc.pdf b/static/zc.pdf
new file mode 100644
index 0000000..789e096
--- /dev/null
+++ b/static/zc.pdf
Binary files differ
diff --git a/static/zy.pdf b/static/zy.pdf
new file mode 100644
index 0000000..cca5ff1
--- /dev/null
+++ b/static/zy.pdf
Binary files differ
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..8c63047
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,15 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-30 09:19:08
+ * @LastEditors: 小明丶
+ * @LastEditTime: 2019-08-30 09:47:47
+ * @Description: 
+ */
+module.exports = {
+    configureWebpack: config => {
+        require('vux-loader').merge(config, {
+            options: {},
+            plugins: ['vux-ui']
+        })
+    }
+}
diff --git a/webpack.common.js b/webpack.common.js
new file mode 100644
index 0000000..a7678e2
--- /dev/null
+++ b/webpack.common.js
@@ -0,0 +1,135 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:18
+ * @LastEditors: zxq
+ * @LastEditTime: 2022-08-02 17:22:31
+ * @Description:
+ */
+//  webpack通用配置
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const VueLoaderPlugin = require('vue-loader/lib/plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const CopyPlugin = require('copy-webpack-plugin');
+const vuxLoader = require('vux-loader');
+let env = process.env.NODE_ENV;
+
+//打包地址
+let srcUrl = '/aic_cus/'
+module.exports = {
+    entry: {
+        index: "./src/index.js",
+    },
+    output: {
+        filename: 'js/[name].js',
+        globalObject:'this',
+        path: path.resolve(__dirname, 'dist'),
+        publicPath: env ? srcUrl : '/' //根据线上项目路径更改 /projectpath
+    },
+    /**防止将某些 import 的包(package)打包到 bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖,
+     * 简而言之:就是使用cdn~不打包这些变量引用的文件,生成环境时需要在index.html中手动引入cdn
+     */
+    externals: {
+        vue: "Vue",
+        axios: "axios",
+        vuex: "Vuex",
+        router: "VueRouter",
+    },
+    resolve: {
+        extensions: ['.vue', '.js', '.less'],
+        alias: { //别名配置
+            "@": path.resolve(__dirname, 'src')
+        }
+    },
+    module: {
+        rules: [{
+                test: /\.(svg|ttf|eot|woff)\??.*$/,
+                loader: "url-loader?limit=10000"
+            },
+            {
+                test: /\.css$/,
+                use: [
+                    env ? MiniCssExtractPlugin.loader : "vue-style-loader",
+                    'css-loader',
+                    "postcss-loader",
+                ],
+            },
+            {
+                test: /\.less$/,
+                use: [
+                    env ? MiniCssExtractPlugin.loader : "vue-style-loader",
+                    'css-loader',
+                    "postcss-loader", //posscss-loader顺序一定要在less-loader前面~不然无法解析
+                    'less-loader',
+                    // 全局注入less变量,在所有vue组件中可使用
+                    // 不能写不接受变量的死类名在这些文件里,不然每个vue文件都会注入这些css类,打包后增加css体积!
+                    {
+                        loader: 'style-resources-loader',
+                        options: {
+                            patterns: [
+                                path.resolve(__dirname, 'src/style/mixins.less'),
+                            ]
+                        }
+                    }
+                ]
+            },
+            {
+                test: /\.(png|svg|jpg|gif)/, //处理图片
+                use: [{
+                    loader: 'url-loader',
+                    options: {
+                        limit: 1000000,
+                        outputPath: 'img/',
+                        publicPath: `${srcUrl}img`
+                        //publicPath: './img'
+                    }
+                }]
+            },
+            {
+                test: /\.vue$/,
+                loader: 'vue-loader'
+            },
+            {
+                test: /\.js$/,
+                exclude: /node_modules/,
+                use: {
+                    loader: 'babel-loader',
+                    options: {
+                        // @vue/babel-preset-jsx  vue jsx语法支持
+                        presets: ['@babel/preset-env', '@vue/babel-preset-jsx'],
+                        plugins: ["dynamic-import-webpack"] //import 函数支持,需要安装
+                    }
+                }
+            },
+        ]
+    },
+    plugins: [
+        // 静态目录
+        new CopyPlugin([{
+            from: path.resolve(__dirname, 'static'),
+            to: 'static',
+        }, ]),
+        new VueLoaderPlugin(),
+        new HtmlWebpackPlugin({
+            template: './public/index.html', //以这个文件作为模板
+            filename: 'index.html', //打包后的文件名
+            title: 'Vue_webpack',
+            hash: true,
+            chunksSortMode :'auto',
+            minify: {
+                removeComments: true, //移除注释
+                collapseWhitespace: true,
+                removeEmptyAttributes: true, //移除空属性
+                removeAttributeQuotes: true //移除属性html标签属性的引号 ""
+            },
+        }),
+    ],
+}
+
+
+// module.exports = vuxLoader.merge(webpackConfig, {
+//     plugins: [{
+//         name: 'vux-ui'
+//     }]
+//     }
+// );
diff --git a/webpack.dev.js b/webpack.dev.js
new file mode 100644
index 0000000..393105d
--- /dev/null
+++ b/webpack.dev.js
@@ -0,0 +1,58 @@
+/*
+ * @Author: 小明丶
+ * @Date: 2019-08-19 15:23:18
+ * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2021-11-11 12:21:29
+ * @Description:
+ */
+//  webpack开发环境配置
+const webpack = require('webpack');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+    mode: 'development',
+    // 如果大型项目可以使用source-map,如果是中小型项目使用eval-source-map就可以了(方便debug)
+    devtool: 'source-map',
+    watch: true,
+    devServer: {
+        contentBase: './dist',
+        inline: true,
+        hot: true,
+        host: '127.0.0.1',
+        //服务端压缩是否开启
+        compress: true,
+        //配置服务端口号
+        port: 8020,
+        // 代理配置
+        proxy:{
+            "/eic": {
+                target: 'https://t.finlean.com',
+                ws: true,
+                changeOrigin: true
+            },
+            "/image": {
+                target: 'https://t.finlean.com',
+                ws: true,
+                changeOrigin: true
+            },
+            '/jttech': {
+                target: 'https://t.finlean.com',
+                secure: false,
+                changeOrigin: true
+            }
+
+        }
+    },
+    plugins: [
+        new webpack.HotModuleReplacementPlugin(),
+    ],
+    watchOptions: {
+        //不监听的目录
+        ignored: /node_modules/,
+        //当第一个文件更改,会在重新构建前增加延迟。这个选项允许 webpack 将这段时间内进行的任何其他更改都聚合到一次重新构建里。
+        aggregateTimeout:800,
+        // 通过传递 true 开启 polling,或者指定毫秒为单位进行轮询。
+        // poll:1000,
+    }
+});
diff --git a/webpack.prod.js b/webpack.prod.js
new file mode 100644
index 0000000..cffc0e2
--- /dev/null
+++ b/webpack.prod.js
@@ -0,0 +1,38 @@
+//  webpack生产环境配置
+process.env.NODE_ENV = 'production';
+const webpack = require('webpack');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.js');
+// 每次build之前删除dist文件夹
+const CleanWebpackPlugin = require('clean-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+// css压缩插件
+var OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
+// js 压缩插件
+// const Uglify = require('uglifyjs-webpack-plugin');
+
+module.exports = merge(common, {
+    mode:"production",
+    plugins: [
+        // new Uglify(),
+        // 把vue组件的css文件提取出来
+        new MiniCssExtractPlugin({
+            filename: './css/[name].[hash].css'
+        }),
+        // css压缩(cssnano、OptimizeCssAssetsPlugin) 需要install
+        new OptimizeCssAssetsPlugin({
+            assetNameRegExp: /\.css$/g,
+            cssProcessor: require('cssnano'),
+            cssProcessorPluginOptions: {
+              preset: ['default', { discardComments: { removeAll: true } }],
+            },
+            canPrint: true
+        }),
+        // 指定环境
+        new webpack.DefinePlugin({
+            'process.env.NODE_ENV': JSON.stringify('production')
+        }),
+        // 清理/dist 文件夹
+        new CleanWebpackPlugin(['dist']),
+    ],
+});
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..99b3c58
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,8827 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ampproject/remapping@^2.1.0":
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
+  integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.1.0"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@antv/adjust@~0.1.1":
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98"
+  integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q==
+  dependencies:
+    "@antv/util" "~1.3.1"
+
+"@antv/f2@^3.1.4-beta.2":
+  version "3.8.11"
+  resolved "https://registry.npmmirror.com/@antv/f2/-/f2-3.8.11.tgz#e60756372d9a002a2232020c39be29877ca344d5"
+  integrity sha512-MqLTBZWuK2MKSo5w5GOebyVIcJYc+eT9isNdjiVnt1zr3CqvppcRLgsTmyh8y98I7oxzHUV8RjjGmF8LMr4ejA==
+  dependencies:
+    "@antv/adjust" "~0.1.1"
+    "@antv/scale" "~0.3.3"
+    "@antv/util" "~2.0.6"
+    "@babel/runtime" "^7.7.7"
+    "@types/hammerjs" "^2.0.36"
+    hammerjs "^2.0.8"
+    type-fest "^0.15.1"
+
+"@antv/gl-matrix@^2.7.1":
+  version "2.7.1"
+  resolved "https://registry.npmmirror.com/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14"
+  integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q==
+
+"@antv/scale@~0.3.3":
+  version "0.3.18"
+  resolved "https://registry.npmmirror.com/@antv/scale/-/scale-0.3.18.tgz#b911f431b3e0b9547b6a65f66d0d3fa295b5ef32"
+  integrity sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==
+  dependencies:
+    "@antv/util" "~2.0.3"
+    fecha "~4.2.0"
+    tslib "^2.0.0"
+
+"@antv/util@~1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmmirror.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd"
+  integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA==
+  dependencies:
+    "@antv/gl-matrix" "^2.7.1"
+
+"@antv/util@~2.0.3", "@antv/util@~2.0.6":
+  version "2.0.17"
+  resolved "https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz#e8ef42aca7892815b229269f3dd10c6b3c7597a9"
+  integrity sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==
+  dependencies:
+    csstype "^3.0.8"
+    tslib "^2.0.3"
+
+"@babel/code-frame@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+  integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
+  dependencies:
+    "@babel/highlight" "^7.16.7"
+
+"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471"
+  integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==
+
+"@babel/core@^7.3.4":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000"
+  integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==
+  dependencies:
+    "@ampproject/remapping" "^2.1.0"
+    "@babel/code-frame" "^7.16.7"
+    "@babel/generator" "^7.18.2"
+    "@babel/helper-compilation-targets" "^7.18.2"
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helpers" "^7.18.2"
+    "@babel/parser" "^7.18.5"
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.18.5"
+    "@babel/types" "^7.18.4"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.1"
+    semver "^6.3.0"
+
+"@babel/generator@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d"
+  integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==
+  dependencies:
+    "@babel/types" "^7.18.2"
+    "@jridgewell/gen-mapping" "^0.3.0"
+    jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+  integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b"
+  integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==
+  dependencies:
+    "@babel/helper-explode-assignable-expression" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b"
+  integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-validator-option" "^7.16.7"
+    browserslist "^4.20.2"
+    semver "^6.3.0"
+
+"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19"
+  integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-member-expression-to-functions" "^7.17.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/helper-replace-supers" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+
+"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd"
+  integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    regexpu-core "^5.0.1"
+
+"@babel/helper-define-polyfill-provider@^0.3.1":
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665"
+  integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.13.0"
+    "@babel/helper-module-imports" "^7.12.13"
+    "@babel/helper-plugin-utils" "^7.13.0"
+    "@babel/traverse" "^7.13.0"
+    debug "^4.1.1"
+    lodash.debounce "^4.0.8"
+    resolve "^1.14.2"
+    semver "^6.1.2"
+
+"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd"
+  integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==
+
+"@babel/helper-explode-assignable-expression@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a"
+  integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9":
+  version "7.17.9"
+  resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
+  integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
+  dependencies:
+    "@babel/template" "^7.16.7"
+    "@babel/types" "^7.17.0"
+
+"@babel/helper-hoist-variables@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+  integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-member-expression-to-functions@^7.17.7":
+  version "7.17.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4"
+  integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==
+  dependencies:
+    "@babel/types" "^7.17.0"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
+  integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-module-transforms@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd"
+  integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.16.7"
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-simple-access" "^7.17.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    "@babel/helper-validator-identifier" "^7.16.7"
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.18.0"
+    "@babel/types" "^7.18.0"
+
+"@babel/helper-optimise-call-expression@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2"
+  integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96"
+  integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==
+
+"@babel/helper-remap-async-to-generator@^7.16.8":
+  version "7.16.8"
+  resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3"
+  integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-wrap-function" "^7.16.8"
+    "@babel/types" "^7.16.8"
+
+"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0"
+  integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==
+  dependencies:
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-member-expression-to-functions" "^7.17.7"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/traverse" "^7.18.2"
+    "@babel/types" "^7.18.2"
+
+"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9"
+  integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==
+  dependencies:
+    "@babel/types" "^7.18.2"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
+  version "7.16.0"
+  resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09"
+  integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==
+  dependencies:
+    "@babel/types" "^7.16.0"
+
+"@babel/helper-split-export-declaration@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+  integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
+  dependencies:
+    "@babel/types" "^7.16.7"
+
+"@babel/helper-validator-identifier@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+  integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
+
+"@babel/helper-validator-option@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23"
+  integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==
+
+"@babel/helper-wrap-function@^7.16.8":
+  version "7.16.8"
+  resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200"
+  integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==
+  dependencies:
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.16.8"
+    "@babel/types" "^7.16.8"
+
+"@babel/helpers@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384"
+  integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==
+  dependencies:
+    "@babel/template" "^7.16.7"
+    "@babel/traverse" "^7.18.2"
+    "@babel/types" "^7.18.2"
+
+"@babel/highlight@^7.16.7":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351"
+  integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@babel/parser@^7.16.7", "@babel/parser@^7.18.5":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c"
+  integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e"
+  integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753"
+  integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-proposal-optional-chaining" "^7.17.12"
+
+"@babel/plugin-proposal-async-generator-functions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03"
+  integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-remap-async-to-generator" "^7.16.8"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-proposal-class-properties@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4"
+  integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-proposal-class-static-block@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710"
+  integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-proposal-dynamic-import@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2"
+  integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-proposal-export-namespace-from@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378"
+  integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664"
+  integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23"
+  integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be"
+  integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-proposal-numeric-separator@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9"
+  integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8"
+  integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.17.10"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-transform-parameters" "^7.17.12"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf"
+  integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-proposal-optional-chaining@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174"
+  integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-proposal-private-methods@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c"
+  integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==
+  dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-proposal-private-property-in-object@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d"
+  integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-create-class-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d"
+  integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13":
+  version "7.12.13"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-assertions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd"
+  integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.2.0":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47"
+  integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+  version "7.10.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+  version "7.10.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+  version "7.14.5"
+  resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-arrow-functions@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45"
+  integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-async-to-generator@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832"
+  integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-remap-async-to-generator" "^7.16.8"
+
+"@babel/plugin-transform-block-scoped-functions@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620"
+  integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-block-scoping@^7.17.12":
+  version "7.18.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9"
+  integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-classes@^7.17.12":
+  version "7.18.4"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814"
+  integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.16.7"
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-optimise-call-expression" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-replace-supers" "^7.18.2"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f"
+  integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-destructuring@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858"
+  integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241"
+  integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-duplicate-keys@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c"
+  integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-exponentiation-operator@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b"
+  integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==
+  dependencies:
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-for-of@^7.18.1":
+  version "7.18.1"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036"
+  integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-function-name@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf"
+  integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==
+  dependencies:
+    "@babel/helper-compilation-targets" "^7.16.7"
+    "@babel/helper-function-name" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-literals@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae"
+  integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-member-expression-literals@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384"
+  integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-modules-amd@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed"
+  integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e"
+  integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-simple-access" "^7.18.2"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.18.0":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996"
+  integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==
+  dependencies:
+    "@babel/helper-hoist-variables" "^7.16.7"
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-validator-identifier" "^7.16.7"
+    babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f"
+  integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==
+  dependencies:
+    "@babel/helper-module-transforms" "^7.18.0"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931"
+  integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.17.12"
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-new-target@^7.17.12":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931"
+  integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-object-super@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94"
+  integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+    "@babel/helper-replace-supers" "^7.16.7"
+
+"@babel/plugin-transform-parameters@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766"
+  integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-property-literals@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55"
+  integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-regenerator@^7.18.0":
+  version "7.18.0"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5"
+  integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    regenerator-transform "^0.15.0"
+
+"@babel/plugin-transform-reserved-words@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f"
+  integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-shorthand-properties@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a"
+  integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-spread@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5"
+  integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0"
+
+"@babel/plugin-transform-sticky-regex@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660"
+  integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-template-literals@^7.18.2":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28"
+  integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-typeof-symbol@^7.17.12":
+  version "7.17.12"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889"
+  integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.17.12"
+
+"@babel/plugin-transform-unicode-escapes@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3"
+  integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/plugin-transform-unicode-regex@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2"
+  integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==
+  dependencies:
+    "@babel/helper-create-regexp-features-plugin" "^7.16.7"
+    "@babel/helper-plugin-utils" "^7.16.7"
+
+"@babel/preset-env@^7.3.4":
+  version "7.18.2"
+  resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a"
+  integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==
+  dependencies:
+    "@babel/compat-data" "^7.17.10"
+    "@babel/helper-compilation-targets" "^7.18.2"
+    "@babel/helper-plugin-utils" "^7.17.12"
+    "@babel/helper-validator-option" "^7.16.7"
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12"
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12"
+    "@babel/plugin-proposal-async-generator-functions" "^7.17.12"
+    "@babel/plugin-proposal-class-properties" "^7.17.12"
+    "@babel/plugin-proposal-class-static-block" "^7.18.0"
+    "@babel/plugin-proposal-dynamic-import" "^7.16.7"
+    "@babel/plugin-proposal-export-namespace-from" "^7.17.12"
+    "@babel/plugin-proposal-json-strings" "^7.17.12"
+    "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12"
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12"
+    "@babel/plugin-proposal-numeric-separator" "^7.16.7"
+    "@babel/plugin-proposal-object-rest-spread" "^7.18.0"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.16.7"
+    "@babel/plugin-proposal-optional-chaining" "^7.17.12"
+    "@babel/plugin-proposal-private-methods" "^7.17.12"
+    "@babel/plugin-proposal-private-property-in-object" "^7.17.12"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.17.12"
+    "@babel/plugin-syntax-async-generators" "^7.8.4"
+    "@babel/plugin-syntax-class-properties" "^7.12.13"
+    "@babel/plugin-syntax-class-static-block" "^7.14.5"
+    "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+    "@babel/plugin-syntax-import-assertions" "^7.17.12"
+    "@babel/plugin-syntax-json-strings" "^7.8.3"
+    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+    "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+    "@babel/plugin-syntax-top-level-await" "^7.14.5"
+    "@babel/plugin-transform-arrow-functions" "^7.17.12"
+    "@babel/plugin-transform-async-to-generator" "^7.17.12"
+    "@babel/plugin-transform-block-scoped-functions" "^7.16.7"
+    "@babel/plugin-transform-block-scoping" "^7.17.12"
+    "@babel/plugin-transform-classes" "^7.17.12"
+    "@babel/plugin-transform-computed-properties" "^7.17.12"
+    "@babel/plugin-transform-destructuring" "^7.18.0"
+    "@babel/plugin-transform-dotall-regex" "^7.16.7"
+    "@babel/plugin-transform-duplicate-keys" "^7.17.12"
+    "@babel/plugin-transform-exponentiation-operator" "^7.16.7"
+    "@babel/plugin-transform-for-of" "^7.18.1"
+    "@babel/plugin-transform-function-name" "^7.16.7"
+    "@babel/plugin-transform-literals" "^7.17.12"
+    "@babel/plugin-transform-member-expression-literals" "^7.16.7"
+    "@babel/plugin-transform-modules-amd" "^7.18.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.18.2"
+    "@babel/plugin-transform-modules-systemjs" "^7.18.0"
+    "@babel/plugin-transform-modules-umd" "^7.18.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12"
+    "@babel/plugin-transform-new-target" "^7.17.12"
+    "@babel/plugin-transform-object-super" "^7.16.7"
+    "@babel/plugin-transform-parameters" "^7.17.12"
+    "@babel/plugin-transform-property-literals" "^7.16.7"
+    "@babel/plugin-transform-regenerator" "^7.18.0"
+    "@babel/plugin-transform-reserved-words" "^7.17.12"
+    "@babel/plugin-transform-shorthand-properties" "^7.16.7"
+    "@babel/plugin-transform-spread" "^7.17.12"
+    "@babel/plugin-transform-sticky-regex" "^7.16.7"
+    "@babel/plugin-transform-template-literals" "^7.18.2"
+    "@babel/plugin-transform-typeof-symbol" "^7.17.12"
+    "@babel/plugin-transform-unicode-escapes" "^7.16.7"
+    "@babel/plugin-transform-unicode-regex" "^7.16.7"
+    "@babel/preset-modules" "^0.1.5"
+    "@babel/types" "^7.18.2"
+    babel-plugin-polyfill-corejs2 "^0.3.0"
+    babel-plugin-polyfill-corejs3 "^0.5.0"
+    babel-plugin-polyfill-regenerator "^0.3.0"
+    core-js-compat "^3.22.1"
+    semver "^6.3.0"
+
+"@babel/preset-modules@^0.1.5":
+  version "0.1.5"
+  resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9"
+  integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+    "@babel/plugin-transform-dotall-regex" "^7.4.4"
+    "@babel/types" "^7.4.4"
+    esutils "^2.0.2"
+
+"@babel/runtime@7.x", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4":
+  version "7.18.3"
+  resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
+  integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
+  dependencies:
+    regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.16.7":
+  version "7.16.7"
+  resolved "https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+  integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/parser" "^7.16.7"
+    "@babel/types" "^7.16.7"
+
+"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5":
+  version "7.18.5"
+  resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd"
+  integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==
+  dependencies:
+    "@babel/code-frame" "^7.16.7"
+    "@babel/generator" "^7.18.2"
+    "@babel/helper-environment-visitor" "^7.18.2"
+    "@babel/helper-function-name" "^7.17.9"
+    "@babel/helper-hoist-variables" "^7.16.7"
+    "@babel/helper-split-export-declaration" "^7.16.7"
+    "@babel/parser" "^7.18.5"
+    "@babel/types" "^7.18.4"
+    debug "^4.1.0"
+    globals "^11.1.0"
+
+"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.4.4":
+  version "7.18.4"
+  resolved "https://registry.npmmirror.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354"
+  integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.16.7"
+    to-fast-properties "^2.0.0"
+
+"@jridgewell/gen-mapping@^0.1.0":
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
+  integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.0"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@jridgewell/gen-mapping@^0.3.0":
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9"
+  integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==
+  dependencies:
+    "@jridgewell/set-array" "^1.0.0"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.0.3":
+  version "3.0.7"
+  resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
+  integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
+
+"@jridgewell/set-array@^1.0.0":
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea"
+  integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==
+
+"@jridgewell/sourcemap-codec@^1.4.10":
+  version "1.4.13"
+  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
+  integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
+
+"@jridgewell/trace-mapping@^0.3.9":
+  version "0.3.13"
+  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea"
+  integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.0.3"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@popperjs/core@^2.9.2":
+  version "2.11.5"
+  resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
+  integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
+
+"@types/glob@^7.1.1":
+  version "7.2.0"
+  resolved "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/hammerjs@^2.0.36":
+  version "2.0.41"
+  resolved "https://registry.npmmirror.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa"
+  integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==
+
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
+  version "7.0.11"
+  resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+  integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
+"@types/minimatch@*":
+  version "3.0.5"
+  resolved "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
+  integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
+
+"@types/node@*":
+  version "17.0.43"
+  resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.43.tgz#7f16898cdd791c9d64069000ad448b47b3ca8353"
+  integrity sha512-jnUpgw8fL9kP2iszfIDyBQtw5Mf4/XSqy0Loc1J9pI14ejL83XcCEvSf50Gs/4ET0I9VCCDoOfufQysj0S66xA==
+
+"@types/q@^1.5.1":
+  version "1.5.5"
+  resolved "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
+  integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
+
+"@vant/icons@^1.7.1":
+  version "1.8.0"
+  resolved "https://registry.npmmirror.com/@vant/icons/-/icons-1.8.0.tgz#36b13f2e628b533f6523a93a168cf02f07056674"
+  integrity sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg==
+
+"@vant/popperjs@^1.1.0":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.2.1.tgz#1300c7c98573df577c21d3000712435edb8a877e"
+  integrity sha512-qzQlrPE4aOsBzfrktDVwzQy/QICCTKifmjrruhY58+Q2fobUYp/T9QINluIafzsD3VJwgP8+HFVLBsyDmy3VZQ==
+  dependencies:
+    "@popperjs/core" "^2.9.2"
+
+"@videojs/http-streaming@2.14.2":
+  version "2.14.2"
+  resolved "https://registry.npmmirror.com/@videojs/http-streaming/-/http-streaming-2.14.2.tgz#c083c106b13c7cc59ee441fdb46a94169e19a50b"
+  integrity sha512-K1raSfO/pq5r8iUas3OSYni0kXOj91n8ealIpV02khghzGv9LQ6O3YUqYd/eAhJ1HIrmZWOnrYpK/P+mhUExXQ==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@videojs/vhs-utils" "3.0.5"
+    aes-decrypter "3.1.3"
+    global "^4.4.0"
+    m3u8-parser "4.7.1"
+    mpd-parser "0.21.1"
+    mux.js "6.0.1"
+    video.js "^6 || ^7"
+
+"@videojs/vhs-utils@3.0.5", "@videojs/vhs-utils@^3.0.4", "@videojs/vhs-utils@^3.0.5":
+  version "3.0.5"
+  resolved "https://registry.npmmirror.com/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz#665ba70d78258ba1ab977364e2fe9f4d4799c46c"
+  integrity sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    global "^4.4.0"
+    url-toolkit "^2.2.1"
+
+"@videojs/xhr@2.6.0":
+  version "2.6.0"
+  resolved "https://registry.npmmirror.com/@videojs/xhr/-/xhr-2.6.0.tgz#cd897e0ad54faf497961bcce3fa16dc15a26bb80"
+  integrity sha512-7J361GiN1tXpm+gd0xz2QWr3xNWBE+rytvo8J3KuggFaLg+U37gZQ2BuPLcnkfGffy2e+ozY70RHC8jt7zjA6Q==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+    global "~4.4.0"
+    is-function "^1.0.1"
+
+"@vue/babel-helper-vue-jsx-merge-props@^1.0.0", "@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.3", "@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
+  integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==
+
+"@vue/babel-plugin-transform-vue-jsx@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7"
+  integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    html-tags "^2.0.0"
+    lodash.kebabcase "^4.1.1"
+    svg-tags "^1.0.0"
+
+"@vue/babel-preset-jsx@^1.0.0-beta.3":
+  version "1.2.4"
+  resolved "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87"
+  integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==
+  dependencies:
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    "@vue/babel-sugar-composition-api-inject-h" "^1.2.1"
+    "@vue/babel-sugar-composition-api-render-instance" "^1.2.4"
+    "@vue/babel-sugar-functional-vue" "^1.2.2"
+    "@vue/babel-sugar-inject-h" "^1.2.2"
+    "@vue/babel-sugar-v-model" "^1.2.3"
+    "@vue/babel-sugar-v-on" "^1.2.3"
+
+"@vue/babel-sugar-composition-api-inject-h@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb"
+  integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-composition-api-render-instance@^1.2.4":
+  version "1.2.4"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz#e4cbc6997c344fac271785ad7a29325c51d68d19"
+  integrity sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-functional-vue@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658"
+  integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-inject-h@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa"
+  integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@vue/babel-sugar-v-model@^1.2.3":
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2"
+  integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    camelcase "^5.0.0"
+    html-tags "^2.0.0"
+    svg-tags "^1.0.0"
+
+"@vue/babel-sugar-v-on@^1.2.3":
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada"
+  integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==
+  dependencies:
+    "@babel/plugin-syntax-jsx" "^7.2.0"
+    "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
+    camelcase "^5.0.0"
+
+"@vue/component-compiler-utils@^3.1.0":
+  version "3.3.0"
+  resolved "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9"
+  integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==
+  dependencies:
+    consolidate "^0.15.1"
+    hash-sum "^1.0.2"
+    lru-cache "^4.1.2"
+    merge-source-map "^1.1.0"
+    postcss "^7.0.36"
+    postcss-selector-parser "^6.0.2"
+    source-map "~0.6.1"
+    vue-template-es2015-compiler "^1.9.0"
+  optionalDependencies:
+    prettier "^1.18.2 || ^2.0.0"
+
+"@webassemblyjs/ast@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+  integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+  dependencies:
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+  integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+  integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+  integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+  integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+  dependencies:
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+  integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+  integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+  integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+  integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+  integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+  integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+  integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+  integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/helper-wasm-section" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-opt" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+  integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+  integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-buffer" "1.9.0"
+    "@webassemblyjs/wasm-gen" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+  integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+    "@webassemblyjs/ieee754" "1.9.0"
+    "@webassemblyjs/leb128" "1.9.0"
+    "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+  integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+    "@webassemblyjs/helper-api-error" "1.9.0"
+    "@webassemblyjs/helper-code-frame" "1.9.0"
+    "@webassemblyjs/helper-fsm" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+  integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/wast-parser" "1.9.0"
+    "@xtuc/long" "4.2.2"
+
+"@xmldom/xmldom@^0.7.2":
+  version "0.7.5"
+  resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d"
+  integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abbrev@1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
+  version "1.3.8"
+  resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+  integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+  dependencies:
+    mime-types "~2.1.34"
+    negotiator "0.6.3"
+
+acorn@^5.1.2:
+  version "5.7.4"
+  resolved "https://registry.npmmirror.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
+  integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
+
+acorn@^6.4.1:
+  version "6.4.2"
+  resolved "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+aes-decrypter@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-1.0.3.tgz#9c06b8a5435a5ad09db933f8a014afcf184cc34e"
+  integrity sha512-rsx8pfx7wJsn+ziYbpJ8XA5c93hKAtBCrfydxJqJCMT+qfjipd/B5wC2xHtBcoxyvlqJcpeAo3K55t0lXOn9yQ==
+  dependencies:
+    pkcs7 "^0.2.3"
+
+aes-decrypter@3.1.3:
+  version "3.1.3"
+  resolved "https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-3.1.3.tgz#65ff5f2175324d80c41083b0e135d1464b12ac35"
+  integrity sha512-VkG9g4BbhMBy+N5/XodDeV6F02chEk9IpgRTq/0bS80y4dzy79VH2Gtms02VXomf3HmyRe3yyJYkJ990ns+d6A==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@videojs/vhs-utils" "^3.0.5"
+    global "^4.4.0"
+    pkcs7 "^1.0.4"
+
+ajv-errors@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+  integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^4.9.1:
+  version "4.11.8"
+  resolved "https://registry.npmmirror.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+  integrity sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==
+  dependencies:
+    co "^4.6.0"
+    json-stable-stringify "^1.0.1"
+
+ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
+alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==
+
+ansi-colors@^3.0.0:
+  version "3.2.4"
+  resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+  integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
+ansi-html-community@0.0.8:
+  version "0.0.8"
+  resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
+  integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
+
+ansi-regex@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
+
+ansi-regex@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
+  integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+ansi-styles@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+anymatch@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+  dependencies:
+    micromatch "^3.1.4"
+    normalize-path "^2.1.1"
+
+anymatch@~3.1.2:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+  dependencies:
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
+
+aproba@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
+
+arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+
+array-filter@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
+  integrity sha512-Ene1hbrinPZ1qPoZp7NSx4jQnh4nr7MtY78pHNb+yr8yHbxmTS7ChGW0a55JKA7TkRDeoQxK4GcJaCvBYplSKA==
+
+array-find@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8"
+  integrity sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==
+
+array-flatten@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
+array-flatten@^2.1.0:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
+  integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+
+array-map@^0.0.0:
+  version "0.0.0"
+  resolved "https://registry.npmmirror.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+  integrity sha512-123XMszMB01QKVptpDQ7x1m1pP5NmJIG1kbl0JSPPRezvwQChxAN0Gvzo7rvR1IZ2tOL2tmiy7kY/KKgnpVVpg==
+
+array-shuffle@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/array-shuffle/-/array-shuffle-1.0.1.tgz#7ea4882a356b4bca5f545e0b6e52eaf6d971557a"
+  integrity sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==
+
+array-union@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==
+  dependencies:
+    array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
+
+array.prototype.reduce@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f"
+  integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.2"
+    es-array-method-boxes-properly "^1.0.0"
+    is-string "^1.0.7"
+
+asap@~2.0.3:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+  integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+
+asn1.js@^5.2.0:
+  version "5.4.1"
+  resolved "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+  integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+  dependencies:
+    bn.js "^4.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    safer-buffer "^2.1.0"
+
+asn1@~0.2.3:
+  version "0.2.6"
+  resolved "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+  integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+  dependencies:
+    safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+assert-plus@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+  integrity sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==
+
+assert@^1.1.1:
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+  integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+  dependencies:
+    object-assign "^4.1.1"
+    util "0.10.3"
+
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
+
+async-each@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+  integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async-validator@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500"
+  integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==
+
+async-validator@~1.8.1:
+  version "1.8.5"
+  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0"
+  integrity sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==
+  dependencies:
+    babel-runtime "6.x"
+
+async@^2.6.2:
+  version "2.6.4"
+  resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
+  integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
+  dependencies:
+    lodash "^4.17.14"
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+autoprefixer@^6.3.1:
+  version "6.7.7"
+  resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+  integrity sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ==
+  dependencies:
+    browserslist "^1.7.6"
+    caniuse-db "^1.0.30000634"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    postcss "^5.2.16"
+    postcss-value-parser "^3.2.3"
+
+autoprefixer@^9.4.10:
+  version "9.8.8"
+  resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a"
+  integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==
+  dependencies:
+    browserslist "^4.12.0"
+    caniuse-lite "^1.0.30001109"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    picocolors "^0.2.1"
+    postcss "^7.0.32"
+    postcss-value-parser "^4.1.0"
+
+autosize@^3.0.20:
+  version "3.0.21"
+  resolved "https://registry.npmmirror.com/autosize/-/autosize-3.0.21.tgz#f182f40d17757d978a139a4c9ca40c4c0e448603"
+  integrity sha512-xGFj5jTV4up6+fxRwtnAWiCIx/5N0tEnFn5rdhAkK1Lq2mliLMuGJgP5Bf4phck3sHGYrVKpYwugfJ61MSz9nA==
+
+aws-sign2@~0.6.0:
+  version "0.6.0"
+  resolved "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+  integrity sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==
+
+aws4@^1.2.1:
+  version "1.11.0"
+  resolved "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+  integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+
+axios@^0.15.3:
+  version "0.15.3"
+  resolved "https://registry.npmmirror.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053"
+  integrity sha512-w3/VNaraEcDri16lbemQWQGKfaFk9O0IZkzKlLeF5r6WWDv9TkcXkP+MWkRK8FbxwfozY/liI+qtvhV295t3HQ==
+  dependencies:
+    follow-redirects "1.0.0"
+
+axios@^0.18.0:
+  version "0.18.1"
+  resolved "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
+  integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
+  dependencies:
+    follow-redirects "1.5.10"
+    is-buffer "^2.0.2"
+
+babel-helper-vue-jsx-merge-props@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
+  integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==
+
+babel-loader@^8.0.0-beta.0:
+  version "8.2.5"
+  resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e"
+  integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==
+  dependencies:
+    find-cache-dir "^3.3.1"
+    loader-utils "^2.0.0"
+    make-dir "^3.1.0"
+    schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-dynamic-import-webpack@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-webpack/-/babel-plugin-dynamic-import-webpack-1.1.0.tgz#955306608cdae6191cd1d3f50cf93826ff69f4e1"
+  integrity sha512-Q/Vxl3zRwC5/DMyg97Ey2UD/f7ApvO+0zXgzwT3G2N7oajGFroqcUEmXZ23QXJsr0Y+DBVNK57saaUnQhCpllA==
+
+babel-plugin-import@^1.12.0:
+  version "1.13.5"
+  resolved "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.5.tgz#42eed1c5afd9a35ee1b1f8fe922b07c44077d753"
+  integrity sha512-IkqnoV+ov1hdJVofly9pXRJmeDm9EtROfrc5i6eII0Hix2xMs5FEm8FG3ExMvazbnZBbgHIt6qdO8And6lCloQ==
+  dependencies:
+    "@babel/helper-module-imports" "^7.0.0"
+
+babel-plugin-polyfill-corejs2@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
+  integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==
+  dependencies:
+    "@babel/compat-data" "^7.13.11"
+    "@babel/helper-define-polyfill-provider" "^0.3.1"
+    semver "^6.1.1"
+
+babel-plugin-polyfill-corejs3@^0.5.0:
+  version "0.5.2"
+  resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72"
+  integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.1"
+    core-js-compat "^3.21.0"
+
+babel-plugin-polyfill-regenerator@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990"
+  integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==
+  dependencies:
+    "@babel/helper-define-polyfill-provider" "^0.3.1"
+
+babel-plugin-syntax-dynamic-import@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.npmmirror.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+  integrity sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA==
+
+babel-runtime@6.x, babel-runtime@^6.9.2:
+  version "6.26.0"
+  resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==
+  dependencies:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
+balanced-match@^0.4.2:
+  version "0.4.2"
+  resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+  integrity sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-arraybuffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
+  integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
+
+base64-js@^1.0.2:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.npmmirror.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
+batch@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+  integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+
+bcrypt-pbkdf@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+  integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+  dependencies:
+    tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+  integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
+
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+  version "1.13.1"
+  resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+bindings@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+  integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+  dependencies:
+    file-uri-to-path "1.0.0"
+
+bluebird@^3.1.1, bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+blueimp-md5@^2.11.1, blueimp-md5@^2.6.0:
+  version "2.19.0"
+  resolved "https://registry.npmmirror.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0"
+  integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+  version "4.12.0"
+  resolved "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+  integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.0.0, bn.js@^5.1.1:
+  version "5.2.1"
+  resolved "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+  integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
+body-parser@1.20.0:
+  version "1.20.0"
+  resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5"
+  integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==
+  dependencies:
+    bytes "3.1.2"
+    content-type "~1.0.4"
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    on-finished "2.4.1"
+    qs "6.10.3"
+    raw-body "2.5.1"
+    type-is "~1.6.18"
+    unpipe "1.0.0"
+
+bonjour@^3.5.0:
+  version "3.5.0"
+  resolved "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+  integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==
+  dependencies:
+    array-flatten "^2.1.0"
+    deep-equal "^1.0.1"
+    dns-equal "^1.0.0"
+    dns-txt "^2.0.2"
+    multicast-dns "^6.0.1"
+    multicast-dns-service-types "^1.1.0"
+
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+boom@2.x.x:
+  version "2.10.1"
+  resolved "https://registry.npmmirror.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+  integrity sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==
+  dependencies:
+    hoek "2.x.x"
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+  version "2.3.2"
+  resolved "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
+braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+brorand@^1.0.1, brorand@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+  integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+  integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+  dependencies:
+    buffer-xor "^1.0.3"
+    cipher-base "^1.0.0"
+    create-hash "^1.1.0"
+    evp_bytestokey "^1.0.3"
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+  integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+  dependencies:
+    browserify-aes "^1.0.4"
+    browserify-des "^1.0.0"
+    evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+  integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+  dependencies:
+    cipher-base "^1.0.1"
+    des.js "^1.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+  integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+  dependencies:
+    bn.js "^5.0.0"
+    randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+  version "4.2.1"
+  resolved "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
+  integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+  dependencies:
+    bn.js "^5.1.1"
+    browserify-rsa "^4.0.1"
+    create-hash "^1.2.0"
+    create-hmac "^1.1.7"
+    elliptic "^6.5.3"
+    inherits "^2.0.4"
+    parse-asn1 "^5.1.5"
+    readable-stream "^3.6.0"
+    safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+  integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+  dependencies:
+    pako "~1.0.5"
+
+browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
+  version "1.7.7"
+  resolved "https://registry.npmmirror.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+  integrity sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==
+  dependencies:
+    caniuse-db "^1.0.30000639"
+    electron-to-chromium "^1.2.7"
+
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.20.4:
+  version "4.20.4"
+  resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.4.tgz#98096c9042af689ee1e0271333dbc564b8ce4477"
+  integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==
+  dependencies:
+    caniuse-lite "^1.0.30001349"
+    electron-to-chromium "^1.4.147"
+    escalade "^3.1.1"
+    node-releases "^2.0.5"
+    picocolors "^1.0.0"
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-indexof@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+  integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+  integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
+
+buffer@^4.3.0:
+  version "4.9.2"
+  resolved "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+  integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+    isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==
+
+bytes@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+cacache@^12.0.2, cacache@^12.0.3:
+  version "12.0.4"
+  resolved "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+  integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+  dependencies:
+    bluebird "^3.5.5"
+    chownr "^1.1.1"
+    figgy-pudding "^3.5.1"
+    glob "^7.1.4"
+    graceful-fs "^4.1.15"
+    infer-owner "^1.0.3"
+    lru-cache "^5.1.1"
+    mississippi "^3.0.0"
+    mkdirp "^0.5.1"
+    move-concurrently "^1.0.1"
+    promise-inflight "^1.0.1"
+    rimraf "^2.6.3"
+    ssri "^6.0.1"
+    unique-filename "^1.1.1"
+    y18n "^4.0.0"
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
+
+camel-case@3.0.x:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+  integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==
+  dependencies:
+    no-case "^2.2.0"
+    upper-case "^1.1.1"
+
+camelcase@^5.0.0, camelcase@^5.2.0:
+  version "5.3.1"
+  resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-api@^1.5.2:
+  version "1.6.1"
+  resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+  integrity sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q==
+  dependencies:
+    browserslist "^1.3.6"
+    caniuse-db "^1.0.30000529"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+  version "1.0.30001354"
+  resolved "https://registry.npmmirror.com/caniuse-db/-/caniuse-db-1.0.30001354.tgz#d9448bfbc2a670e920d7a34926d639173b3a5bdb"
+  integrity sha512-vBZEjO2tk5NM2tT3fGLjfwfhZIRRXtaWm9E6lnmOt2IIRK6IVsqHwOSZCr2QCOQ0KTbaIP+dYI5Xh+IC53ra9g==
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001349:
+  version "1.0.30001354"
+  resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001354.tgz#95c5efdb64148bb4870771749b9a619304755ce5"
+  integrity sha512-mImKeCkyGDAHNywYFA4bqnLAzTUvVkqPvhY4DV47X+Gl2c5Z8c3KNETnXp14GQt11LvxE8AwjzGxJ+rsikiOzg==
+
+caseless@~0.12.0:
+  version "0.12.0"
+  resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+chalk@^1.1.1, chalk@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
+  dependencies:
+    ansi-styles "^2.2.1"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+chokidar@^2.1.8:
+  version "2.1.8"
+  resolved "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+  integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+  dependencies:
+    anymatch "^2.0.0"
+    async-each "^1.0.1"
+    braces "^2.3.2"
+    glob-parent "^3.1.0"
+    inherits "^2.0.3"
+    is-binary-path "^1.0.0"
+    is-glob "^4.0.0"
+    normalize-path "^3.0.0"
+    path-is-absolute "^1.0.0"
+    readdirp "^2.2.1"
+    upath "^1.1.1"
+  optionalDependencies:
+    fsevents "^1.2.7"
+
+chokidar@^3.4.1:
+  version "3.5.3"
+  resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+chownr@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+  integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+clap@^1.0.9:
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+  integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
+  dependencies:
+    chalk "^1.1.3"
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
+clean-css@4.2.x:
+  version "4.2.4"
+  resolved "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178"
+  integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==
+  dependencies:
+    source-map "~0.6.0"
+
+clean-webpack-plugin@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/clean-webpack-plugin/-/clean-webpack-plugin-1.0.1.tgz#b16ee2f1386aea403010236e632447c7d3505f5a"
+  integrity sha512-gvwfMsqu3HBgTVvaBa1H3AZKO03CHpr5uP92SPIktP3827EovAitwW+1xoqXyTxCuXnLYpMHG5ytS4AoukHDWA==
+  dependencies:
+    rimraf "^2.6.1"
+
+cliui@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+  dependencies:
+    string-width "^3.1.0"
+    strip-ansi "^5.2.0"
+    wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.0"
+    wrap-ansi "^6.2.0"
+
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
+clone@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+  integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
+
+co@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
+coa@~1.0.1:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+  integrity sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==
+  dependencies:
+    q "^1.1.2"
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.3:
+  version "1.9.3"
+  resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@^1.0.0, color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+  integrity sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==
+  dependencies:
+    color-name "^1.0.0"
+
+color-string@^1.6.0:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+  integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
+color@^0.11.0:
+  version "0.11.4"
+  resolved "https://registry.npmmirror.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+  integrity sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==
+  dependencies:
+    clone "^1.0.2"
+    color-convert "^1.3.0"
+    color-string "^0.3.0"
+
+color@^3.0.0:
+  version "3.2.1"
+  resolved "https://registry.npmmirror.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164"
+  integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
+  dependencies:
+    color-convert "^1.9.3"
+    color-string "^1.6.0"
+
+colormin@^1.0.5:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+  integrity sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ==
+  dependencies:
+    color "^0.11.0"
+    css-color-names "0.0.4"
+    has "^1.0.1"
+
+colors@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+  integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+  version "1.0.8"
+  resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@2.17.x:
+  version "2.17.1"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+  integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+commander@~2.19.0:
+  version "2.19.0"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+  integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
+commondir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+
+compare-versions@^3.1.0:
+  version "3.6.0"
+  resolved "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62"
+  integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==
+
+component-emitter@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@~2.0.16:
+  version "2.0.18"
+  resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+  integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+  dependencies:
+    mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+  version "1.7.4"
+  resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+  integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+  dependencies:
+    accepts "~1.3.5"
+    bytes "3.0.0"
+    compressible "~2.0.16"
+    debug "2.6.9"
+    on-headers "~1.0.2"
+    safe-buffer "5.1.2"
+    vary "~1.1.2"
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+concat-stream@^1.5.0:
+  version "1.6.2"
+  resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+connect-history-api-fallback@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
+  integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+
+console-browserify@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+  integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+consolidate@^0.15.1:
+  version "0.15.1"
+  resolved "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"
+  integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
+  dependencies:
+    bluebird "^3.1.1"
+
+constants-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+  integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==
+
+content-disposition@0.5.4:
+  version "0.5.4"
+  resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+  integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+  dependencies:
+    safe-buffer "5.2.1"
+
+content-type@~1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+convert-source-map@^1.7.0:
+  version "1.8.0"
+  resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
+  integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
+  dependencies:
+    safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+  integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
+copy-anything@^2.0.1:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
+  integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
+  dependencies:
+    is-what "^3.14.1"
+
+copy-concurrently@^1.0.0:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+  integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+  dependencies:
+    aproba "^1.1.1"
+    fs-write-stream-atomic "^1.0.8"
+    iferr "^0.1.5"
+    mkdirp "^0.5.1"
+    rimraf "^2.5.4"
+    run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
+
+copy-webpack-plugin@^5.0.2:
+  version "5.1.2"
+  resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2"
+  integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==
+  dependencies:
+    cacache "^12.0.3"
+    find-cache-dir "^2.1.0"
+    glob-parent "^3.1.0"
+    globby "^7.1.1"
+    is-glob "^4.0.1"
+    loader-utils "^1.2.3"
+    minimatch "^3.0.4"
+    normalize-path "^3.0.0"
+    p-limit "^2.2.1"
+    schema-utils "^1.0.0"
+    serialize-javascript "^4.0.0"
+    webpack-log "^2.0.0"
+
+core-js-compat@^3.21.0, core-js-compat@^3.22.1:
+  version "3.23.1"
+  resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.23.1.tgz#23d44d9f209086e60dabf9130cea7719af6e199b"
+  integrity sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A==
+  dependencies:
+    browserslist "^4.20.4"
+    semver "7.0.0"
+
+core-js@^2.4.0:
+  version "2.6.12"
+  resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+  integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
+
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+core-util-is@~1.0.0:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+  integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+cosmiconfig@^5.0.0:
+  version "5.2.1"
+  resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.1"
+    parse-json "^4.0.0"
+
+countup.js@^1.8.1:
+  version "1.9.3"
+  resolved "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz#ce3e50cd7160441e478f07da31895edcc0f1c9dd"
+  integrity sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==
+
+create-ecdh@^4.0.0:
+  version "4.0.4"
+  resolved "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
+  integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
+  dependencies:
+    bn.js "^4.1.0"
+    elliptic "^6.5.3"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+  dependencies:
+    cipher-base "^1.0.1"
+    inherits "^2.0.1"
+    md5.js "^1.3.4"
+    ripemd160 "^2.0.1"
+    sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+  version "1.1.7"
+  resolved "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+  integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+  dependencies:
+    cipher-base "^1.0.3"
+    create-hash "^1.1.0"
+    inherits "^2.0.1"
+    ripemd160 "^2.0.0"
+    safe-buffer "^5.0.1"
+    sha.js "^2.4.8"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
+cryptiles@2.x.x:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+  integrity sha512-FFN5KwpvvQTTS5hWPxrU8/QE4kQUc6uwZcrnlMBN82t1MgAtq8mnoDwINBly9Tdr02seeIIhtdF+UH1feBYGog==
+  dependencies:
+    boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+  version "3.12.0"
+  resolved "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+  integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+  dependencies:
+    browserify-cipher "^1.0.0"
+    browserify-sign "^4.0.0"
+    create-ecdh "^4.0.0"
+    create-hash "^1.1.0"
+    create-hmac "^1.1.0"
+    diffie-hellman "^5.0.0"
+    inherits "^2.0.1"
+    pbkdf2 "^3.0.3"
+    public-encrypt "^4.0.0"
+    randombytes "^2.0.0"
+    randomfill "^1.0.3"
+
+css-color-names@0.0.4, css-color-names@^0.0.4:
+  version "0.0.4"
+  resolved "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+  integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==
+
+css-declaration-sorter@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+  integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+  dependencies:
+    postcss "^7.0.1"
+    timsort "^0.3.0"
+
+css-line-break@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
+  integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
+  dependencies:
+    utrie "^1.0.2"
+
+css-loader@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+  integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+  dependencies:
+    camelcase "^5.2.0"
+    icss-utils "^4.1.0"
+    loader-utils "^1.2.3"
+    normalize-path "^3.0.0"
+    postcss "^7.0.14"
+    postcss-modules-extract-imports "^2.0.0"
+    postcss-modules-local-by-default "^2.0.6"
+    postcss-modules-scope "^2.1.0"
+    postcss-modules-values "^2.0.0"
+    postcss-value-parser "^3.3.0"
+    schema-utils "^1.0.0"
+
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+  integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^3.2.1"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
+
+css-select@^4.1.3:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
+  integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^6.0.1"
+    domhandler "^4.3.1"
+    domutils "^2.8.0"
+    nth-check "^2.0.1"
+
+css-tree@1.0.0-alpha.37:
+  version "1.0.0-alpha.37"
+  resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+  integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+  dependencies:
+    mdn-data "2.0.4"
+    source-map "^0.6.1"
+
+css-tree@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
+  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+  dependencies:
+    mdn-data "2.0.14"
+    source-map "^0.6.1"
+
+css-what@^3.2.1:
+  version "3.4.2"
+  resolved "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
+  integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
+
+css-what@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+  integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssnano-preset-default@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff"
+  integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==
+  dependencies:
+    css-declaration-sorter "^4.0.1"
+    cssnano-util-raw-cache "^4.0.1"
+    postcss "^7.0.0"
+    postcss-calc "^7.0.1"
+    postcss-colormin "^4.0.3"
+    postcss-convert-values "^4.0.1"
+    postcss-discard-comments "^4.0.2"
+    postcss-discard-duplicates "^4.0.2"
+    postcss-discard-empty "^4.0.1"
+    postcss-discard-overridden "^4.0.1"
+    postcss-merge-longhand "^4.0.11"
+    postcss-merge-rules "^4.0.3"
+    postcss-minify-font-values "^4.0.2"
+    postcss-minify-gradients "^4.0.2"
+    postcss-minify-params "^4.0.2"
+    postcss-minify-selectors "^4.0.2"
+    postcss-normalize-charset "^4.0.1"
+    postcss-normalize-display-values "^4.0.2"
+    postcss-normalize-positions "^4.0.2"
+    postcss-normalize-repeat-style "^4.0.2"
+    postcss-normalize-string "^4.0.2"
+    postcss-normalize-timing-functions "^4.0.2"
+    postcss-normalize-unicode "^4.0.1"
+    postcss-normalize-url "^4.0.1"
+    postcss-normalize-whitespace "^4.0.2"
+    postcss-ordered-values "^4.1.2"
+    postcss-reduce-initial "^4.0.3"
+    postcss-reduce-transforms "^4.0.2"
+    postcss-svgo "^4.0.3"
+    postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+  integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==
+
+cssnano-util-get-match@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+  integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==
+
+cssnano-util-raw-cache@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+  integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+  dependencies:
+    postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+  integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^3.7.4:
+  version "3.10.0"
+  resolved "https://registry.npmmirror.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+  integrity sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg==
+  dependencies:
+    autoprefixer "^6.3.1"
+    decamelize "^1.1.2"
+    defined "^1.0.0"
+    has "^1.0.1"
+    object-assign "^4.0.1"
+    postcss "^5.0.14"
+    postcss-calc "^5.2.0"
+    postcss-colormin "^2.1.8"
+    postcss-convert-values "^2.3.4"
+    postcss-discard-comments "^2.0.4"
+    postcss-discard-duplicates "^2.0.1"
+    postcss-discard-empty "^2.0.1"
+    postcss-discard-overridden "^0.1.1"
+    postcss-discard-unused "^2.2.1"
+    postcss-filter-plugins "^2.0.0"
+    postcss-merge-idents "^2.1.5"
+    postcss-merge-longhand "^2.0.1"
+    postcss-merge-rules "^2.0.3"
+    postcss-minify-font-values "^1.0.2"
+    postcss-minify-gradients "^1.0.1"
+    postcss-minify-params "^1.0.4"
+    postcss-minify-selectors "^2.0.4"
+    postcss-normalize-charset "^1.1.0"
+    postcss-normalize-url "^3.0.7"
+    postcss-ordered-values "^2.1.0"
+    postcss-reduce-idents "^2.2.2"
+    postcss-reduce-initial "^1.0.0"
+    postcss-reduce-transforms "^1.0.3"
+    postcss-svgo "^2.1.1"
+    postcss-unique-selectors "^2.0.2"
+    postcss-value-parser "^3.2.3"
+    postcss-zindex "^2.0.1"
+
+cssnano@^4.1.10:
+  version "4.1.11"
+  resolved "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99"
+  integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    cssnano-preset-default "^4.0.8"
+    is-resolvable "^1.0.0"
+    postcss "^7.0.0"
+
+csso@^4.0.2:
+  version "4.2.0"
+  resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
+  dependencies:
+    css-tree "^1.1.2"
+
+csso@~2.3.1:
+  version "2.3.2"
+  resolved "https://registry.npmmirror.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+  integrity sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==
+  dependencies:
+    clap "^1.0.9"
+    source-map "^0.5.3"
+
+csstype@^3.0.8:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
+  integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
+
+cyclist@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+  integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==
+
+dashdash@^1.12.0:
+  version "1.14.1"
+  resolved "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+  dependencies:
+    assert-plus "^1.0.0"
+
+de-indent@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+  integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
+  version "2.6.9"
+  resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@=3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.1.1, debug@^3.2.7:
+  version "3.2.7"
+  resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1:
+  version "4.3.4"
+  resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+decode-uri-component@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+  integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==
+
+deep-equal@^1.0.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+  integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+  dependencies:
+    is-arguments "^1.0.4"
+    is-date-object "^1.0.1"
+    is-regex "^1.0.4"
+    object-is "^1.0.1"
+    object-keys "^1.1.1"
+    regexp.prototype.flags "^1.2.0"
+
+deep-is@~0.1.3:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+deepmerge@^1.2.0:
+  version "1.5.2"
+  resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
+  integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
+
+deepmerge@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
+default-gateway@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+  integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+  dependencies:
+    execa "^1.0.0"
+    ip-regex "^2.1.0"
+
+define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
+defined@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+  integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==
+
+del@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+  integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    globby "^6.1.0"
+    is-path-cwd "^2.0.0"
+    is-path-in-cwd "^2.0.0"
+    p-map "^2.0.0"
+    pify "^4.0.1"
+    rimraf "^2.6.3"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+depd@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
+des.js@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+  integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+  dependencies:
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
+destroy@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+  integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-file@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+  integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+diffie-hellman@^5.0.0:
+  version "5.0.3"
+  resolved "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+  integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+  dependencies:
+    bn.js "^4.1.0"
+    miller-rabin "^4.0.0"
+    randombytes "^2.0.0"
+
+dijkstrajs@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257"
+  integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==
+
+dir-glob@^2.0.0:
+  version "2.2.2"
+  resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+  dependencies:
+    path-type "^3.0.0"
+
+dns-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+  integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
+
+dns-packet@^1.3.1:
+  version "1.3.4"
+  resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
+  integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
+  dependencies:
+    ip "^1.1.0"
+    safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+  integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==
+  dependencies:
+    buffer-indexof "^1.0.0"
+
+dom-converter@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
+dom-serializer@0:
+  version "0.2.2"
+  resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+  integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+  dependencies:
+    domelementtype "^2.0.1"
+    entities "^2.0.0"
+
+dom-serializer@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+  integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.2.0"
+    entities "^2.0.0"
+
+dom-walk@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
+  integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
+
+domain-browser@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1:
+  version "1.3.1"
+  resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+  integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+  integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+  dependencies:
+    domelementtype "^2.2.0"
+
+domutils@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+domutils@^2.5.2, domutils@^2.8.0:
+  version "2.8.0"
+  resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+  integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+  dependencies:
+    dom-serializer "^1.0.1"
+    domelementtype "^2.2.0"
+    domhandler "^4.2.0"
+
+dot-prop@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
+  integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+  dependencies:
+    is-obj "^2.0.0"
+
+draftlog@^1.0.10:
+  version "1.0.13"
+  resolved "https://registry.npmmirror.com/draftlog/-/draftlog-1.0.13.tgz#2a415783955dbc6e2bb3b51a93c3d559f26b453d"
+  integrity sha512-GeMWOpXERBpfVDK6v7m0x1hPg8+g8ZsZWqJl2T17wHqrm4h8fnjiZmXcnCrmwogAc6R3YTxFXax15wezfuyCUw==
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+  version "3.7.1"
+  resolved "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+  integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+  dependencies:
+    end-of-stream "^1.0.0"
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+    stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+  integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+  dependencies:
+    jsbn "~0.1.0"
+    safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.4.147:
+  version "1.4.155"
+  resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.155.tgz#9c7190bf5e8608c5a5e4953b1ccf0facf3d1b49d"
+  integrity sha512-niPzKBSYPG06gxLKO0c2kEmgdRMTtIbNrBlvD31Ld8Q57b/K0218U4j8u/OOt25XE1eFOn47FcmQVdx9R1qqxA==
+
+element-ui@^2.13.0:
+  version "2.15.9"
+  resolved "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.9.tgz#b03548e007b7ab7496c49a282db92a0fffd7efc7"
+  integrity sha512-dx45nQLt4Hn87/Z9eRr3ex6KFZbxlFAwEU3QoW3wA5EsYftvHTyL9Pq7VnXXD7hu1Eiaup2jcs6kp+/VSFmXuA==
+  dependencies:
+    async-validator "~1.8.1"
+    babel-helper-vue-jsx-merge-props "^2.0.0"
+    deepmerge "^1.2.0"
+    normalize-wheel "^1.0.1"
+    resize-observer-polyfill "^1.5.0"
+    throttle-debounce "^1.0.1"
+
+elliptic@^6.5.3:
+  version "6.5.4"
+  resolved "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+  integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+  dependencies:
+    bn.js "^4.11.9"
+    brorand "^1.1.0"
+    hash.js "^1.0.0"
+    hmac-drbg "^1.0.1"
+    inherits "^2.0.4"
+    minimalistic-assert "^1.0.1"
+    minimalistic-crypto-utils "^1.0.1"
+
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emojis-list@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+  integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==
+
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encode-utf8@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda"
+  integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
+
+encodeurl@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+  version "1.4.4"
+  resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+  dependencies:
+    once "^1.4.0"
+
+enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
+  integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
+  dependencies:
+    graceful-fs "^4.1.2"
+    memory-fs "^0.5.0"
+    tapable "^1.0.0"
+
+entities@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+  integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
+  version "0.1.8"
+  resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+  integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+  dependencies:
+    prr "~1.0.1"
+
+error-ex@^1.3.1:
+  version "1.3.2"
+  resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  dependencies:
+    is-arrayish "^0.2.1"
+
+es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1:
+  version "1.20.1"
+  resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
+  integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
+  dependencies:
+    call-bind "^1.0.2"
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    function.prototype.name "^1.1.5"
+    get-intrinsic "^1.1.1"
+    get-symbol-description "^1.0.0"
+    has "^1.0.3"
+    has-property-descriptors "^1.0.0"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    is-callable "^1.2.4"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.2"
+    regexp.prototype.flags "^1.4.3"
+    string.prototype.trimend "^1.0.5"
+    string.prototype.trimstart "^1.0.5"
+    unbox-primitive "^1.0.2"
+
+es-array-method-boxes-properly@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
+  integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+es5-shim@^4.5.1:
+  version "4.6.7"
+  resolved "https://registry.npmmirror.com/es5-shim/-/es5-shim-4.6.7.tgz#bc67ae0fc3dd520636e0a1601cc73b450ad3e955"
+  integrity sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-html@~1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escodegen@^1.9.0:
+  version "1.14.3"
+  resolved "https://registry.npmmirror.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^4.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
+eslint-scope@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+  integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+  dependencies:
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
+esprima-extract-comments@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/esprima-extract-comments/-/esprima-extract-comments-0.2.1.tgz#9018d8df37ffd95dd615015a8c5f0475ed743423"
+  integrity sha512-QYSrHDynXWkC4F/yu6qivFvRh/Zaz9N2j1iX2MqTg2t2YFyk6Ev7h8SSI3ELDWCxhwM7sgJOu/JwAFb0QfEljg==
+  dependencies:
+    esprima "^2.7.1"
+
+esprima@^2.6.0, esprima@^2.7.1:
+  version "2.7.3"
+  resolved "https://registry.npmmirror.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+  integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==
+
+esprima@^4.0.0, esprima@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esrecurse@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^4.1.1, estraverse@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+etag@~1.8.1:
+  version "1.8.1"
+  resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
+eventemitter3@^4.0.0:
+  version "4.0.7"
+  resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+events@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+eventsource@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508"
+  integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+  integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+  dependencies:
+    md5.js "^1.3.4"
+    safe-buffer "^5.1.1"
+
+execa@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+  dependencies:
+    cross-spawn "^6.0.0"
+    get-stream "^4.0.0"
+    is-stream "^1.1.0"
+    npm-run-path "^2.0.0"
+    p-finally "^1.0.0"
+    signal-exit "^3.0.0"
+    strip-eof "^1.0.0"
+
+exif-js@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/exif-js/-/exif-js-2.3.0.tgz#9d10819bf571f873813e7640241255ab9ce1a814"
+  integrity sha512-1Og9pAzG2FZRVlaavH8bB8BTeHcjMdJhKmeQITkX+uLRCD0xPtKAdZ2clZmQdJ56p9adXtJ8+jwrGp/4505lYg==
+
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+  integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+  dependencies:
+    homedir-polyfill "^1.0.1"
+
+express@^4.17.1:
+  version "4.18.1"
+  resolved "https://registry.npmmirror.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf"
+  integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==
+  dependencies:
+    accepts "~1.3.8"
+    array-flatten "1.1.1"
+    body-parser "1.20.0"
+    content-disposition "0.5.4"
+    content-type "~1.0.4"
+    cookie "0.5.0"
+    cookie-signature "1.0.6"
+    debug "2.6.9"
+    depd "2.0.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    finalhandler "1.2.0"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    merge-descriptors "1.0.1"
+    methods "~1.1.2"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    path-to-regexp "0.1.7"
+    proxy-addr "~2.0.7"
+    qs "6.10.3"
+    range-parser "~1.2.1"
+    safe-buffer "5.2.1"
+    send "0.18.0"
+    serve-static "1.15.0"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    type-is "~1.6.18"
+    utils-merge "1.0.1"
+    vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
+extend@~3.0.0:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extract-comments@^0.10.1:
+  version "0.10.1"
+  resolved "https://registry.npmmirror.com/extract-comments/-/extract-comments-0.10.1.tgz#8b6031808a2f5fde1cd67bf8317b918204304408"
+  integrity sha512-74o4hC+zULVaWX+kqDoZZBUTrfK10GMUyjK2GuiQTPlkqivXOSpA9DkrebXaZP4d95yxS+7uLVdxrKG5ghv+hg==
+  dependencies:
+    define-property "^0.2.5"
+    esprima-extract-comments "^0.2.1"
+    extend-shallow "^2.0.1"
+    parse-code-context "^0.2.1"
+
+extsprintf@1.3.0:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastclick@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.npmmirror.com/fastclick/-/fastclick-1.0.6.tgz#161625b27b1a5806405936bda9a2c1926d06be6a"
+  integrity sha512-cXyDBT4g0uWl/Xe75QspBDAgAWQ0lkPi/zgp6YFEUHj6WV6VIZl7R6TiDZhdOVU3W4ehp/8tG61Jev1jit+ztQ==
+
+faye-websocket@^0.11.3, faye-websocket@^0.11.4:
+  version "0.11.4"
+  resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
+  integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
+  dependencies:
+    websocket-driver ">=0.5.1"
+
+fecha@~4.2.0:
+  version "4.2.3"
+  resolved "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
+  integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==
+
+figgy-pudding@^3.5.1:
+  version "3.5.2"
+  resolved "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+  integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+file-loader@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+  integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
+  dependencies:
+    loader-utils "^1.0.2"
+    schema-utils "^1.0.0"
+
+file-uri-to-path@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+finalhandler@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+  integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+  dependencies:
+    debug "2.6.9"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    on-finished "2.4.1"
+    parseurl "~1.3.3"
+    statuses "2.0.1"
+    unpipe "~1.0.0"
+
+find-cache-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^2.0.0"
+    pkg-dir "^3.0.0"
+
+find-cache-dir@^3.3.1:
+  version "3.3.2"
+  resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+  integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^3.0.2"
+    pkg-dir "^4.1.0"
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+find-up@^4.0.0, find-up@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+  dependencies:
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
+
+findup-sync@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+  integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+  dependencies:
+    detect-file "^1.0.0"
+    is-glob "^4.0.0"
+    micromatch "^3.0.4"
+    resolve-dir "^1.0.1"
+
+flatten@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
+  integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
+
+flush-write-stream@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+  integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+  dependencies:
+    inherits "^2.0.3"
+    readable-stream "^2.3.6"
+
+follow-redirects@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37"
+  integrity sha512-7s+wBk4z5xTwVJuozRBAyRofWKjD3uG2CUjZfZTrw9f+f+z8ZSxOjAqfIDLtc0Hnz+wGK2Y8qd93nGGjXBYKsQ==
+  dependencies:
+    debug "^2.2.0"
+
+follow-redirects@1.5.10:
+  version "1.5.10"
+  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
+  integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
+  dependencies:
+    debug "=3.1.0"
+
+follow-redirects@^1.0.0:
+  version "1.15.1"
+  resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
+  integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
+
+for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
+
+forever-agent@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
+form-data@~2.1.1:
+  version "2.1.4"
+  resolved "https://registry.npmmirror.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+  integrity sha512-8HWGSLAPr+AG0hBpsqi5Ob8HrLStN/LWeqhpFl14d7FJgHK48TmgLoALPz69XSUR65YJzDfLUX/BM8+MLJLghQ==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.5"
+    mime-types "^2.1.12"
+
+forwarded@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+  integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
+  dependencies:
+    map-cache "^0.2.2"
+
+fresh@0.5.2:
+  version "0.5.2"
+  resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+
+from2@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+  integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
+  dependencies:
+    inherits "^2.0.1"
+    readable-stream "^2.0.0"
+
+fs-write-stream-atomic@^1.0.8:
+  version "1.0.10"
+  resolved "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+  integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==
+  dependencies:
+    graceful-fs "^4.1.2"
+    iferr "^0.1.5"
+    imurmurhash "^0.1.4"
+    readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^1.2.7:
+  version "1.2.13"
+  resolved "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+  integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+  dependencies:
+    bindings "^1.5.0"
+    nan "^2.12.1"
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+    functions-have-names "^1.2.2"
+
+functions-have-names@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
+  integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.3"
+
+get-stream@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+  dependencies:
+    pump "^3.0.0"
+
+get-symbol-description@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+
+getpass@^0.1.1:
+  version "0.1.7"
+  resolved "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+  dependencies:
+    assert-plus "^1.0.0"
+
+glob-parent@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+  integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==
+  dependencies:
+    is-glob "^3.1.0"
+    path-dirname "^1.0.0"
+
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
+  version "7.2.3"
+  resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+global-modules@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+  integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+  dependencies:
+    global-prefix "^1.0.1"
+    is-windows "^1.0.1"
+    resolve-dir "^1.0.0"
+
+global-modules@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+  integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+  dependencies:
+    global-prefix "^3.0.0"
+
+global-prefix@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+  integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+  dependencies:
+    expand-tilde "^2.0.2"
+    homedir-polyfill "^1.0.1"
+    ini "^1.3.4"
+    is-windows "^1.0.1"
+    which "^1.2.14"
+
+global-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+  integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+  dependencies:
+    ini "^1.3.5"
+    kind-of "^6.0.2"
+    which "^1.3.1"
+
+global@4.3.2, global@~4.3.0:
+  version "4.3.2"
+  resolved "https://registry.npmmirror.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+  integrity sha512-/4AybdwIDU4HkCUbJkZdWpe4P6vuw/CUtu+0I1YlLIPe7OlUO7KNJ+q/rO70CW2/NW6Jc6I62++Hzsf5Alu6rQ==
+  dependencies:
+    min-document "^2.19.0"
+    process "~0.5.1"
+
+global@^4.3.0, global@^4.3.1, global@^4.4.0, global@~4.4.0:
+  version "4.4.0"
+  resolved "https://registry.npmmirror.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
+  integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
+  dependencies:
+    min-document "^2.19.0"
+    process "^0.11.10"
+
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==
+  dependencies:
+    array-union "^1.0.1"
+    glob "^7.0.3"
+    object-assign "^4.0.1"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+globby@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+  integrity sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==
+  dependencies:
+    array-union "^1.0.1"
+    dir-glob "^2.0.0"
+    glob "^7.1.2"
+    ignore "^3.3.5"
+    pify "^3.0.0"
+    slash "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
+  version "4.2.10"
+  resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+  integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+hammerjs@^2.0.8:
+  version "2.0.8"
+  resolved "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
+  integrity sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==
+
+handle-thing@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
+  integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+
+har-schema@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+  integrity sha512-f8xf2GOR6Rgwc9FPTLNzgwB+JQ2/zMauYXSWmX5YV5acex6VomT0ocSuwR7BfXo5MpHi+jL+saaux2fwsGJDKQ==
+
+har-validator@~4.2.1:
+  version "4.2.1"
+  resolved "https://registry.npmmirror.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+  integrity sha512-5Gbp6RAftMYYV3UEI4c4Vv3+a4dQ7taVyvHt+/L6kRt+f4HX1GweAk5UDWN0SvdVnRBzGQ6OG89pGaD9uSFnVw==
+  dependencies:
+    ajv "^4.9.1"
+    har-schema "^1.0.5"
+
+has-ansi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
+  dependencies:
+    ansi-regex "^2.0.0"
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+  integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+  dependencies:
+    has-symbols "^1.0.2"
+
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.1, has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+  integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+  dependencies:
+    inherits "^2.0.4"
+    readable-stream "^3.6.0"
+    safe-buffer "^5.2.0"
+
+hash-sum@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
+  integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+  version "1.1.7"
+  resolved "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+  dependencies:
+    inherits "^2.0.3"
+    minimalistic-assert "^1.0.1"
+
+hawk@~3.1.3:
+  version "3.1.3"
+  resolved "https://registry.npmmirror.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+  integrity sha512-X8xbmTc1cbPXcQV4WkLcRMALuyoxhfpFATmyuCxJPOAvrDS4DNnsTAOmKUxMTOWU6TzrTOkxPKwIx5ZOpJVSrg==
+  dependencies:
+    boom "2.x.x"
+    cryptiles "2.x.x"
+    hoek "2.x.x"
+    sntp "1.x.x"
+
+he@1.2.x, he@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hex-color-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+  integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
+hmac-drbg@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+  integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+  dependencies:
+    hash.js "^1.0.3"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+  version "2.16.3"
+  resolved "https://registry.npmmirror.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+  integrity sha512-V6Yw1rIcYV/4JsnggjBU0l4Kr+EXhpwqXRusENU1Xx6ro00IHPHYNynCuBTOZAPlr3AAmLvchH9I7N/VUdvOwQ==
+
+homedir-polyfill@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+  integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+  dependencies:
+    parse-passwd "^1.0.0"
+
+hpack.js@^2.1.6:
+  version "2.1.6"
+  resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+  integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==
+  dependencies:
+    inherits "^2.0.1"
+    obuf "^1.0.0"
+    readable-stream "^2.0.1"
+    wbuf "^1.1.0"
+
+hsl-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+  integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==
+
+hsla-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+  integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==
+
+html-comment-regex@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+  integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+
+html-entities@^1.3.1:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc"
+  integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==
+
+html-minifier@^3.2.3:
+  version "3.5.21"
+  resolved "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
+  integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
+  dependencies:
+    camel-case "3.0.x"
+    clean-css "4.2.x"
+    commander "2.17.x"
+    he "1.2.x"
+    param-case "2.1.x"
+    relateurl "0.2.x"
+    uglify-js "3.4.x"
+
+html-tags@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b"
+  integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==
+
+html-webpack-plugin@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
+  integrity sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==
+  dependencies:
+    html-minifier "^3.2.3"
+    loader-utils "^0.2.16"
+    lodash "^4.17.3"
+    pretty-error "^2.0.2"
+    tapable "^1.0.0"
+    toposort "^1.0.0"
+    util.promisify "1.0.0"
+
+html2canvas@^1.0.0-rc.3:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543"
+  integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
+  dependencies:
+    css-line-break "^2.1.0"
+    text-segmentation "^1.0.3"
+
+htmlparser2@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
+  integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
+  dependencies:
+    domelementtype "^2.0.1"
+    domhandler "^4.0.0"
+    domutils "^2.5.2"
+    entities "^2.0.0"
+
+http-deceiver@^1.2.7:
+  version "1.2.7"
+  resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+  integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+
+http-errors@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+  integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+  dependencies:
+    depd "2.0.0"
+    inherits "2.0.4"
+    setprototypeof "1.2.0"
+    statuses "2.0.1"
+    toidentifier "1.0.1"
+
+http-errors@~1.6.2:
+  version "1.6.3"
+  resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+  integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+  dependencies:
+    depd "~1.1.2"
+    inherits "2.0.3"
+    setprototypeof "1.1.0"
+    statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.5.1:
+  version "0.5.6"
+  resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd"
+  integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==
+
+http-proxy-middleware@0.19.1:
+  version "0.19.1"
+  resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+  integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+  dependencies:
+    http-proxy "^1.17.0"
+    is-glob "^4.0.0"
+    lodash "^4.17.11"
+    micromatch "^3.1.10"
+
+http-proxy@^1.17.0:
+  version "1.18.1"
+  resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
+  dependencies:
+    eventemitter3 "^4.0.0"
+    follow-redirects "^1.0.0"
+    requires-port "^1.0.0"
+
+http-signature@~1.1.0:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+  integrity sha512-iUn0NcRULlDGtqNLN1Jxmzayk8ogm7NToldASyZBpM2qggbphjXzNOiw3piN8tgz+e/DRs6X5gAzFwTI6BCRcg==
+  dependencies:
+    assert-plus "^0.2.0"
+    jsprim "^1.2.2"
+    sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+  integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==
+
+iconv-lite@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3"
+
+icss-replace-symbols@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+  integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==
+
+icss-utils@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+  integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+  dependencies:
+    postcss "^7.0.14"
+
+ieee754@^1.1.4:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+iferr@^0.1.5:
+  version "0.1.5"
+  resolved "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+  integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==
+
+ignore@^3.3.5:
+  version "3.3.10"
+  resolved "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+image-size@~0.5.0:
+  version "0.5.5"
+  resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+  integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
+
+import-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+  integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==
+  dependencies:
+    import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
+import-from@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+  integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==
+  dependencies:
+    resolve-from "^3.0.0"
+
+import-local@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+  integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+  dependencies:
+    pkg-dir "^3.0.0"
+    resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indexes-of@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+  integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==
+
+individual@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
+  integrity sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==
+
+infer-owner@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+  integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==
+
+inherits@2.0.3:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+
+ini@^1.3.4, ini@^1.3.5:
+  version "1.3.8"
+  resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inline-manifest-webpack-plugin@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/inline-manifest-webpack-plugin/-/inline-manifest-webpack-plugin-3.0.1.tgz#ca2151063115298e2fd94b669ab76c7dd63e44ad"
+  integrity sha512-GexpCdYDZlBYE+NKiZQDWupUvfOpIqeCZ7TiVy8/5lhogPuH4GdCNRxnyBUW1DHa3cn1jV0To8nyge2LGbQYrg==
+  dependencies:
+    source-map-url "0.4.0"
+
+internal-ip@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+  integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+  dependencies:
+    default-gateway "^4.2.0"
+    ipaddr.js "^1.9.0"
+
+internal-slot@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+  integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+  dependencies:
+    get-intrinsic "^1.1.0"
+    has "^1.0.3"
+    side-channel "^1.0.4"
+
+interpret@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+  integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+ip-regex@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+  integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==
+
+ip@^1.1.0, ip@^1.1.5:
+  version "1.1.8"
+  resolved "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
+  integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
+
+ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute-url@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+  integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==
+
+is-absolute-url@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+  integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+  integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-bigint@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+  dependencies:
+    has-bigints "^1.0.1"
+
+is-binary-path@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+  integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==
+  dependencies:
+    binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+  dependencies:
+    binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-buffer@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-buffer@^2.0.2:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+  integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+is-callable@^1.1.4, is-callable@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+  integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+
+is-color-stop@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+  integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==
+  dependencies:
+    css-color-names "^0.0.4"
+    hex-color-regex "^1.1.0"
+    hsl-regex "^1.0.0"
+    hsla-regex "^1.0.0"
+    rgb-regex "^1.0.1"
+    rgba-regex "^1.0.0"
+
+is-core-module@^2.8.1:
+  version "2.9.0"
+  resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
+  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
+  dependencies:
+    has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  dependencies:
+    kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-function@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+  integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
+
+is-glob@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+  integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==
+  dependencies:
+    is-extglob "^2.1.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-negative-zero@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
+  dependencies:
+    kind-of "^3.0.2"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
+  integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+
+is-path-cwd@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+  integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+  integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+  dependencies:
+    is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+  integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+  dependencies:
+    path-is-inside "^1.0.2"
+
+is-plain-obj@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+  dependencies:
+    isobject "^3.0.1"
+
+is-regex@^1.0.4, is-regex@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
+
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-string@^1.0.5, is-string@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-svg@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+  integrity sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw==
+  dependencies:
+    html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+  dependencies:
+    has-symbols "^1.0.2"
+
+is-typedarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-what@^3.14.1:
+  version "3.14.1"
+  resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
+  integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+  integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+  integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+isstream@~0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
+js-base64@^2.1.9:
+  version "2.6.4"
+  resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
+  integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
+
+js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1, js-yaml@^3.6.1:
+  version "3.14.1"
+  resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+js-yaml@~3.7.0:
+  version "3.7.0"
+  resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+  integrity sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^2.6.0"
+
+jsbn@~0.1.0:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
+  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+
+json-stable-stringify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+  integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==
+  dependencies:
+    jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^0.5.0:
+  version "0.5.1"
+  resolved "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
+
+json5@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  dependencies:
+    minimist "^1.2.0"
+
+json5@^2.1.2, json5@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+  integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
+
+jsonify@~0.0.0:
+  version "0.0.0"
+  resolved "https://registry.npmmirror.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+  integrity sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==
+
+jsprim@^1.2.2:
+  version "1.4.2"
+  resolved "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+  integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
+  dependencies:
+    assert-plus "1.0.0"
+    extsprintf "1.3.0"
+    json-schema "0.4.0"
+    verror "1.10.0"
+
+keycode@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff"
+  integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==
+
+killable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+  integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.3"
+  resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+last-call-webpack-plugin@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
+  integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==
+  dependencies:
+    lodash "^4.17.5"
+    webpack-sources "^1.1.0"
+
+less-loader@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e"
+  integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==
+  dependencies:
+    clone "^2.1.1"
+    loader-utils "^1.1.0"
+    pify "^3.0.0"
+
+less@^2.7.1:
+  version "2.7.3"
+  resolved "https://registry.npmmirror.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b"
+  integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==
+  optionalDependencies:
+    errno "^0.1.1"
+    graceful-fs "^4.1.2"
+    image-size "~0.5.0"
+    mime "^1.2.11"
+    mkdirp "^0.5.0"
+    promise "^7.1.1"
+    request "2.81.0"
+    source-map "^0.5.3"
+
+less@^3.9.0:
+  version "3.13.1"
+  resolved "https://registry.npmmirror.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909"
+  integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==
+  dependencies:
+    copy-anything "^2.0.1"
+    tslib "^1.10.0"
+  optionalDependencies:
+    errno "^0.1.1"
+    graceful-fs "^4.1.2"
+    image-size "~0.5.0"
+    make-dir "^2.1.0"
+    mime "^1.4.1"
+    native-request "^1.0.5"
+    source-map "~0.6.0"
+
+levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+loader-runner@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+  integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^0.2.15, loader-utils@^0.2.16:
+  version "0.2.17"
+  resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+  integrity sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==
+  dependencies:
+    big.js "^3.1.3"
+    emojis-list "^2.0.0"
+    json5 "^0.5.0"
+    object-assign "^4.0.1"
+
+loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+  integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
+  integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+  dependencies:
+    p-locate "^4.1.0"
+
+lodash.clonedeep@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+  integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
+
+lodash.debounce@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.differencewith@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz#bafafbc918b55154e179176a00bb0aefaac854b7"
+  integrity sha512-/8JFjydAS+4bQuo3CpLMBv7WxGFyk7/etOAsrQUCu0a9QVDemxv0YQ0rFyeZvqlUD314SERfNlgnlqqHmaQ0Cg==
+
+lodash.isequal@^4.4.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+  integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
+
+lodash.isfunction@^3.0.8:
+  version "3.0.9"
+  resolved "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
+  integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
+
+lodash.isplainobject@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+  integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.kebabcase@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
+  integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==
+
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.mergewith@^4.6.0:
+  version "4.6.2"
+  resolved "https://registry.npmmirror.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
+  integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
+
+lodash.throttle@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+  integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
+
+lodash.unionwith@^4.6.0:
+  version "4.6.0"
+  resolved "https://registry.npmmirror.com/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz#74d140b5ca8146e6c643c3724f5152538d9ac1f0"
+  integrity sha512-Hk8otPCkVM4UxRoft3E5dAREwExyXci6iVPCibHIEiG7neb9KAdWHYS75MYpVTvxDrnpp7WCJNZ84vAk7j7tVA==
+
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
+
+lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.5:
+  version "4.17.21"
+  resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loglevel@^1.6.8:
+  version "1.8.0"
+  resolved "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
+  integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
+
+lower-case@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+  integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==
+
+lru-cache@^4.1.2:
+  version "4.1.5"
+  resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
+m3u8-parser@2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/m3u8-parser/-/m3u8-parser-2.1.0.tgz#c8170329ec1cd515d0d58bb8b762da9896cb0368"
+  integrity sha512-WbEpQ2FUaNGbJ0YanSeyj9D9ruu4FUvz+ZvebIzI2bSME+PUwcPXO1kKXZkjcPUAFruDikoOI5fWQNIA6JCCOQ==
+
+m3u8-parser@4.7.1:
+  version "4.7.1"
+  resolved "https://registry.npmmirror.com/m3u8-parser/-/m3u8-parser-4.7.1.tgz#d6df2c940bb19a01112a04ccc4ff44886a945305"
+  integrity sha512-pbrQwiMiq+MmI9bl7UjtPT3AK603PV9bogNlr83uC+X9IoxqL5E4k7kU7fMQ0dpRgxgeSMygqUa0IMLQNXLBNA==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@videojs/vhs-utils" "^3.0.5"
+    global "^4.4.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+  dependencies:
+    pify "^4.0.1"
+    semver "^5.6.0"
+
+make-dir@^3.0.2, make-dir@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+  dependencies:
+    semver "^6.0.0"
+
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
+
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
+  dependencies:
+    object-visit "^1.0.0"
+
+math-expression-evaluator@^1.2.14:
+  version "1.3.14"
+  resolved "https://registry.npmmirror.com/math-expression-evaluator/-/math-expression-evaluator-1.3.14.tgz#0ebeaccf65fea0f6f5a626f88df41814e5fcd9bf"
+  integrity sha512-M6AMrvq9bO8uL42KvQHPA2/SbAobA0R7gviUmPrcTcGfdwpaLitz4q2Euzx2lP9Oy88vxK3HOrsISgSwKsYS4A==
+
+md5.js@^1.3.4:
+  version "1.3.5"
+  resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+    safe-buffer "^5.1.2"
+
+mdn-data@2.0.14:
+  version "2.0.14"
+  resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
+  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+
+mdn-data@2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+  integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
+media-typer@0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+memory-fs@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+  integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+  integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
+merge-descriptors@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+merge-source-map@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+  integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+  dependencies:
+    source-map "^0.6.1"
+
+methods@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+  version "3.1.10"
+  resolved "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+  integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+  dependencies:
+    bn.js "^4.0.0"
+    brorand "^1.0.1"
+
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+  version "1.52.0"
+  resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@~2.1.7:
+  version "2.1.35"
+  resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@1.6.0, mime@^1.2.11, mime@^1.4.1:
+  version "1.6.0"
+  resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.0.3, mime@^2.4.4:
+  version "2.6.0"
+  resolved "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+  integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
+min-document@^2.19.0:
+  version "2.19.0"
+  resolved "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+  integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
+  dependencies:
+    dom-walk "^0.1.0"
+
+mini-css-extract-plugin@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
+  integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==
+  dependencies:
+    loader-utils "^1.1.0"
+    schema-utils "^1.0.0"
+    webpack-sources "^1.1.0"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+  integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
+minimatch@^3.0.4, minimatch@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+
+mississippi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+  integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+  dependencies:
+    concat-stream "^1.5.0"
+    duplexify "^3.4.2"
+    end-of-stream "^1.1.0"
+    flush-write-stream "^1.0.0"
+    from2 "^2.1.0"
+    parallel-transform "^1.1.0"
+    pump "^3.0.0"
+    pumpify "^1.3.3"
+    stream-each "^1.1.0"
+    through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
+  version "0.5.6"
+  resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+  integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+  dependencies:
+    minimist "^1.2.6"
+
+move-concurrently@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+  integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==
+  dependencies:
+    aproba "^1.1.1"
+    copy-concurrently "^1.0.0"
+    fs-write-stream-atomic "^1.0.8"
+    mkdirp "^0.5.1"
+    rimraf "^2.5.4"
+    run-queue "^1.0.3"
+
+mpd-parser@0.21.1:
+  version "0.21.1"
+  resolved "https://registry.npmmirror.com/mpd-parser/-/mpd-parser-0.21.1.tgz#4f4834074ed0a8e265d8b04a5d2d7b5045a4fa55"
+  integrity sha512-BxlSXWbKE1n7eyEPBnTEkrzhS3PdmkkKdM1pgKbPnPOH0WFZIc0sPOWi7m0Uo3Wd2a4Or8Qf4ZbS7+ASqQ49fw==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@videojs/vhs-utils" "^3.0.5"
+    "@xmldom/xmldom" "^0.7.2"
+    global "^4.4.0"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.1.1:
+  version "2.1.3"
+  resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+multicast-dns-service-types@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+  integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==
+
+multicast-dns@^6.0.1:
+  version "6.2.3"
+  resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+  integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+  dependencies:
+    dns-packet "^1.3.1"
+    thunky "^1.0.2"
+
+mux.js@4.3.2:
+  version "4.3.2"
+  resolved "https://registry.npmmirror.com/mux.js/-/mux.js-4.3.2.tgz#576d537df037dc5ec35ec1316b948d815d35c210"
+  integrity sha512-g0q6DPdvb3yYcoK7ElBGobdSSrhY/RjPt19U7uUc733aqvc5bCS/aCvL9z+448y+IoCZnYDwyZfQBBXMSmGOaQ==
+
+mux.js@6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmmirror.com/mux.js/-/mux.js-6.0.1.tgz#65ce0f7a961d56c006829d024d772902d28c7755"
+  integrity sha512-22CHb59rH8pWGcPGW5Og7JngJ9s+z4XuSlYvnxhLuc58cA1WqGDQPzuG8I+sPm1/p0CdgpzVTaKW408k5DNn8w==
+  dependencies:
+    "@babel/runtime" "^7.11.2"
+    global "^4.4.0"
+
+nan@^2.12.1:
+  version "2.16.0"
+  resolved "https://registry.npmmirror.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916"
+  integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==
+
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+native-request@^1.0.5:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz#acdb30fe2eefa3e1bc8c54b3a6852e9c5c0d3cb0"
+  integrity sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==
+
+negotiator@0.6.3:
+  version "0.6.3"
+  resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+neo-async@^2.5.0, neo-async@^2.6.1:
+  version "2.6.2"
+  resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+no-case@^2.2.0:
+  version "2.3.2"
+  resolved "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+  dependencies:
+    lower-case "^1.1.1"
+
+node-cli-config@^0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmmirror.com/node-cli-config/-/node-cli-config-0.0.1.tgz#af7774d85402a6b7cb96c1f91bb24fdd58d7c0b0"
+  integrity sha512-KYrWes6N0bjCEUicBXqEFdG+wrrrvBZAug4UrU+n6JVxnGKnlVYKZdpoJF1qFkPxcAM81d24lDbSZHRE88FZHw==
+
+node-forge@^0.10.0:
+  version "0.10.0"
+  resolved "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
+  integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+
+node-libs-browser@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+  integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+  dependencies:
+    assert "^1.1.1"
+    browserify-zlib "^0.2.0"
+    buffer "^4.3.0"
+    console-browserify "^1.1.0"
+    constants-browserify "^1.0.0"
+    crypto-browserify "^3.11.0"
+    domain-browser "^1.1.1"
+    events "^3.0.0"
+    https-browserify "^1.0.0"
+    os-browserify "^0.3.0"
+    path-browserify "0.0.1"
+    process "^0.11.10"
+    punycode "^1.2.4"
+    querystring-es3 "^0.2.0"
+    readable-stream "^2.3.3"
+    stream-browserify "^2.0.1"
+    stream-http "^2.7.2"
+    string_decoder "^1.0.0"
+    timers-browserify "^2.0.4"
+    tty-browserify "0.0.0"
+    url "^0.11.0"
+    util "^0.11.0"
+    vm-browserify "^1.0.1"
+
+node-releases@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666"
+  integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==
+
+nopt@~1.0.10:
+  version "1.0.10"
+  resolved "https://registry.npmmirror.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+  integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
+  dependencies:
+    abbrev "1"
+
+normalize-path@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+  integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
+  dependencies:
+    remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+normalize-url@^1.4.0:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+  integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==
+  dependencies:
+    object-assign "^4.0.1"
+    prepend-http "^1.0.0"
+    query-string "^4.1.0"
+    sort-keys "^1.0.0"
+
+normalize-url@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+  integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
+normalize-wheel@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45"
+  integrity sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==
+
+npm-run-path@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+  integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+  dependencies:
+    path-key "^2.0.0"
+
+nth-check@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+  dependencies:
+    boolbase "~1.0.0"
+
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+  dependencies:
+    boolbase "^1.0.0"
+
+num2fraction@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+  integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==
+
+oauth-sign@~0.8.1:
+  version "0.8.2"
+  resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+  integrity sha512-VlF07iu3VV3+BTXj43Nmp6Irt/G7j/NgEctUS6IweH1RGhURjjCc2NWtzXFPXXWWfc7hgbXQdtiQu2LGp6MxUg==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
+object-inspect@^1.12.0, object-inspect@^1.9.0:
+  version "1.12.2"
+  resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
+  integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
+
+object-is@^1.0.1:
+  version "1.1.5"
+  resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+  integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
+  dependencies:
+    isobject "^3.0.0"
+
+object.assign@^4.0.1, object.assign@^4.1.0, object.assign@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+  dependencies:
+    call-bind "^1.0.0"
+    define-properties "^1.1.3"
+    has-symbols "^1.0.1"
+    object-keys "^1.1.1"
+
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
+  version "2.1.4"
+  resolved "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37"
+  integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==
+  dependencies:
+    array.prototype.reduce "^1.0.4"
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.20.1"
+
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
+  dependencies:
+    isobject "^3.0.1"
+
+object.values@^1.1.0:
+  version "1.1.5"
+  resolved "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
+  integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+obuf@^1.0.0, obuf@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+  integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
+
+on-finished@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+  integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+  dependencies:
+    ee-first "1.1.1"
+
+on-headers@~1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+  integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+opn@^5.5.0:
+  version "5.5.0"
+  resolved "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+  integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+  dependencies:
+    is-wsl "^1.1.0"
+
+optimize-css-assets-webpack-plugin@^5.0.1:
+  version "5.0.8"
+  resolved "https://registry.npmmirror.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a"
+  integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q==
+  dependencies:
+    cssnano "^4.1.10"
+    last-call-webpack-plugin "^3.0.0"
+
+optionator@^0.8.1:
+  version "0.8.3"
+  resolved "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+  dependencies:
+    deep-is "~0.1.3"
+    fast-levenshtein "~2.0.6"
+    levn "~0.3.0"
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+    word-wrap "~1.2.3"
+
+os-browserify@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+  integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+  dependencies:
+    p-limit "^2.2.0"
+
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-retry@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+  integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+  dependencies:
+    retry "^0.12.0"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+  version "1.0.11"
+  resolved "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+  integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+  integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+  dependencies:
+    cyclist "^1.0.1"
+    inherits "^2.0.3"
+    readable-stream "^2.1.5"
+
+param-case@2.1.x:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+  integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==
+  dependencies:
+    no-case "^2.2.0"
+
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+  version "5.1.6"
+  resolved "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
+  integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
+  dependencies:
+    asn1.js "^5.2.0"
+    browserify-aes "^1.0.0"
+    evp_bytestokey "^1.0.0"
+    pbkdf2 "^3.0.3"
+    safe-buffer "^5.1.1"
+
+parse-code-context@^0.2.1:
+  version "0.2.2"
+  resolved "https://registry.npmmirror.com/parse-code-context/-/parse-code-context-0.2.2.tgz#144b8afb7219482d7e88c1eb6a765596f3a6ac0d"
+  integrity sha512-KXuyOOvLSjubf5bzmYOaK09qUVJSGzAbN1AR/KtkIcP7U5j0BmNun9vOMxrCvkxiRVKoVXTm2YrgIYM4Vfw8tw==
+
+parse-headers@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9"
+  integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==
+
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
+parse-passwd@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+  integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
+parse5@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.npmmirror.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+  integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+  dependencies:
+    "@types/node" "*"
+
+parseurl@~1.3.2, parseurl@~1.3.3:
+  version "1.3.3"
+  resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+  integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
+
+path-browserify@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+  integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+  integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-is-inside@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
+
+path-key@^2.0.0, path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-to-regexp@0.1.7:
+  version "0.1.7"
+  resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
+path-type@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+  dependencies:
+    pify "^3.0.0"
+
+pbkdf2@^3.0.3:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+  integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+  dependencies:
+    create-hash "^1.1.2"
+    create-hmac "^1.1.4"
+    ripemd160 "^2.0.1"
+    safe-buffer "^5.0.1"
+    sha.js "^2.4.8"
+
+pdfjs-dist@2.6.347:
+  version "2.6.347"
+  resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
+  integrity sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ==
+
+performance-now@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+  integrity sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==
+
+picocolors@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
+  integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
+
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+  dependencies:
+    pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
+pkcs7@^0.2.3:
+  version "0.2.3"
+  resolved "https://registry.npmmirror.com/pkcs7/-/pkcs7-0.2.3.tgz#22d60666d01065c5f24439098e4a4830452273be"
+  integrity sha512-kJRwmADEQUg+qJyRgWLtpEL9q9cFjZschejTEK3GRjKvnsU9G5WWoe/wKqRgbBoqWdVSeTUKP6vIA3Y72M3rWA==
+
+pkcs7@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/pkcs7/-/pkcs7-1.0.4.tgz#6090b9e71160dabf69209d719cbafa538b00a1cb"
+  integrity sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==
+  dependencies:
+    "@babel/runtime" "^7.5.5"
+
+pkg-dir@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  dependencies:
+    find-up "^3.0.0"
+
+pkg-dir@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pngjs@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
+  integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
+
+portfinder@^1.0.26:
+  version "1.0.28"
+  resolved "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
+  integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==
+  dependencies:
+    async "^2.6.2"
+    debug "^3.1.1"
+    mkdirp "^0.5.5"
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
+
+postcss-calc@^5.2.0:
+  version "5.3.1"
+  resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+  integrity sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q==
+  dependencies:
+    postcss "^5.0.2"
+    postcss-message-helpers "^2.0.0"
+    reduce-css-calc "^1.2.6"
+
+postcss-calc@^7.0.1:
+  version "7.0.5"
+  resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e"
+  integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==
+  dependencies:
+    postcss "^7.0.27"
+    postcss-selector-parser "^6.0.2"
+    postcss-value-parser "^4.0.2"
+
+postcss-colormin@^2.1.8:
+  version "2.2.2"
+  resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+  integrity sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w==
+  dependencies:
+    colormin "^1.0.5"
+    postcss "^5.0.13"
+    postcss-value-parser "^3.2.3"
+
+postcss-colormin@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+  integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+  dependencies:
+    browserslist "^4.0.0"
+    color "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^2.3.4:
+  version "2.6.1"
+  resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+  integrity sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA==
+  dependencies:
+    postcss "^5.0.11"
+    postcss-value-parser "^3.1.2"
+
+postcss-convert-values@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+  integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-discard-comments@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+  integrity sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg==
+  dependencies:
+    postcss "^5.0.14"
+
+postcss-discard-comments@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+  integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-duplicates@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+  integrity sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA==
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-discard-duplicates@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+  integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-empty@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+  integrity sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og==
+  dependencies:
+    postcss "^5.0.14"
+
+postcss-discard-empty@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+  integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-overridden@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+  integrity sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA==
+  dependencies:
+    postcss "^5.0.16"
+
+postcss-discard-overridden@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+  integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-unused@^2.2.1:
+  version "2.2.3"
+  resolved "https://registry.npmmirror.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+  integrity sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg==
+  dependencies:
+    postcss "^5.0.14"
+    uniqs "^2.0.0"
+
+postcss-filter-plugins@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
+  integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-load-config@^2.0.0:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a"
+  integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+  integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+  dependencies:
+    loader-utils "^1.1.0"
+    postcss "^7.0.0"
+    postcss-load-config "^2.0.0"
+    schema-utils "^1.0.0"
+
+postcss-merge-idents@^2.1.5:
+  version "2.1.7"
+  resolved "https://registry.npmmirror.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+  integrity sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA==
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.10"
+    postcss-value-parser "^3.1.1"
+
+postcss-merge-longhand@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+  integrity sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg==
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-merge-longhand@^4.0.11:
+  version "4.0.11"
+  resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+  integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+  dependencies:
+    css-color-names "0.0.4"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    stylehacks "^4.0.0"
+
+postcss-merge-rules@^2.0.3:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+  integrity sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q==
+  dependencies:
+    browserslist "^1.5.2"
+    caniuse-api "^1.5.2"
+    postcss "^5.0.4"
+    postcss-selector-parser "^2.2.2"
+    vendors "^1.0.0"
+
+postcss-merge-rules@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+  integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    cssnano-util-same-parent "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+    vendors "^1.0.0"
+
+postcss-message-helpers@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+  integrity sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA==
+
+postcss-minify-font-values@^1.0.2:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+  integrity sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ==
+  dependencies:
+    object-assign "^4.0.1"
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.2"
+
+postcss-minify-font-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+  integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+  integrity sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q==
+  dependencies:
+    postcss "^5.0.12"
+    postcss-value-parser "^3.3.0"
+
+postcss-minify-gradients@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+  integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    is-color-stop "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^1.0.4:
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+  integrity sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow==
+  dependencies:
+    alphanum-sort "^1.0.1"
+    postcss "^5.0.2"
+    postcss-value-parser "^3.0.2"
+    uniqs "^2.0.0"
+
+postcss-minify-params@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+  integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    browserslist "^4.0.0"
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    uniqs "^2.0.0"
+
+postcss-minify-selectors@^2.0.4:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+  integrity sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA==
+  dependencies:
+    alphanum-sort "^1.0.2"
+    has "^1.0.1"
+    postcss "^5.0.14"
+    postcss-selector-parser "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+  integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
+postcss-modules-extract-imports@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+  integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+  dependencies:
+    postcss "^7.0.5"
+
+postcss-modules-local-by-default@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+  integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
+  dependencies:
+    postcss "^7.0.6"
+    postcss-selector-parser "^6.0.0"
+    postcss-value-parser "^3.3.1"
+
+postcss-modules-scope@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
+  integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
+  dependencies:
+    postcss "^7.0.6"
+    postcss-selector-parser "^6.0.0"
+
+postcss-modules-values@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+  integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
+  dependencies:
+    icss-replace-symbols "^1.1.0"
+    postcss "^7.0.6"
+
+postcss-normalize-charset@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+  integrity sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ==
+  dependencies:
+    postcss "^5.0.5"
+
+postcss-normalize-charset@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+  integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+  integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+  integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+  integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+  integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+  dependencies:
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+  integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-unicode@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+  integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-url@^3.0.7:
+  version "3.0.8"
+  resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+  integrity sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig==
+  dependencies:
+    is-absolute-url "^2.0.0"
+    normalize-url "^1.4.0"
+    postcss "^5.0.14"
+    postcss-value-parser "^3.2.3"
+
+postcss-normalize-url@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+  integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
+  dependencies:
+    is-absolute-url "^2.0.0"
+    normalize-url "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-whitespace@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+  integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-ordered-values@^2.1.0:
+  version "2.2.3"
+  resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+  integrity sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg==
+  dependencies:
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.1"
+
+postcss-ordered-values@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+  integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-pxtorem@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-4.0.1.tgz#9c64d0efe4885473cc1cb0305c6ffc3ebb45b1cd"
+  integrity sha512-oxlU1r19IMBNxmj4yP2h2dLzaFvZeR3rR9Km6+ECA+S0A/IXsOXjd/byH2i/DPGWWBsDVJrRQiRYjLApKkHu0A==
+  dependencies:
+    object-assign "^4.1.0"
+    postcss "^5.2.10"
+
+postcss-reduce-idents@^2.2.2:
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+  integrity sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w==
+  dependencies:
+    postcss "^5.0.4"
+    postcss-value-parser "^3.0.2"
+
+postcss-reduce-initial@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+  integrity sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA==
+  dependencies:
+    postcss "^5.0.4"
+
+postcss-reduce-initial@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+  integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+
+postcss-reduce-transforms@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+  integrity sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ==
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.8"
+    postcss-value-parser "^3.0.1"
+
+postcss-reduce-transforms@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+  integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+  version "2.2.3"
+  resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+  integrity sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==
+  dependencies:
+    flatten "^1.0.2"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-selector-parser@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
+  integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==
+  dependencies:
+    dot-prop "^5.2.0"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
+  version "6.0.10"
+  resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
+  integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
+  dependencies:
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
+
+postcss-svgo@^2.1.1:
+  version "2.1.6"
+  resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+  integrity sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ==
+  dependencies:
+    is-svg "^2.0.0"
+    postcss "^5.0.14"
+    postcss-value-parser "^3.2.3"
+    svgo "^0.7.0"
+
+postcss-svgo@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
+  integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    svgo "^1.0.0"
+
+postcss-unique-selectors@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+  integrity sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g==
+  dependencies:
+    alphanum-sort "^1.0.1"
+    postcss "^5.0.4"
+    uniqs "^2.0.0"
+
+postcss-unique-selectors@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+  integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    postcss "^7.0.0"
+    uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss-zindex@^2.0.1:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+  integrity sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w==
+  dependencies:
+    has "^1.0.1"
+    postcss "^5.0.4"
+    uniqs "^2.0.0"
+
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.10, postcss@^5.2.16:
+  version "5.2.18"
+  resolved "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+  integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
+  dependencies:
+    chalk "^1.1.3"
+    js-base64 "^2.1.9"
+    source-map "^0.5.6"
+    supports-color "^3.2.3"
+
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6:
+  version "7.0.39"
+  resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
+  dependencies:
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+prepend-http@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+  integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==
+
+"prettier@^1.18.2 || ^2.0.0":
+  version "2.7.0"
+  resolved "https://registry.npmmirror.com/prettier/-/prettier-2.7.0.tgz#a4fdae07e5596c51c9857ea676cd41a0163879d6"
+  integrity sha512-nwoX4GMFgxoPC6diHvSwmK/4yU8FFH3V8XWtLQrbj4IBsK2pkYhG4kf/ljF/haaZ/aii+wNJqISrCDPgxGWDVQ==
+
+pretty-error@^2.0.2:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6"
+  integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==
+  dependencies:
+    lodash "^4.17.20"
+    renderkid "^2.0.4"
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10:
+  version "0.11.10"
+  resolved "https://registry.npmmirror.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
+process@~0.5.1:
+  version "0.5.2"
+  resolved "https://registry.npmmirror.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+  integrity sha512-oNpcutj+nYX2FjdEW7PGltWhXulAnFlM0My/k48L90hARCOJtvBbQXc/6itV2jDvU5xAAtonP+r6wmQgCcbAUA==
+
+progress-bar-webpack-plugin@^1.9.3:
+  version "1.12.1"
+  resolved "https://registry.npmmirror.com/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.12.1.tgz#bbf3b1137a4ba2474eeb111377d6c1a580c57dd1"
+  integrity sha512-tVbPB5xBbqNwdH3mwcxzjL1r1Vrm/xGu93OsqVSAbCaXGoKFvfWIh0gpMDpn2kYsPVRSAIK0pBkP9Vfs+JJibQ==
+  dependencies:
+    chalk "^1.1.1"
+    object.assign "^4.0.1"
+    progress "^1.1.8"
+
+progress@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.npmmirror.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+  integrity sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==
+
+promise-inflight@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+  integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
+promise@^7.1.1:
+  version "7.3.1"
+  resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+  dependencies:
+    asap "~2.0.3"
+
+proxy-addr@~2.0.7:
+  version "2.0.7"
+  resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+  integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+  dependencies:
+    forwarded "0.2.0"
+    ipaddr.js "1.9.1"
+
+prr@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+  integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
+
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
+
+public-encrypt@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+  integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+  dependencies:
+    bn.js "^4.1.0"
+    browserify-rsa "^4.0.0"
+    create-hash "^1.1.0"
+    parse-asn1 "^5.0.0"
+    randombytes "^2.0.1"
+    safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+  integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
+pumpify@^1.3.3:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+  integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+  dependencies:
+    duplexify "^3.6.0"
+    inherits "^2.0.3"
+    pump "^2.0.0"
+
+punycode@1.3.2:
+  version "1.3.2"
+  resolved "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+  integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==
+
+punycode@^1.2.4, punycode@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
+
+punycode@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
+
+qr.js@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.npmmirror.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f"
+  integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==
+
+qrcode@^1.4.1:
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.0.tgz#95abb8a91fdafd86f8190f2836abbfc500c72d1b"
+  integrity sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==
+  dependencies:
+    dijkstrajs "^1.0.1"
+    encode-utf8 "^1.0.3"
+    pngjs "^5.0.0"
+    yargs "^15.3.1"
+
+qs@6.10.3:
+  version "6.10.3"
+  resolved "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
+  integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
+  dependencies:
+    side-channel "^1.0.4"
+
+qs@~6.4.0:
+  version "6.4.1"
+  resolved "https://registry.npmmirror.com/qs/-/qs-6.4.1.tgz#2bad97710a5b661c366b378b1e3a44a592ff45e6"
+  integrity sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ==
+
+query-string@^4.1.0:
+  version "4.3.4"
+  resolved "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+  integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==
+  dependencies:
+    object-assign "^4.1.0"
+    strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+  integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==
+
+querystring@0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+  integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==
+
+querystringify@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+  integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+  integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+  dependencies:
+    randombytes "^2.0.5"
+    safe-buffer "^5.1.0"
+
+range-parser@^1.2.1, range-parser@~1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+  integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.1:
+  version "2.5.1"
+  resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+  integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+  dependencies:
+    bytes "3.1.2"
+    http-errors "2.0.0"
+    iconv-lite "0.4.24"
+    unpipe "1.0.0"
+
+raw-loader@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+  integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
+  version "2.3.7"
+  resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+readable-stream@^3.0.6, readable-stream@^3.6.0:
+  version "3.6.0"
+  resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+  integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readdirp@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+    micromatch "^3.1.10"
+    readable-stream "^2.0.2"
+
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+  dependencies:
+    picomatch "^2.2.1"
+
+reduce-css-calc@^1.2.6:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+  integrity sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==
+  dependencies:
+    balanced-match "^0.4.2"
+    math-expression-evaluator "^1.2.14"
+    reduce-function-call "^1.0.1"
+
+reduce-function-call@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f"
+  integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==
+  dependencies:
+    balanced-match "^1.0.0"
+
+regenerate-unicode-properties@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
+  integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==
+  dependencies:
+    regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.4:
+  version "0.13.9"
+  resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+  integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
+regenerator-transform@^0.15.0:
+  version "0.15.0"
+  resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"
+  integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==
+  dependencies:
+    "@babel/runtime" "^7.8.4"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+  integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    functions-have-names "^1.2.2"
+
+regexpu-core@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3"
+  integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==
+  dependencies:
+    regenerate "^1.4.2"
+    regenerate-unicode-properties "^10.0.1"
+    regjsgen "^0.6.0"
+    regjsparser "^0.8.2"
+    unicode-match-property-ecmascript "^2.0.0"
+    unicode-match-property-value-ecmascript "^2.0.0"
+
+regjsgen@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d"
+  integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==
+
+regjsparser@^0.8.2:
+  version "0.8.4"
+  resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f"
+  integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==
+  dependencies:
+    jsesc "~0.5.0"
+
+relateurl@0.2.x:
+  version "0.2.7"
+  resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+
+remove-trailing-separator@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+  integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==
+
+renderkid@^2.0.4:
+  version "2.0.7"
+  resolved "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609"
+  integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==
+  dependencies:
+    css-select "^4.1.3"
+    dom-converter "^0.2.0"
+    htmlparser2 "^6.1.0"
+    lodash "^4.17.21"
+    strip-ansi "^3.0.1"
+
+repeat-element@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
+request@2.81.0:
+  version "2.81.0"
+  resolved "https://registry.npmmirror.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+  integrity sha512-IZnsR7voF0miGSu29EXPRgPTuEsI/+aibNSBbN1pplrfartF5wDYGADz3iD9vmBVf2r00rckWZf8BtS5kk7Niw==
+  dependencies:
+    aws-sign2 "~0.6.0"
+    aws4 "^1.2.1"
+    caseless "~0.12.0"
+    combined-stream "~1.0.5"
+    extend "~3.0.0"
+    forever-agent "~0.6.1"
+    form-data "~2.1.1"
+    har-validator "~4.2.1"
+    hawk "~3.1.3"
+    http-signature "~1.1.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.7"
+    oauth-sign "~0.8.1"
+    performance-now "^0.2.0"
+    qs "~6.4.0"
+    safe-buffer "^5.0.1"
+    stringstream "~0.0.4"
+    tough-cookie "~2.3.0"
+    tunnel-agent "^0.6.0"
+    uuid "^3.0.0"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resize-observer-polyfill@^1.5.0:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-cwd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+  integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==
+  dependencies:
+    resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+  integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+  dependencies:
+    expand-tilde "^2.0.0"
+    global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+  integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
+
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
+
+resolve@^1.14.2:
+  version "1.22.0"
+  resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
+  integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
+  dependencies:
+    is-core-module "^2.8.1"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+rgb-regex@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+  integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==
+
+rgba-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+  integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==
+
+rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+  dependencies:
+    hash-base "^3.0.0"
+    inherits "^2.0.1"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+  integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==
+  dependencies:
+    aproba "^1.1.1"
+
+rust-result@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72"
+  integrity sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==
+  dependencies:
+    individual "^2.0.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-json-parse@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac"
+  integrity sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==
+  dependencies:
+    rust-result "^1.0.0"
+
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
+  dependencies:
+    ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@~1.2.1, sax@~1.2.4:
+  version "1.2.4"
+  resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^0.4.0:
+  version "0.4.7"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+  integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+  dependencies:
+    ajv "^6.1.0"
+    ajv-keywords "^3.1.0"
+
+schema-utils@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+  integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+  dependencies:
+    ajv "^6.1.0"
+    ajv-errors "^1.0.0"
+    ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5, schema-utils@^2.7.0:
+  version "2.7.1"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+  integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+  dependencies:
+    "@types/json-schema" "^7.0.5"
+    ajv "^6.12.4"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
+  integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
+select-hose@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+  integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+
+selfsigned@^1.10.8:
+  version "1.10.14"
+  resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574"
+  integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==
+  dependencies:
+    node-forge "^0.10.0"
+
+semver@7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^5.5.0, semver@^5.6.0:
+  version "5.7.1"
+  resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+send@0.18.0:
+  version "0.18.0"
+  resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+  integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+  dependencies:
+    debug "2.6.9"
+    depd "2.0.0"
+    destroy "1.2.0"
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    etag "~1.8.1"
+    fresh "0.5.2"
+    http-errors "2.0.0"
+    mime "1.6.0"
+    ms "2.1.3"
+    on-finished "2.4.1"
+    range-parser "~1.2.1"
+    statuses "2.0.1"
+
+serialize-javascript@^1.7.0:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb"
+  integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==
+
+serialize-javascript@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+  integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+  dependencies:
+    randombytes "^2.1.0"
+
+serve-index@^1.9.1:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+  integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==
+  dependencies:
+    accepts "~1.3.4"
+    batch "0.6.1"
+    debug "2.6.9"
+    escape-html "~1.0.3"
+    http-errors "~1.6.2"
+    mime-types "~2.1.17"
+    parseurl "~1.3.2"
+
+serve-static@1.15.0:
+  version "1.15.0"
+  resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+  integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+  dependencies:
+    encodeurl "~1.0.2"
+    escape-html "~1.0.3"
+    parseurl "~1.3.3"
+    send "0.18.0"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+  integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
+setprototypeof@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+setprototypeof@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+  version "2.4.11"
+  resolved "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+  dependencies:
+    inherits "^2.0.1"
+    safe-buffer "^5.0.1"
+
+shake.js@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/shake.js/-/shake.js-1.2.2.tgz#b2ac560a82abe68d78a029623a7088e1b30bacff"
+  integrity sha512-2onqnUWjVMsW8zFIlJ0gBGIzt33WkExKMToc5qgOX7HuHD1lBu52FQwlk763iZAlVE+ihiT1fHFMabzlVw/xIQ==
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
+shvl@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/shvl/-/shvl-2.0.3.tgz#eb4bd37644f5684bba1fc52c3010c96fb5e6afd1"
+  integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw==
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+signal-exit@^3.0.0:
+  version "3.0.7"
+  resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+  dependencies:
+    is-arrayish "^0.3.1"
+
+slash@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==
+
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
+sntp@1.x.x:
+  version "1.0.9"
+  resolved "https://registry.npmmirror.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+  integrity sha512-7bgVOAnPj3XjrKY577S+puCKGCRlUrcrEdsMeRXlg9Ghf5df/xNi6sONUa43WrHUd3TjJBF7O04jYoiY0FVa0A==
+  dependencies:
+    hoek "2.x.x"
+
+sockjs-client@^1.5.0:
+  version "1.6.1"
+  resolved "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806"
+  integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==
+  dependencies:
+    debug "^3.2.7"
+    eventsource "^2.0.2"
+    faye-websocket "^0.11.4"
+    inherits "^2.0.4"
+    url-parse "^1.5.10"
+
+sockjs@^0.3.21:
+  version "0.3.24"
+  resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
+  integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
+  dependencies:
+    faye-websocket "^0.11.3"
+    uuid "^8.3.2"
+    websocket-driver "^0.7.4"
+
+sort-keys@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+  integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==
+  dependencies:
+    is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-list-map@~0.1.7:
+  version "0.1.8"
+  resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+  integrity sha512-cabwdhnSNf/tTDMh/DXZXlkeQLvdYT5xfGYBohqHG7wb3bBQrQlHQNWM9NWSOboXXK1zgwz6JzS5e4hZq9vxMw==
+
+source-map-resolve@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+  dependencies:
+    atob "^2.1.2"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-support@~0.5.12:
+  version "0.5.21"
+  resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map-url@0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+  integrity sha512-liJwHPI9x9d9w5WSIjM58MqGmmb7XzNqwdUA3kSBQ4lmDngexlKwawGzK3J1mKXi6+sysoMDlpVyZh9sv5vRfw==
+
+source-map-url@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.3:
+  version "0.5.7"
+  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdy-transport@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
+  integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  dependencies:
+    debug "^4.1.0"
+    detect-node "^2.0.4"
+    hpack.js "^2.1.6"
+    obuf "^1.1.2"
+    readable-stream "^3.0.6"
+    wbuf "^1.7.3"
+
+spdy@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
+  integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
+  dependencies:
+    debug "^4.1.0"
+    handle-thing "^2.0.0"
+    http-deceiver "^1.2.7"
+    select-hose "^2.0.0"
+    spdy-transport "^3.0.0"
+
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+sshpk@^1.7.0:
+  version "1.17.0"
+  resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+  integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
+  dependencies:
+    asn1 "~0.2.3"
+    assert-plus "^1.0.0"
+    bcrypt-pbkdf "^1.0.0"
+    dashdash "^1.12.0"
+    ecc-jsbn "~0.1.1"
+    getpass "^0.1.1"
+    jsbn "~0.1.0"
+    safer-buffer "^2.0.2"
+    tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+  integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
+  dependencies:
+    figgy-pudding "^3.5.1"
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
+statuses@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+  integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+"statuses@>= 1.4.0 < 2":
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
+stream-browserify@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+  integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+  dependencies:
+    inherits "~2.0.1"
+    readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+  integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+  dependencies:
+    end-of-stream "^1.1.0"
+    stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+  version "2.8.3"
+  resolved "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+  integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+  dependencies:
+    builtin-status-codes "^3.0.0"
+    inherits "^2.0.1"
+    readable-stream "^2.3.6"
+    to-arraybuffer "^1.0.0"
+    xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+  integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+strict-uri-encode@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
+
+string-width@^3.0.0, string-width@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+  version "4.2.3"
+  resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string.prototype.trimend@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
+  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+string.prototype.trimstart@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
+  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+string_decoder@^1.0.0, string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+stringstream@~0.0.4:
+  version "0.0.6"
+  resolved "https://registry.npmmirror.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
+  integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
+  dependencies:
+    ansi-regex "^2.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-comments@^0.4.4:
+  version "0.4.4"
+  resolved "https://registry.npmmirror.com/strip-comments/-/strip-comments-0.4.4.tgz#b9caafc4fe905f96c091df89f9a7215f2aa629c6"
+  integrity sha512-PKuQvshMx4tlA9rWe6zfaWukQtj3Smq1dpJpZsmXE7FL4sl1hHu0L1QP5BYlFF60N76hPiSLT2q3KTDh8XSTHg==
+  dependencies:
+    extend-shallow "^2.0.1"
+    extract-comments "^0.10.1"
+
+strip-css-comments@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/strip-css-comments/-/strip-css-comments-3.0.0.tgz#7a5625eff8a2b226cf8947a11254da96e13dae89"
+  integrity sha512-xJwk2yMZ6j+0Clj7ETUfqQ6frsaCIqNGg3zjTVswIt3SbiOsCQgRI1E93hdt/JgGfh5De/sTwxrnrBhhWzMwcg==
+  dependencies:
+    is-regexp "^1.0.0"
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
+style-loader@^0.23.1:
+  version "0.23.1"
+  resolved "https://registry.npmmirror.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+  integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+  dependencies:
+    loader-utils "^1.1.0"
+    schema-utils "^1.0.0"
+
+style-resources-loader@^1.2.1:
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/style-resources-loader/-/style-resources-loader-1.5.0.tgz#6e0585ca475b9dac45387c308be90d74c814f41f"
+  integrity sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw==
+  dependencies:
+    glob "^7.2.0"
+    loader-utils "^2.0.0"
+    schema-utils "^2.7.0"
+    tslib "^2.3.1"
+
+stylehacks@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+  integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
+supports-color@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
+
+supports-color@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+  integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==
+  dependencies:
+    has-flag "^1.0.0"
+
+supports-color@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+  dependencies:
+    has-flag "^3.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-tags@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+  integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
+
+svgo@^0.7.0:
+  version "0.7.2"
+  resolved "https://registry.npmmirror.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+  integrity sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==
+  dependencies:
+    coa "~1.0.1"
+    colors "~1.1.2"
+    csso "~2.3.1"
+    js-yaml "~3.7.0"
+    mkdirp "~0.5.1"
+    sax "~1.2.1"
+    whet.extend "~0.9.9"
+
+svgo@^1.0.0:
+  version "1.3.2"
+  resolved "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+  integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+  dependencies:
+    chalk "^2.4.1"
+    coa "^2.0.2"
+    css-select "^2.0.0"
+    css-select-base-adapter "^0.1.1"
+    css-tree "1.0.0-alpha.37"
+    csso "^4.0.2"
+    js-yaml "^3.13.1"
+    mkdirp "~0.5.1"
+    object.values "^1.1.0"
+    sax "~1.2.4"
+    stable "^0.1.8"
+    unquote "~1.1.1"
+    util.promisify "~1.0.0"
+
+tapable@^1.0.0, tapable@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+  integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+terser-webpack-plugin@^1.4.3:
+  version "1.4.5"
+  resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+  integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+  dependencies:
+    cacache "^12.0.2"
+    find-cache-dir "^2.1.0"
+    is-wsl "^1.1.0"
+    schema-utils "^1.0.0"
+    serialize-javascript "^4.0.0"
+    source-map "^0.6.1"
+    terser "^4.1.2"
+    webpack-sources "^1.4.0"
+    worker-farm "^1.7.0"
+
+terser@^4.1.2:
+  version "4.8.0"
+  resolved "https://registry.npmmirror.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+  integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+  dependencies:
+    commander "^2.20.0"
+    source-map "~0.6.1"
+    source-map-support "~0.5.12"
+
+text-segmentation@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
+  integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
+  dependencies:
+    utrie "^1.0.2"
+
+throttle-debounce@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz#51853da37be68a155cb6e827b3514a3c422e89cd"
+  integrity sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==
+
+through2@^2.0.0:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  dependencies:
+    readable-stream "~2.3.6"
+    xtend "~4.0.1"
+
+thunky@^1.0.2:
+  version "1.1.0"
+  resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
+  integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+
+timers-browserify@^2.0.4:
+  version "2.0.12"
+  resolved "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
+  integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
+  dependencies:
+    setimmediate "^1.0.4"
+
+timsort@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+  integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
+
+to-arraybuffer@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+  integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
+toidentifier@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+toposort@^1.0.0:
+  version "1.0.7"
+  resolved "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
+  integrity sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==
+
+touch@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de"
+  integrity sha512-7PLLVW4cfMVYXtMgX0ynJvyZDiupF2rzGzzf0yATTzgCgNK98DHjRSTm5zU1bFUtRjFdXNrEynn9+vhflVpC0A==
+  dependencies:
+    nopt "~1.0.10"
+
+tough-cookie@~2.3.0:
+  version "2.3.4"
+  resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+  integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==
+  dependencies:
+    punycode "^1.4.1"
+
+tslib@^1.10.0:
+  version "1.14.1"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1:
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
+  integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+
+tsml@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/tsml/-/tsml-1.0.1.tgz#89f8218b9d9e257f47d7f6b56d01c5a4d2c68fc3"
+  integrity sha512-3KmepnH9SUsoOVtg013CRrL7c+AK7ECaquAsJdvu4288EDJuraqBlP4PDXT/rLEJ9YDn4jqLAzRJsnFPx+V6lg==
+
+tty-browserify@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+  integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+  version "0.14.5"
+  resolved "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+  dependencies:
+    prelude-ls "~1.1.2"
+
+type-fest@^0.15.1:
+  version "0.15.1"
+  resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.15.1.tgz#d2c4e73d3e4a53cf1a906396dd460a1c5178ca00"
+  integrity sha512-n+UXrN8i5ioo7kqT/nF8xsEzLaqFra7k32SEsSPwvXVGyAcRgV/FUQN/sgfptJTR1oRmmq7z4IXMFSM7im7C9A==
+
+type-is@~1.6.18:
+  version "1.6.18"
+  resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+  dependencies:
+    media-typer "0.3.0"
+    mime-types "~2.1.24"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
+uglify-js@3.4.x:
+  version "3.4.10"
+  resolved "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
+  integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==
+  dependencies:
+    commander "~2.19.0"
+    source-map "~0.6.1"
+
+uglify-js@^3.6.0:
+  version "3.16.0"
+  resolved "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.0.tgz#b778ba0831ca102c1d8ecbdec2d2bdfcc7353190"
+  integrity sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==
+
+uglifyjs-webpack-plugin@^2.1.2:
+  version "2.2.0"
+  resolved "https://registry.npmmirror.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz#e75bc80e7f1937f725954c9b4c5a1e967ea9d0d7"
+  integrity sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==
+  dependencies:
+    cacache "^12.0.2"
+    find-cache-dir "^2.1.0"
+    is-wsl "^1.1.0"
+    schema-utils "^1.0.0"
+    serialize-javascript "^1.7.0"
+    source-map "^0.6.1"
+    uglify-js "^3.6.0"
+    webpack-sources "^1.4.0"
+    worker-farm "^1.7.0"
+
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+  dependencies:
+    call-bind "^1.0.2"
+    has-bigints "^1.0.2"
+    has-symbols "^1.0.3"
+    which-boxed-primitive "^1.0.2"
+
+underscore@^1.8.3:
+  version "1.13.4"
+  resolved "https://registry.npmmirror.com/underscore/-/underscore-1.13.4.tgz#7886b46bbdf07f768e0052f1828e1dcab40c0dee"
+  integrity sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+  integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+  integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+  dependencies:
+    unicode-canonical-property-names-ecmascript "^2.0.0"
+    unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714"
+  integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
+  integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
+uniq@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+  integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==
+
+uniqs@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+  integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==
+
+unique-filename@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  dependencies:
+    unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+  integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+  integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
+upath@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+  integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+upper-case@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+  integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
+
+url-loader@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+  integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
+  dependencies:
+    loader-utils "^1.1.0"
+    mime "^2.0.3"
+    schema-utils "^1.0.0"
+
+url-parse@^1.5.10:
+  version "1.5.10"
+  resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+  integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+  dependencies:
+    querystringify "^2.1.1"
+    requires-port "^1.0.0"
+
+url-toolkit@^2.1.3, url-toolkit@^2.2.1:
+  version "2.2.5"
+  resolved "https://registry.npmmirror.com/url-toolkit/-/url-toolkit-2.2.5.tgz#58406b18e12c58803e14624df5e374f638b0f607"
+  integrity sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==
+
+url@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.npmmirror.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+  integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==
+  dependencies:
+    punycode "1.3.2"
+    querystring "0.2.0"
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+util.promisify@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+  integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+  dependencies:
+    define-properties "^1.1.2"
+    object.getownpropertydescriptors "^2.0.3"
+
+util.promisify@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+  integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.2"
+    has-symbols "^1.0.1"
+    object.getownpropertydescriptors "^2.1.0"
+
+util@0.10.3:
+  version "0.10.3"
+  resolved "https://registry.npmmirror.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+  integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==
+  dependencies:
+    inherits "2.0.1"
+
+util@^0.11.0:
+  version "0.11.1"
+  resolved "https://registry.npmmirror.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+  integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+  dependencies:
+    inherits "2.0.3"
+
+utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==
+
+utils-merge@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+
+utrie@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645"
+  integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
+  dependencies:
+    base64-arraybuffer "^1.0.2"
+
+uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2:
+  version "3.4.0"
+  resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^8.3.2:
+  version "8.3.2"
+  resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+  integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+v8-compile-cache@^2.1.1:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+  integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+validator@^9.3.0:
+  version "9.4.1"
+  resolved "https://registry.npmmirror.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663"
+  integrity sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==
+
+vanilla-masker@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/vanilla-masker/-/vanilla-masker-1.2.0.tgz#c2830e9d994a5fecd2261506477c2707fe589756"
+  integrity sha512-5SQeksiWaRYfbTaLVcqDPlvINGRt7ODbmWqqMMdT4GuZEC01KJm7FxaytscI5GZ9mlkTNQDwqllSHbv1ENxQEA==
+
+vant@^2.8.7:
+  version "2.12.47"
+  resolved "https://registry.npmmirror.com/vant/-/vant-2.12.47.tgz#7179f6120c4224b08431c31ba3928271a5ce4e39"
+  integrity sha512-D9QgxirzWuSJbLqU+TGgXRZ88OTmGDEtwxDrBr2JuLCZyijrYzc5KIrErd4c1MJoZsmYupqydyLqotoBkbQDjQ==
+  dependencies:
+    "@babel/runtime" "7.x"
+    "@vant/icons" "^1.7.1"
+    "@vant/popperjs" "^1.1.0"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    vue-lazyload "1.2.3"
+
+vary@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+vendors@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
+  integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
+
+verror@1.10.0:
+  version "1.10.0"
+  resolved "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+"video.js@^5.17.0 || ^6.2.0", "video.js@^5.19.1 || ^6.2.0", video.js@^6.6.0:
+  version "6.13.0"
+  resolved "https://registry.npmmirror.com/video.js/-/video.js-6.13.0.tgz#f9487d46327340fa48ecd51372a2981dbb6cde4c"
+  integrity sha512-36/JR/GhPQSZj0o+GNbhcEYv/b0SkV9SQsjlodAnzMQYN0TA7VhmqrKPYMCi1NGRYu7S9W3OaFCFoUxkYfSVlg==
+  dependencies:
+    babel-runtime "^6.9.2"
+    global "4.3.2"
+    safe-json-parse "4.0.0"
+    tsml "1.0.1"
+    videojs-font "2.1.0"
+    videojs-ie8 "1.1.2"
+    videojs-vtt.js "0.12.6"
+    xhr "2.4.0"
+
+"video.js@^6 || ^7":
+  version "7.19.2"
+  resolved "https://registry.npmmirror.com/video.js/-/video.js-7.19.2.tgz#83396db819b61e25328c020c0191dbe7a2187403"
+  integrity sha512-+rV/lJ1bDoMW3SbYlRp0eC9//RgvfBpEQ0USOyx44tHVxVyMjq+G9jZoiulsDXaIp4BX9q5+/y87TbZUysXBHA==
+  dependencies:
+    "@babel/runtime" "^7.12.5"
+    "@videojs/http-streaming" "2.14.2"
+    "@videojs/vhs-utils" "^3.0.4"
+    "@videojs/xhr" "2.6.0"
+    aes-decrypter "3.1.3"
+    global "^4.4.0"
+    keycode "^2.2.0"
+    m3u8-parser "4.7.1"
+    mpd-parser "0.21.1"
+    mux.js "6.0.1"
+    safe-json-parse "4.0.0"
+    videojs-font "3.2.0"
+    videojs-vtt.js "^0.15.3"
+
+videojs-contrib-hls@^5.12.2:
+  version "5.15.0"
+  resolved "https://registry.npmmirror.com/videojs-contrib-hls/-/videojs-contrib-hls-5.15.0.tgz#fe4957367e5d68b7d23f78ed32e37a9dd892a0a8"
+  integrity sha512-18zbMYZ0XRBKTPEayA9bFTWWrqhT9b4G8+zf0czJLD7Epe5PcK1I/3dflTHQeQ5rwlWir+/XnFU3sMg/B2MMcw==
+  dependencies:
+    aes-decrypter "1.0.3"
+    global "^4.3.0"
+    m3u8-parser "2.1.0"
+    mux.js "4.3.2"
+    url-toolkit "^2.1.3"
+    video.js "^5.19.1 || ^6.2.0"
+    videojs-contrib-media-sources "4.7.2"
+    webwackify "0.1.6"
+
+videojs-contrib-media-sources@4.7.2:
+  version "4.7.2"
+  resolved "https://registry.npmmirror.com/videojs-contrib-media-sources/-/videojs-contrib-media-sources-4.7.2.tgz#0adf929107d5b74cf2c8abb2824c82177e43858e"
+  integrity sha512-e6iCHWBFuV05EGo7v+pS9iepObXnJ9joms467gzi8ZjpKVb3ifha9M0Ja24Rd8JfvYpzjltsgDVtGFDvIg4hQQ==
+  dependencies:
+    global "^4.3.0"
+    mux.js "4.3.2"
+    video.js "^5.17.0 || ^6.2.0"
+    webwackify "0.1.6"
+
+videojs-flash@^2.1.0:
+  version "2.2.1"
+  resolved "https://registry.npmmirror.com/videojs-flash/-/videojs-flash-2.2.1.tgz#1a225dbb1ced200ae9bbf15e01fe4a61086d90f1"
+  integrity sha512-mHu6TD12EKkxMvr8tg4AcfV/DuVLff427nneoZom3N9Dd2bv0sJOWwdLPQH1v5BCuAuXAVuAOba56ovTl+G3tQ==
+  dependencies:
+    global "^4.4.0"
+    video.js "^6 || ^7"
+    videojs-swf "5.4.2"
+
+videojs-font@2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/videojs-font/-/videojs-font-2.1.0.tgz#a25930a67f6c9cfbf2bb88dacb8c6b451f093379"
+  integrity sha512-zFqWpLrXf1q8NtYx5qtZhMC6SLUFScDmR6j+UGPogobxR21lvXShhnzcNNMdOxJUuFLiToJ/BPpFUQwX4xhpvA==
+
+videojs-font@3.2.0:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/videojs-font/-/videojs-font-3.2.0.tgz#212c9d3f4e4ec3fa7345167d64316add35e92232"
+  integrity sha512-g8vHMKK2/JGorSfqAZQUmYYNnXmfec4MLhwtEFS+mMs2IDY398GLysy6BH6K+aS1KMNu/xWZ8Sue/X/mdQPliA==
+
+videojs-hotkeys@^0.2.20:
+  version "0.2.27"
+  resolved "https://registry.npmmirror.com/videojs-hotkeys/-/videojs-hotkeys-0.2.27.tgz#0df97952b9dff0e6cc1cf8a439fed7eac9c73f01"
+  integrity sha512-pwtm1QocRmzJy1PWQsmFVHyeldYHHpLdeATK3FsFHVMmNpz6CROkAn8TFy2UILr8Ghgq134K8jEKNue8HWpudQ==
+
+videojs-ie8@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/videojs-ie8/-/videojs-ie8-1.1.2.tgz#a23d3d8608ad7192b69c6077fc4eb848998d35d9"
+  integrity sha512-0Zb2T4MLkpfZbeGMK/Z93b8Lrepr+rLFoHgQV1CoDeFqXvH7b+Vsd/VHoILGxQrgCSHFQ7mAODR6oyMjuiD4/g==
+  dependencies:
+    es5-shim "^4.5.1"
+
+videojs-swf@5.4.2:
+  version "5.4.2"
+  resolved "https://registry.npmmirror.com/videojs-swf/-/videojs-swf-5.4.2.tgz#6964a9bff903b732f3e465314ae478a02a17e8ab"
+  integrity sha512-FGg+Csioa8/A/EacvFefBdb9Z0rSiMlheHDunZnN3xXfUF43jvjawcWFQnZvrv1Cs1nE1LBrHyUZjF7j2mKOLw==
+
+videojs-vtt.js@0.12.6:
+  version "0.12.6"
+  resolved "https://registry.npmmirror.com/videojs-vtt.js/-/videojs-vtt.js-0.12.6.tgz#e078600bda899eaa6f9c3307134cd0c811947b8e"
+  integrity sha512-XFXeGBQiljnElMhwCcZst0RDbZn2n8LU7ZScXryd3a00OaZsHAjdZu/7/RdSr7Z1jHphd45FnOvOQkGK4YrWCQ==
+  dependencies:
+    global "^4.3.1"
+
+videojs-vtt.js@^0.15.3:
+  version "0.15.3"
+  resolved "https://registry.npmmirror.com/videojs-vtt.js/-/videojs-vtt.js-0.15.3.tgz#84260393b79487fcf195d9372f812d7fab83a993"
+  integrity sha512-5FvVsICuMRx6Hd7H/Y9s9GDeEtYcXQWzGMS+sl4UX3t/zoHp3y+isSfIPRochnTH7h+Bh1ILyC639xy9Z6kPag==
+  dependencies:
+    global "^4.3.1"
+
+vm-browserify@^1.0.1:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+  integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+vue-hot-reload-api@^2.3.0:
+  version "2.3.4"
+  resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
+  integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
+
+vue-i18n@^8.14.0:
+  version "8.27.1"
+  resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.27.1.tgz#fe660f6c14793ae404d6a715875d772594a3324f"
+  integrity sha512-lWrGm4F25qReJ7XxSnFVb2h3PfW54ldnM4C+YLBGGJ75+Myt/kj4hHSTKqsyDLamvNYpvINMicSOdW+7yuqgIQ==
+
+vue-lazyload@1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/vue-lazyload/-/vue-lazyload-1.2.3.tgz#901f9ec15c7e6ca78781a2bae4a343686bdedb2c"
+  integrity sha512-DC0ZwxanbRhx79tlA3zY5OYJkH8FYp3WBAnAJbrcuoS8eye1P73rcgAZhyxFSPUluJUTelMB+i/+VkNU/qVm7g==
+
+vue-loader@^15.7.0:
+  version "15.9.8"
+  resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz#4b0f602afaf66a996be1e534fb9609dc4ab10e61"
+  integrity sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==
+  dependencies:
+    "@vue/component-compiler-utils" "^3.1.0"
+    hash-sum "^1.0.2"
+    loader-utils "^1.1.0"
+    vue-hot-reload-api "^2.3.0"
+    vue-style-loader "^4.1.0"
+
+vue-pdf@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.npmmirror.com/vue-pdf/-/vue-pdf-4.3.0.tgz#d5f790ee7967e7b7aa9089b97b11ab168e19dbd0"
+  integrity sha512-zd3lJj6CbtrawgaaDDciTDjkJMUKiLWtbEmBg5CvFn9Noe9oAO/GNy/fc5c59qGuFCJ14ibIV1baw4S07e5bSQ==
+  dependencies:
+    babel-plugin-syntax-dynamic-import "^6.18.0"
+    loader-utils "^1.4.0"
+    pdfjs-dist "2.6.347"
+    raw-loader "^4.0.2"
+    vue-resize-sensor "^2.0.0"
+    worker-loader "^2.0.0"
+
+vue-resize-sensor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/vue-resize-sensor/-/vue-resize-sensor-2.0.0.tgz#3a587fd6802e1688709cf2c5aadae7a0075952bf"
+  integrity sha512-W+y2EAI/BxS4Vlcca9scQv8ifeBFck56DRtSwWJ2H4Cw1GLNUYxiZxUHHkuzuI5JPW/cYtL1bPO5xPyEXx4LmQ==
+
+vue-router@^3.0.2:
+  version "3.5.4"
+  resolved "https://registry.npmmirror.com/vue-router/-/vue-router-3.5.4.tgz#c453c0b36bc75554de066fefc3f2a9c3212aca70"
+  integrity sha512-x+/DLAJZv2mcQ7glH2oV9ze8uPwcI+H+GgTgTmb5I55bCgY3+vXWIsqbYUzbBSZnwFHEJku4eoaH/x98veyymQ==
+
+vue-style-loader@^4.1.0:
+  version "4.1.3"
+  resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"
+  integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==
+  dependencies:
+    hash-sum "^1.0.2"
+    loader-utils "^1.0.2"
+
+vue-template-compiler@^2.6.10:
+  version "2.6.14"
+  resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763"
+  integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==
+  dependencies:
+    de-indent "^1.0.2"
+    he "^1.1.0"
+
+vue-template-es2015-compiler@^1.9.0:
+  version "1.9.1"
+  resolved "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
+  integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
+
+vue-video-player@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.npmmirror.com/vue-video-player/-/vue-video-player-5.0.2.tgz#34a42239ff304efc7698da20a4165051d766c1e6"
+  integrity sha512-IZXeRGGSX4YIp54G0Q5cB7iqh6Ok6Dpa2jRkjdyvMWw7MShJuh54/d5QNb1CZ+CvZUzX/TH7osnpir7mBNcFvQ==
+  dependencies:
+    object-assign "^4.1.1"
+    video.js "^6.6.0"
+    videojs-contrib-hls "^5.12.2"
+    videojs-flash "^2.1.0"
+    videojs-hotkeys "^0.2.20"
+
+vue@^2.6.10:
+  version "2.6.14"
+  resolved "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
+  integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
+
+vuex-persistedstate@^2.5.4:
+  version "2.7.1"
+  resolved "https://registry.npmmirror.com/vuex-persistedstate/-/vuex-persistedstate-2.7.1.tgz#25ced829ea5789a2ed7d71a1ba057eb01a5235ad"
+  integrity sha512-Ktvp6Bt6ApYj35MuxTClu+9Lpukcgl3Z/0o4PU12+Z4jU6lyOMzos0k6zGT5xrukAkGM1VV3EYNwz1TnHPhgFA==
+  dependencies:
+    deepmerge "^4.2.2"
+    shvl "^2.0.0"
+
+vuex@^3.1.0:
+  version "3.6.2"
+  resolved "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71"
+  integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==
+
+vux-blazy@^1.6.4:
+  version "1.6.4"
+  resolved "https://registry.npmmirror.com/vux-blazy/-/vux-blazy-1.6.4.tgz#e33073d902e0a3844ef1a463cce3ca2e0aab47bf"
+  integrity sha512-U86iNVEBXs5RykeAUw9Bku79QDwB+AexpK6txBp/UGs57xLunLzNQaYxxfhJjJ9ObOsTb/M+QIL3IJd1ISrOPA==
+
+vux-loader@^1.2.9:
+  version "1.2.9"
+  resolved "https://registry.npmmirror.com/vux-loader/-/vux-loader-1.2.9.tgz#51de423753332ce102eae1551a28b2b1155142b3"
+  integrity sha512-AjaD08eyeflQgGwAVJjcwA245h2hTJgXR5pRfLajgmIeEXpbzXs41FnuKLig5U2EQpYyMJ7/f/2Rdlr7cYrIOA==
+  dependencies:
+    acorn "^5.1.2"
+    compare-versions "^3.1.0"
+    cssnano "^3.7.4"
+    draftlog "^1.0.10"
+    escodegen "^1.9.0"
+    inline-manifest-webpack-plugin "^3.0.1"
+    js-yaml "^3.6.1"
+    less "^2.7.1"
+    loader-utils "^0.2.15"
+    node-cli-config "^0.0.1"
+    parse5 "^3.0.2"
+    progress-bar-webpack-plugin "^1.9.3"
+    strip-comments "^0.4.4"
+    strip-css-comments "^3.0.0"
+    touch "^1.0.0"
+    underscore "^1.8.3"
+    uuid "^3.0.1"
+    webpack-merge "^1.1.2"
+    webpack-sources "^0.1.2"
+
+vux-xscroll@^3.1.10:
+  version "3.1.12"
+  resolved "https://registry.npmmirror.com/vux-xscroll/-/vux-xscroll-3.1.12.tgz#e352e7f9dc5f9fee9253db331c967dd56b3bc950"
+  integrity sha512-7GujTTHTyVO61BIU3jMe1c2sGwDasZv0hRkaexiNPBtzhV7eufG0jfJD7vBZ1/9VIox4B5cc2r0tYVEYozSh5g==
+
+vux@^2.9.2:
+  version "2.11.1"
+  resolved "https://registry.npmmirror.com/vux/-/vux-2.11.1.tgz#2aa45eaa6c55fd1a75b0cfa3a09b5bf263967f95"
+  integrity sha512-OKI6Jc7ZdiQA/Eldjd8kcKQbZEHqSOsxGEX0VdpqrgIg6fHyILuxHWEO0wEhZhmhmdjGr24lhKXsyKufpluJpg==
+  dependencies:
+    "@antv/f2" "^3.1.4-beta.2"
+    array-filter "^1.0.0"
+    array-find "^1.0.0"
+    array-map "^0.0.0"
+    array-shuffle "^1.0.1"
+    async-validator "^3.5.2"
+    autosize "^3.0.20"
+    axios "^0.15.3"
+    big.js "^3.1.3"
+    blueimp-md5 "^2.6.0"
+    countup.js "^1.8.1"
+    exif-js "^2.3.0"
+    fastclick "^1.0.6"
+    lodash.debounce "^4.0.8"
+    lodash.throttle "^4.1.1"
+    object-assign "^4.1.0"
+    qr.js "0.0.0"
+    shake.js "^1.2.2"
+    validator "^9.3.0"
+    vanilla-masker "^1.2.0"
+    vux-blazy "^1.6.4"
+    vux-xscroll "^3.1.10"
+    x-photoswipe "^4.1.3-rc.1"
+
+watchpack-chokidar2@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+  integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+  dependencies:
+    chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+  version "1.7.5"
+  resolved "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+  integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
+  dependencies:
+    graceful-fs "^4.1.2"
+    neo-async "^2.5.0"
+  optionalDependencies:
+    chokidar "^3.4.1"
+    watchpack-chokidar2 "^2.0.1"
+
+wbuf@^1.1.0, wbuf@^1.7.3:
+  version "1.7.3"
+  resolved "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+  integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  dependencies:
+    minimalistic-assert "^1.0.0"
+
+webpack-cli@^3.2.3:
+  version "3.3.12"
+  resolved "https://registry.npmmirror.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+  integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+  dependencies:
+    chalk "^2.4.2"
+    cross-spawn "^6.0.5"
+    enhanced-resolve "^4.1.1"
+    findup-sync "^3.0.0"
+    global-modules "^2.0.0"
+    import-local "^2.0.0"
+    interpret "^1.4.0"
+    loader-utils "^1.4.0"
+    supports-color "^6.1.0"
+    v8-compile-cache "^2.1.1"
+    yargs "^13.3.2"
+
+webpack-dev-middleware@^3.7.2:
+  version "3.7.3"
+  resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5"
+  integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==
+  dependencies:
+    memory-fs "^0.4.1"
+    mime "^2.4.4"
+    mkdirp "^0.5.1"
+    range-parser "^1.2.1"
+    webpack-log "^2.0.0"
+
+webpack-dev-server@^3.2.1:
+  version "3.11.3"
+  resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3"
+  integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==
+  dependencies:
+    ansi-html-community "0.0.8"
+    bonjour "^3.5.0"
+    chokidar "^2.1.8"
+    compression "^1.7.4"
+    connect-history-api-fallback "^1.6.0"
+    debug "^4.1.1"
+    del "^4.1.1"
+    express "^4.17.1"
+    html-entities "^1.3.1"
+    http-proxy-middleware "0.19.1"
+    import-local "^2.0.0"
+    internal-ip "^4.3.0"
+    ip "^1.1.5"
+    is-absolute-url "^3.0.3"
+    killable "^1.0.1"
+    loglevel "^1.6.8"
+    opn "^5.5.0"
+    p-retry "^3.0.1"
+    portfinder "^1.0.26"
+    schema-utils "^1.0.0"
+    selfsigned "^1.10.8"
+    semver "^6.3.0"
+    serve-index "^1.9.1"
+    sockjs "^0.3.21"
+    sockjs-client "^1.5.0"
+    spdy "^4.0.2"
+    strip-ansi "^3.0.1"
+    supports-color "^6.1.0"
+    url "^0.11.0"
+    webpack-dev-middleware "^3.7.2"
+    webpack-log "^2.0.0"
+    ws "^6.2.1"
+    yargs "^13.3.2"
+
+webpack-log@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+  integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+  dependencies:
+    ansi-colors "^3.0.0"
+    uuid "^3.3.2"
+
+webpack-merge@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-1.1.2.tgz#49f2a68ba5fd34bb13c338c184c7028d93843432"
+  integrity sha512-q6wVGizxrJtw+5olUFwuKGcrKPECrbhuykVeouewqHFbZS5pf02ItvHJhKwFXq92RyVY8s5Yx6mDOk+B7fkPAw==
+  dependencies:
+    lodash.clonedeep "^4.5.0"
+    lodash.differencewith "^4.5.0"
+    lodash.isequal "^4.4.0"
+    lodash.isfunction "^3.0.8"
+    lodash.isplainobject "^4.0.6"
+    lodash.mergewith "^4.6.0"
+    lodash.unionwith "^4.6.0"
+
+webpack-merge@^4.2.1:
+  version "4.2.2"
+  resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
+  integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
+  dependencies:
+    lodash "^4.17.15"
+
+webpack-sources@^0.1.2:
+  version "0.1.5"
+  resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750"
+  integrity sha512-8CXYfPZkWvY0VWadHDQ3q2hUBqk2IJKTTdDPYb5hwnGVVma8bzqTJEerUDrpWwXnuY9vxZ0mGEnjYD0XLhRHeQ==
+  dependencies:
+    source-list-map "~0.1.7"
+    source-map "~0.5.3"
+
+webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+  version "1.4.3"
+  resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+  integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+  dependencies:
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack@^4.29.6:
+  version "4.46.0"
+  resolved "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
+  integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.9.0"
+    "@webassemblyjs/helper-module-context" "1.9.0"
+    "@webassemblyjs/wasm-edit" "1.9.0"
+    "@webassemblyjs/wasm-parser" "1.9.0"
+    acorn "^6.4.1"
+    ajv "^6.10.2"
+    ajv-keywords "^3.4.1"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^4.5.0"
+    eslint-scope "^4.0.3"
+    json-parse-better-errors "^1.0.2"
+    loader-runner "^2.4.0"
+    loader-utils "^1.2.3"
+    memory-fs "^0.4.1"
+    micromatch "^3.1.10"
+    mkdirp "^0.5.3"
+    neo-async "^2.6.1"
+    node-libs-browser "^2.2.1"
+    schema-utils "^1.0.0"
+    tapable "^1.1.3"
+    terser-webpack-plugin "^1.4.3"
+    watchpack "^1.7.4"
+    webpack-sources "^1.4.1"
+
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+  version "0.7.4"
+  resolved "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
+  integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
+  dependencies:
+    http-parser-js ">=0.5.1"
+    safe-buffer ">=5.1.0"
+    websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+  version "0.1.4"
+  resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
+  integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
+
+webwackify@0.1.6:
+  version "0.1.6"
+  resolved "https://registry.npmmirror.com/webwackify/-/webwackify-0.1.6.tgz#1d42a12ac61823d7e345abde084eaaa62a4a95eb"
+  integrity sha512-pGcw1T3HpNnM/UTRQqqRkkkzythSLts05mB+7Gr00B+0VbL0m39dFL5g20rSIEUt9Wrpw+/8k+snxRlUFHhcqA==
+
+whet.extend@~0.9.9:
+  version "0.9.9"
+  resolved "https://registry.npmmirror.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+  integrity sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==
+
+which-boxed-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+  dependencies:
+    is-bigint "^1.0.1"
+    is-boolean-object "^1.1.0"
+    is-number-object "^1.0.4"
+    is-string "^1.0.5"
+    is-symbol "^1.0.3"
+
+which-module@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==
+
+which@^1.2.14, which@^1.2.9, which@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+  dependencies:
+    isexe "^2.0.0"
+
+word-wrap@~1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+worker-farm@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+  integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+  dependencies:
+    errno "~0.1.7"
+
+worker-loader@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac"
+  integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==
+  dependencies:
+    loader-utils "^1.0.0"
+    schema-utils "^0.4.0"
+
+wrap-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+  dependencies:
+    ansi-styles "^3.2.0"
+    string-width "^3.0.0"
+    strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@^6.2.1:
+  version "6.2.2"
+  resolved "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
+  integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
+  dependencies:
+    async-limiter "~1.0.0"
+
+x-photoswipe@^4.1.3-rc.1:
+  version "4.1.3-rc.1"
+  resolved "https://registry.npmmirror.com/x-photoswipe/-/x-photoswipe-4.1.3-rc.1.tgz#e761901752dd3dd1f718e538514b609b5df5f7db"
+  integrity sha512-ok+x+1ufLuBT9dfM5P2FcRefwNniQoVwwfBhGa5gLn8NrSTzNah2p4IElMLwzXuKLtyH4yb+z3IsdDef3FOL5A==
+
+xhr@2.4.0:
+  version "2.4.0"
+  resolved "https://registry.npmmirror.com/xhr/-/xhr-2.4.0.tgz#e16e66a45f869861eeefab416d5eff722dc40993"
+  integrity sha512-TUbBsdAuJbX8olk9hsDwGK8P1ri1XlV+PdEWkYw+HQQbpkiBR8PLgD1F3kQDPBs9l4Px34hP9rCYAZOCCAENbw==
+  dependencies:
+    global "~4.3.0"
+    is-function "^1.0.1"
+    parse-headers "^2.0.0"
+    xtend "^4.0.0"
+
+xtend@^4.0.0, xtend@~4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
+
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yargs-parser@^13.1.2:
+  version "13.1.2"
+  resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs-parser@^18.1.2:
+  version "18.1.3"
+  resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs@^13.3.2:
+  version "13.3.2"
+  resolved "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.2"
+
+yargs@^15.3.1:
+  version "15.4.1"
+  resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+  dependencies:
+    cliui "^6.0.0"
+    decamelize "^1.2.0"
+    find-up "^4.1.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^4.2.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^18.1.2"

--
Gitblit v1.8.0