+
+
+
diff --git a/config/index.js b/config/index.js
new file mode 100644
index 0000000..f799d81
--- /dev/null
+++ b/config/index.js
@@ -0,0 +1,3 @@
+
+export const VUE_APP_API_URL = 'https://h5api.dayouqiantu.cn/api';
+export const VUE_APP_RESOURCES_URL = 'https://h5.dayouqiantu.cn/static';
diff --git a/libs/chat.js b/libs/chat.js
new file mode 100644
index 0000000..c2ec6bc
--- /dev/null
+++ b/libs/chat.js
@@ -0,0 +1,51 @@
+import $store from "@//store";
+import { VUE_APP_WS_URL } from "@/utils";
+
+const Socket = function() {
+ this.ws = new WebSocket(VUE_APP_WS_URL);
+ this.ws.onopen = this.onOpen.bind(this);
+ this.ws.onerror = this.onError.bind(this);
+ this.ws.onmessage = this.onMessage.bind(this);
+ this.ws.onclose = this.onClose.bind(this);
+};
+
+Socket.prototype = {
+ vm(vm) {
+ this.vm = vm;
+ },
+ close() {
+ clearInterval(this.timer);
+ this.ws.close();
+ },
+ onOpen: function() {
+ this.init();
+ this.send({
+ type: "login",
+ data: $store.state.token
+ });
+ this.vm.$emit("socket_open");
+ },
+ init: function() {
+ var that = this;
+ this.timer = setInterval(function() {
+ that.send({ type: "ping" });
+ }, 10000);
+ },
+ send: function(data) {
+ return this.ws.send(JSON.stringify(data));
+ },
+ onMessage: function(res) {
+ const { type, data = {} } = JSON.parse(res.data);
+ this.vm.$emit(type, data);
+ },
+ onClose: function() {
+ clearInterval(this.timer);
+ },
+ onError: function(e) {
+ this.vm.$emit("socket_error", e);
+ }
+};
+
+Socket.prototype.constructor = Socket;
+
+export default Socket;
diff --git a/libs/login.js b/libs/login.js
new file mode 100644
index 0000000..176773f
--- /dev/null
+++ b/libs/login.js
@@ -0,0 +1,32 @@
+// import router from "../router";
+import store from "../store";
+import cookie from "@/utils/store/cookie";
+import { isWeixin, login, getCurrentPageUrl, getCurrentPageUrlWithArgs, parseQuery, replace, handleQrCode } from "@/utils";
+
+export default function toLogin(push, backUrl) {
+ store.commit("LOGOUT");
+ if (store.getters.isAuthorization) {
+ login()
+ return
+ }
+ if (store.getters.isAuthorizationPage || getCurrentPageUrl() == '/pages/user/Login/index') {
+ return
+ }
+
+ // 判断是不是扫描的砍价海报进来的
+ if (getCurrentPageUrl() == 'pages/activity/DargainDetails/index' && handleQrCode()) {
+ let url = handleQrCode();
+ if (url) {
+ console.log(222222222)
+ replace({ path: '/pages/user/Login/index', query: { redirect: `/${getCurrentPageUrl()}`, id: url.bargainId, partake: url.uid } })
+ } else {
+ replace({ path: '/pages/user/Login/index', query: { redirect: `/${getCurrentPageUrl()}`, ...parseQuery() } })
+ }
+ } else {
+ console.log(222222222)
+ replace({ path: '/pages/user/Login/index', query: { redirect: `/${getCurrentPageUrl()}`, ...parseQuery() } })
+ }
+ store.commit("UPDATE_AUTHORIZATION", false);
+ store.commit("UPDATE_AUTHORIZATIONPAGE", true);
+}
+
diff --git a/libs/order.js b/libs/order.js
new file mode 100644
index 0000000..c9484a5
--- /dev/null
+++ b/libs/order.js
@@ -0,0 +1,107 @@
+import { cancelOrder, takeOrder, delOrder, payOrder } from "@/api/order";
+import dialog from "@/utils/dialog";
+import { weappPay } from "@/libs/wechat";
+
+export function cancelOrderHandle(orderId) {
+ return new Promise((resolve, reject) => {
+ wx.showModal({
+ title: '提示',
+ content: '确认取消该订单?',
+ success(res) {
+ if (res.confirm) {
+ cancelOrder(orderId)
+ .then(res => {
+ wx.showToast({
+ title: '取消成功', icon: 'success', duration: 2000
+ });
+ resolve(res);
+ })
+ .catch(err => {
+ wx.showToast({
+ title: '取消失败', icon: 'none', duration: 2000
+ });
+ reject(err);
+ });
+ } else if (res.cancel) {
+ }
+ }
+ })
+ });
+}
+
+export function takeOrderHandle(orderId) {
+ return new Promise((resolve, reject) => {
+ takeOrder(orderId)
+ .then(res => {
+ wx.showToast({
+ title: '收货成功', icon: 'success', duration: 2000
+ });
+ resolve(res);
+ })
+ .catch(err => {
+ wx.showToast({
+ title: '收货失败', icon: 'none', duration: 2000
+ });
+ reject(err);
+ });
+ });
+}
+
+export function delOrderHandle(orderId) {
+ return new Promise((resolve, reject) => {
+ dialog.confirm({
+ mes: "确认删除该订单?",
+ opts() {
+ delOrder(orderId)
+ .then(res => {
+ wx.showToast({
+ title: '删除成功', icon: 'success', duration: 2000
+ });
+ resolve(res);
+ })
+ .catch(err => {
+ wx.showToast({
+ title: '删除失败', icon: 'none', duration: 2000
+ });
+ reject(err);
+ });
+ }
+ });
+ });
+}
+
+export function payOrderHandle(orderId, type, from) {
+ return new Promise((resolve, reject) => {
+ wx.showLoading({ title: '加载中' })
+ payOrder(orderId, type, from)
+ .then(res => {
+ const data = res.data;
+ wx.hideLoading()
+ switch (data.status) {
+ case "WECHAT_H5_PAY":
+ location.replace(data.result.jsConfig.mweb_url);
+ reject(data);
+ break;
+ case "ORDER_EXIST":
+ case "EXTEND_ORDER":
+ case "PAY_ERROR":
+ case "PAY_DEFICIENCY":
+ dialog.toast({ mes: res.msg });
+ reject(data);
+ break;
+ case "SUCCESS":
+ wx.showToast({ title: res.msg, icon: 'none', duration: 2000 });
+ resolve(data);
+ break;
+ case "WECHAT_PAY":
+ weappPay(data.result.jsConfig).then(res => {
+ resolve(data);
+ });
+ }
+ })
+ .catch(err => {
+ wx.hideLoading()
+ dialog.toast({ mes: "订单支付失败" });
+ });
+ });
+}
diff --git a/libs/wechat.js b/libs/wechat.js
new file mode 100644
index 0000000..7a38315
--- /dev/null
+++ b/libs/wechat.js
@@ -0,0 +1,20 @@
+// 支付模块
+export const weappPay = (option) => {
+ return new Promise((resolve, reject) => {
+ // 吊起微信支付
+ wx.requestPayment({
+ ...option,
+ timeStamp: option.timeStamp + '',
+ success: (success) => {
+ wx.showToast({
+ title: '支付成功', icon: 'success', duration: 2000
+ });
+ resolve(success)
+ },
+ fail: (error) => {
+ wx.showToast({ title: '支付失败', icon: 'none', duration: 2000 });
+ reject(error)
+ }
+ })
+ })
+}
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..102e876
--- /dev/null
+++ b/main.js
@@ -0,0 +1,92 @@
+import Vue from 'vue'
+import App from './App'
+
+// import router from "./router";
+import store from "./store";
+import animate from "animate.css";
+import schema from "async-validator";
+import dialog from "./utils/dialog";
+import cookie from "@/utils/store/cookie";
+
+// import "@/assets/iconfont/iconfont";
+import "@/assets/iconfont/iconfont.css";
+// import "@/assets/js/media_750";
+// import "vue-ydui/dist/ydui.base.css";
+import "@/assets/css/base.css";
+import "@/assets/css/reset.css";
+import "@/assets/css/style.css";
+
+import {
+ parseRoute,
+ _router
+} from "@/utils";
+import {
+ VUE_APP_RESOURCES_URL,
+ VUE_APP_API_URL
+} from "@/config";
+
+Vue.use(animate);
+Vue.config.productionTip = false;
+Vue.config.devtools = process.env.NODE_ENV !== "production";
+
+Vue.prototype.$validator = function(rule) {
+ return new schema(rule);
+};
+
+Vue.prototype.$dialog = dialog;
+
+const CACHE_KEY = "clear_0.0.1";
+
+if (!cookie.has(CACHE_KEY)) {
+ cookie.clearAll();
+ cookie.set(CACHE_KEY, 1);
+}
+
+
+Vue.config.productionTip = false
+App.mpType = 'app'
+Vue.prototype.$store = store
+
+const app = new Vue(App)
+
+Vue.mixin({
+ onLoad() {
+ const {
+ $mp
+ } = this.$root
+ this._route = parseRoute($mp)
+ // this.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL;
+ this._data.$VUE_APP_RESOURCES_URL = VUE_APP_RESOURCES_URL;
+ },
+ onShow() {
+ _router.app = this
+ _router.currentRoute = this._route
+ }
+})
+
+Object.defineProperty(Vue.prototype, '$yrouter', {
+ get() {
+ return _router
+ }
+})
+
+Object.defineProperty(Vue.prototype, '$yroute', {
+ get() {
+ return this._route
+ }
+})
+
+Object.defineProperty(Vue.prototype, '$VUE_APP_RESOURCES_URL', {
+ get() {
+ return VUE_APP_RESOURCES_URL
+ }
+})
+
+Object.defineProperty(Vue.prototype, '$VUE_APP_API_URL', {
+ get() {
+ return VUE_APP_API_URL
+ }
+})
+
+
+app.$mount()
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..7b7be65
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,75 @@
+{
+ "name" : "yshopmall_uni",
+ "appid" : "",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ }
+}
diff --git a/mixins/SendVerifyCode.js b/mixins/SendVerifyCode.js
new file mode 100644
index 0000000..46b8a30
--- /dev/null
+++ b/mixins/SendVerifyCode.js
@@ -0,0 +1,27 @@
+export default {
+ data() {
+ return {
+ disabled: false,
+ text: "获取验证码"
+ };
+ },
+ methods: {
+ sendCode() {
+ if (this.disabled) return;
+ this.disabled = true;
+ let n = 60;
+ this.text = "剩余 " + n + "s";
+ const run = setInterval(() => {
+ n = n - 1;
+ if (n < 0) {
+ clearInterval(run);
+ }
+ this.text = "剩余 " + n + "s";
+ if (this.text < "剩余 " + 0 + "s") {
+ this.disabled = false;
+ this.text = "重新获取";
+ }
+ }, 1000);
+ }
+ }
+};
diff --git a/node_modules/animate.css/.editorconfig b/node_modules/animate.css/.editorconfig
new file mode 100644
index 0000000..c4afe1e
--- /dev/null
+++ b/node_modules/animate.css/.editorconfig
@@ -0,0 +1,12 @@
+# editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+max_line_length = 100
+tab_width = 2
+trim_trailing_whitespace = true
diff --git a/node_modules/animate.css/.prettierignore b/node_modules/animate.css/.prettierignore
new file mode 100644
index 0000000..b69cb96
--- /dev/null
+++ b/node_modules/animate.css/.prettierignore
@@ -0,0 +1 @@
+animate.min.css
diff --git a/node_modules/animate.css/.travis.yml b/node_modules/animate.css/.travis.yml
new file mode 100644
index 0000000..984a270
--- /dev/null
+++ b/node_modules/animate.css/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+- "10"
+before_script:
+ - npm install -g gulp
+script: gulp
\ No newline at end of file
diff --git a/node_modules/animate.css/CODE_OF_CONDUCT.md b/node_modules/animate.css/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..5e942db
--- /dev/null
+++ b/node_modules/animate.css/CODE_OF_CONDUCT.md
@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at callmeelton@gmail.com. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
diff --git a/node_modules/animate.css/LICENSE b/node_modules/animate.css/LICENSE
new file mode 100644
index 0000000..2666f80
--- /dev/null
+++ b/node_modules/animate.css/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 Daniel Eden
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/animate.css/README.md b/node_modules/animate.css/README.md
new file mode 100644
index 0000000..9e1f30e
--- /dev/null
+++ b/node_modules/animate.css/README.md
@@ -0,0 +1,211 @@
+# Animate.css [![GitHub release](https://img.shields.io/github/release/daneden/animate.css.svg)](https://github.com/daneden/animate.css/releases) [![CDNJS](https://img.shields.io/cdnjs/v/animate.css.svg)](https://cdnjs.com/libraries/animate.css) [![Build Status](https://travis-ci.com/daneden/animate.css.svg?branch=master)](https://travis-ci.com/daneden/animate.css) [![devDependencies Status](https://david-dm.org/daneden/animate.css/dev-status.svg)](https://david-dm.org/daneden/animate.css?type=dev) [![chat](https://img.shields.io/badge/chat-gitter-green.svg)](https://gitter.im/animate-css/Lobby) [![npm version](https://badge.fury.io/js/animate.css.svg)](https://www.npmjs.com/package/animate.css)
+
+_Just-add-water CSS animation_
+
+`animate.css` is a bunch of cool, fun, and cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and general just-add-water-awesomeness.
+
+
+## Installation
+
+Install via npm:
+
+```bash
+$ npm install animate.css --save
+```
+
+or yarn:
+
+```bash
+$ yarn add animate.css
+```
+
+
+## Usage
+
+To use animate.css in your website, simply drop the stylesheet into your document's ``, and add the class `animated` to an element, along with any of the animation names. That's it! You've got a CSS animated element. Super!
+
+```html
+
+
+
+```
+
+or use a CDN hosted version by [CDNJS](https://cdnjs.com/libraries/animate.css)
+
+```html
+
+
+
+```
+
+
+### Animations
+
+To animate an element, add the class `animated` to an element. You can include the class `infinite` for an infinite loop. Finally you need to add one of the following classes to the element:
+
+| Class Name | | | |
+| ----------------- | ------------------ | ------------------- | -------------------- |
+| `bounce` | `flash` | `pulse` | `rubberBand` |
+| `shake` | `headShake` | `swing` | `tada` |
+| `wobble` | `jello` | `bounceIn` | `bounceInDown` |
+| `bounceInLeft` | `bounceInRight` | `bounceInUp` | `bounceOut` |
+| `bounceOutDown` | `bounceOutLeft` | `bounceOutRight` | `bounceOutUp` |
+| `fadeIn` | `fadeInDown` | `fadeInDownBig` | `fadeInLeft` |
+| `fadeInLeftBig` | `fadeInRight` | `fadeInRightBig` | `fadeInUp` |
+| `fadeInUpBig` | `fadeOut` | `fadeOutDown` | `fadeOutDownBig` |
+| `fadeOutLeft` | `fadeOutLeftBig` | `fadeOutRight` | `fadeOutRightBig` |
+| `fadeOutUp` | `fadeOutUpBig` | `flipInX` | `flipInY` |
+| `flipOutX` | `flipOutY` | `lightSpeedIn` | `lightSpeedOut` |
+| `rotateIn` | `rotateInDownLeft` | `rotateInDownRight` | `rotateInUpLeft` |
+| `rotateInUpRight` | `rotateOut` | `rotateOutDownLeft` | `rotateOutDownRight` |
+| `rotateOutUpLeft` | `rotateOutUpRight` | `hinge` | `jackInTheBox` |
+| `rollIn` | `rollOut` | `zoomIn` | `zoomInDown` |
+| `zoomInLeft` | `zoomInRight` | `zoomInUp` | `zoomOut` |
+| `zoomOutDown` | `zoomOutLeft` | `zoomOutRight` | `zoomOutUp` |
+| `slideInDown` | `slideInLeft` | `slideInRight` | `slideInUp` |
+| `slideOutDown` | `slideOutLeft` | `slideOutRight` | `slideOutUp` |
+| `heartBeat` |
+
+Full example:
+
+```html
+
Example
+```
+
+[Check out all the animations here!](https://daneden.github.io/animate.css/)
+
+It's possible to change the duration of your animations, add a delay or change the number of times that it plays:
+
+```css
+.yourElement {
+ animation-duration: 3s;
+ animation-delay: 2s;
+ animation-iteration-count: infinite;
+}
+```
+
+## Usage with Javascript
+
+You can do a whole bunch of other stuff with animate.css when you combine it with Javascript. A simple example:
+
+```javascript
+const element = document.querySelector('.my-element')
+element.classList.add('animated', 'bounceOutLeft')
+```
+
+You can also detect when an animation ends:
+
+```javascript
+const element = document.querySelector('.my-element')
+element.classList.add('animated', 'bounceOutLeft')
+
+element.addEventListener('animationend', function() { doSomething() })
+```
+
+You can use this simple function to add and remove the animations:
+
+```javascript
+function animateCSS(element, animationName, callback) {
+ const node = document.querySelector(element)
+ node.classList.add('animated', animationName)
+
+ function handleAnimationEnd() {
+ node.classList.remove('animated', animationName)
+ node.removeEventListener('animationend', handleAnimationEnd)
+
+ if (typeof callback === 'function') callback()
+ }
+
+ node.addEventListener('animationend', handleAnimationEnd)
+}
+```
+
+And use it like this:
+
+```javascript
+animateCSS('.my-element', 'bounce')
+
+// or
+animateCSS('.my-element', 'bounce', function() {
+ // Do something after animation
+})
+```
+
+Notice that the examples are using ES6's `const` declaration, dropping support for IE10 and some aging browsers. If you prefer, switch the `const` to `var` declarations and IE10 and some old browsers will get support (they still have to provide [classList](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList) support, so do your [research](https://caniuse.com/#feat=classlist)).
+
+## Setting _Delay_ and _Speed_
+
+### Delay Class
+
+It's possible to add delays directly on the element's class attribute, just like this:
+
+```html
+
Example
+```
+
+| Class Name | Delay Time |
+| ---------- | ---------- |
+| `delay-2s` | `2s` |
+| `delay-3s` | `3s` |
+| `delay-4s` | `4s` |
+| `delay-5s` | `5s` |
+
+> _**Note**: The default delays are from 1 second to 5 seconds only. If you need custom delays, add it directly to your own CSS code._
+
+### Slow, Slower, Fast, and Faster Class
+
+It's possible to control the speed of the animation by adding these classes, as a sample below:
+
+```html
+
Example
+```
+
+| Class Name | Speed Time |
+| ---------- | ---------- |
+| `slow` | `2s` |
+| `slower` | `3s` |
+| `fast` | `800ms` |
+| `faster` | `500ms` |
+
+> _**Note**: The `animated` class has a default speed of `1s`. If you need custom duration, add it directly to your own CSS code._
+
+## Custom Builds
+
+Animate.css is powered by [gulp.js](http://gulpjs.com/), which means you can create custom builds pretty easily. First of all, you’ll need Gulp and all other dependencies:
+
+```sh
+$ cd path/to/animate.css/
+$ sudo npm install
+```
+
+Next, run `gulp` to compile your custom builds. For example, if you want only some of the “attention seekers”, simply edit the `animate-config.json` file to select only the animations you want to use.
+
+```javascript
+"attention_seekers": {
+ "bounce": true,
+ "flash": false,
+ "pulse": false,
+ "shake": true,
+ "headShake": true,
+ "swing": true,
+ "tada": true,
+ "wobble": true,
+ "jello":true
+}
+```
+
+## Accessibility
+
+Animate.css supports the [`prefers-reduced-motion` media query](https://webkit.org/blog/7551/responsive-design-for-motion/) so that users with motion sensitivity can opt out of animations. On supported platforms (currently Firefox, OSX Safari and iOS Safari), users can select "reduce motion" on their operating system preferences and it will turn off CSS transitions for them without any further work required.
+
+## License
+
+Animate.css is licensed under the MIT license. (http://opensource.org/licenses/MIT)
+
+## Code of Conduct
+
+This project and everyone participating in it is governed by the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [callmeelton@gmail.com](mailto:callmeelton@gmail.com).
+
+## Contributing
+
+Pull requests are the way to go here. We only have two rules for submitting a pull request: match the naming convention (camelCase, categorised [fades, bounces, etc]) and let us see a demo of submitted animations in a [pen](http://codepen.io). That **last one is important**.
diff --git a/node_modules/animate.css/animate-config.json b/node_modules/animate.css/animate-config.json
new file mode 100644
index 0000000..d7f8849
--- /dev/null
+++ b/node_modules/animate.css/animate-config.json
@@ -0,0 +1,121 @@
+{
+ "attention_seekers": {
+ "bounce": true,
+ "flash": true,
+ "pulse": true,
+ "rubberBand": true,
+ "shake": true,
+ "headShake": true,
+ "swing": true,
+ "tada": true,
+ "wobble": true,
+ "jello": true,
+ "heartBeat": true
+ },
+
+ "bouncing_entrances": {
+ "bounceIn": true,
+ "bounceInDown": true,
+ "bounceInLeft": true,
+ "bounceInRight": true,
+ "bounceInUp": true
+ },
+
+ "bouncing_exits": {
+ "bounceOut": true,
+ "bounceOutDown": true,
+ "bounceOutLeft": true,
+ "bounceOutRight": true,
+ "bounceOutUp": true
+ },
+
+ "fading_entrances": {
+ "fadeIn": true,
+ "fadeInDown": true,
+ "fadeInDownBig": true,
+ "fadeInLeft": true,
+ "fadeInLeftBig": true,
+ "fadeInRight": true,
+ "fadeInRightBig": true,
+ "fadeInUp": true,
+ "fadeInUpBig": true
+ },
+
+ "fading_exits": {
+ "fadeOut": true,
+ "fadeOutDown": true,
+ "fadeOutDownBig": true,
+ "fadeOutLeft": true,
+ "fadeOutLeftBig": true,
+ "fadeOutRight": true,
+ "fadeOutRightBig": true,
+ "fadeOutUp": true,
+ "fadeOutUpBig": true
+ },
+
+ "flippers": {
+ "flip": true,
+ "flipInX": true,
+ "flipInY": true,
+ "flipOutX": true,
+ "flipOutY": true
+ },
+
+ "lightspeed": {
+ "lightSpeedIn": true,
+ "lightSpeedOut": true
+ },
+
+ "rotating_entrances": {
+ "rotateIn": true,
+ "rotateInDownLeft": true,
+ "rotateInDownRight": true,
+ "rotateInUpLeft": true,
+ "rotateInUpRight": true
+ },
+
+ "rotating_exits": {
+ "rotateOut": true,
+ "rotateOutDownLeft": true,
+ "rotateOutDownRight": true,
+ "rotateOutUpLeft": true,
+ "rotateOutUpRight": true
+ },
+
+ "specials": {
+ "hinge": true,
+ "jackInTheBox": true,
+ "rollIn": true,
+ "rollOut": true
+ },
+
+ "zooming_entrances": {
+ "zoomIn": true,
+ "zoomInDown": true,
+ "zoomInLeft": true,
+ "zoomInRight": true,
+ "zoomInUp": true
+ },
+
+ "zooming_exits": {
+ "zoomOut": true,
+ "zoomOutDown": true,
+ "zoomOutLeft": true,
+ "zoomOutRight": true,
+ "zoomOutUp": true
+ },
+
+ "sliding_entrances": {
+ "slideInDown": true,
+ "slideInLeft": true,
+ "slideInRight": true,
+ "slideInUp": true
+ },
+
+ "sliding_exits": {
+ "slideOutDown": true,
+ "slideOutLeft": true,
+ "slideOutRight": true,
+ "slideOutUp": true
+ }
+}
diff --git a/node_modules/animate.css/animate.css b/node_modules/animate.css/animate.css
new file mode 100644
index 0000000..d26682f
--- /dev/null
+++ b/node_modules/animate.css/animate.css
@@ -0,0 +1,3625 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -https://daneden.github.io/animate.css/
+ * Version - 3.7.2
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2019 Daniel Eden
+ */
+
+@-webkit-keyframes bounce {
+ from,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0);
+ }
+
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0);
+ }
+}
+
+@keyframes bounce {
+ from,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 40%,
+ 43% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -30px, 0);
+ transform: translate3d(0, -30px, 0);
+ }
+
+ 70% {
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ -webkit-transform: translate3d(0, -15px, 0);
+ transform: translate3d(0, -15px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -4px, 0);
+ transform: translate3d(0, -4px, 0);
+ }
+}
+
+.bounce {
+ -webkit-animation-name: bounce;
+ animation-name: bounce;
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+}
+
+@-webkit-keyframes flash {
+ from,
+ 50%,
+ to {
+ opacity: 1;
+ }
+
+ 25%,
+ 75% {
+ opacity: 0;
+ }
+}
+
+@keyframes flash {
+ from,
+ 50%,
+ to {
+ opacity: 1;
+ }
+
+ 25%,
+ 75% {
+ opacity: 0;
+ }
+}
+
+.flash {
+ -webkit-animation-name: flash;
+ animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.pulse {
+ -webkit-animation-name: pulse;
+ animation-name: pulse;
+}
+
+@-webkit-keyframes rubberBand {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.25, 0.75, 1);
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.15, 0.85, 1);
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ -webkit-transform: scale3d(0.95, 1.05, 1);
+ transform: scale3d(0.95, 1.05, 1);
+ }
+
+ 75% {
+ -webkit-transform: scale3d(1.05, 0.95, 1);
+ transform: scale3d(1.05, 0.95, 1);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes rubberBand {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.25, 0.75, 1);
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(0.75, 1.25, 1);
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.15, 0.85, 1);
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ -webkit-transform: scale3d(0.95, 1.05, 1);
+ transform: scale3d(0.95, 1.05, 1);
+ }
+
+ 75% {
+ -webkit-transform: scale3d(1.05, 0.95, 1);
+ transform: scale3d(1.05, 0.95, 1);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.rubberBand {
+ -webkit-animation-name: rubberBand;
+ animation-name: rubberBand;
+}
+
+@-webkit-keyframes shake {
+ from,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0);
+ }
+}
+
+@keyframes shake {
+ from,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0);
+ }
+}
+
+.shake {
+ -webkit-animation-name: shake;
+ animation-name: shake;
+}
+
+@-webkit-keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg);
+ }
+
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg);
+ }
+
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg);
+ }
+
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg);
+ }
+
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+@keyframes headShake {
+ 0% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+
+ 6.5% {
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
+ transform: translateX(-6px) rotateY(-9deg);
+ }
+
+ 18.5% {
+ -webkit-transform: translateX(5px) rotateY(7deg);
+ transform: translateX(5px) rotateY(7deg);
+ }
+
+ 31.5% {
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
+ transform: translateX(-3px) rotateY(-5deg);
+ }
+
+ 43.5% {
+ -webkit-transform: translateX(2px) rotateY(3deg);
+ transform: translateX(2px) rotateY(3deg);
+ }
+
+ 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0);
+ }
+}
+
+.headShake {
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ -webkit-animation-name: headShake;
+ animation-name: headShake;
+}
+
+@-webkit-keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg);
+ }
+
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg);
+ }
+
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg);
+ }
+
+ to {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+}
+
+@keyframes swing {
+ 20% {
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
+ transform: rotate3d(0, 0, 1, 15deg);
+ }
+
+ 40% {
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
+ transform: rotate3d(0, 0, 1, -10deg);
+ }
+
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
+ transform: rotate3d(0, 0, 1, -5deg);
+ }
+
+ to {
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+}
+
+.swing {
+ -webkit-transform-origin: top center;
+ transform-origin: top center;
+ -webkit-animation-name: swing;
+ animation-name: swing;
+}
+
+@-webkit-keyframes tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10%,
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40%,
+ 60%,
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.tada {
+ -webkit-animation-name: tada;
+ animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ }
+
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes wobble {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 15% {
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ }
+
+ 30% {
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 45% {
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.wobble {
+ -webkit-animation-name: wobble;
+ animation-name: wobble;
+}
+
+@-webkit-keyframes jello {
+ from,
+ 11.1%,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg);
+ }
+
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg);
+ }
+
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg);
+ }
+
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg);
+ }
+
+ 66.6% {
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ }
+
+ 77.7% {
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+ transform: skewX(0.390625deg) skewY(0.390625deg);
+ }
+
+ 88.8% {
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ }
+}
+
+@keyframes jello {
+ from,
+ 11.1%,
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 22.2% {
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+ transform: skewX(-12.5deg) skewY(-12.5deg);
+ }
+
+ 33.3% {
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+ transform: skewX(6.25deg) skewY(6.25deg);
+ }
+
+ 44.4% {
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+ transform: skewX(-3.125deg) skewY(-3.125deg);
+ }
+
+ 55.5% {
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+ transform: skewX(1.5625deg) skewY(1.5625deg);
+ }
+
+ 66.6% {
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ }
+
+ 77.7% {
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+ transform: skewX(0.390625deg) skewY(0.390625deg);
+ }
+
+ 88.8% {
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ }
+}
+
+.jello {
+ -webkit-animation-name: jello;
+ animation-name: jello;
+ -webkit-transform-origin: center;
+ transform-origin: center;
+}
+
+@-webkit-keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3);
+ }
+
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3);
+ }
+
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+@keyframes heartBeat {
+ 0% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 14% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3);
+ }
+
+ 28% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ 42% {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3);
+ }
+
+ 70% {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+.heartBeat {
+ -webkit-animation-name: heartBeat;
+ animation-name: heartBeat;
+ -webkit-animation-duration: 1.3s;
+ animation-duration: 1.3s;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+}
+
+@-webkit-keyframes bounceIn {
+ from,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+
+ 80% {
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
+ transform: scale3d(0.97, 0.97, 0.97);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes bounceIn {
+ from,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 20% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+
+ 80% {
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
+ transform: scale3d(0.97, 0.97, 0.97);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.bounceIn {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: bounceIn;
+ animation-name: bounceIn;
+}
+
+@-webkit-keyframes bounceInDown {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes bounceInDown {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -3000px, 0);
+ transform: translate3d(0, -3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 25px, 0);
+ transform: translate3d(0, 25px, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, 5px, 0);
+ transform: translate3d(0, 5px, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInDown {
+ -webkit-animation-name: bounceInDown;
+ animation-name: bounceInDown;
+}
+
+@-webkit-keyframes bounceInLeft {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes bounceInLeft {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ -webkit-transform: translate3d(-3000px, 0, 0);
+ transform: translate3d(-3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(25px, 0, 0);
+ transform: translate3d(25px, 0, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(-10px, 0, 0);
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(5px, 0, 0);
+ transform: translate3d(5px, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInLeft {
+ -webkit-animation-name: bounceInLeft;
+ animation-name: bounceInLeft;
+}
+
+@-webkit-keyframes bounceInRight {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes bounceInRight {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(3000px, 0, 0);
+ transform: translate3d(3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(-25px, 0, 0);
+ transform: translate3d(-25px, 0, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(10px, 0, 0);
+ transform: translate3d(10px, 0, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(-5px, 0, 0);
+ transform: translate3d(-5px, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInRight {
+ -webkit-animation-name: bounceInRight;
+ animation-name: bounceInRight;
+}
+
+@-webkit-keyframes bounceInUp {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes bounceInUp {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 3000px, 0);
+ transform: translate3d(0, 3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0);
+ }
+
+ 75% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 90% {
+ -webkit-transform: translate3d(0, -5px, 0);
+ transform: translate3d(0, -5px, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInUp {
+ -webkit-animation-name: bounceInUp;
+ animation-name: bounceInUp;
+}
+
+@-webkit-keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+}
+
+@keyframes bounceOut {
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 50%,
+ 55% {
+ opacity: 1;
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+}
+
+.bounceOut {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: bounceOut;
+ animation-name: bounceOut;
+}
+
+@-webkit-keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+@keyframes bounceOutDown {
+ 20% {
+ -webkit-transform: translate3d(0, 10px, 0);
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, -20px, 0);
+ transform: translate3d(0, -20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.bounceOutDown {
+ -webkit-animation-name: bounceOutDown;
+ animation-name: bounceOutDown;
+}
+
+@-webkit-keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(20px, 0, 0);
+ transform: translate3d(20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.bounceOutLeft {
+ -webkit-animation-name: bounceOutLeft;
+ animation-name: bounceOutLeft;
+}
+
+@-webkit-keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ -webkit-transform: translate3d(-20px, 0, 0);
+ transform: translate3d(-20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.bounceOutRight {
+ -webkit-animation-name: bounceOutRight;
+ animation-name: bounceOutRight;
+}
+
+@-webkit-keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+@keyframes bounceOutUp {
+ 20% {
+ -webkit-transform: translate3d(0, -10px, 0);
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 20px, 0);
+ transform: translate3d(0, 20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.bounceOutUp {
+ -webkit-animation-name: bounceOutUp;
+ animation-name: bounceOutUp;
+}
+
+@-webkit-keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ animation-name: fadeIn;
+}
+
+@-webkit-keyframes fadeInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ animation-name: fadeInDown;
+}
+
+@-webkit-keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInDownBig {
+ -webkit-animation-name: fadeInDownBig;
+ animation-name: fadeInDownBig;
+}
+
+@-webkit-keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInLeft {
+ -webkit-animation-name: fadeInLeft;
+ animation-name: fadeInLeft;
+}
+
+@-webkit-keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInLeftBig {
+ -webkit-animation-name: fadeInLeftBig;
+ animation-name: fadeInLeftBig;
+}
+
+@-webkit-keyframes fadeInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInRight {
+ -webkit-animation-name: fadeInRight;
+ animation-name: fadeInRight;
+}
+
+@-webkit-keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInRightBig {
+ -webkit-animation-name: fadeInRightBig;
+ animation-name: fadeInRightBig;
+}
+
+@-webkit-keyframes fadeInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ animation-name: fadeInUp;
+}
+
+@-webkit-keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInUpBig {
+ -webkit-animation-name: fadeInUpBig;
+ animation-name: fadeInUpBig;
+}
+
+@-webkit-keyframes fadeOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes fadeOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes fadeOutDown {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutDownBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+@keyframes fadeOutDownBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 2000px, 0);
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.fadeOutDownBig {
+ -webkit-animation-name: fadeOutDownBig;
+ animation-name: fadeOutDownBig;
+}
+
+@-webkit-keyframes fadeOutLeft {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes fadeOutLeft {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.fadeOutLeft {
+ -webkit-animation-name: fadeOutLeft;
+ animation-name: fadeOutLeft;
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+@keyframes fadeOutLeftBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-2000px, 0, 0);
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.fadeOutLeftBig {
+ -webkit-animation-name: fadeOutLeftBig;
+ animation-name: fadeOutLeftBig;
+}
+
+@-webkit-keyframes fadeOutRight {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes fadeOutRight {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.fadeOutRight {
+ -webkit-animation-name: fadeOutRight;
+ animation-name: fadeOutRight;
+}
+
+@-webkit-keyframes fadeOutRightBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+@keyframes fadeOutRightBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(2000px, 0, 0);
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.fadeOutRightBig {
+ -webkit-animation-name: fadeOutRightBig;
+ animation-name: fadeOutRightBig;
+}
+
+@-webkit-keyframes fadeOutUp {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes fadeOutUp {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ animation-name: fadeOutUp;
+}
+
+@-webkit-keyframes fadeOutUpBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+@keyframes fadeOutUpBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -2000px, 0);
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.fadeOutUpBig {
+ -webkit-animation-name: fadeOutUpBig;
+ animation-name: fadeOutUpBig;
+}
+
+@-webkit-keyframes flip {
+ from {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+}
+
+@keyframes flip {
+ from {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, -360deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -190deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -190deg);
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -170deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -170deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+ -webkit-animation-name: flip;
+ animation-name: flip;
+}
+
+@-webkit-keyframes flipInX {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+}
+
+@keyframes flipInX {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInX;
+ animation-name: flipInX;
+}
+
+@-webkit-keyframes flipInY {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+}
+
+@keyframes flipInY {
+ from {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ }
+
+ to {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipInY;
+ animation-name: flipInY;
+}
+
+@-webkit-keyframes flipOutX {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes flipOutX {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutX {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-animation-name: flipOutX;
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+}
+
+@-webkit-keyframes flipOutY {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes flipOutY {
+ from {
+ -webkit-transform: perspective(400px);
+ transform: perspective(400px);
+ }
+
+ 30% {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutY {
+ -webkit-animation-duration: 0.75s;
+ animation-duration: 0.75s;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ -webkit-animation-name: flipOutY;
+ animation-name: flipOutY;
+}
+
+@-webkit-keyframes lightSpeedIn {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes lightSpeedIn {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ -webkit-transform: skewX(20deg);
+ transform: skewX(20deg);
+ opacity: 1;
+ }
+
+ 80% {
+ -webkit-transform: skewX(-5deg);
+ transform: skewX(-5deg);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.lightSpeedIn {
+ -webkit-animation-name: lightSpeedIn;
+ animation-name: lightSpeedIn;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+}
+
+@-webkit-keyframes lightSpeedOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+@keyframes lightSpeedOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+.lightSpeedOut {
+ -webkit-animation-name: lightSpeedOut;
+ animation-name: lightSpeedOut;
+ -webkit-animation-timing-function: ease-in;
+ animation-timing-function: ease-in;
+}
+
+@-webkit-keyframes rotateIn {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateIn {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateIn {
+ -webkit-animation-name: rotateIn;
+ animation-name: rotateIn;
+}
+
+@-webkit-keyframes rotateInDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownLeft {
+ -webkit-animation-name: rotateInDownLeft;
+ animation-name: rotateInDownLeft;
+}
+
+@-webkit-keyframes rotateInDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownRight {
+ -webkit-animation-name: rotateInDownRight;
+ animation-name: rotateInDownRight;
+}
+
+@-webkit-keyframes rotateInUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpLeft {
+ -webkit-animation-name: rotateInUpLeft;
+ animation-name: rotateInUpLeft;
+}
+
+@-webkit-keyframes rotateInUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+@keyframes rotateInUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpRight {
+ -webkit-animation-name: rotateInUpRight;
+ animation-name: rotateInUpRight;
+}
+
+@-webkit-keyframes rotateOut {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOut {
+ from {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: center;
+ transform-origin: center;
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0;
+ }
+}
+
+.rotateOut {
+ -webkit-animation-name: rotateOut;
+ animation-name: rotateOut;
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutDownLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownLeft {
+ -webkit-animation-name: rotateOutDownLeft;
+ animation-name: rotateOutDownLeft;
+}
+
+@-webkit-keyframes rotateOutDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutDownRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownRight {
+ -webkit-animation-name: rotateOutDownRight;
+ animation-name: rotateOutDownRight;
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutUpLeft {
+ from {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: left bottom;
+ transform-origin: left bottom;
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpLeft {
+ -webkit-animation-name: rotateOutUpLeft;
+ animation-name: rotateOutUpLeft;
+}
+
+@-webkit-keyframes rotateOutUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0;
+ }
+}
+
+@keyframes rotateOutUpRight {
+ from {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform-origin: right bottom;
+ transform-origin: right bottom;
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpRight {
+ -webkit-animation-name: rotateOutUpRight;
+ animation-name: rotateOutUpRight;
+}
+
+@-webkit-keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%,
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40%,
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+@keyframes hinge {
+ 0% {
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%,
+ 60% {
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
+ transform: rotate3d(0, 0, 1, 80deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40%,
+ 80% {
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
+ transform: rotate3d(0, 0, 1, 60deg);
+ -webkit-transform-origin: top left;
+ transform-origin: top left;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 700px, 0);
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+ -webkit-animation-name: hinge;
+ animation-name: hinge;
+}
+
+@-webkit-keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ -webkit-transform: scale(0.1) rotate(30deg);
+ transform: scale(0.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ }
+
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+@keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ -webkit-transform: scale(0.1) rotate(30deg);
+ transform: scale(0.1) rotate(30deg);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ }
+
+ 50% {
+ -webkit-transform: rotate(-10deg);
+ transform: rotate(-10deg);
+ }
+
+ 70% {
+ -webkit-transform: rotate(3deg);
+ transform: rotate(3deg);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+.jackInTheBox {
+ -webkit-animation-name: jackInTheBox;
+ animation-name: jackInTheBox;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes rollIn {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.rollIn {
+ -webkit-animation-name: rollIn;
+ animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ }
+}
+
+@keyframes rollOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ }
+}
+
+.rollOut {
+ -webkit-animation-name: rollOut;
+ animation-name: rollOut;
+}
+
+@-webkit-keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+.zoomIn {
+ -webkit-animation-name: zoomIn;
+ animation-name: zoomIn;
+}
+
+@-webkit-keyframes zoomInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomInDown {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInDown {
+ -webkit-animation-name: zoomInDown;
+ animation-name: zoomInDown;
+}
+
+@-webkit-keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInLeft {
+ -webkit-animation-name: zoomInLeft;
+ animation-name: zoomInLeft;
+}
+
+@-webkit-keyframes zoomInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomInRight {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInRight {
+ -webkit-animation-name: zoomInRight;
+ animation-name: zoomInRight;
+}
+
+@-webkit-keyframes zoomInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomInUp {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInUp {
+ -webkit-animation-name: zoomInUp;
+ animation-name: zoomInUp;
+}
+
+@-webkit-keyframes zoomOut {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes zoomOut {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.zoomOut {
+ -webkit-animation-name: zoomOut;
+ animation-name: zoomOut;
+}
+
+@-webkit-keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomOutDown {
+ -webkit-animation-name: zoomOutDown;
+ animation-name: zoomOutDown;
+}
+
+@-webkit-keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center;
+ }
+}
+
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center;
+ }
+}
+
+.zoomOutLeft {
+ -webkit-animation-name: zoomOutLeft;
+ animation-name: zoomOutLeft;
+}
+
+@-webkit-keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
+ transform: scale(0.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ transform-origin: right center;
+ }
+}
+
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
+ transform: scale(0.1) translate3d(2000px, 0, 0);
+ -webkit-transform-origin: right center;
+ transform-origin: right center;
+ }
+}
+
+.zoomOutRight {
+ -webkit-animation-name: zoomOutRight;
+ animation-name: zoomOutRight;
+}
+
+@-webkit-keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ -webkit-transform-origin: center bottom;
+ transform-origin: center bottom;
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomOutUp {
+ -webkit-animation-name: zoomOutUp;
+ animation-name: zoomOutUp;
+}
+
+@-webkit-keyframes slideInDown {
+ from {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes slideInDown {
+ from {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInDown {
+ -webkit-animation-name: slideInDown;
+ animation-name: slideInDown;
+}
+
+@-webkit-keyframes slideInLeft {
+ from {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes slideInLeft {
+ from {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInLeft {
+ -webkit-animation-name: slideInLeft;
+ animation-name: slideInLeft;
+}
+
+@-webkit-keyframes slideInRight {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes slideInRight {
+ from {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInRight {
+ -webkit-animation-name: slideInRight;
+ animation-name: slideInRight;
+}
+
+@-webkit-keyframes slideInUp {
+ from {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes slideInUp {
+ from {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInUp {
+ -webkit-animation-name: slideInUp;
+ animation-name: slideInUp;
+}
+
+@-webkit-keyframes slideOutDown {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes slideOutDown {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.slideOutDown {
+ -webkit-animation-name: slideOutDown;
+ animation-name: slideOutDown;
+}
+
+@-webkit-keyframes slideOutLeft {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes slideOutLeft {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.slideOutLeft {
+ -webkit-animation-name: slideOutLeft;
+ animation-name: slideOutLeft;
+}
+
+@-webkit-keyframes slideOutRight {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes slideOutRight {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.slideOutRight {
+ -webkit-animation-name: slideOutRight;
+ animation-name: slideOutRight;
+}
+
+@-webkit-keyframes slideOutUp {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes slideOutUp {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.slideOutUp {
+ -webkit-animation-name: slideOutUp;
+ animation-name: slideOutUp;
+}
+
+.animated {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.animated.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+}
+
+.animated.delay-1s {
+ -webkit-animation-delay: 1s;
+ animation-delay: 1s;
+}
+
+.animated.delay-2s {
+ -webkit-animation-delay: 2s;
+ animation-delay: 2s;
+}
+
+.animated.delay-3s {
+ -webkit-animation-delay: 3s;
+ animation-delay: 3s;
+}
+
+.animated.delay-4s {
+ -webkit-animation-delay: 4s;
+ animation-delay: 4s;
+}
+
+.animated.delay-5s {
+ -webkit-animation-delay: 5s;
+ animation-delay: 5s;
+}
+
+.animated.fast {
+ -webkit-animation-duration: 800ms;
+ animation-duration: 800ms;
+}
+
+.animated.faster {
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+}
+
+.animated.slow {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+}
+
+.animated.slower {
+ -webkit-animation-duration: 3s;
+ animation-duration: 3s;
+}
+
+@media (print), (prefers-reduced-motion: reduce) {
+ .animated {
+ -webkit-animation-duration: 1ms !important;
+ animation-duration: 1ms !important;
+ -webkit-transition-duration: 1ms !important;
+ transition-duration: 1ms !important;
+ -webkit-animation-iteration-count: 1 !important;
+ animation-iteration-count: 1 !important;
+ }
+}
diff --git a/node_modules/animate.css/animate.min.css b/node_modules/animate.css/animate.min.css
new file mode 100644
index 0000000..f3f1068
--- /dev/null
+++ b/node_modules/animate.css/animate.min.css
@@ -0,0 +1,11 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -https://daneden.github.io/animate.css/
+ * Version - 3.7.2
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2019 Daniel Eden
+ */
+
+@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media (prefers-reduced-motion:reduce),(print){.animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}}
\ No newline at end of file
diff --git a/node_modules/animate.css/bower.json b/node_modules/animate.css/bower.json
new file mode 100644
index 0000000..6c40e8c
--- /dev/null
+++ b/node_modules/animate.css/bower.json
@@ -0,0 +1,5 @@
+{
+ "name": "animate.css",
+ "main": "./animate.css",
+ "ignore": [".*", "*.yml", "Gemfile", "Gemfile.lock", "*.md"]
+}
diff --git a/node_modules/animate.css/gulpfile.js b/node_modules/animate.css/gulpfile.js
new file mode 100644
index 0000000..b81ee2c
--- /dev/null
+++ b/node_modules/animate.css/gulpfile.js
@@ -0,0 +1,107 @@
+// Utilities
+var autoprefixer = require('autoprefixer');
+var cssnano = require('cssnano');
+var fs = require('fs');
+
+// Gulp
+var gulp = require('gulp');
+
+// Gulp plugins
+var concat = require('gulp-concat');
+var gutil = require('gulp-util');
+var header = require('gulp-header');
+var postcss = require('gulp-postcss');
+var rename = require('gulp-rename');
+var runSequence = require('run-sequence');
+
+// Misc/global vars
+var pkg = JSON.parse(fs.readFileSync('package.json'));
+var activatedAnimations = activateAnimations();
+
+// Task options
+var opts = {
+ destPath: './',
+ concatName: 'animate.css',
+
+ autoprefixer: {
+ browsers: ['> 1%', 'last 2 versions', 'Firefox ESR'],
+ cascade: false,
+ },
+
+ minRename: {
+ suffix: '.min',
+ },
+
+ banner: [
+ '@charset "UTF-8";\n',
+ '/*!',
+ ' * <%= name %> -<%= homepage %>',
+ ' * Version - <%= version %>',
+ ' * Licensed under the MIT license - http://opensource.org/licenses/MIT',
+ ' *',
+ ' * Copyright (c) <%= new Date().getFullYear() %> <%= author.name %>',
+ ' */\n\n',
+ ].join('\n'),
+};
+
+// ----------------------------
+// Gulp task definitions
+// ----------------------------
+
+gulp.task('createCSS', function() {
+ return gulp
+ .src(activatedAnimations)
+ .pipe(concat(opts.concatName))
+ .pipe(postcss([autoprefixer(opts.autoprefixer)]))
+ .pipe(gulp.dest(opts.destPath))
+ .pipe(postcss([cssnano({reduceIdents: {keyframes: false}})]))
+ .pipe(rename(opts.minRename))
+ .pipe(gulp.dest(opts.destPath));
+});
+
+gulp.task('addHeader', function() {
+ return gulp
+ .src('*.css')
+ .pipe(header(opts.banner, pkg))
+ .pipe(gulp.dest(opts.destPath));
+});
+
+gulp.task('default', gulp.series('createCSS', 'addHeader'));
+
+// ----------------------------
+// Helpers/functions
+// ----------------------------
+
+// Read the config file and return an array of the animations to be activated
+function activateAnimations() {
+ var categories = JSON.parse(fs.readFileSync('animate-config.json')),
+ category,
+ files,
+ file,
+ target = [],
+ count = 0;
+
+ for (category in categories) {
+ if (categories.hasOwnProperty(category)) {
+ files = categories[category];
+
+ for (file in files) {
+ if (files[file]) {
+ // marked as true
+ target.push('source/' + category + '/' + file + '.css');
+ count += 1;
+ }
+ }
+ }
+ }
+ // prepend base CSS
+ target.push('source/_base.css');
+
+ if (!count) {
+ gutil.log('No animations activated.');
+ } else {
+ gutil.log(count + (count > 1 ? ' animations' : ' animation') + ' activated.');
+ }
+
+ return target;
+}
diff --git a/node_modules/animate.css/package.json b/node_modules/animate.css/package.json
new file mode 100644
index 0000000..1a397aa
--- /dev/null
+++ b/node_modules/animate.css/package.json
@@ -0,0 +1,88 @@
+{
+ "_from": "animate.css",
+ "_id": "animate.css@3.7.2",
+ "_inBundle": false,
+ "_integrity": "sha1-5z4NUOkssc/vFZfZs4qUgQIOCOo=",
+ "_location": "/animate.css",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "animate.css",
+ "name": "animate.css",
+ "escapedName": "animate.css",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npm.taobao.org/animate.css/download/animate.css-3.7.2.tgz",
+ "_shasum": "e73e0d50e92cb1cfef1597d9b38a9481020e08ea",
+ "_spec": "animate.css",
+ "_where": "/Users/piao/Documents/Project/yshopmall_uni",
+ "author": {
+ "name": "Daniel Eden"
+ },
+ "bugs": {
+ "url": "https://github.com/daneden/animate.css/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "_Just-add-water CSS animation_",
+ "devDependencies": {
+ "autoprefixer": "^9.0.1",
+ "cssnano": "^4.0.3",
+ "eslint": "^5.2.0",
+ "gulp": "^4.0.0",
+ "gulp-concat": "^2.6.1",
+ "gulp-header": "^2.0.1",
+ "gulp-postcss": "^8.0.0",
+ "gulp-rename": "^1.2.2",
+ "gulp-util": "^3.0.8",
+ "husky": "^1.2.0",
+ "lint-staged": "^8.1.0",
+ "prettier": "^1.10.2",
+ "run-sequence": "^2.2.1"
+ },
+ "homepage": "https://daneden.github.io/animate.css/",
+ "jspm": {
+ "main": "animate.css!",
+ "format": "global",
+ "directories": {
+ "lib": "./"
+ }
+ },
+ "license": "MIT",
+ "lint-staged": {
+ "*.{js,json,md,css}": [
+ "prettier --write",
+ "git add"
+ ]
+ },
+ "main": "animate.css",
+ "name": "animate.css",
+ "prettier": {
+ "bracketSpacing": false,
+ "proseWrap": "never",
+ "singleQuote": true,
+ "trailingComma": "all"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/daneden/animate.css.git"
+ },
+ "scripts": {
+ "gulp": "./node_modules/gulp/bin/gulp.js",
+ "precommit": "lint-staged",
+ "prettier": "prettier --write \"**/*.{js,json,md,css}\"",
+ "start": "gulp"
+ },
+ "spm": {
+ "main": "./animate.css"
+ },
+ "style": "./animate.css",
+ "version": "3.7.2"
+}
diff --git a/node_modules/animate.css/source/_base.css b/node_modules/animate.css/source/_base.css
new file mode 100644
index 0000000..4e90757
--- /dev/null
+++ b/node_modules/animate.css/source/_base.css
@@ -0,0 +1,52 @@
+.animated {
+ animation-duration: 1s;
+ animation-fill-mode: both;
+}
+
+.animated.infinite {
+ animation-iteration-count: infinite;
+}
+
+.animated.delay-1s {
+ animation-delay: 1s;
+}
+
+.animated.delay-2s {
+ animation-delay: 2s;
+}
+
+.animated.delay-3s {
+ animation-delay: 3s;
+}
+
+.animated.delay-4s {
+ animation-delay: 4s;
+}
+
+.animated.delay-5s {
+ animation-delay: 5s;
+}
+
+.animated.fast {
+ animation-duration: 800ms;
+}
+
+.animated.faster {
+ animation-duration: 500ms;
+}
+
+.animated.slow {
+ animation-duration: 2s;
+}
+
+.animated.slower {
+ animation-duration: 3s;
+}
+
+@media (print), (prefers-reduced-motion: reduce) {
+ .animated {
+ animation-duration: 1ms !important;
+ transition-duration: 1ms !important;
+ animation-iteration-count: 1 !important;
+ }
+}
diff --git a/node_modules/animate.css/source/_vars.css b/node_modules/animate.css/source/_vars.css
new file mode 100644
index 0000000..689cffb
--- /dev/null
+++ b/node_modules/animate.css/source/_vars.css
@@ -0,0 +1,4 @@
+.animated {
+ --animate-duration: 1s;
+ --animate-delay: 1s;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/bounce.css b/node_modules/animate.css/source/attention_seekers/bounce.css
new file mode 100644
index 0000000..a249507
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/bounce.css
@@ -0,0 +1,30 @@
+@keyframes bounce {
+ from,
+ 20%,
+ 53%,
+ 80%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ transform: translate3d(0, 0, 0);
+ }
+
+ 40%,
+ 43% {
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ transform: translate3d(0, -30px, 0);
+ }
+
+ 70% {
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+ transform: translate3d(0, -15px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, -4px, 0);
+ }
+}
+
+.bounce {
+ animation-name: bounce;
+ transform-origin: center bottom;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/flash.css b/node_modules/animate.css/source/attention_seekers/flash.css
new file mode 100644
index 0000000..844bba8
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/flash.css
@@ -0,0 +1,16 @@
+@keyframes flash {
+ from,
+ 50%,
+ to {
+ opacity: 1;
+ }
+
+ 25%,
+ 75% {
+ opacity: 0;
+ }
+}
+
+.flash {
+ animation-name: flash;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/headShake.css b/node_modules/animate.css/source/attention_seekers/headShake.css
new file mode 100644
index 0000000..b599ec7
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/headShake.css
@@ -0,0 +1,30 @@
+@keyframes headShake {
+ 0% {
+ transform: translateX(0);
+ }
+
+ 6.5% {
+ transform: translateX(-6px) rotateY(-9deg);
+ }
+
+ 18.5% {
+ transform: translateX(5px) rotateY(7deg);
+ }
+
+ 31.5% {
+ transform: translateX(-3px) rotateY(-5deg);
+ }
+
+ 43.5% {
+ transform: translateX(2px) rotateY(3deg);
+ }
+
+ 50% {
+ transform: translateX(0);
+ }
+}
+
+.headShake {
+ animation-timing-function: ease-in-out;
+ animation-name: headShake;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/heartBeat.css b/node_modules/animate.css/source/attention_seekers/heartBeat.css
new file mode 100644
index 0000000..5e369e7
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/heartBeat.css
@@ -0,0 +1,27 @@
+@keyframes heartBeat {
+ 0% {
+ transform: scale(1);
+ }
+
+ 14% {
+ transform: scale(1.3);
+ }
+
+ 28% {
+ transform: scale(1);
+ }
+
+ 42% {
+ transform: scale(1.3);
+ }
+
+ 70% {
+ transform: scale(1);
+ }
+}
+
+.heartBeat {
+ animation-name: heartBeat;
+ animation-duration: 1.3s;
+ animation-timing-function: ease-in-out;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/jello.css b/node_modules/animate.css/source/attention_seekers/jello.css
new file mode 100644
index 0000000..dd7ef41
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/jello.css
@@ -0,0 +1,40 @@
+@keyframes jello {
+ from,
+ 11.1%,
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 22.2% {
+ transform: skewX(-12.5deg) skewY(-12.5deg);
+ }
+
+ 33.3% {
+ transform: skewX(6.25deg) skewY(6.25deg);
+ }
+
+ 44.4% {
+ transform: skewX(-3.125deg) skewY(-3.125deg);
+ }
+
+ 55.5% {
+ transform: skewX(1.5625deg) skewY(1.5625deg);
+ }
+
+ 66.6% {
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ }
+
+ 77.7% {
+ transform: skewX(0.390625deg) skewY(0.390625deg);
+ }
+
+ 88.8% {
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ }
+}
+
+.jello {
+ animation-name: jello;
+ transform-origin: center;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/pulse.css b/node_modules/animate.css/source/attention_seekers/pulse.css
new file mode 100644
index 0000000..a03c622
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/pulse.css
@@ -0,0 +1,19 @@
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes pulse {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.pulse {
+ animation-name: pulse;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/rubberBand.css b/node_modules/animate.css/source/attention_seekers/rubberBand.css
new file mode 100644
index 0000000..cc6d986
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/rubberBand.css
@@ -0,0 +1,33 @@
+@keyframes rubberBand {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ transform: scale3d(0.95, 1.05, 1);
+ }
+
+ 75% {
+ transform: scale3d(1.05, 0.95, 1);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.rubberBand {
+ animation-name: rubberBand;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/shake.css b/node_modules/animate.css/source/attention_seekers/shake.css
new file mode 100644
index 0000000..9cfcc79
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/shake.css
@@ -0,0 +1,25 @@
+@keyframes shake {
+ from,
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10%,
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 20%,
+ 40%,
+ 60%,
+ 80% {
+ transform: translate3d(10px, 0, 0);
+ }
+}
+
+.shake {
+ animation-name: shake;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/swing.css b/node_modules/animate.css/source/attention_seekers/swing.css
new file mode 100644
index 0000000..e5d8742
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/swing.css
@@ -0,0 +1,26 @@
+@keyframes swing {
+ 20% {
+ transform: rotate3d(0, 0, 1, 15deg);
+ }
+
+ 40% {
+ transform: rotate3d(0, 0, 1, -10deg);
+ }
+
+ 60% {
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+
+ 80% {
+ transform: rotate3d(0, 0, 1, -5deg);
+ }
+
+ to {
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+}
+
+.swing {
+ transform-origin: top center;
+ animation-name: swing;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/tada.css b/node_modules/animate.css/source/attention_seekers/tada.css
new file mode 100644
index 0000000..7c33b5d
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/tada.css
@@ -0,0 +1,31 @@
+@keyframes tada {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10%,
+ 20% {
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30%,
+ 50%,
+ 70%,
+ 90% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40%,
+ 60%,
+ 80% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.tada {
+ animation-name: tada;
+}
diff --git a/node_modules/animate.css/source/attention_seekers/wobble.css b/node_modules/animate.css/source/attention_seekers/wobble.css
new file mode 100644
index 0000000..6290322
--- /dev/null
+++ b/node_modules/animate.css/source/attention_seekers/wobble.css
@@ -0,0 +1,35 @@
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes wobble {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 15% {
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ }
+
+ 30% {
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 45% {
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ }
+
+ 75% {
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.wobble {
+ animation-name: wobble;
+}
diff --git a/node_modules/animate.css/source/bouncing_entrances/bounceIn.css b/node_modules/animate.css/source/bouncing_entrances/bounceIn.css
new file mode 100644
index 0000000..644e8dd
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_entrances/bounceIn.css
@@ -0,0 +1,42 @@
+@keyframes bounceIn {
+ from,
+ 20%,
+ 40%,
+ 60%,
+ 80%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 20% {
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ 40% {
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+
+ 80% {
+ transform: scale3d(0.97, 0.97, 0.97);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.bounceIn {
+ animation-duration: 0.75s;
+ animation-name: bounceIn;
+}
diff --git a/node_modules/animate.css/source/bouncing_entrances/bounceInDown.css b/node_modules/animate.css/source/bouncing_entrances/bounceInDown.css
new file mode 100644
index 0000000..5cfed3d
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_entrances/bounceInDown.css
@@ -0,0 +1,35 @@
+@keyframes bounceInDown {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(0, -3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, 25px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, 5px, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInDown {
+ animation-name: bounceInDown;
+}
diff --git a/node_modules/animate.css/source/bouncing_entrances/bounceInLeft.css b/node_modules/animate.css/source/bouncing_entrances/bounceInLeft.css
new file mode 100644
index 0000000..6b811d3
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_entrances/bounceInLeft.css
@@ -0,0 +1,35 @@
+@keyframes bounceInLeft {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(-3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(5px, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInLeft {
+ animation-name: bounceInLeft;
+}
diff --git a/node_modules/animate.css/source/bouncing_entrances/bounceInRight.css b/node_modules/animate.css/source/bouncing_entrances/bounceInRight.css
new file mode 100644
index 0000000..ca09286
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_entrances/bounceInRight.css
@@ -0,0 +1,35 @@
+@keyframes bounceInRight {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(-25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(-5px, 0, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInRight {
+ animation-name: bounceInRight;
+}
diff --git a/node_modules/animate.css/source/bouncing_entrances/bounceInUp.css b/node_modules/animate.css/source/bouncing_entrances/bounceInUp.css
new file mode 100644
index 0000000..6100c00
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_entrances/bounceInUp.css
@@ -0,0 +1,35 @@
+@keyframes bounceInUp {
+ from,
+ 60%,
+ 75%,
+ 90%,
+ to {
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(0, 3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, -5px, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInUp {
+ animation-name: bounceInUp;
+}
diff --git a/node_modules/animate.css/source/bouncing_exits/bounceOut.css b/node_modules/animate.css/source/bouncing_exits/bounceOut.css
new file mode 100644
index 0000000..dc3eab5
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_exits/bounceOut.css
@@ -0,0 +1,21 @@
+@keyframes bounceOut {
+ 20% {
+ transform: scale3d(0.9, 0.9, 0.9);
+ }
+
+ 50%,
+ 55% {
+ opacity: 1;
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+}
+
+.bounceOut {
+ animation-duration: 0.75s;
+ animation-name: bounceOut;
+}
diff --git a/node_modules/animate.css/source/bouncing_exits/bounceOutDown.css b/node_modules/animate.css/source/bouncing_exits/bounceOutDown.css
new file mode 100644
index 0000000..0fd65cf
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_exits/bounceOutDown.css
@@ -0,0 +1,20 @@
+@keyframes bounceOutDown {
+ 20% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.bounceOutDown {
+ animation-name: bounceOutDown;
+}
diff --git a/node_modules/animate.css/source/bouncing_exits/bounceOutLeft.css b/node_modules/animate.css/source/bouncing_exits/bounceOutLeft.css
new file mode 100644
index 0000000..591d2a5
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_exits/bounceOutLeft.css
@@ -0,0 +1,15 @@
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ transform: translate3d(20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.bounceOutLeft {
+ animation-name: bounceOutLeft;
+}
diff --git a/node_modules/animate.css/source/bouncing_exits/bounceOutRight.css b/node_modules/animate.css/source/bouncing_exits/bounceOutRight.css
new file mode 100644
index 0000000..355b50e
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_exits/bounceOutRight.css
@@ -0,0 +1,15 @@
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ transform: translate3d(-20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.bounceOutRight {
+ animation-name: bounceOutRight;
+}
diff --git a/node_modules/animate.css/source/bouncing_exits/bounceOutUp.css b/node_modules/animate.css/source/bouncing_exits/bounceOutUp.css
new file mode 100644
index 0000000..0a6b286
--- /dev/null
+++ b/node_modules/animate.css/source/bouncing_exits/bounceOutUp.css
@@ -0,0 +1,20 @@
+@keyframes bounceOutUp {
+ 20% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 40%,
+ 45% {
+ opacity: 1;
+ transform: translate3d(0, 20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.bounceOutUp {
+ animation-name: bounceOutUp;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeIn.css b/node_modules/animate.css/source/fading_entrances/fadeIn.css
new file mode 100644
index 0000000..f0fa0cc
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeIn.css
@@ -0,0 +1,13 @@
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+.fadeIn {
+ animation-name: fadeIn;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInDown.css b/node_modules/animate.css/source/fading_entrances/fadeInDown.css
new file mode 100644
index 0000000..e180b52
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInDown.css
@@ -0,0 +1,15 @@
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInDown {
+ animation-name: fadeInDown;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInDownBig.css b/node_modules/animate.css/source/fading_entrances/fadeInDownBig.css
new file mode 100644
index 0000000..c2da977
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInDownBig.css
@@ -0,0 +1,15 @@
+@keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInDownBig {
+ animation-name: fadeInDownBig;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInLeft.css b/node_modules/animate.css/source/fading_entrances/fadeInLeft.css
new file mode 100644
index 0000000..47acc42
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInLeft.css
@@ -0,0 +1,15 @@
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInLeft {
+ animation-name: fadeInLeft;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInLeftBig.css b/node_modules/animate.css/source/fading_entrances/fadeInLeftBig.css
new file mode 100644
index 0000000..39b5ed2
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInLeftBig.css
@@ -0,0 +1,15 @@
+@keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInLeftBig {
+ animation-name: fadeInLeftBig;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInRight.css b/node_modules/animate.css/source/fading_entrances/fadeInRight.css
new file mode 100644
index 0000000..856fef3
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInRight.css
@@ -0,0 +1,15 @@
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInRight {
+ animation-name: fadeInRight;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInRightBig.css b/node_modules/animate.css/source/fading_entrances/fadeInRightBig.css
new file mode 100644
index 0000000..d9cbc64
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInRightBig.css
@@ -0,0 +1,15 @@
+@keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInRightBig {
+ animation-name: fadeInRightBig;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInUp.css b/node_modules/animate.css/source/fading_entrances/fadeInUp.css
new file mode 100644
index 0000000..c66c840
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInUp.css
@@ -0,0 +1,15 @@
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInUp {
+ animation-name: fadeInUp;
+}
diff --git a/node_modules/animate.css/source/fading_entrances/fadeInUpBig.css b/node_modules/animate.css/source/fading_entrances/fadeInUpBig.css
new file mode 100644
index 0000000..11adc5c
--- /dev/null
+++ b/node_modules/animate.css/source/fading_entrances/fadeInUpBig.css
@@ -0,0 +1,15 @@
+@keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.fadeInUpBig {
+ animation-name: fadeInUpBig;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOut.css b/node_modules/animate.css/source/fading_exits/fadeOut.css
new file mode 100644
index 0000000..635b639
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOut.css
@@ -0,0 +1,13 @@
+@keyframes fadeOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.fadeOut {
+ animation-name: fadeOut;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutDown.css b/node_modules/animate.css/source/fading_exits/fadeOutDown.css
new file mode 100644
index 0000000..e8b4446
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutDown.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutDown {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.fadeOutDown {
+ animation-name: fadeOutDown;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutDownBig.css b/node_modules/animate.css/source/fading_exits/fadeOutDownBig.css
new file mode 100644
index 0000000..a728101
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutDownBig.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutDownBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.fadeOutDownBig {
+ animation-name: fadeOutDownBig;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutLeft.css b/node_modules/animate.css/source/fading_exits/fadeOutLeft.css
new file mode 100644
index 0000000..320e02a
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutLeft.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutLeft {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.fadeOutLeft {
+ animation-name: fadeOutLeft;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutLeftBig.css b/node_modules/animate.css/source/fading_exits/fadeOutLeftBig.css
new file mode 100644
index 0000000..0a4bbb6
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutLeftBig.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutLeftBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.fadeOutLeftBig {
+ animation-name: fadeOutLeftBig;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutRight.css b/node_modules/animate.css/source/fading_exits/fadeOutRight.css
new file mode 100644
index 0000000..b83e9f2
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutRight.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutRight {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.fadeOutRight {
+ animation-name: fadeOutRight;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutRightBig.css b/node_modules/animate.css/source/fading_exits/fadeOutRightBig.css
new file mode 100644
index 0000000..47ce4d3
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutRightBig.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutRightBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.fadeOutRightBig {
+ animation-name: fadeOutRightBig;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutUp.css b/node_modules/animate.css/source/fading_exits/fadeOutUp.css
new file mode 100644
index 0000000..687f3a9
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutUp.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutUp {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.fadeOutUp {
+ animation-name: fadeOutUp;
+}
diff --git a/node_modules/animate.css/source/fading_exits/fadeOutUpBig.css b/node_modules/animate.css/source/fading_exits/fadeOutUpBig.css
new file mode 100644
index 0000000..e246173
--- /dev/null
+++ b/node_modules/animate.css/source/fading_exits/fadeOutUpBig.css
@@ -0,0 +1,14 @@
+@keyframes fadeOutUpBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.fadeOutUpBig {
+ animation-name: fadeOutUpBig;
+}
diff --git a/node_modules/animate.css/source/flippers/flip.css b/node_modules/animate.css/source/flippers/flip.css
new file mode 100644
index 0000000..821b4bc
--- /dev/null
+++ b/node_modules/animate.css/source/flippers/flip.css
@@ -0,0 +1,34 @@
+@keyframes flip {
+ from {
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -190deg);
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
+ rotate3d(0, 1, 0, -170deg);
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
+ rotate3d(0, 1, 0, 0deg);
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
+ animation-timing-function: ease-in;
+ }
+}
+
+.animated.flip {
+ backface-visibility: visible;
+ animation-name: flip;
+}
diff --git a/node_modules/animate.css/source/flippers/flipInX.css b/node_modules/animate.css/source/flippers/flipInX.css
new file mode 100644
index 0000000..58bdd3b
--- /dev/null
+++ b/node_modules/animate.css/source/flippers/flipInX.css
@@ -0,0 +1,30 @@
+@keyframes flipInX {
+ from {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInX {
+ backface-visibility: visible !important;
+ animation-name: flipInX;
+}
diff --git a/node_modules/animate.css/source/flippers/flipInY.css b/node_modules/animate.css/source/flippers/flipInY.css
new file mode 100644
index 0000000..b1df818
--- /dev/null
+++ b/node_modules/animate.css/source/flippers/flipInY.css
@@ -0,0 +1,30 @@
+@keyframes flipInY {
+ from {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInY {
+ backface-visibility: visible !important;
+ animation-name: flipInY;
+}
diff --git a/node_modules/animate.css/source/flippers/flipOutX.css b/node_modules/animate.css/source/flippers/flipOutX.css
new file mode 100644
index 0000000..59dc8a1
--- /dev/null
+++ b/node_modules/animate.css/source/flippers/flipOutX.css
@@ -0,0 +1,21 @@
+@keyframes flipOutX {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutX {
+ animation-duration: 0.75s;
+ animation-name: flipOutX;
+ backface-visibility: visible !important;
+}
diff --git a/node_modules/animate.css/source/flippers/flipOutY.css b/node_modules/animate.css/source/flippers/flipOutY.css
new file mode 100644
index 0000000..02ac8e8
--- /dev/null
+++ b/node_modules/animate.css/source/flippers/flipOutY.css
@@ -0,0 +1,21 @@
+@keyframes flipOutY {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutY {
+ animation-duration: 0.75s;
+ backface-visibility: visible !important;
+ animation-name: flipOutY;
+}
diff --git a/node_modules/animate.css/source/lightspeed/lightSpeedIn.css b/node_modules/animate.css/source/lightspeed/lightSpeedIn.css
new file mode 100644
index 0000000..daf1a8a
--- /dev/null
+++ b/node_modules/animate.css/source/lightspeed/lightSpeedIn.css
@@ -0,0 +1,24 @@
+@keyframes lightSpeedIn {
+ from {
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ transform: skewX(20deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: skewX(-5deg);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.lightSpeedIn {
+ animation-name: lightSpeedIn;
+ animation-timing-function: ease-out;
+}
diff --git a/node_modules/animate.css/source/lightspeed/lightSpeedOut.css b/node_modules/animate.css/source/lightspeed/lightSpeedOut.css
new file mode 100644
index 0000000..2606e74
--- /dev/null
+++ b/node_modules/animate.css/source/lightspeed/lightSpeedOut.css
@@ -0,0 +1,15 @@
+@keyframes lightSpeedOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+.lightSpeedOut {
+ animation-name: lightSpeedOut;
+ animation-timing-function: ease-in;
+}
diff --git a/node_modules/animate.css/source/rotating_entrances/rotateIn.css b/node_modules/animate.css/source/rotating_entrances/rotateIn.css
new file mode 100644
index 0000000..06e61f1
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_entrances/rotateIn.css
@@ -0,0 +1,17 @@
+@keyframes rotateIn {
+ from {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: center;
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateIn {
+ animation-name: rotateIn;
+}
diff --git a/node_modules/animate.css/source/rotating_entrances/rotateInDownLeft.css b/node_modules/animate.css/source/rotating_entrances/rotateInDownLeft.css
new file mode 100644
index 0000000..2aaf361
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_entrances/rotateInDownLeft.css
@@ -0,0 +1,17 @@
+@keyframes rotateInDownLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownLeft {
+ animation-name: rotateInDownLeft;
+}
diff --git a/node_modules/animate.css/source/rotating_entrances/rotateInDownRight.css b/node_modules/animate.css/source/rotating_entrances/rotateInDownRight.css
new file mode 100644
index 0000000..1471504
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_entrances/rotateInDownRight.css
@@ -0,0 +1,17 @@
+@keyframes rotateInDownRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInDownRight {
+ animation-name: rotateInDownRight;
+}
diff --git a/node_modules/animate.css/source/rotating_entrances/rotateInUpLeft.css b/node_modules/animate.css/source/rotating_entrances/rotateInUpLeft.css
new file mode 100644
index 0000000..9cb1451
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_entrances/rotateInUpLeft.css
@@ -0,0 +1,17 @@
+@keyframes rotateInUpLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpLeft {
+ animation-name: rotateInUpLeft;
+}
diff --git a/node_modules/animate.css/source/rotating_entrances/rotateInUpRight.css b/node_modules/animate.css/source/rotating_entrances/rotateInUpRight.css
new file mode 100644
index 0000000..6fad935
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_entrances/rotateInUpRight.css
@@ -0,0 +1,17 @@
+@keyframes rotateInUpRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: translate3d(0, 0, 0);
+ opacity: 1;
+ }
+}
+
+.rotateInUpRight {
+ animation-name: rotateInUpRight;
+}
diff --git a/node_modules/animate.css/source/rotating_exits/rotateOut.css b/node_modules/animate.css/source/rotating_exits/rotateOut.css
new file mode 100644
index 0000000..ff580f7
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_exits/rotateOut.css
@@ -0,0 +1,16 @@
+@keyframes rotateOut {
+ from {
+ transform-origin: center;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0;
+ }
+}
+
+.rotateOut {
+ animation-name: rotateOut;
+}
diff --git a/node_modules/animate.css/source/rotating_exits/rotateOutDownLeft.css b/node_modules/animate.css/source/rotating_exits/rotateOutDownLeft.css
new file mode 100644
index 0000000..bb2111e
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_exits/rotateOutDownLeft.css
@@ -0,0 +1,16 @@
+@keyframes rotateOutDownLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownLeft {
+ animation-name: rotateOutDownLeft;
+}
diff --git a/node_modules/animate.css/source/rotating_exits/rotateOutDownRight.css b/node_modules/animate.css/source/rotating_exits/rotateOutDownRight.css
new file mode 100644
index 0000000..88a46ec
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_exits/rotateOutDownRight.css
@@ -0,0 +1,16 @@
+@keyframes rotateOutDownRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownRight {
+ animation-name: rotateOutDownRight;
+}
diff --git a/node_modules/animate.css/source/rotating_exits/rotateOutUpLeft.css b/node_modules/animate.css/source/rotating_exits/rotateOutUpLeft.css
new file mode 100644
index 0000000..a95f61b
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_exits/rotateOutUpLeft.css
@@ -0,0 +1,16 @@
+@keyframes rotateOutUpLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpLeft {
+ animation-name: rotateOutUpLeft;
+}
diff --git a/node_modules/animate.css/source/rotating_exits/rotateOutUpRight.css b/node_modules/animate.css/source/rotating_exits/rotateOutUpRight.css
new file mode 100644
index 0000000..baf0e3a
--- /dev/null
+++ b/node_modules/animate.css/source/rotating_exits/rotateOutUpRight.css
@@ -0,0 +1,16 @@
+@keyframes rotateOutUpRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpRight {
+ animation-name: rotateOutUpRight;
+}
diff --git a/node_modules/animate.css/source/sliding_entrances/slideInDown.css b/node_modules/animate.css/source/sliding_entrances/slideInDown.css
new file mode 100644
index 0000000..1e133a1
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_entrances/slideInDown.css
@@ -0,0 +1,14 @@
+@keyframes slideInDown {
+ from {
+ transform: translate3d(0, -100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInDown {
+ animation-name: slideInDown;
+}
diff --git a/node_modules/animate.css/source/sliding_entrances/slideInLeft.css b/node_modules/animate.css/source/sliding_entrances/slideInLeft.css
new file mode 100644
index 0000000..3f94f8f
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_entrances/slideInLeft.css
@@ -0,0 +1,14 @@
+@keyframes slideInLeft {
+ from {
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInLeft {
+ animation-name: slideInLeft;
+}
diff --git a/node_modules/animate.css/source/sliding_entrances/slideInRight.css b/node_modules/animate.css/source/sliding_entrances/slideInRight.css
new file mode 100644
index 0000000..254ce21
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_entrances/slideInRight.css
@@ -0,0 +1,14 @@
+@keyframes slideInRight {
+ from {
+ transform: translate3d(100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInRight {
+ animation-name: slideInRight;
+}
diff --git a/node_modules/animate.css/source/sliding_entrances/slideInUp.css b/node_modules/animate.css/source/sliding_entrances/slideInUp.css
new file mode 100644
index 0000000..689777c
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_entrances/slideInUp.css
@@ -0,0 +1,14 @@
+@keyframes slideInUp {
+ from {
+ transform: translate3d(0, 100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInUp {
+ animation-name: slideInUp;
+}
diff --git a/node_modules/animate.css/source/sliding_exits/slideOutDown.css b/node_modules/animate.css/source/sliding_exits/slideOutDown.css
new file mode 100644
index 0000000..7295a8f
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_exits/slideOutDown.css
@@ -0,0 +1,14 @@
+@keyframes slideOutDown {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.slideOutDown {
+ animation-name: slideOutDown;
+}
diff --git a/node_modules/animate.css/source/sliding_exits/slideOutLeft.css b/node_modules/animate.css/source/sliding_exits/slideOutLeft.css
new file mode 100644
index 0000000..5b64d06
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_exits/slideOutLeft.css
@@ -0,0 +1,14 @@
+@keyframes slideOutLeft {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.slideOutLeft {
+ animation-name: slideOutLeft;
+}
diff --git a/node_modules/animate.css/source/sliding_exits/slideOutRight.css b/node_modules/animate.css/source/sliding_exits/slideOutRight.css
new file mode 100644
index 0000000..ed1e263
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_exits/slideOutRight.css
@@ -0,0 +1,14 @@
+@keyframes slideOutRight {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.slideOutRight {
+ animation-name: slideOutRight;
+}
diff --git a/node_modules/animate.css/source/sliding_exits/slideOutUp.css b/node_modules/animate.css/source/sliding_exits/slideOutUp.css
new file mode 100644
index 0000000..dd57f96
--- /dev/null
+++ b/node_modules/animate.css/source/sliding_exits/slideOutUp.css
@@ -0,0 +1,14 @@
+@keyframes slideOutUp {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.slideOutUp {
+ animation-name: slideOutUp;
+}
diff --git a/node_modules/animate.css/source/specials/hinge.css b/node_modules/animate.css/source/specials/hinge.css
new file mode 100644
index 0000000..226b5b4
--- /dev/null
+++ b/node_modules/animate.css/source/specials/hinge.css
@@ -0,0 +1,31 @@
+@keyframes hinge {
+ 0% {
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%,
+ 60% {
+ transform: rotate3d(0, 0, 1, 80deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40%,
+ 80% {
+ transform: rotate3d(0, 0, 1, 60deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ animation-duration: 2s;
+ animation-name: hinge;
+}
diff --git a/node_modules/animate.css/source/specials/jackInTheBox.css b/node_modules/animate.css/source/specials/jackInTheBox.css
new file mode 100644
index 0000000..1a07c68
--- /dev/null
+++ b/node_modules/animate.css/source/specials/jackInTheBox.css
@@ -0,0 +1,24 @@
+@keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ transform: scale(0.1) rotate(30deg);
+ transform-origin: center bottom;
+ }
+
+ 50% {
+ transform: rotate(-10deg);
+ }
+
+ 70% {
+ transform: rotate(3deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+.jackInTheBox {
+ animation-name: jackInTheBox;
+}
diff --git a/node_modules/animate.css/source/specials/rollIn.css b/node_modules/animate.css/source/specials/rollIn.css
new file mode 100644
index 0000000..293138f
--- /dev/null
+++ b/node_modules/animate.css/source/specials/rollIn.css
@@ -0,0 +1,17 @@
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollIn {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.rollIn {
+ animation-name: rollIn;
+}
diff --git a/node_modules/animate.css/source/specials/rollOut.css b/node_modules/animate.css/source/specials/rollOut.css
new file mode 100644
index 0000000..f54d562
--- /dev/null
+++ b/node_modules/animate.css/source/specials/rollOut.css
@@ -0,0 +1,16 @@
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ }
+}
+
+.rollOut {
+ animation-name: rollOut;
+}
diff --git a/node_modules/animate.css/source/zooming_entrances/zoomIn.css b/node_modules/animate.css/source/zooming_entrances/zoomIn.css
new file mode 100644
index 0000000..08e7af9
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_entrances/zoomIn.css
@@ -0,0 +1,14 @@
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+.zoomIn {
+ animation-name: zoomIn;
+}
diff --git a/node_modules/animate.css/source/zooming_entrances/zoomInDown.css b/node_modules/animate.css/source/zooming_entrances/zoomInDown.css
new file mode 100644
index 0000000..35ec0f8
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_entrances/zoomInDown.css
@@ -0,0 +1,17 @@
+@keyframes zoomInDown {
+ from {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInDown {
+ animation-name: zoomInDown;
+}
diff --git a/node_modules/animate.css/source/zooming_entrances/zoomInLeft.css b/node_modules/animate.css/source/zooming_entrances/zoomInLeft.css
new file mode 100644
index 0000000..869109a
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_entrances/zoomInLeft.css
@@ -0,0 +1,17 @@
+@keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInLeft {
+ animation-name: zoomInLeft;
+}
diff --git a/node_modules/animate.css/source/zooming_entrances/zoomInRight.css b/node_modules/animate.css/source/zooming_entrances/zoomInRight.css
new file mode 100644
index 0000000..dc113b9
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_entrances/zoomInRight.css
@@ -0,0 +1,17 @@
+@keyframes zoomInRight {
+ from {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInRight {
+ animation-name: zoomInRight;
+}
diff --git a/node_modules/animate.css/source/zooming_entrances/zoomInUp.css b/node_modules/animate.css/source/zooming_entrances/zoomInUp.css
new file mode 100644
index 0000000..de550a5
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_entrances/zoomInUp.css
@@ -0,0 +1,17 @@
+@keyframes zoomInUp {
+ from {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomInUp {
+ animation-name: zoomInUp;
+}
diff --git a/node_modules/animate.css/source/zooming_exits/zoomOut.css b/node_modules/animate.css/source/zooming_exits/zoomOut.css
new file mode 100644
index 0000000..bb3c3b1
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_exits/zoomOut.css
@@ -0,0 +1,18 @@
+@keyframes zoomOut {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.zoomOut {
+ animation-name: zoomOut;
+}
diff --git a/node_modules/animate.css/source/zooming_exits/zoomOutDown.css b/node_modules/animate.css/source/zooming_exits/zoomOutDown.css
new file mode 100644
index 0000000..761e283
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_exits/zoomOutDown.css
@@ -0,0 +1,18 @@
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomOutDown {
+ animation-name: zoomOutDown;
+}
diff --git a/node_modules/animate.css/source/zooming_exits/zoomOutLeft.css b/node_modules/animate.css/source/zooming_exits/zoomOutLeft.css
new file mode 100644
index 0000000..825783d
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_exits/zoomOutLeft.css
@@ -0,0 +1,16 @@
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
+ transform-origin: left center;
+ }
+}
+
+.zoomOutLeft {
+ animation-name: zoomOutLeft;
+}
diff --git a/node_modules/animate.css/source/zooming_exits/zoomOutRight.css b/node_modules/animate.css/source/zooming_exits/zoomOutRight.css
new file mode 100644
index 0000000..6013e4c
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_exits/zoomOutRight.css
@@ -0,0 +1,16 @@
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(0.1) translate3d(2000px, 0, 0);
+ transform-origin: right center;
+ }
+}
+
+.zoomOutRight {
+ animation-name: zoomOutRight;
+}
diff --git a/node_modules/animate.css/source/zooming_exits/zoomOutUp.css b/node_modules/animate.css/source/zooming_exits/zoomOutUp.css
new file mode 100644
index 0000000..e48b8cb
--- /dev/null
+++ b/node_modules/animate.css/source/zooming_exits/zoomOutUp.css
@@ -0,0 +1,18 @@
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
+ }
+}
+
+.zoomOutUp {
+ animation-name: zoomOutUp;
+}
diff --git a/node_modules/async-validator/LICENSE.md b/node_modules/async-validator/LICENSE.md
new file mode 100644
index 0000000..1f5a0d9
--- /dev/null
+++ b/node_modules/async-validator/LICENSE.md
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-present yiminghe
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/async-validator/README.md b/node_modules/async-validator/README.md
new file mode 100644
index 0000000..6e06a42
--- /dev/null
+++ b/node_modules/async-validator/README.md
@@ -0,0 +1,456 @@
+# async-validator
+---
+
+Validate form asynchronous. A variation of https://github.com/freeformsystems/async-validate
+
+[![NPM version][npm-image]][npm-url]
+[![build status][travis-image]][travis-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+[![node version][node-image]][node-url]
+[![npm download][download-image]][download-url]
+[![npm bundle size (minified + gzip)][bundlesize-image]][bundlesize-url]
+
+[npm-image]: https://img.shields.io/npm/v/async-validator.svg?style=flat-square
+[npm-url]: https://npmjs.org/package/async-validator
+[travis-image]: https://img.shields.io/travis/yiminghe/async-validator.svg?style=flat-square
+[travis-url]: https://travis-ci.org/yiminghe/async-validator
+[coveralls-image]: https://img.shields.io/coveralls/yiminghe/async-validator.svg?style=flat-square
+[coveralls-url]: https://coveralls.io/r/yiminghe/async-validator?branch=master
+[node-image]: https://img.shields.io/badge/node.js-%3E=4.0.0-green.svg?style=flat-square
+[node-url]: https://nodejs.org/download/
+[download-image]: https://img.shields.io/npm/dm/async-validator.svg?style=flat-square
+[download-url]: https://npmjs.org/package/async-validator
+[bundlesize-image]: https://img.shields.io/bundlephobia/minzip/async-validator.svg?label=gzip%20size
+[bundlesize-url]: https://bundlephobia.com/result?p=async-validator
+
+## Install
+
+```
+npm i async-validator
+```
+
+## Usage
+
+Basic usage involves defining a descriptor, assigning it to a schema and passing the object to be validated and a callback function to the `validate` method of the schema:
+
+```javascript
+import schema from 'async-validator';
+var descriptor = {
+ name: {
+ type: "string",
+ required: true,
+ validator: (rule, value) => value === 'muji',
+ },
+ age: {
+ type: "number",
+ asyncValidator: (rule, value) => {
+ return new Promise((resolve, reject) => {
+ if (value < 18) {
+ reject("too young"); // reject with error message
+ } else {
+ resolve();
+ }
+ });
+ }
+ }
+};
+var validator = new schema(descriptor);
+validator.validate({name: "muji"}, (errors, fields) => {
+ if(errors) {
+ // validation failed, errors is an array of all errors
+ // fields is an object keyed by field name with an array of
+ // errors per field
+ return handleErrors(errors, fields);
+ }
+ // validation passed
+});
+
+// PROMISE USAGE
+validator.validate({ name: "muji", age: 16 }).then(() => {
+ // validation passed or without error message
+}).catch(({ errors, fields }) => {
+ return handleErrors(errors, fields);
+})
+```
+
+## API
+
+### Validate
+
+```javascript
+function(source, [options], callback): Promise
+```
+
+* `source`: The object to validate (required).
+* `options`: An object describing processing options for the validation (optional).
+* `callback`: A callback function to invoke when validation completes (required).
+
+The method will return a Promise object like:
+* `then()`,validation passed
+* `catch({ errors, fields })`,validation failed, errors is an array of all errors, fields is an object keyed by field name with an array of
+
+### Options
+
+* `suppressWarning`: Boolean, whether to suppress internal warning about invalid value.
+
+* `first`: Boolean, Invoke `callback` when the first validation rule generates an error,
+no more validation rules are processed.
+If your validation involves multiple asynchronous calls (for example, database queries) and you only need the first error use this option.
+
+* `firstFields`: Boolean|String[], Invoke `callback` when the first validation rule of the specified field generates an error,
+no more validation rules of the same field are processed. `true` means all fields.
+
+### Rules
+
+Rules may be functions that perform validation.
+
+```javascript
+function(rule, value, callback, source, options)
+```
+
+* `rule`: The validation rule in the source descriptor that corresponds to the field name being validated. It is always assigned a `field` property with the name of the field being validated.
+* `value`: The value of the source object property being validated.
+* `callback`: A callback function to invoke once validation is complete. It expects to be passed an array of `Error` instances to indicate validation failure. If the check is synchronous, you can directly return a ` false ` or ` Error ` or ` Error Array `.
+* `source`: The source object that was passed to the `validate` method.
+* `options`: Additional options.
+* `options.messages`: The object containing validation error messages, will be deep merged with defaultMessages.
+
+The options passed to `validate` or `asyncValidate` are passed on to the validation functions so that you may reference transient data (such as model references) in validation functions. However, some option names are reserved; if you use these properties of the options object they are overwritten. The reserved properties are `messages`, `exception` and `error`.
+
+```javascript
+import schema from 'async-validator';
+var descriptor = {
+ name(rule, value, callback, source, options) {
+ var errors = [];
+ if(!/^[a-z0-9]+$/.test(value)) {
+ errors.push(
+ new Error(
+ util.format("%s must be lowercase alphanumeric characters",
+ rule.field)));
+ }
+ return errors;
+ }
+}
+var validator = new schema(descriptor);
+validator.validate({name: "Firstname"}, (errors, fields) => {
+ if(errors) {
+ return handleErrors(errors, fields);
+ }
+ // validation passed
+});
+```
+
+It is often useful to test against multiple validation rules for a single field, to do so make the rule an array of objects, for example:
+
+```javascript
+var descriptor = {
+ email: [
+ {type: "string", required: true, pattern: schema.pattern.email},
+ {validator(rule, value, callback, source, options) {
+ var errors = [];
+ // test if email address already exists in a database
+ // and add a validation error to the errors array if it does
+ return errors;
+ }}
+ ]
+}
+```
+
+#### Type
+
+Indicates the `type` of validator to use. Recognised type values are:
+
+* `string`: Must be of type `string`. `This is the default type.`
+* `number`: Must be of type `number`.
+* `boolean`: Must be of type `boolean`.
+* `method`: Must be of type `function`.
+* `regexp`: Must be an instance of `RegExp` or a string that does not generate an exception when creating a new `RegExp`.
+* `integer`: Must be of type `number` and an integer.
+* `float`: Must be of type `number` and a floating point number.
+* `array`: Must be an array as determined by `Array.isArray`.
+* `object`: Must be of type `object` and not `Array.isArray`.
+* `enum`: Value must exist in the `enum`.
+* `date`: Value must be valid as determined by `Date`
+* `url`: Must be of type `url`.
+* `hex`: Must be of type `hex`.
+* `email`: Must be of type `email`.
+* `any`: Can be any type.
+
+#### Required
+
+The `required` rule property indicates that the field must exist on the source object being validated.
+
+#### Pattern
+
+The `pattern` rule property indicates a regular expression that the value must match to pass validation.
+
+#### Range
+
+A range is defined using the `min` and `max` properties. For `string` and `array` types comparison is performed against the `length`, for `number` types the number must not be less than `min` nor greater than `max`.
+
+#### Length
+
+To validate an exact length of a field specify the `len` property. For `string` and `array` types comparison is performed on the `length` property, for the `number` type this property indicates an exact match for the `number`, ie, it may only be strictly equal to `len`.
+
+If the `len` property is combined with the `min` and `max` range properties, `len` takes precedence.
+
+#### Enumerable
+
+> Since version 3.0.0 if you want to validate the values `0` or `false` inside `enum` types, you have to include them explicitly.
+
+To validate a value from a list of possible values use the `enum` type with a `enum` property listing the valid values for the field, for example:
+
+```javascript
+var descriptor = {
+ role: {type: "enum", enum: ['admin', 'user', 'guest']}
+}
+```
+
+#### Whitespace
+
+It is typical to treat required fields that only contain whitespace as errors. To add an additional test for a string that consists solely of whitespace add a `whitespace` property to a rule with a value of `true`. The rule must be a `string` type.
+
+You may wish to sanitize user input instead of testing for whitespace, see [transform](#transform) for an example that would allow you to strip whitespace.
+
+
+#### Deep Rules
+
+If you need to validate deep object properties you may do so for validation rules that are of the `object` or `array` type by assigning nested rules to a `fields` property of the rule.
+
+```javascript
+var descriptor = {
+ address: {
+ type: "object", required: true,
+ fields: {
+ street: {type: "string", required: true},
+ city: {type: "string", required: true},
+ zip: {type: "string", required: true, len: 8, message: "invalid zip"}
+ }
+ },
+ name: {type: "string", required: true}
+}
+var validator = new schema(descriptor);
+validator.validate({ address: {} }, (errors, fields) => {
+ // errors for address.street, address.city, address.zip
+});
+```
+
+Note that if you do not specify the `required` property on the parent rule it is perfectly valid for the field not to be declared on the source object and the deep validation rules will not be executed as there is nothing to validate against.
+
+Deep rule validation creates a schema for the nested rules so you can also specify the `options` passed to the `schema.validate()` method.
+
+```javascript
+var descriptor = {
+ address: {
+ type: "object", required: true, options: {first: true},
+ fields: {
+ street: {type: "string", required: true},
+ city: {type: "string", required: true},
+ zip: {type: "string", required: true, len: 8, message: "invalid zip"}
+ }
+ },
+ name: {type: "string", required: true}
+}
+var validator = new schema(descriptor);
+
+validator.validate({ address: {} })
+ .catch(({ errors, fields }) => {
+ // now only errors for street and name
+ });
+```
+
+The parent rule is also validated so if you have a set of rules such as:
+
+```javascript
+var descriptor = {
+ roles: {
+ type: "array", required: true, len: 3,
+ fields: {
+ 0: {type: "string", required: true},
+ 1: {type: "string", required: true},
+ 2: {type: "string", required: true}
+ }
+ }
+}
+```
+
+And supply a source object of `{roles: ["admin", "user"]}` then two errors will be created. One for the array length mismatch and one for the missing required array entry at index 2.
+
+#### defaultField
+
+The `defaultField` property can be used with the `array` or `object` type for validating all values of the container.
+It may be an `object` or `array` containing validation rules. For example:
+
+```javascript
+var descriptor = {
+ urls: {
+ type: "array", required: true,
+ defaultField: {type: "url"}
+ }
+}
+```
+
+Note that `defaultField` is expanded to `fields`, see [deep rules](#deep-rules).
+
+#### Transform
+
+Sometimes it is necessary to transform a value before validation, possibly to coerce the value or to sanitize it in some way. To do this add a `transform` function to the validation rule. The property is transformed prior to validation and re-assigned to the source object to mutate the value of the property in place.
+
+```javascript
+import schema from 'async-validator';
+var descriptor = {
+ name: {
+ type: "string",
+ required: true, pattern: /^[a-z]+$/,
+ transform(value) {
+ return value.trim();
+ }
+ }
+}
+var validator = new schema(descriptor);
+var source = {name: " user "};
+validator.validate(source)
+ .then(() => assert.equal(source.name, "user"));
+```
+
+Without the `transform` function validation would fail due to the pattern not matching as the input contains leading and trailing whitespace, but by adding the transform function validation passes and the field value is sanitized at the same time.
+
+
+#### Messages
+
+Depending upon your application requirements, you may need i18n support or you may prefer different validation error messages.
+
+The easiest way to achieve this is to assign a `message` to a rule:
+
+```javascript
+{name:{type: "string", required: true, message: "Name is required"}}
+```
+
+Message can be any type, such as jsx format.
+
+```javascript
+{name:{type: "string", required: true, message: "Name is required"}}
+```
+
+Message can also be a function, e.g. if you use vue-i18n:
+```javascript
+{name:{type: "string", required: true, message: () => this.$t( 'name is required' )}}
+```
+
+Potentially you may require the same schema validation rules for different languages, in which case duplicating the schema rules for each language does not make sense.
+
+In this scenario you could just provide your own messages for the language and assign it to the schema:
+
+```javascript
+import schema from 'async-validator';
+var cn = {
+ required: '%s 必填',
+};
+var descriptor = {name:{type: "string", required: true}};
+var validator = new schema(descriptor);
+// deep merge with defaultMessages
+validator.messages(cn);
+...
+```
+
+If you are defining your own validation functions it is better practice to assign the message strings to a messages object and then access the messages via the `options.messages` property within the validation function.
+
+#### asyncValidator
+
+You can customize the asynchronous validation function for the specified field:
+
+```js
+const fields = {
+ asyncField: {
+ asyncValidator(rule, value, callback) {
+ ajax({
+ url: 'xx',
+ value: value
+ }).then(function(data) {
+ callback();
+ }, function(error) {
+ callback(new Error(error))
+ });
+ }
+ },
+
+ promiseField: {
+ asyncValidator(rule, value) {
+ return ajax({
+ url: 'xx',
+ value: value
+ });
+ }
+ }
+};
+```
+
+#### validator
+
+you can custom validate function for specified field:
+
+```js
+const fields = {
+ field: {
+ validator(rule, value, callback) {
+ return value === 'test';
+ },
+ message: 'Value is not equal to "test".',
+ },
+
+ field2: {
+ validator(rule, value, callback) {
+ return new Error(`'${value} is not equal to "test".'`);
+ },
+ },
+
+ arrField: {
+ validator(rule, value) {
+ return [
+ new Error('Message 1'),
+ new Error('Message 2'),
+ ];
+ }
+ },
+};
+```
+
+## FAQ
+
+### How to avoid warning
+
+```js
+import Schema from 'async-validator';
+Schema.warning = function(){};
+```
+
+### How to check if it is `true`
+
+Use `enum` type passing `true` as option.
+
+```js
+{
+ type: 'enum',
+ enum: [true],
+ message: '',
+}
+```
+
+## Test Case
+
+```
+npm test
+npm run chrome-test
+```
+
+## Coverage
+
+```
+npm run coverage
+```
+
+open coverage/ dir
+
+## License
+
+Everything is [MIT](https://en.wikipedia.org/wiki/MIT_License).
diff --git a/node_modules/async-validator/dist-node/index.js b/node_modules/async-validator/dist-node/index.js
new file mode 100644
index 0000000..d6f2fd0
--- /dev/null
+++ b/node_modules/async-validator/dist-node/index.js
@@ -0,0 +1,1352 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _extends() {
+ _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
+
+/* eslint no-console:0 */
+var formatRegExp = /%[sdj%]/g;
+var warning = function warning() {}; // don't print warning message when in production env or node runtime
+
+if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {
+ warning = function warning(type, errors) {
+ if (typeof console !== 'undefined' && console.warn) {
+ if (errors.every(function (e) {
+ return typeof e === 'string';
+ })) {
+ console.warn(type, errors);
+ }
+ }
+ };
+}
+
+function convertFieldsError(errors) {
+ if (!errors || !errors.length) return null;
+ var fields = {};
+ errors.forEach(function (error) {
+ var field = error.field;
+ fields[field] = fields[field] || [];
+ fields[field].push(error);
+ });
+ return fields;
+}
+function format() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var i = 1;
+ var f = args[0];
+ var len = args.length;
+
+ if (typeof f === 'function') {
+ return f.apply(null, args.slice(1));
+ }
+
+ if (typeof f === 'string') {
+ var str = String(f).replace(formatRegExp, function (x) {
+ if (x === '%%') {
+ return '%';
+ }
+
+ if (i >= len) {
+ return x;
+ }
+
+ switch (x) {
+ case '%s':
+ return String(args[i++]);
+
+ case '%d':
+ return Number(args[i++]);
+
+ case '%j':
+ try {
+ return JSON.stringify(args[i++]);
+ } catch (_) {
+ return '[Circular]';
+ }
+
+ break;
+
+ default:
+ return x;
+ }
+ });
+
+ for (var arg = args[i]; i < len; arg = args[++i]) {
+ str += " " + arg;
+ }
+
+ return str;
+ }
+
+ return f;
+}
+
+function isNativeStringType(type) {
+ return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
+}
+
+function isEmptyValue(value, type) {
+ if (value === undefined || value === null) {
+ return true;
+ }
+
+ if (type === 'array' && Array.isArray(value) && !value.length) {
+ return true;
+ }
+
+ if (isNativeStringType(type) && typeof value === 'string' && !value) {
+ return true;
+ }
+
+ return false;
+}
+
+function asyncParallelArray(arr, func, callback) {
+ var results = [];
+ var total = 0;
+ var arrLength = arr.length;
+
+ function count(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === arrLength) {
+ callback(results);
+ }
+ }
+
+ arr.forEach(function (a) {
+ func(a, count);
+ });
+}
+
+function asyncSerialArray(arr, func, callback) {
+ var index = 0;
+ var arrLength = arr.length;
+
+ function next(errors) {
+ if (errors && errors.length) {
+ callback(errors);
+ return;
+ }
+
+ var original = index;
+ index = index + 1;
+
+ if (original < arrLength) {
+ func(arr[original], next);
+ } else {
+ callback([]);
+ }
+ }
+
+ next([]);
+}
+
+function flattenObjArr(objArr) {
+ var ret = [];
+ Object.keys(objArr).forEach(function (k) {
+ ret.push.apply(ret, objArr[k]);
+ });
+ return ret;
+}
+
+function asyncMap(objArr, option, func, callback) {
+ if (option.first) {
+ var _pending = new Promise(function (resolve, reject) {
+ var next = function next(errors) {
+ callback(errors);
+ return errors.length ? reject({
+ errors: errors,
+ fields: convertFieldsError(errors)
+ }) : resolve();
+ };
+
+ var flattenArr = flattenObjArr(objArr);
+ asyncSerialArray(flattenArr, func, next);
+ });
+
+ _pending["catch"](function (e) {
+ return e;
+ });
+
+ return _pending;
+ }
+
+ var firstFields = option.firstFields || [];
+
+ if (firstFields === true) {
+ firstFields = Object.keys(objArr);
+ }
+
+ var objArrKeys = Object.keys(objArr);
+ var objArrLength = objArrKeys.length;
+ var total = 0;
+ var results = [];
+ var pending = new Promise(function (resolve, reject) {
+ var next = function next(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === objArrLength) {
+ callback(results);
+ return results.length ? reject({
+ errors: results,
+ fields: convertFieldsError(results)
+ }) : resolve();
+ }
+ };
+
+ if (!objArrKeys.length) {
+ callback(results);
+ resolve();
+ }
+
+ objArrKeys.forEach(function (key) {
+ var arr = objArr[key];
+
+ if (firstFields.indexOf(key) !== -1) {
+ asyncSerialArray(arr, func, next);
+ } else {
+ asyncParallelArray(arr, func, next);
+ }
+ });
+ });
+ pending["catch"](function (e) {
+ return e;
+ });
+ return pending;
+}
+function complementError(rule) {
+ return function (oe) {
+ if (oe && oe.message) {
+ oe.field = oe.field || rule.fullField;
+ return oe;
+ }
+
+ return {
+ message: typeof oe === 'function' ? oe() : oe,
+ field: oe.field || rule.fullField
+ };
+ };
+}
+function deepMerge(target, source) {
+ if (source) {
+ for (var s in source) {
+ if (source.hasOwnProperty(s)) {
+ var value = source[s];
+
+ if (typeof value === 'object' && typeof target[s] === 'object') {
+ target[s] = _extends({}, target[s], {}, value);
+ } else {
+ target[s] = value;
+ }
+ }
+ }
+ }
+
+ return target;
+}
+
+/**
+ * Rule for validating required fields.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function required(rule, value, source, errors, options, type) {
+ if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
+ errors.push(format(options.messages.required, rule.fullField));
+ }
+}
+
+/**
+ * Rule for validating whitespace.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function whitespace(rule, value, source, errors, options) {
+ if (/^\s+$/.test(value) || value === '') {
+ errors.push(format(options.messages.whitespace, rule.fullField));
+ }
+}
+
+/* eslint max-len:0 */
+
+var pattern = {
+ // http://emailregex.com/
+ email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i'),
+ hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
+};
+var types = {
+ integer: function integer(value) {
+ return types.number(value) && parseInt(value, 10) === value;
+ },
+ "float": function float(value) {
+ return types.number(value) && !types.integer(value);
+ },
+ array: function array(value) {
+ return Array.isArray(value);
+ },
+ regexp: function regexp(value) {
+ if (value instanceof RegExp) {
+ return true;
+ }
+
+ try {
+ return !!new RegExp(value);
+ } catch (e) {
+ return false;
+ }
+ },
+ date: function date(value) {
+ return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';
+ },
+ number: function number(value) {
+ if (isNaN(value)) {
+ return false;
+ }
+
+ return typeof value === 'number';
+ },
+ object: function object(value) {
+ return typeof value === 'object' && !types.array(value);
+ },
+ method: function method(value) {
+ return typeof value === 'function';
+ },
+ email: function email(value) {
+ return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+ },
+ url: function url(value) {
+ return typeof value === 'string' && !!value.match(pattern.url);
+ },
+ hex: function hex(value) {
+ return typeof value === 'string' && !!value.match(pattern.hex);
+ }
+};
+/**
+ * Rule for validating the type of a value.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function type(rule, value, source, errors, options) {
+ if (rule.required && value === undefined) {
+ required(rule, value, source, errors, options);
+ return;
+ }
+
+ var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
+ var ruleType = rule.type;
+
+ if (custom.indexOf(ruleType) > -1) {
+ if (!types[ruleType](value)) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ } // straight typeof check
+
+ } else if (ruleType && typeof value !== rule.type) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ }
+}
+
+/**
+ * Rule for validating minimum and maximum allowed values.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function range(rule, value, source, errors, options) {
+ var len = typeof rule.len === 'number';
+ var min = typeof rule.min === 'number';
+ var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
+
+ var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ var val = value;
+ var key = null;
+ var num = typeof value === 'number';
+ var str = typeof value === 'string';
+ var arr = Array.isArray(value);
+
+ if (num) {
+ key = 'number';
+ } else if (str) {
+ key = 'string';
+ } else if (arr) {
+ key = 'array';
+ } // if the value is not of a supported type for range validation
+ // the validation rule rule should use the
+ // type property to also test for a particular type
+
+
+ if (!key) {
+ return false;
+ }
+
+ if (arr) {
+ val = value.length;
+ }
+
+ if (str) {
+ // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
+ val = value.replace(spRegexp, '_').length;
+ }
+
+ if (len) {
+ if (val !== rule.len) {
+ errors.push(format(options.messages[key].len, rule.fullField, rule.len));
+ }
+ } else if (min && !max && val < rule.min) {
+ errors.push(format(options.messages[key].min, rule.fullField, rule.min));
+ } else if (max && !min && val > rule.max) {
+ errors.push(format(options.messages[key].max, rule.fullField, rule.max));
+ } else if (min && max && (val < rule.min || val > rule.max)) {
+ errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
+ }
+}
+
+var ENUM = 'enum';
+/**
+ * Rule for validating a value exists in an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable(rule, value, source, errors, options) {
+ rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
+
+ if (rule[ENUM].indexOf(value) === -1) {
+ errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
+ }
+}
+
+/**
+ * Rule for validating a regular expression pattern.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$1(rule, value, source, errors, options) {
+ if (rule.pattern) {
+ if (rule.pattern instanceof RegExp) {
+ // if a RegExp instance is passed, reset `lastIndex` in case its `global`
+ // flag is accidentally set to `true`, which in a validation scenario
+ // is not necessary and the result might be misleading
+ rule.pattern.lastIndex = 0;
+
+ if (!rule.pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ } else if (typeof rule.pattern === 'string') {
+ var _pattern = new RegExp(rule.pattern);
+
+ if (!_pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ }
+ }
+}
+
+var rules = {
+ required: required,
+ whitespace: whitespace,
+ type: type,
+ range: range,
+ "enum": enumerable,
+ pattern: pattern$1
+};
+
+/**
+ * Performs validation for string types.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function string(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'string');
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ rules.pattern(rule, value, source, errors, options);
+
+ if (rule.whitespace === true) {
+ rules.whitespace(rule, value, source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a function.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function method(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function number(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (value === '') {
+ value = undefined;
+ }
+
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a boolean.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function _boolean(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates the regular expression type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function regexp(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is an integer.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function integer(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is a floating point number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function floatFn(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an array.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function array(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'array') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'array');
+
+ if (!isEmptyValue(value, 'array')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an object.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function object(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+var ENUM$1 = 'enum';
+/**
+ * Validates an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable$1(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules[ENUM$1](rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a regular expression pattern.
+ *
+ * Performs validation when a rule only contains
+ * a pattern property but is not declared as a string type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$2(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.pattern(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+function date(rule, value, callback, source, options) {
+ // console.log('integer rule called %j', rule);
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ var dateObject;
+
+ if (typeof value === 'number') {
+ dateObject = new Date(value);
+ } else {
+ dateObject = value;
+ }
+
+ rules.type(rule, dateObject, source, errors, options);
+
+ if (dateObject) {
+ rules.range(rule, dateObject.getTime(), source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+function required$1(rule, value, callback, source, options) {
+ var errors = [];
+ var type = Array.isArray(value) ? 'array' : typeof value;
+ rules.required(rule, value, source, errors, options, type);
+ callback(errors);
+}
+
+function type$1(rule, value, callback, source, options) {
+ var ruleType = rule.type;
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, ruleType) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, ruleType);
+
+ if (!isEmptyValue(value, ruleType)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Performs validation for any type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function any(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+ }
+
+ callback(errors);
+}
+
+var validators = {
+ string: string,
+ method: method,
+ number: number,
+ "boolean": _boolean,
+ regexp: regexp,
+ integer: integer,
+ "float": floatFn,
+ array: array,
+ object: object,
+ "enum": enumerable$1,
+ pattern: pattern$2,
+ date: date,
+ url: type$1,
+ hex: type$1,
+ email: type$1,
+ required: required$1,
+ any: any
+};
+
+function newMessages() {
+ return {
+ "default": 'Validation error on field %s',
+ required: '%s is required',
+ "enum": '%s must be one of %s',
+ whitespace: '%s cannot be empty',
+ date: {
+ format: '%s date %s is invalid for format %s',
+ parse: '%s date could not be parsed, %s is invalid ',
+ invalid: '%s date %s is invalid'
+ },
+ types: {
+ string: '%s is not a %s',
+ method: '%s is not a %s (function)',
+ array: '%s is not an %s',
+ object: '%s is not an %s',
+ number: '%s is not a %s',
+ date: '%s is not a %s',
+ "boolean": '%s is not a %s',
+ integer: '%s is not an %s',
+ "float": '%s is not a %s',
+ regexp: '%s is not a valid %s',
+ email: '%s is not a valid %s',
+ url: '%s is not a valid %s',
+ hex: '%s is not a valid %s'
+ },
+ string: {
+ len: '%s must be exactly %s characters',
+ min: '%s must be at least %s characters',
+ max: '%s cannot be longer than %s characters',
+ range: '%s must be between %s and %s characters'
+ },
+ number: {
+ len: '%s must equal %s',
+ min: '%s cannot be less than %s',
+ max: '%s cannot be greater than %s',
+ range: '%s must be between %s and %s'
+ },
+ array: {
+ len: '%s must be exactly %s in length',
+ min: '%s cannot be less than %s in length',
+ max: '%s cannot be greater than %s in length',
+ range: '%s must be between %s and %s in length'
+ },
+ pattern: {
+ mismatch: '%s value %s does not match pattern %s'
+ },
+ clone: function clone() {
+ var cloned = JSON.parse(JSON.stringify(this));
+ cloned.clone = this.clone;
+ return cloned;
+ }
+ };
+}
+var messages = newMessages();
+
+/**
+ * Encapsulates a validation schema.
+ *
+ * @param descriptor An object declaring validation rules
+ * for this schema.
+ */
+
+function Schema(descriptor) {
+ this.rules = null;
+ this._messages = messages;
+ this.define(descriptor);
+}
+
+Schema.prototype = {
+ messages: function messages(_messages) {
+ if (_messages) {
+ this._messages = deepMerge(newMessages(), _messages);
+ }
+
+ return this._messages;
+ },
+ define: function define(rules) {
+ if (!rules) {
+ throw new Error('Cannot configure a schema with no rules');
+ }
+
+ if (typeof rules !== 'object' || Array.isArray(rules)) {
+ throw new Error('Rules must be an object');
+ }
+
+ this.rules = {};
+ var z;
+ var item;
+
+ for (z in rules) {
+ if (rules.hasOwnProperty(z)) {
+ item = rules[z];
+ this.rules[z] = Array.isArray(item) ? item : [item];
+ }
+ }
+ },
+ validate: function validate(source_, o, oc) {
+ var _this = this;
+
+ if (o === void 0) {
+ o = {};
+ }
+
+ if (oc === void 0) {
+ oc = function oc() {};
+ }
+
+ var source = source_;
+ var options = o;
+ var callback = oc;
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ if (!this.rules || Object.keys(this.rules).length === 0) {
+ if (callback) {
+ callback();
+ }
+
+ return Promise.resolve();
+ }
+
+ function complete(results) {
+ var i;
+ var errors = [];
+ var fields = {};
+
+ function add(e) {
+ if (Array.isArray(e)) {
+ var _errors;
+
+ errors = (_errors = errors).concat.apply(_errors, e);
+ } else {
+ errors.push(e);
+ }
+ }
+
+ for (i = 0; i < results.length; i++) {
+ add(results[i]);
+ }
+
+ if (!errors.length) {
+ errors = null;
+ fields = null;
+ } else {
+ fields = convertFieldsError(errors);
+ }
+
+ callback(errors, fields);
+ }
+
+ if (options.messages) {
+ var messages$1 = this.messages();
+
+ if (messages$1 === messages) {
+ messages$1 = newMessages();
+ }
+
+ deepMerge(messages$1, options.messages);
+ options.messages = messages$1;
+ } else {
+ options.messages = this.messages();
+ }
+
+ var arr;
+ var value;
+ var series = {};
+ var keys = options.keys || Object.keys(this.rules);
+ keys.forEach(function (z) {
+ arr = _this.rules[z];
+ value = source[z];
+ arr.forEach(function (r) {
+ var rule = r;
+
+ if (typeof rule.transform === 'function') {
+ if (source === source_) {
+ source = _extends({}, source);
+ }
+
+ value = source[z] = rule.transform(value);
+ }
+
+ if (typeof rule === 'function') {
+ rule = {
+ validator: rule
+ };
+ } else {
+ rule = _extends({}, rule);
+ }
+
+ rule.validator = _this.getValidationMethod(rule);
+ rule.field = z;
+ rule.fullField = rule.fullField || z;
+ rule.type = _this.getType(rule);
+
+ if (!rule.validator) {
+ return;
+ }
+
+ series[z] = series[z] || [];
+ series[z].push({
+ rule: rule,
+ value: value,
+ source: source,
+ field: z
+ });
+ });
+ });
+ var errorFields = {};
+ return asyncMap(series, options, function (data, doIt) {
+ var rule = data.rule;
+ var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');
+ deep = deep && (rule.required || !rule.required && data.value);
+ rule.field = data.field;
+
+ function addFullfield(key, schema) {
+ return _extends({}, schema, {
+ fullField: rule.fullField + "." + key
+ });
+ }
+
+ function cb(e) {
+ if (e === void 0) {
+ e = [];
+ }
+
+ var errors = e;
+
+ if (!Array.isArray(errors)) {
+ errors = [errors];
+ }
+
+ if (!options.suppressWarning && errors.length) {
+ Schema.warning('async-validator:', errors);
+ }
+
+ if (errors.length && rule.message) {
+ errors = [].concat(rule.message);
+ }
+
+ errors = errors.map(complementError(rule));
+
+ if (options.first && errors.length) {
+ errorFields[rule.field] = 1;
+ return doIt(errors);
+ }
+
+ if (!deep) {
+ doIt(errors);
+ } else {
+ // if rule is required but the target object
+ // does not exist fail at the rule level and don't
+ // go deeper
+ if (rule.required && !data.value) {
+ if (rule.message) {
+ errors = [].concat(rule.message).map(complementError(rule));
+ } else if (options.error) {
+ errors = [options.error(rule, format(options.messages.required, rule.field))];
+ } else {
+ errors = [];
+ }
+
+ return doIt(errors);
+ }
+
+ var fieldsSchema = {};
+
+ if (rule.defaultField) {
+ for (var k in data.value) {
+ if (data.value.hasOwnProperty(k)) {
+ fieldsSchema[k] = rule.defaultField;
+ }
+ }
+ }
+
+ fieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);
+
+ for (var f in fieldsSchema) {
+ if (fieldsSchema.hasOwnProperty(f)) {
+ var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
+ fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
+ }
+ }
+
+ var schema = new Schema(fieldsSchema);
+ schema.messages(options.messages);
+
+ if (data.rule.options) {
+ data.rule.options.messages = options.messages;
+ data.rule.options.error = options.error;
+ }
+
+ schema.validate(data.value, data.rule.options || options, function (errs) {
+ var finalErrors = [];
+
+ if (errors && errors.length) {
+ finalErrors.push.apply(finalErrors, errors);
+ }
+
+ if (errs && errs.length) {
+ finalErrors.push.apply(finalErrors, errs);
+ }
+
+ doIt(finalErrors.length ? finalErrors : null);
+ });
+ }
+ }
+
+ var res;
+
+ if (rule.asyncValidator) {
+ res = rule.asyncValidator(rule, data.value, cb, data.source, options);
+ } else if (rule.validator) {
+ res = rule.validator(rule, data.value, cb, data.source, options);
+
+ if (res === true) {
+ cb();
+ } else if (res === false) {
+ cb(rule.message || rule.field + " fails");
+ } else if (res instanceof Array) {
+ cb(res);
+ } else if (res instanceof Error) {
+ cb(res.message);
+ }
+ }
+
+ if (res && res.then) {
+ res.then(function () {
+ return cb();
+ }, function (e) {
+ return cb(e);
+ });
+ }
+ }, function (results) {
+ complete(results);
+ });
+ },
+ getType: function getType(rule) {
+ if (rule.type === undefined && rule.pattern instanceof RegExp) {
+ rule.type = 'pattern';
+ }
+
+ if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
+ throw new Error(format('Unknown rule type %s', rule.type));
+ }
+
+ return rule.type || 'string';
+ },
+ getValidationMethod: function getValidationMethod(rule) {
+ if (typeof rule.validator === 'function') {
+ return rule.validator;
+ }
+
+ var keys = Object.keys(rule);
+ var messageIndex = keys.indexOf('message');
+
+ if (messageIndex !== -1) {
+ keys.splice(messageIndex, 1);
+ }
+
+ if (keys.length === 1 && keys[0] === 'required') {
+ return validators.required;
+ }
+
+ return validators[this.getType(rule)] || false;
+ }
+};
+
+Schema.register = function register(type, validator) {
+ if (typeof validator !== 'function') {
+ throw new Error('Cannot register a validator by type, validator is not a function');
+ }
+
+ validators[type] = validator;
+};
+
+Schema.warning = warning;
+Schema.messages = messages;
+
+exports.default = Schema;
+//# sourceMappingURL=index.js.map
diff --git a/node_modules/async-validator/dist-node/index.js.map b/node_modules/async-validator/dist-node/index.js.map
new file mode 100644
index 0000000..ffebaf4
--- /dev/null
+++ b/node_modules/async-validator/dist-node/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../../src/util.js","../../src/rule/required.js","../../src/rule/whitespace.js","../../src/rule/type.js","../../src/rule/range.js","../../src/rule/enum.js","../../src/rule/pattern.js","../../src/rule/index.js","../../src/validator/string.js","../../src/validator/method.js","../../src/validator/number.js","../../src/validator/boolean.js","../../src/validator/regexp.js","../../src/validator/integer.js","../../src/validator/float.js","../../src/validator/array.js","../../src/validator/object.js","../../src/validator/enum.js","../../src/validator/pattern.js","../../src/validator/date.js","../../src/validator/required.js","../../src/validator/type.js","../../src/validator/any.js","../../src/validator/index.js","../../src/messages.js","../../src/index.js"],"sourcesContent":["/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {\n};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n for (let arg = args[i]; i < len; arg = args[++i]) {\n str += ` ${arg}`;\n }\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject({ errors, fields: convertFieldsError(errors) })\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject({ errors: results, fields: convertFieldsError(results) })\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results)\n resolve()\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function'\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'array') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (!isEmptyValue(value, 'array')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n let dateObject;\n\n if (typeof value === 'number') {\n dateObject = new Date(value);\n } else {\n dateObject = value;\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n } else {\n errors = [];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(() => cb(), e => cb(e));\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n (rule.type && !validators.hasOwnProperty(rule.type))\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nexport default Schema;\n"],"names":["formatRegExp","warning","process","env","NODE_ENV","window","document","type","errors","console","warn","every","e","convertFieldsError","length","fields","forEach","error","field","push","format","args","i","f","len","apply","slice","str","String","replace","x","Number","JSON","stringify","_","arg","isNativeStringType","isEmptyValue","value","undefined","Array","isArray","asyncParallelArray","arr","func","callback","results","total","arrLength","count","a","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","Object","keys","k","asyncMap","option","first","pending","Promise","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","key","indexOf","complementError","rule","oe","message","fullField","deepMerge","target","source","s","hasOwnProperty","required","options","util","messages","whitespace","test","pattern","email","url","RegExp","hex","types","integer","number","parseInt","array","regexp","date","getTime","getMonth","getYear","isNaN","object","method","match","custom","ruleType","range","min","max","spRegexp","val","num","ENUM","enumerable","join","lastIndex","mismatch","_pattern","enumRule","string","validate","rules","boolean","floatFn","dateObject","Date","any","float","enumValidator","newMessages","parse","invalid","clone","cloned","Schema","descriptor","_messages","defaultMessages","define","prototype","Error","z","item","source_","o","oc","complete","add","concat","series","r","transform","validator","getValidationMethod","getType","errorFields","data","doIt","deep","defaultField","addFullfield","schema","cb","suppressWarning","map","fieldsSchema","fieldSchema","bind","errs","finalErrors","res","asyncValidator","then","validators","messageIndex","splice","register"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/async-validator/dist-types/index.d.ts b/node_modules/async-validator/dist-types/index.d.ts
new file mode 100644
index 0000000..5b37032
--- /dev/null
+++ b/node_modules/async-validator/dist-types/index.d.ts
@@ -0,0 +1,97 @@
+// Type definitions for async-validator 3.0.4
+// Project: http://github.com/yiminghe/async-validator
+// Definitions by: iamdhj
+// TypeScript Version: 3.6.2
+
+export default class {
+ constructor(rule: Rules);
+
+ /**
+ * Validate source
+ * @param source The object to validate (required)
+ * @param options An object describing processing options for the validation
+ * @param callback A callback function to invoke when validation completes
+ * @returns Promise
+ */
+ validate(
+ source: ValidateSource,
+ options?: ValidateOption,
+ callback?: (errors: ErrorList, fields: FieldErrorList) => void,
+ ): Promise;
+}
+
+export type RuleType =
+ | 'string'
+ | 'number'
+ | 'boolean'
+ | 'method'
+ | 'regexp'
+ | 'integer'
+ | 'float'
+ | 'array'
+ | 'object'
+ | 'enum'
+ | 'date'
+ | 'url'
+ | 'hex'
+ | 'email'
+ | 'any';
+
+export interface RuleItem {
+ type?: RuleType; // default type is 'string'
+ required?: boolean;
+ pattern?: RegExp | string;
+ min?: number; // Range of type 'string' and 'array'
+ max?: number; // Range of type 'string' and 'array'
+ len?: number; // Length of type 'string' and 'array'
+ enum?: Array; // possible values of type 'enum'
+ whitespace?: boolean;
+ fields?: Rules; // ignore when without required
+ options?: ValidateOption;
+ defaultField?: { type: RuleType }; // 'object' or 'array' containing validation rules
+ transform?: (value: any) => any;
+ message?: string;
+ asyncValidator?: (
+ rule: Rules,
+ value: any,
+ callback: (error: string | string[] | void) => void,
+ source: ValidateSource,
+ options: ValidateOption,
+ ) => void | Promise;
+ validator?: (
+ rule: Rules,
+ value: any,
+ callback: (error: string | string[] | void) => void,
+ source: ValidateSource,
+ options: ValidateOption,
+ ) => void;
+}
+
+export interface Rules {
+ [field: string]: RuleItem | RuleItem[];
+}
+
+export interface ValidateSource {
+ [field: string]: any;
+}
+
+export interface ValidateOption {
+ // whether to suppress internal warning
+ suppressWarning?: boolean;
+
+ // when the first validation rule generates an error stop processed
+ first?: boolean;
+
+ // when the first validation rule of the specified field generates an error stop the field processed, 'true' means all fields.
+ firstFields?: boolean | string[];
+}
+
+export interface ValidateError {
+ message: string;
+ field: string;
+}
+
+export type ErrorList = ValidateError[];
+export interface FieldErrorList {
+ [field: string]: ValidateError[];
+}
diff --git a/node_modules/async-validator/dist-web/index.js b/node_modules/async-validator/dist-web/index.js
new file mode 100644
index 0000000..f0f0f9b
--- /dev/null
+++ b/node_modules/async-validator/dist-web/index.js
@@ -0,0 +1,1348 @@
+function _extends() {
+ _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
+
+/* eslint no-console:0 */
+var formatRegExp = /%[sdj%]/g;
+var warning = function warning() {}; // don't print warning message when in production env or node runtime
+
+if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {
+ warning = function warning(type, errors) {
+ if (typeof console !== 'undefined' && console.warn) {
+ if (errors.every(function (e) {
+ return typeof e === 'string';
+ })) {
+ console.warn(type, errors);
+ }
+ }
+ };
+}
+
+function convertFieldsError(errors) {
+ if (!errors || !errors.length) return null;
+ var fields = {};
+ errors.forEach(function (error) {
+ var field = error.field;
+ fields[field] = fields[field] || [];
+ fields[field].push(error);
+ });
+ return fields;
+}
+function format() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var i = 1;
+ var f = args[0];
+ var len = args.length;
+
+ if (typeof f === 'function') {
+ return f.apply(null, args.slice(1));
+ }
+
+ if (typeof f === 'string') {
+ var str = String(f).replace(formatRegExp, function (x) {
+ if (x === '%%') {
+ return '%';
+ }
+
+ if (i >= len) {
+ return x;
+ }
+
+ switch (x) {
+ case '%s':
+ return String(args[i++]);
+
+ case '%d':
+ return Number(args[i++]);
+
+ case '%j':
+ try {
+ return JSON.stringify(args[i++]);
+ } catch (_) {
+ return '[Circular]';
+ }
+
+ break;
+
+ default:
+ return x;
+ }
+ });
+
+ for (var arg = args[i]; i < len; arg = args[++i]) {
+ str += " " + arg;
+ }
+
+ return str;
+ }
+
+ return f;
+}
+
+function isNativeStringType(type) {
+ return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
+}
+
+function isEmptyValue(value, type) {
+ if (value === undefined || value === null) {
+ return true;
+ }
+
+ if (type === 'array' && Array.isArray(value) && !value.length) {
+ return true;
+ }
+
+ if (isNativeStringType(type) && typeof value === 'string' && !value) {
+ return true;
+ }
+
+ return false;
+}
+
+function asyncParallelArray(arr, func, callback) {
+ var results = [];
+ var total = 0;
+ var arrLength = arr.length;
+
+ function count(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === arrLength) {
+ callback(results);
+ }
+ }
+
+ arr.forEach(function (a) {
+ func(a, count);
+ });
+}
+
+function asyncSerialArray(arr, func, callback) {
+ var index = 0;
+ var arrLength = arr.length;
+
+ function next(errors) {
+ if (errors && errors.length) {
+ callback(errors);
+ return;
+ }
+
+ var original = index;
+ index = index + 1;
+
+ if (original < arrLength) {
+ func(arr[original], next);
+ } else {
+ callback([]);
+ }
+ }
+
+ next([]);
+}
+
+function flattenObjArr(objArr) {
+ var ret = [];
+ Object.keys(objArr).forEach(function (k) {
+ ret.push.apply(ret, objArr[k]);
+ });
+ return ret;
+}
+
+function asyncMap(objArr, option, func, callback) {
+ if (option.first) {
+ var _pending = new Promise(function (resolve, reject) {
+ var next = function next(errors) {
+ callback(errors);
+ return errors.length ? reject({
+ errors: errors,
+ fields: convertFieldsError(errors)
+ }) : resolve();
+ };
+
+ var flattenArr = flattenObjArr(objArr);
+ asyncSerialArray(flattenArr, func, next);
+ });
+
+ _pending["catch"](function (e) {
+ return e;
+ });
+
+ return _pending;
+ }
+
+ var firstFields = option.firstFields || [];
+
+ if (firstFields === true) {
+ firstFields = Object.keys(objArr);
+ }
+
+ var objArrKeys = Object.keys(objArr);
+ var objArrLength = objArrKeys.length;
+ var total = 0;
+ var results = [];
+ var pending = new Promise(function (resolve, reject) {
+ var next = function next(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === objArrLength) {
+ callback(results);
+ return results.length ? reject({
+ errors: results,
+ fields: convertFieldsError(results)
+ }) : resolve();
+ }
+ };
+
+ if (!objArrKeys.length) {
+ callback(results);
+ resolve();
+ }
+
+ objArrKeys.forEach(function (key) {
+ var arr = objArr[key];
+
+ if (firstFields.indexOf(key) !== -1) {
+ asyncSerialArray(arr, func, next);
+ } else {
+ asyncParallelArray(arr, func, next);
+ }
+ });
+ });
+ pending["catch"](function (e) {
+ return e;
+ });
+ return pending;
+}
+function complementError(rule) {
+ return function (oe) {
+ if (oe && oe.message) {
+ oe.field = oe.field || rule.fullField;
+ return oe;
+ }
+
+ return {
+ message: typeof oe === 'function' ? oe() : oe,
+ field: oe.field || rule.fullField
+ };
+ };
+}
+function deepMerge(target, source) {
+ if (source) {
+ for (var s in source) {
+ if (source.hasOwnProperty(s)) {
+ var value = source[s];
+
+ if (typeof value === 'object' && typeof target[s] === 'object') {
+ target[s] = _extends({}, target[s], {}, value);
+ } else {
+ target[s] = value;
+ }
+ }
+ }
+ }
+
+ return target;
+}
+
+/**
+ * Rule for validating required fields.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function required(rule, value, source, errors, options, type) {
+ if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
+ errors.push(format(options.messages.required, rule.fullField));
+ }
+}
+
+/**
+ * Rule for validating whitespace.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function whitespace(rule, value, source, errors, options) {
+ if (/^\s+$/.test(value) || value === '') {
+ errors.push(format(options.messages.whitespace, rule.fullField));
+ }
+}
+
+/* eslint max-len:0 */
+
+var pattern = {
+ // http://emailregex.com/
+ email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i'),
+ hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
+};
+var types = {
+ integer: function integer(value) {
+ return types.number(value) && parseInt(value, 10) === value;
+ },
+ "float": function float(value) {
+ return types.number(value) && !types.integer(value);
+ },
+ array: function array(value) {
+ return Array.isArray(value);
+ },
+ regexp: function regexp(value) {
+ if (value instanceof RegExp) {
+ return true;
+ }
+
+ try {
+ return !!new RegExp(value);
+ } catch (e) {
+ return false;
+ }
+ },
+ date: function date(value) {
+ return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';
+ },
+ number: function number(value) {
+ if (isNaN(value)) {
+ return false;
+ }
+
+ return typeof value === 'number';
+ },
+ object: function object(value) {
+ return typeof value === 'object' && !types.array(value);
+ },
+ method: function method(value) {
+ return typeof value === 'function';
+ },
+ email: function email(value) {
+ return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+ },
+ url: function url(value) {
+ return typeof value === 'string' && !!value.match(pattern.url);
+ },
+ hex: function hex(value) {
+ return typeof value === 'string' && !!value.match(pattern.hex);
+ }
+};
+/**
+ * Rule for validating the type of a value.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function type(rule, value, source, errors, options) {
+ if (rule.required && value === undefined) {
+ required(rule, value, source, errors, options);
+ return;
+ }
+
+ var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
+ var ruleType = rule.type;
+
+ if (custom.indexOf(ruleType) > -1) {
+ if (!types[ruleType](value)) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ } // straight typeof check
+
+ } else if (ruleType && typeof value !== rule.type) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ }
+}
+
+/**
+ * Rule for validating minimum and maximum allowed values.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function range(rule, value, source, errors, options) {
+ var len = typeof rule.len === 'number';
+ var min = typeof rule.min === 'number';
+ var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
+
+ var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ var val = value;
+ var key = null;
+ var num = typeof value === 'number';
+ var str = typeof value === 'string';
+ var arr = Array.isArray(value);
+
+ if (num) {
+ key = 'number';
+ } else if (str) {
+ key = 'string';
+ } else if (arr) {
+ key = 'array';
+ } // if the value is not of a supported type for range validation
+ // the validation rule rule should use the
+ // type property to also test for a particular type
+
+
+ if (!key) {
+ return false;
+ }
+
+ if (arr) {
+ val = value.length;
+ }
+
+ if (str) {
+ // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
+ val = value.replace(spRegexp, '_').length;
+ }
+
+ if (len) {
+ if (val !== rule.len) {
+ errors.push(format(options.messages[key].len, rule.fullField, rule.len));
+ }
+ } else if (min && !max && val < rule.min) {
+ errors.push(format(options.messages[key].min, rule.fullField, rule.min));
+ } else if (max && !min && val > rule.max) {
+ errors.push(format(options.messages[key].max, rule.fullField, rule.max));
+ } else if (min && max && (val < rule.min || val > rule.max)) {
+ errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
+ }
+}
+
+var ENUM = 'enum';
+/**
+ * Rule for validating a value exists in an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable(rule, value, source, errors, options) {
+ rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
+
+ if (rule[ENUM].indexOf(value) === -1) {
+ errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
+ }
+}
+
+/**
+ * Rule for validating a regular expression pattern.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$1(rule, value, source, errors, options) {
+ if (rule.pattern) {
+ if (rule.pattern instanceof RegExp) {
+ // if a RegExp instance is passed, reset `lastIndex` in case its `global`
+ // flag is accidentally set to `true`, which in a validation scenario
+ // is not necessary and the result might be misleading
+ rule.pattern.lastIndex = 0;
+
+ if (!rule.pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ } else if (typeof rule.pattern === 'string') {
+ var _pattern = new RegExp(rule.pattern);
+
+ if (!_pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ }
+ }
+}
+
+var rules = {
+ required: required,
+ whitespace: whitespace,
+ type: type,
+ range: range,
+ "enum": enumerable,
+ pattern: pattern$1
+};
+
+/**
+ * Performs validation for string types.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function string(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'string');
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ rules.pattern(rule, value, source, errors, options);
+
+ if (rule.whitespace === true) {
+ rules.whitespace(rule, value, source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a function.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function method(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function number(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (value === '') {
+ value = undefined;
+ }
+
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a boolean.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function _boolean(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates the regular expression type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function regexp(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is an integer.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function integer(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is a floating point number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function floatFn(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an array.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function array(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'array') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'array');
+
+ if (!isEmptyValue(value, 'array')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an object.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function object(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+var ENUM$1 = 'enum';
+/**
+ * Validates an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable$1(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules[ENUM$1](rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a regular expression pattern.
+ *
+ * Performs validation when a rule only contains
+ * a pattern property but is not declared as a string type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$2(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.pattern(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+function date(rule, value, callback, source, options) {
+ // console.log('integer rule called %j', rule);
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ var dateObject;
+
+ if (typeof value === 'number') {
+ dateObject = new Date(value);
+ } else {
+ dateObject = value;
+ }
+
+ rules.type(rule, dateObject, source, errors, options);
+
+ if (dateObject) {
+ rules.range(rule, dateObject.getTime(), source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+function required$1(rule, value, callback, source, options) {
+ var errors = [];
+ var type = Array.isArray(value) ? 'array' : typeof value;
+ rules.required(rule, value, source, errors, options, type);
+ callback(errors);
+}
+
+function type$1(rule, value, callback, source, options) {
+ var ruleType = rule.type;
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, ruleType) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, ruleType);
+
+ if (!isEmptyValue(value, ruleType)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Performs validation for any type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function any(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+ }
+
+ callback(errors);
+}
+
+var validators = {
+ string: string,
+ method: method,
+ number: number,
+ "boolean": _boolean,
+ regexp: regexp,
+ integer: integer,
+ "float": floatFn,
+ array: array,
+ object: object,
+ "enum": enumerable$1,
+ pattern: pattern$2,
+ date: date,
+ url: type$1,
+ hex: type$1,
+ email: type$1,
+ required: required$1,
+ any: any
+};
+
+function newMessages() {
+ return {
+ "default": 'Validation error on field %s',
+ required: '%s is required',
+ "enum": '%s must be one of %s',
+ whitespace: '%s cannot be empty',
+ date: {
+ format: '%s date %s is invalid for format %s',
+ parse: '%s date could not be parsed, %s is invalid ',
+ invalid: '%s date %s is invalid'
+ },
+ types: {
+ string: '%s is not a %s',
+ method: '%s is not a %s (function)',
+ array: '%s is not an %s',
+ object: '%s is not an %s',
+ number: '%s is not a %s',
+ date: '%s is not a %s',
+ "boolean": '%s is not a %s',
+ integer: '%s is not an %s',
+ "float": '%s is not a %s',
+ regexp: '%s is not a valid %s',
+ email: '%s is not a valid %s',
+ url: '%s is not a valid %s',
+ hex: '%s is not a valid %s'
+ },
+ string: {
+ len: '%s must be exactly %s characters',
+ min: '%s must be at least %s characters',
+ max: '%s cannot be longer than %s characters',
+ range: '%s must be between %s and %s characters'
+ },
+ number: {
+ len: '%s must equal %s',
+ min: '%s cannot be less than %s',
+ max: '%s cannot be greater than %s',
+ range: '%s must be between %s and %s'
+ },
+ array: {
+ len: '%s must be exactly %s in length',
+ min: '%s cannot be less than %s in length',
+ max: '%s cannot be greater than %s in length',
+ range: '%s must be between %s and %s in length'
+ },
+ pattern: {
+ mismatch: '%s value %s does not match pattern %s'
+ },
+ clone: function clone() {
+ var cloned = JSON.parse(JSON.stringify(this));
+ cloned.clone = this.clone;
+ return cloned;
+ }
+ };
+}
+var messages = newMessages();
+
+/**
+ * Encapsulates a validation schema.
+ *
+ * @param descriptor An object declaring validation rules
+ * for this schema.
+ */
+
+function Schema(descriptor) {
+ this.rules = null;
+ this._messages = messages;
+ this.define(descriptor);
+}
+
+Schema.prototype = {
+ messages: function messages(_messages) {
+ if (_messages) {
+ this._messages = deepMerge(newMessages(), _messages);
+ }
+
+ return this._messages;
+ },
+ define: function define(rules) {
+ if (!rules) {
+ throw new Error('Cannot configure a schema with no rules');
+ }
+
+ if (typeof rules !== 'object' || Array.isArray(rules)) {
+ throw new Error('Rules must be an object');
+ }
+
+ this.rules = {};
+ var z;
+ var item;
+
+ for (z in rules) {
+ if (rules.hasOwnProperty(z)) {
+ item = rules[z];
+ this.rules[z] = Array.isArray(item) ? item : [item];
+ }
+ }
+ },
+ validate: function validate(source_, o, oc) {
+ var _this = this;
+
+ if (o === void 0) {
+ o = {};
+ }
+
+ if (oc === void 0) {
+ oc = function oc() {};
+ }
+
+ var source = source_;
+ var options = o;
+ var callback = oc;
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ if (!this.rules || Object.keys(this.rules).length === 0) {
+ if (callback) {
+ callback();
+ }
+
+ return Promise.resolve();
+ }
+
+ function complete(results) {
+ var i;
+ var errors = [];
+ var fields = {};
+
+ function add(e) {
+ if (Array.isArray(e)) {
+ var _errors;
+
+ errors = (_errors = errors).concat.apply(_errors, e);
+ } else {
+ errors.push(e);
+ }
+ }
+
+ for (i = 0; i < results.length; i++) {
+ add(results[i]);
+ }
+
+ if (!errors.length) {
+ errors = null;
+ fields = null;
+ } else {
+ fields = convertFieldsError(errors);
+ }
+
+ callback(errors, fields);
+ }
+
+ if (options.messages) {
+ var messages$1 = this.messages();
+
+ if (messages$1 === messages) {
+ messages$1 = newMessages();
+ }
+
+ deepMerge(messages$1, options.messages);
+ options.messages = messages$1;
+ } else {
+ options.messages = this.messages();
+ }
+
+ var arr;
+ var value;
+ var series = {};
+ var keys = options.keys || Object.keys(this.rules);
+ keys.forEach(function (z) {
+ arr = _this.rules[z];
+ value = source[z];
+ arr.forEach(function (r) {
+ var rule = r;
+
+ if (typeof rule.transform === 'function') {
+ if (source === source_) {
+ source = _extends({}, source);
+ }
+
+ value = source[z] = rule.transform(value);
+ }
+
+ if (typeof rule === 'function') {
+ rule = {
+ validator: rule
+ };
+ } else {
+ rule = _extends({}, rule);
+ }
+
+ rule.validator = _this.getValidationMethod(rule);
+ rule.field = z;
+ rule.fullField = rule.fullField || z;
+ rule.type = _this.getType(rule);
+
+ if (!rule.validator) {
+ return;
+ }
+
+ series[z] = series[z] || [];
+ series[z].push({
+ rule: rule,
+ value: value,
+ source: source,
+ field: z
+ });
+ });
+ });
+ var errorFields = {};
+ return asyncMap(series, options, function (data, doIt) {
+ var rule = data.rule;
+ var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');
+ deep = deep && (rule.required || !rule.required && data.value);
+ rule.field = data.field;
+
+ function addFullfield(key, schema) {
+ return _extends({}, schema, {
+ fullField: rule.fullField + "." + key
+ });
+ }
+
+ function cb(e) {
+ if (e === void 0) {
+ e = [];
+ }
+
+ var errors = e;
+
+ if (!Array.isArray(errors)) {
+ errors = [errors];
+ }
+
+ if (!options.suppressWarning && errors.length) {
+ Schema.warning('async-validator:', errors);
+ }
+
+ if (errors.length && rule.message) {
+ errors = [].concat(rule.message);
+ }
+
+ errors = errors.map(complementError(rule));
+
+ if (options.first && errors.length) {
+ errorFields[rule.field] = 1;
+ return doIt(errors);
+ }
+
+ if (!deep) {
+ doIt(errors);
+ } else {
+ // if rule is required but the target object
+ // does not exist fail at the rule level and don't
+ // go deeper
+ if (rule.required && !data.value) {
+ if (rule.message) {
+ errors = [].concat(rule.message).map(complementError(rule));
+ } else if (options.error) {
+ errors = [options.error(rule, format(options.messages.required, rule.field))];
+ } else {
+ errors = [];
+ }
+
+ return doIt(errors);
+ }
+
+ var fieldsSchema = {};
+
+ if (rule.defaultField) {
+ for (var k in data.value) {
+ if (data.value.hasOwnProperty(k)) {
+ fieldsSchema[k] = rule.defaultField;
+ }
+ }
+ }
+
+ fieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);
+
+ for (var f in fieldsSchema) {
+ if (fieldsSchema.hasOwnProperty(f)) {
+ var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
+ fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
+ }
+ }
+
+ var schema = new Schema(fieldsSchema);
+ schema.messages(options.messages);
+
+ if (data.rule.options) {
+ data.rule.options.messages = options.messages;
+ data.rule.options.error = options.error;
+ }
+
+ schema.validate(data.value, data.rule.options || options, function (errs) {
+ var finalErrors = [];
+
+ if (errors && errors.length) {
+ finalErrors.push.apply(finalErrors, errors);
+ }
+
+ if (errs && errs.length) {
+ finalErrors.push.apply(finalErrors, errs);
+ }
+
+ doIt(finalErrors.length ? finalErrors : null);
+ });
+ }
+ }
+
+ var res;
+
+ if (rule.asyncValidator) {
+ res = rule.asyncValidator(rule, data.value, cb, data.source, options);
+ } else if (rule.validator) {
+ res = rule.validator(rule, data.value, cb, data.source, options);
+
+ if (res === true) {
+ cb();
+ } else if (res === false) {
+ cb(rule.message || rule.field + " fails");
+ } else if (res instanceof Array) {
+ cb(res);
+ } else if (res instanceof Error) {
+ cb(res.message);
+ }
+ }
+
+ if (res && res.then) {
+ res.then(function () {
+ return cb();
+ }, function (e) {
+ return cb(e);
+ });
+ }
+ }, function (results) {
+ complete(results);
+ });
+ },
+ getType: function getType(rule) {
+ if (rule.type === undefined && rule.pattern instanceof RegExp) {
+ rule.type = 'pattern';
+ }
+
+ if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
+ throw new Error(format('Unknown rule type %s', rule.type));
+ }
+
+ return rule.type || 'string';
+ },
+ getValidationMethod: function getValidationMethod(rule) {
+ if (typeof rule.validator === 'function') {
+ return rule.validator;
+ }
+
+ var keys = Object.keys(rule);
+ var messageIndex = keys.indexOf('message');
+
+ if (messageIndex !== -1) {
+ keys.splice(messageIndex, 1);
+ }
+
+ if (keys.length === 1 && keys[0] === 'required') {
+ return validators.required;
+ }
+
+ return validators[this.getType(rule)] || false;
+ }
+};
+
+Schema.register = function register(type, validator) {
+ if (typeof validator !== 'function') {
+ throw new Error('Cannot register a validator by type, validator is not a function');
+ }
+
+ validators[type] = validator;
+};
+
+Schema.warning = warning;
+Schema.messages = messages;
+
+export default Schema;
+//# sourceMappingURL=index.js.map
diff --git a/node_modules/async-validator/dist-web/index.js.map b/node_modules/async-validator/dist-web/index.js.map
new file mode 100644
index 0000000..59d99e7
--- /dev/null
+++ b/node_modules/async-validator/dist-web/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sources":["../../src/util.js","../../src/rule/required.js","../../src/rule/whitespace.js","../../src/rule/type.js","../../src/rule/range.js","../../src/rule/enum.js","../../src/rule/pattern.js","../../src/rule/index.js","../../src/validator/string.js","../../src/validator/method.js","../../src/validator/number.js","../../src/validator/boolean.js","../../src/validator/regexp.js","../../src/validator/integer.js","../../src/validator/float.js","../../src/validator/array.js","../../src/validator/object.js","../../src/validator/enum.js","../../src/validator/pattern.js","../../src/validator/date.js","../../src/validator/required.js","../../src/validator/type.js","../../src/validator/any.js","../../src/validator/index.js","../../src/messages.js","../../src/index.js"],"sourcesContent":["/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {\n};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n for (let arg = args[i]; i < len; arg = args[++i]) {\n str += ` ${arg}`;\n }\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject({ errors, fields: convertFieldsError(errors) })\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject({ errors: results, fields: convertFieldsError(results) })\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results)\n resolve()\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function'\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'array') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (!isEmptyValue(value, 'array')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n let dateObject;\n\n if (typeof value === 'number') {\n dateObject = new Date(value);\n } else {\n dateObject = value;\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n } else {\n errors = [];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(() => cb(), e => cb(e));\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n (rule.type && !validators.hasOwnProperty(rule.type))\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nexport default Schema;\n"],"names":["formatRegExp","warning","process","env","NODE_ENV","window","document","type","errors","console","warn","every","e","convertFieldsError","length","fields","forEach","error","field","push","format","args","i","f","len","apply","slice","str","String","replace","x","Number","JSON","stringify","_","arg","isNativeStringType","isEmptyValue","value","undefined","Array","isArray","asyncParallelArray","arr","func","callback","results","total","arrLength","count","a","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","Object","keys","k","asyncMap","option","first","pending","Promise","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","key","indexOf","complementError","rule","oe","message","fullField","deepMerge","target","source","s","hasOwnProperty","required","options","util","messages","whitespace","test","pattern","email","url","RegExp","hex","types","integer","number","parseInt","array","regexp","date","getTime","getMonth","getYear","isNaN","object","method","match","custom","ruleType","range","min","max","spRegexp","val","num","ENUM","enumerable","join","lastIndex","mismatch","_pattern","enumRule","string","validate","rules","boolean","floatFn","dateObject","Date","any","float","enumValidator","newMessages","parse","invalid","clone","cloned","Schema","descriptor","_messages","defaultMessages","define","prototype","Error","z","item","source_","o","oc","complete","add","concat","series","r","transform","validator","getValidationMethod","getType","errorFields","data","doIt","deep","defaultField","addFullfield","schema","cb","suppressWarning","map","fieldsSchema","fieldSchema","bind","errs","finalErrors","res","asyncValidator","then","validators","messageIndex","splice","register"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAEA,IAAMA,YAAY,GAAG,UAArB;AAEO,IAAIC,OAAO,GAAG,mBAAM,EAApB;;AAIP,IACE,OAAOC,OAAP,KAAmB,WAAnB,IACAA,OAAO,CAACC,GADR,IAEAD,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAFzB,IAGA,OAAOC,MAAP,KAAkB,WAHlB,IAIA,OAAOC,QAAP,KAAoB,WALtB,EAME;AACAL,EAAAA,OAAO,GAAG,iBAACM,IAAD,EAAOC,MAAP,EAAkB;AAC1B,QAAI,OAAOC,OAAP,KAAmB,WAAnB,IAAkCA,OAAO,CAACC,IAA9C,EAAoD;AAClD,UAAIF,MAAM,CAACG,KAAP,CAAa,UAAAC,CAAC;AAAA,eAAI,OAAOA,CAAP,KAAa,QAAjB;AAAA,OAAd,CAAJ,EAA8C;AAC5CH,QAAAA,OAAO,CAACC,IAAR,CAAaH,IAAb,EAAmBC,MAAnB;AACD;AACF;AACF,GAND;AAOD;;AAEM,SAASK,kBAAT,CAA4BL,MAA5B,EAAoC;AACzC,MAAI,CAACA,MAAD,IAAW,CAACA,MAAM,CAACM,MAAvB,EAA+B,OAAO,IAAP;AAC/B,MAAMC,MAAM,GAAG,EAAf;AACAP,EAAAA,MAAM,CAACQ,OAAP,CAAe,UAAAC,KAAK,EAAI;AACtB,QAAMC,KAAK,GAAGD,KAAK,CAACC,KAApB;AACAH,IAAAA,MAAM,CAACG,KAAD,CAAN,GAAgBH,MAAM,CAACG,KAAD,CAAN,IAAiB,EAAjC;AACAH,IAAAA,MAAM,CAACG,KAAD,CAAN,CAAcC,IAAd,CAAmBF,KAAnB;AACD,GAJD;AAKA,SAAOF,MAAP;AACD;AAEM,SAASK,MAAT,GAAyB;AAAA,oCAANC,IAAM;AAANA,IAAAA,IAAM;AAAA;;AAC9B,MAAIC,CAAC,GAAG,CAAR;AACA,MAAMC,CAAC,GAAGF,IAAI,CAAC,CAAD,CAAd;AACA,MAAMG,GAAG,GAAGH,IAAI,CAACP,MAAjB;;AACA,MAAI,OAAOS,CAAP,KAAa,UAAjB,EAA6B;AAC3B,WAAOA,CAAC,CAACE,KAAF,CAAQ,IAAR,EAAcJ,IAAI,CAACK,KAAL,CAAW,CAAX,CAAd,CAAP;AACD;;AACD,MAAI,OAAOH,CAAP,KAAa,QAAjB,EAA2B;AACzB,QAAII,GAAG,GAAGC,MAAM,CAACL,CAAD,CAAN,CAAUM,OAAV,CAAkB7B,YAAlB,EAAgC,UAAA8B,CAAC,EAAI;AAC7C,UAAIA,CAAC,KAAK,IAAV,EAAgB;AACd,eAAO,GAAP;AACD;;AACD,UAAIR,CAAC,IAAIE,GAAT,EAAc;AACZ,eAAOM,CAAP;AACD;;AACD,cAAQA,CAAR;AACE,aAAK,IAAL;AACE,iBAAOF,MAAM,CAACP,IAAI,CAACC,CAAC,EAAF,CAAL,CAAb;;AACF,aAAK,IAAL;AACE,iBAAOS,MAAM,CAACV,IAAI,CAACC,CAAC,EAAF,CAAL,CAAb;;AACF,aAAK,IAAL;AACE,cAAI;AACF,mBAAOU,IAAI,CAACC,SAAL,CAAeZ,IAAI,CAACC,CAAC,EAAF,CAAnB,CAAP;AACD,WAFD,CAEE,OAAOY,CAAP,EAAU;AACV,mBAAO,YAAP;AACD;;AACD;;AACF;AACE,iBAAOJ,CAAP;AAbJ;AAeD,KAtBS,CAAV;;AAuBA,SAAK,IAAIK,GAAG,GAAGd,IAAI,CAACC,CAAD,CAAnB,EAAwBA,CAAC,GAAGE,GAA5B,EAAiCW,GAAG,GAAGd,IAAI,CAAC,EAAEC,CAAH,CAA3C,EAAkD;AAChDK,MAAAA,GAAG,UAAQQ,GAAX;AACD;;AACD,WAAOR,GAAP;AACD;;AACD,SAAOJ,CAAP;AACD;;AAED,SAASa,kBAAT,CAA4B7B,IAA5B,EAAkC;AAChC,SACEA,IAAI,KAAK,QAAT,IACAA,IAAI,KAAK,KADT,IAEAA,IAAI,KAAK,KAFT,IAGAA,IAAI,KAAK,OAHT,IAIAA,IAAI,KAAK,SALX;AAOD;;AAEM,SAAS8B,YAAT,CAAsBC,KAAtB,EAA6B/B,IAA7B,EAAmC;AACxC,MAAI+B,KAAK,KAAKC,SAAV,IAAuBD,KAAK,KAAK,IAArC,EAA2C;AACzC,WAAO,IAAP;AACD;;AACD,MAAI/B,IAAI,KAAK,OAAT,IAAoBiC,KAAK,CAACC,OAAN,CAAcH,KAAd,CAApB,IAA4C,CAACA,KAAK,CAACxB,MAAvD,EAA+D;AAC7D,WAAO,IAAP;AACD;;AACD,MAAIsB,kBAAkB,CAAC7B,IAAD,CAAlB,IAA4B,OAAO+B,KAAP,KAAiB,QAA7C,IAAyD,CAACA,KAA9D,EAAqE;AACnE,WAAO,IAAP;AACD;;AACD,SAAO,KAAP;AACD;;AAMD,SAASI,kBAAT,CAA4BC,GAA5B,EAAiCC,IAAjC,EAAuCC,QAAvC,EAAiD;AAC/C,MAAMC,OAAO,GAAG,EAAhB;AACA,MAAIC,KAAK,GAAG,CAAZ;AACA,MAAMC,SAAS,GAAGL,GAAG,CAAC7B,MAAtB;;AAEA,WAASmC,KAAT,CAAezC,MAAf,EAAuB;AACrBsC,IAAAA,OAAO,CAAC3B,IAAR,CAAaM,KAAb,CAAmBqB,OAAnB,EAA4BtC,MAA5B;AACAuC,IAAAA,KAAK;;AACL,QAAIA,KAAK,KAAKC,SAAd,EAAyB;AACvBH,MAAAA,QAAQ,CAACC,OAAD,CAAR;AACD;AACF;;AAEDH,EAAAA,GAAG,CAAC3B,OAAJ,CAAY,UAAAkC,CAAC,EAAI;AACfN,IAAAA,IAAI,CAACM,CAAD,EAAID,KAAJ,CAAJ;AACD,GAFD;AAGD;;AAED,SAASE,gBAAT,CAA0BR,GAA1B,EAA+BC,IAA/B,EAAqCC,QAArC,EAA+C;AAC7C,MAAIO,KAAK,GAAG,CAAZ;AACA,MAAMJ,SAAS,GAAGL,GAAG,CAAC7B,MAAtB;;AAEA,WAASuC,IAAT,CAAc7C,MAAd,EAAsB;AACpB,QAAIA,MAAM,IAAIA,MAAM,CAACM,MAArB,EAA6B;AAC3B+B,MAAAA,QAAQ,CAACrC,MAAD,CAAR;AACA;AACD;;AACD,QAAM8C,QAAQ,GAAGF,KAAjB;AACAA,IAAAA,KAAK,GAAGA,KAAK,GAAG,CAAhB;;AACA,QAAIE,QAAQ,GAAGN,SAAf,EAA0B;AACxBJ,MAAAA,IAAI,CAACD,GAAG,CAACW,QAAD,CAAJ,EAAgBD,IAAhB,CAAJ;AACD,KAFD,MAEO;AACLR,MAAAA,QAAQ,CAAC,EAAD,CAAR;AACD;AACF;;AAEDQ,EAAAA,IAAI,CAAC,EAAD,CAAJ;AACD;;AAED,SAASE,aAAT,CAAuBC,MAAvB,EAA+B;AAC7B,MAAMC,GAAG,GAAG,EAAZ;AACAC,EAAAA,MAAM,CAACC,IAAP,CAAYH,MAAZ,EAAoBxC,OAApB,CAA4B,UAAA4C,CAAC,EAAI;AAC/BH,IAAAA,GAAG,CAACtC,IAAJ,CAASM,KAAT,CAAegC,GAAf,EAAoBD,MAAM,CAACI,CAAD,CAA1B;AACD,GAFD;AAGA,SAAOH,GAAP;AACD;;AAEM,SAASI,QAAT,CAAkBL,MAAlB,EAA0BM,MAA1B,EAAkClB,IAAlC,EAAwCC,QAAxC,EAAkD;AACvD,MAAIiB,MAAM,CAACC,KAAX,EAAkB;AAChB,QAAMC,QAAO,GAAG,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC/C,UAAMd,IAAI,GAAG,SAAPA,IAAO,CAAA7C,MAAM,EAAI;AACrBqC,QAAAA,QAAQ,CAACrC,MAAD,CAAR;AACA,eAAOA,MAAM,CAACM,MAAP,GACHqD,MAAM,CAAC;AAAE3D,UAAAA,MAAM,EAANA,MAAF;AAAUO,UAAAA,MAAM,EAAEF,kBAAkB,CAACL,MAAD;AAApC,SAAD,CADH,GAEH0D,OAAO,EAFX;AAGD,OALD;;AAMA,UAAME,UAAU,GAAGb,aAAa,CAACC,MAAD,CAAhC;AACAL,MAAAA,gBAAgB,CAACiB,UAAD,EAAaxB,IAAb,EAAmBS,IAAnB,CAAhB;AACD,KATe,CAAhB;;AAUAW,IAAAA,QAAO,SAAP,CAAc,UAAApD,CAAC;AAAA,aAAIA,CAAJ;AAAA,KAAf;;AACA,WAAOoD,QAAP;AACD;;AACD,MAAIK,WAAW,GAAGP,MAAM,CAACO,WAAP,IAAsB,EAAxC;;AACA,MAAIA,WAAW,KAAK,IAApB,EAA0B;AACxBA,IAAAA,WAAW,GAAGX,MAAM,CAACC,IAAP,CAAYH,MAAZ,CAAd;AACD;;AACD,MAAMc,UAAU,GAAGZ,MAAM,CAACC,IAAP,CAAYH,MAAZ,CAAnB;AACA,MAAMe,YAAY,GAAGD,UAAU,CAACxD,MAAhC;AACA,MAAIiC,KAAK,GAAG,CAAZ;AACA,MAAMD,OAAO,GAAG,EAAhB;AACA,MAAMkB,OAAO,GAAG,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC/C,QAAMd,IAAI,GAAG,SAAPA,IAAO,CAAA7C,MAAM,EAAI;AACrBsC,MAAAA,OAAO,CAAC3B,IAAR,CAAaM,KAAb,CAAmBqB,OAAnB,EAA4BtC,MAA5B;AACAuC,MAAAA,KAAK;;AACL,UAAIA,KAAK,KAAKwB,YAAd,EAA4B;AAC1B1B,QAAAA,QAAQ,CAACC,OAAD,CAAR;AACA,eAAOA,OAAO,CAAChC,MAAR,GACHqD,MAAM,CAAC;AAAE3D,UAAAA,MAAM,EAAEsC,OAAV;AAAmB/B,UAAAA,MAAM,EAAEF,kBAAkB,CAACiC,OAAD;AAA7C,SAAD,CADH,GAEHoB,OAAO,EAFX;AAGD;AACF,KATD;;AAUA,QAAI,CAACI,UAAU,CAACxD,MAAhB,EAAwB;AACtB+B,MAAAA,QAAQ,CAACC,OAAD,CAAR;AACAoB,MAAAA,OAAO;AACR;;AACDI,IAAAA,UAAU,CAACtD,OAAX,CAAmB,UAAAwD,GAAG,EAAI;AACxB,UAAM7B,GAAG,GAAGa,MAAM,CAACgB,GAAD,CAAlB;;AACA,UAAIH,WAAW,CAACI,OAAZ,CAAoBD,GAApB,MAA6B,CAAC,CAAlC,EAAqC;AACnCrB,QAAAA,gBAAgB,CAACR,GAAD,EAAMC,IAAN,EAAYS,IAAZ,CAAhB;AACD,OAFD,MAEO;AACLX,QAAAA,kBAAkB,CAACC,GAAD,EAAMC,IAAN,EAAYS,IAAZ,CAAlB;AACD;AACF,KAPD;AAQD,GAvBe,CAAhB;AAwBAW,EAAAA,OAAO,SAAP,CAAc,UAAApD,CAAC;AAAA,WAAIA,CAAJ;AAAA,GAAf;AACA,SAAOoD,OAAP;AACD;AAEM,SAASU,eAAT,CAAyBC,IAAzB,EAA+B;AACpC,SAAO,UAAAC,EAAE,EAAI;AACX,QAAIA,EAAE,IAAIA,EAAE,CAACC,OAAb,EAAsB;AACpBD,MAAAA,EAAE,CAAC1D,KAAH,GAAW0D,EAAE,CAAC1D,KAAH,IAAYyD,IAAI,CAACG,SAA5B;AACA,aAAOF,EAAP;AACD;;AACD,WAAO;AACLC,MAAAA,OAAO,EAAE,OAAOD,EAAP,KAAc,UAAd,GAA2BA,EAAE,EAA7B,GAAkCA,EADtC;AAEL1D,MAAAA,KAAK,EAAE0D,EAAE,CAAC1D,KAAH,IAAYyD,IAAI,CAACG;AAFnB,KAAP;AAID,GATD;AAUD;AAEM,SAASC,SAAT,CAAmBC,MAAnB,EAA2BC,MAA3B,EAAmC;AACxC,MAAIA,MAAJ,EAAY;AACV,SAAK,IAAMC,CAAX,IAAgBD,MAAhB,EAAwB;AACtB,UAAIA,MAAM,CAACE,cAAP,CAAsBD,CAAtB,CAAJ,EAA8B;AAC5B,YAAM5C,KAAK,GAAG2C,MAAM,CAACC,CAAD,CAApB;;AACA,YAAI,OAAO5C,KAAP,KAAiB,QAAjB,IAA6B,OAAO0C,MAAM,CAACE,CAAD,CAAb,KAAqB,QAAtD,EAAgE;AAC9DF,UAAAA,MAAM,CAACE,CAAD,CAAN,gBACKF,MAAM,CAACE,CAAD,CADX,MAEK5C,KAFL;AAID,SALD,MAKO;AACL0C,UAAAA,MAAM,CAACE,CAAD,CAAN,GAAY5C,KAAZ;AACD;AACF;AACF;AACF;;AACD,SAAO0C,MAAP;AACD;;ACnOD;;;;;;;;;;;;AAWA,SAASI,QAAT,CAAkBT,IAAlB,EAAwBrC,KAAxB,EAA+B2C,MAA/B,EAAuCzE,MAAvC,EAA+C6E,OAA/C,EAAwD9E,IAAxD,EAA8D;AAC5D,MACEoE,IAAI,CAACS,QAAL,KACC,CAACH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CAAD,IACCoE,YAAA,CAAkBhD,KAAlB,EAAyB/B,IAAI,IAAIoE,IAAI,CAACpE,IAAtC,CAFF,CADF,EAIE;AACAC,IAAAA,MAAM,CAACW,IAAP,CAAYmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBH,QAA7B,EAAuCT,IAAI,CAACG,SAA5C,CAAZ;AACD;AACF;;ACnBD;;;;;;;;;;;;AAWA,SAASU,UAAT,CAAoBb,IAApB,EAA0BrC,KAA1B,EAAiC2C,MAAjC,EAAyCzE,MAAzC,EAAiD6E,OAAjD,EAA0D;AACxD,MAAI,QAAQI,IAAR,CAAanD,KAAb,KAAuBA,KAAK,KAAK,EAArC,EAAyC;AACvC9B,IAAAA,MAAM,CAACW,IAAP,CAAYmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBC,UAA7B,EAAyCb,IAAI,CAACG,SAA9C,CAAZ;AACD;AACF;;ACdD;;AAEA,IAAMY,OAAO,GAAG;AACd;AACAC,EAAAA,KAAK,EAAE,wJAFO;AAGdC,EAAAA,GAAG,EAAE,IAAIC,MAAJ,CACH,gZADG,EAEH,GAFG,CAHS;AAOdC,EAAAA,GAAG,EAAE;AAPS,CAAhB;AAUA,IAAMC,KAAK,GAAG;AACZC,EAAAA,OADY,mBACJ1D,KADI,EACG;AACb,WAAOyD,KAAK,CAACE,MAAN,CAAa3D,KAAb,KAAuB4D,QAAQ,CAAC5D,KAAD,EAAQ,EAAR,CAAR,KAAwBA,KAAtD;AACD,GAHW;AAAA,0BAINA,KAJM,EAIC;AACX,WAAOyD,KAAK,CAACE,MAAN,CAAa3D,KAAb,KAAuB,CAACyD,KAAK,CAACC,OAAN,CAAc1D,KAAd,CAA/B;AACD,GANW;AAOZ6D,EAAAA,KAPY,iBAON7D,KAPM,EAOC;AACX,WAAOE,KAAK,CAACC,OAAN,CAAcH,KAAd,CAAP;AACD,GATW;AAUZ8D,EAAAA,MAVY,kBAUL9D,KAVK,EAUE;AACZ,QAAIA,KAAK,YAAYuD,MAArB,EAA6B;AAC3B,aAAO,IAAP;AACD;;AACD,QAAI;AACF,aAAO,CAAC,CAAC,IAAIA,MAAJ,CAAWvD,KAAX,CAAT;AACD,KAFD,CAEE,OAAO1B,CAAP,EAAU;AACV,aAAO,KAAP;AACD;AACF,GAnBW;AAoBZyF,EAAAA,IApBY,gBAoBP/D,KApBO,EAoBA;AACV,WACE,OAAOA,KAAK,CAACgE,OAAb,KAAyB,UAAzB,IACA,OAAOhE,KAAK,CAACiE,QAAb,KAA0B,UAD1B,IAEA,OAAOjE,KAAK,CAACkE,OAAb,KAAyB,UAH3B;AAKD,GA1BW;AA2BZP,EAAAA,MA3BY,kBA2BL3D,KA3BK,EA2BE;AACZ,QAAImE,KAAK,CAACnE,KAAD,CAAT,EAAkB;AAChB,aAAO,KAAP;AACD;;AACD,WAAO,OAAOA,KAAP,KAAiB,QAAxB;AACD,GAhCW;AAiCZoE,EAAAA,MAjCY,kBAiCLpE,KAjCK,EAiCE;AACZ,WAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAACyD,KAAK,CAACI,KAAN,CAAY7D,KAAZ,CAArC;AACD,GAnCW;AAoCZqE,EAAAA,MApCY,kBAoCLrE,KApCK,EAoCE;AACZ,WAAO,OAAOA,KAAP,KAAiB,UAAxB;AACD,GAtCW;AAuCZqD,EAAAA,KAvCY,iBAuCNrD,KAvCM,EAuCC;AACX,WACE,OAAOA,KAAP,KAAiB,QAAjB,IACA,CAAC,CAACA,KAAK,CAACsE,KAAN,CAAYlB,OAAO,CAACC,KAApB,CADF,IAEArD,KAAK,CAACxB,MAAN,GAAe,GAHjB;AAKD,GA7CW;AA8CZ8E,EAAAA,GA9CY,eA8CRtD,KA9CQ,EA8CD;AACT,WAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC,CAACA,KAAK,CAACsE,KAAN,CAAYlB,OAAO,CAACE,GAApB,CAAtC;AACD,GAhDW;AAiDZE,EAAAA,GAjDY,eAiDRxD,KAjDQ,EAiDD;AACT,WAAO,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC,CAACA,KAAK,CAACsE,KAAN,CAAYlB,OAAO,CAACI,GAApB,CAAtC;AACD;AAnDW,CAAd;AAsDA;;;;;;;;;;;;AAWA,SAASvF,IAAT,CAAcoE,IAAd,EAAoBrC,KAApB,EAA2B2C,MAA3B,EAAmCzE,MAAnC,EAA2C6E,OAA3C,EAAoD;AAClD,MAAIV,IAAI,CAACS,QAAL,IAAiB9C,KAAK,KAAKC,SAA/B,EAA0C;AACxC6C,IAAAA,QAAQ,CAACT,IAAD,EAAOrC,KAAP,EAAc2C,MAAd,EAAsBzE,MAAtB,EAA8B6E,OAA9B,CAAR;AACA;AACD;;AACD,MAAMwB,MAAM,GAAG,CACb,SADa,EAEb,OAFa,EAGb,OAHa,EAIb,QAJa,EAKb,QALa,EAMb,QANa,EAOb,OAPa,EAQb,QARa,EASb,MATa,EAUb,KAVa,EAWb,KAXa,CAAf;AAaA,MAAMC,QAAQ,GAAGnC,IAAI,CAACpE,IAAtB;;AACA,MAAIsG,MAAM,CAACpC,OAAP,CAAeqC,QAAf,IAA2B,CAAC,CAAhC,EAAmC;AACjC,QAAI,CAACf,KAAK,CAACe,QAAD,CAAL,CAAgBxE,KAAhB,CAAL,EAA6B;AAC3B9B,MAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CACED,OAAO,CAACE,QAAR,CAAiBQ,KAAjB,CAAuBe,QAAvB,CADF,EAEEnC,IAAI,CAACG,SAFP,EAGEH,IAAI,CAACpE,IAHP,CADF;AAOD,KATgC;;AAWlC,GAXD,MAWO,IAAIuG,QAAQ,IAAI,OAAOxE,KAAP,KAAiBqC,IAAI,CAACpE,IAAtC,EAA4C;AACjDC,IAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBQ,KAAjB,CAAuBe,QAAvB,CAAZ,EAA8CnC,IAAI,CAACG,SAAnD,EAA8DH,IAAI,CAACpE,IAAnE,CADF;AAGD;AACF;;ACjHD;;;;;;;;;;;;AAWA,SAASwG,KAAT,CAAepC,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C,EAAqD;AACnD,MAAM7D,GAAG,GAAG,OAAOmD,IAAI,CAACnD,GAAZ,KAAoB,QAAhC;AACA,MAAMwF,GAAG,GAAG,OAAOrC,IAAI,CAACqC,GAAZ,KAAoB,QAAhC;AACA,MAAMC,GAAG,GAAG,OAAOtC,IAAI,CAACsC,GAAZ,KAAoB,QAAhC,CAHmD;;AAKnD,MAAMC,QAAQ,GAAG,iCAAjB;AACA,MAAIC,GAAG,GAAG7E,KAAV;AACA,MAAIkC,GAAG,GAAG,IAAV;AACA,MAAM4C,GAAG,GAAG,OAAO9E,KAAP,KAAiB,QAA7B;AACA,MAAMX,GAAG,GAAG,OAAOW,KAAP,KAAiB,QAA7B;AACA,MAAMK,GAAG,GAAGH,KAAK,CAACC,OAAN,CAAcH,KAAd,CAAZ;;AACA,MAAI8E,GAAJ,EAAS;AACP5C,IAAAA,GAAG,GAAG,QAAN;AACD,GAFD,MAEO,IAAI7C,GAAJ,EAAS;AACd6C,IAAAA,GAAG,GAAG,QAAN;AACD,GAFM,MAEA,IAAI7B,GAAJ,EAAS;AACd6B,IAAAA,GAAG,GAAG,OAAN;AACD,GAjBkD;AAmBnD;AACA;;;AACA,MAAI,CAACA,GAAL,EAAU;AACR,WAAO,KAAP;AACD;;AACD,MAAI7B,GAAJ,EAAS;AACPwE,IAAAA,GAAG,GAAG7E,KAAK,CAACxB,MAAZ;AACD;;AACD,MAAIa,GAAJ,EAAS;AACP;AACAwF,IAAAA,GAAG,GAAG7E,KAAK,CAACT,OAAN,CAAcqF,QAAd,EAAwB,GAAxB,EAA6BpG,MAAnC;AACD;;AACD,MAAIU,GAAJ,EAAS;AACP,QAAI2F,GAAG,KAAKxC,IAAI,CAACnD,GAAjB,EAAsB;AACpBhB,MAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBf,GAAjB,EAAsBhD,GAAlC,EAAuCmD,IAAI,CAACG,SAA5C,EAAuDH,IAAI,CAACnD,GAA5D,CADF;AAGD;AACF,GAND,MAMO,IAAIwF,GAAG,IAAI,CAACC,GAAR,IAAeE,GAAG,GAAGxC,IAAI,CAACqC,GAA9B,EAAmC;AACxCxG,IAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBf,GAAjB,EAAsBwC,GAAlC,EAAuCrC,IAAI,CAACG,SAA5C,EAAuDH,IAAI,CAACqC,GAA5D,CADF;AAGD,GAJM,MAIA,IAAIC,GAAG,IAAI,CAACD,GAAR,IAAeG,GAAG,GAAGxC,IAAI,CAACsC,GAA9B,EAAmC;AACxCzG,IAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CAAYD,OAAO,CAACE,QAAR,CAAiBf,GAAjB,EAAsByC,GAAlC,EAAuCtC,IAAI,CAACG,SAA5C,EAAuDH,IAAI,CAACsC,GAA5D,CADF;AAGD,GAJM,MAIA,IAAID,GAAG,IAAIC,GAAP,KAAeE,GAAG,GAAGxC,IAAI,CAACqC,GAAX,IAAkBG,GAAG,GAAGxC,IAAI,CAACsC,GAA5C,CAAJ,EAAsD;AAC3DzG,IAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CACED,OAAO,CAACE,QAAR,CAAiBf,GAAjB,EAAsBuC,KADxB,EAEEpC,IAAI,CAACG,SAFP,EAGEH,IAAI,CAACqC,GAHP,EAIErC,IAAI,CAACsC,GAJP,CADF;AAQD;AACF;;AClED,IAAMI,IAAI,GAAG,MAAb;AAEA;;;;;;;;;;;;AAWA,SAASC,UAAT,CAAoB3C,IAApB,EAA0BrC,KAA1B,EAAiC2C,MAAjC,EAAyCzE,MAAzC,EAAiD6E,OAAjD,EAA0D;AACxDV,EAAAA,IAAI,CAAC0C,IAAD,CAAJ,GAAa7E,KAAK,CAACC,OAAN,CAAckC,IAAI,CAAC0C,IAAD,CAAlB,IAA4B1C,IAAI,CAAC0C,IAAD,CAAhC,GAAyC,EAAtD;;AACA,MAAI1C,IAAI,CAAC0C,IAAD,CAAJ,CAAW5C,OAAX,CAAmBnC,KAAnB,MAA8B,CAAC,CAAnC,EAAsC;AACpC9B,IAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CACED,OAAO,CAACE,QAAR,CAAiB8B,IAAjB,CADF,EAEE1C,IAAI,CAACG,SAFP,EAGEH,IAAI,CAAC0C,IAAD,CAAJ,CAAWE,IAAX,CAAgB,IAAhB,CAHF,CADF;AAOD;AACF;;ACxBD;;;;;;;;;;;;AAWA,SAAS7B,SAAT,CAAiBf,IAAjB,EAAuBrC,KAAvB,EAA8B2C,MAA9B,EAAsCzE,MAAtC,EAA8C6E,OAA9C,EAAuD;AACrD,MAAIV,IAAI,CAACe,OAAT,EAAkB;AAChB,QAAIf,IAAI,CAACe,OAAL,YAAwBG,MAA5B,EAAoC;AAClC;AACA;AACA;AACAlB,MAAAA,IAAI,CAACe,OAAL,CAAa8B,SAAb,GAAyB,CAAzB;;AACA,UAAI,CAAC7C,IAAI,CAACe,OAAL,CAAaD,IAAb,CAAkBnD,KAAlB,CAAL,EAA+B;AAC7B9B,QAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CACED,OAAO,CAACE,QAAR,CAAiBG,OAAjB,CAAyB+B,QAD3B,EAEE9C,IAAI,CAACG,SAFP,EAGExC,KAHF,EAIEqC,IAAI,CAACe,OAJP,CADF;AAQD;AACF,KAfD,MAeO,IAAI,OAAOf,IAAI,CAACe,OAAZ,KAAwB,QAA5B,EAAsC;AAC3C,UAAMgC,QAAQ,GAAG,IAAI7B,MAAJ,CAAWlB,IAAI,CAACe,OAAhB,CAAjB;;AACA,UAAI,CAACgC,QAAQ,CAACjC,IAAT,CAAcnD,KAAd,CAAL,EAA2B;AACzB9B,QAAAA,MAAM,CAACW,IAAP,CACEmE,MAAA,CACED,OAAO,CAACE,QAAR,CAAiBG,OAAjB,CAAyB+B,QAD3B,EAEE9C,IAAI,CAACG,SAFP,EAGExC,KAHF,EAIEqC,IAAI,CAACe,OAJP,CADF;AAQD;AACF;AACF;AACF;;ACrCD,YAAe;AACbN,EAAAA,QAAQ,EAARA,QADa;AAEbI,EAAAA,UAAU,EAAVA,UAFa;AAGbjF,EAAAA,IAAI,EAAJA,IAHa;AAIbwG,EAAAA,KAAK,EAALA,KAJa;AAKb,UAAMY,UALO;AAMbjC,EAAAA,OAAO,EAAPA;AANa,CAAf;;ACJA;;;;;;;;;;;AAUA,SAASkC,MAAT,CAAgBjD,IAAhB,EAAsBrC,KAAtB,EAA6BO,QAA7B,EAAuCoC,MAAvC,EAA+CI,OAA/C,EAAwD;AACtD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,EAAQ,QAAR,CAAZ,IAAiC,CAACqC,IAAI,CAACS,QAA3C,EAAqD;AACnD,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C,EAAqD,QAArD;;AACA,QAAI,CAAChD,YAAY,CAACC,KAAD,EAAQ,QAAR,CAAjB,EAAoC;AAClCwF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACAyC,MAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACAyC,MAAAA,KAAK,CAACpC,OAAN,CAAcf,IAAd,EAAoBrC,KAApB,EAA2B2C,MAA3B,EAAmCzE,MAAnC,EAA2C6E,OAA3C;;AACA,UAAIV,IAAI,CAACa,UAAL,KAAoB,IAAxB,EAA8B;AAC5BsC,QAAAA,KAAK,CAACtC,UAAN,CAAiBb,IAAjB,EAAuBrC,KAAvB,EAA8B2C,MAA9B,EAAsCzE,MAAtC,EAA8C6E,OAA9C;AACD;AACF;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC7BD;;;;;;;;;;;AAUA,SAASmG,MAAT,CAAgBhC,IAAhB,EAAsBrC,KAAtB,EAA6BO,QAA7B,EAAuCoC,MAAvC,EAA+CI,OAA/C,EAAwD;AACtD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACxBD;;;;;;;;;;;AAUA,SAASyF,MAAT,CAAgBtB,IAAhB,EAAsBrC,KAAtB,EAA6BO,QAA7B,EAAuCoC,MAAvC,EAA+CI,OAA/C,EAAwD;AACtD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIvF,KAAK,KAAK,EAAd,EAAkB;AAChBA,MAAAA,KAAK,GAAGC,SAAR;AACD;;AACD,QAAIF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACAyC,MAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC5BD;;;;;;;;;;;AAUA,SAASuH,QAAT,CAAiBpD,IAAjB,EAAuBrC,KAAvB,EAA8BO,QAA9B,EAAwCoC,MAAxC,EAAgDI,OAAhD,EAAyD;AACvD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACxBD;;;;;;;;;;;AAUA,SAAS4F,MAAT,CAAgBzB,IAAhB,EAAsBrC,KAAtB,EAA6BO,QAA7B,EAAuCoC,MAAvC,EAA+CI,OAA/C,EAAwD;AACtD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI,CAAChD,YAAY,CAACC,KAAD,CAAjB,EAA0B;AACxBwF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACxBD;;;;;;;;;;;AAUA,SAASwF,OAAT,CAAiBrB,IAAjB,EAAuBrC,KAAvB,EAA8BO,QAA9B,EAAwCoC,MAAxC,EAAgDI,OAAhD,EAAyD;AACvD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACAyC,MAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACzBD;;;;;;;;;;;AAUA,SAASwH,OAAT,CAAiBrD,IAAjB,EAAuBrC,KAAvB,EAA8BO,QAA9B,EAAwCoC,MAAxC,EAAgDI,OAAhD,EAAyD;AACvD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACAyC,MAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC1BD;;;;;;;;;;;AAUA,SAAS2F,KAAT,CAAexB,IAAf,EAAqBrC,KAArB,EAA4BO,QAA5B,EAAsCoC,MAAtC,EAA8CI,OAA9C,EAAuD;AACrD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,EAAQ,OAAR,CAAZ,IAAgC,CAACqC,IAAI,CAACS,QAA1C,EAAoD;AAClD,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C,EAAqD,OAArD;;AACA,QAAI,CAAChD,YAAY,CAACC,KAAD,EAAQ,OAAR,CAAjB,EAAmC;AACjCwF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACAyC,MAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACxBD;;;;;;;;;;;AAUA,SAASkG,MAAT,CAAgB/B,IAAhB,EAAsBrC,KAAtB,EAA6BO,QAA7B,EAAuCoC,MAAvC,EAA+CI,OAA/C,EAAwD;AACtD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACxBD,IAAM6G,MAAI,GAAG,MAAb;AAEA;;;;;;;;;;;AAUA,SAASC,YAAT,CAAoB3C,IAApB,EAA0BrC,KAA1B,EAAiCO,QAAjC,EAA2CoC,MAA3C,EAAmDI,OAAnD,EAA4D;AAC1D,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI/C,KAAK,KAAKC,SAAd,EAAyB;AACvBuF,MAAAA,KAAK,CAACT,MAAD,CAAL,CAAY1C,IAAZ,EAAkBrC,KAAlB,EAAyB2C,MAAzB,EAAiCzE,MAAjC,EAAyC6E,OAAzC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC1BD;;;;;;;;;;;;;;AAaA,SAASkF,SAAT,CAAiBf,IAAjB,EAAuBrC,KAAvB,EAA8BO,QAA9B,EAAwCoC,MAAxC,EAAgDI,OAAhD,EAAyD;AACvD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,EAAQ,QAAR,CAAZ,IAAiC,CAACqC,IAAI,CAACS,QAA3C,EAAqD;AACnD,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI,CAAChD,YAAY,CAACC,KAAD,EAAQ,QAAR,CAAjB,EAAoC;AAClCwF,MAAAA,KAAK,CAACpC,OAAN,CAAcf,IAAd,EAAoBrC,KAApB,EAA2B2C,MAA3B,EAAmCzE,MAAnC,EAA2C6E,OAA3C;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC3BD,SAAS6F,IAAT,CAAc1B,IAAd,EAAoBrC,KAApB,EAA2BO,QAA3B,EAAqCoC,MAArC,EAA6CI,OAA7C,EAAsD;AACpD;AACA,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC,CAHoD;;AAMpD,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;;AACA,QAAI,CAAChD,YAAY,CAACC,KAAD,CAAjB,EAA0B;AACxB,UAAI2F,UAAJ;;AAEA,UAAI,OAAO3F,KAAP,KAAiB,QAArB,EAA+B;AAC7B2F,QAAAA,UAAU,GAAG,IAAIC,IAAJ,CAAS5F,KAAT,CAAb;AACD,OAFD,MAEO;AACL2F,QAAAA,UAAU,GAAG3F,KAAb;AACD;;AAEDwF,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBsD,UAAjB,EAA6BhD,MAA7B,EAAqCzE,MAArC,EAA6C6E,OAA7C;;AACA,UAAI4C,UAAJ,EAAgB;AACdH,QAAAA,KAAK,CAACf,KAAN,CAAYpC,IAAZ,EAAkBsD,UAAU,CAAC3B,OAAX,EAAlB,EAAwCrB,MAAxC,EAAgDzE,MAAhD,EAAwD6E,OAAxD;AACD;AACF;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;AC5BD,SAAS4E,UAAT,CAAkBT,IAAlB,EAAwBrC,KAAxB,EAA+BO,QAA/B,EAAyCoC,MAAzC,EAAiDI,OAAjD,EAA0D;AACxD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMD,IAAI,GAAGiC,KAAK,CAACC,OAAN,CAAcH,KAAd,IAAuB,OAAvB,GAAiC,OAAOA,KAArD;AACAwF,EAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C,EAAqD9E,IAArD;AACAsC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACJD,SAASD,MAAT,CAAcoE,IAAd,EAAoBrC,KAApB,EAA2BO,QAA3B,EAAqCoC,MAArC,EAA6CI,OAA7C,EAAsD;AACpD,MAAMyB,QAAQ,GAAGnC,IAAI,CAACpE,IAAtB;AACA,MAAMC,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,EAAQwE,QAAR,CAAZ,IAAiC,CAACnC,IAAI,CAACS,QAA3C,EAAqD;AACnD,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C,EAAqDyB,QAArD;;AACA,QAAI,CAACzE,YAAY,CAACC,KAAD,EAAQwE,QAAR,CAAjB,EAAoC;AAClCgB,MAAAA,KAAK,CAACvH,IAAN,CAAWoE,IAAX,EAAiBrC,KAAjB,EAAwB2C,MAAxB,EAAgCzE,MAAhC,EAAwC6E,OAAxC;AACD;AACF;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACfD;;;;;;;;;;;AAUA,SAAS2H,GAAT,CAAaxD,IAAb,EAAmBrC,KAAnB,EAA0BO,QAA1B,EAAoCoC,MAApC,EAA4CI,OAA5C,EAAqD;AACnD,MAAM7E,MAAM,GAAG,EAAf;AACA,MAAMqH,QAAQ,GACZlD,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkBH,MAAM,CAACE,cAAP,CAAsBR,IAAI,CAACzD,KAA3B,CADtC;;AAEA,MAAI2G,QAAJ,EAAc;AACZ,QAAIxF,YAAY,CAACC,KAAD,CAAZ,IAAuB,CAACqC,IAAI,CAACS,QAAjC,EAA2C;AACzC,aAAOvC,QAAQ,EAAf;AACD;;AACDiF,IAAAA,KAAK,CAAC1C,QAAN,CAAeT,IAAf,EAAqBrC,KAArB,EAA4B2C,MAA5B,EAAoCzE,MAApC,EAA4C6E,OAA5C;AACD;;AACDxC,EAAAA,QAAQ,CAACrC,MAAD,CAAR;AACD;;ACRD,iBAAe;AACboH,EAAAA,MAAM,EAANA,MADa;AAEbjB,EAAAA,MAAM,EAANA,MAFa;AAGbV,EAAAA,MAAM,EAANA,MAHa;AAIb,aAAA8B,QAJa;AAKb3B,EAAAA,MAAM,EAANA,MALa;AAMbJ,EAAAA,OAAO,EAAPA,OANa;AAOb,WAAAoC,OAPa;AAQbjC,EAAAA,KAAK,EAALA,KARa;AASbO,EAAAA,MAAM,EAANA,MATa;AAUb,UAAM2B,YAVO;AAWb3C,EAAAA,OAAO,EAAPA,SAXa;AAYbW,EAAAA,IAAI,EAAJA,IAZa;AAabT,EAAAA,GAAG,EAAErF,MAbQ;AAcbuF,EAAAA,GAAG,EAAEvF,MAdQ;AAeboF,EAAAA,KAAK,EAAEpF,MAfM;AAgBb6E,EAAAA,QAAQ,EAARA,UAhBa;AAiBb+C,EAAAA,GAAG,EAAHA;AAjBa,CAAf;;AChBO,SAASG,WAAT,GAAuB;AAC5B,SAAO;AACL,eAAS,8BADJ;AAELlD,IAAAA,QAAQ,EAAE,gBAFL;AAGL,YAAM,sBAHD;AAILI,IAAAA,UAAU,EAAE,oBAJP;AAKLa,IAAAA,IAAI,EAAE;AACJjF,MAAAA,MAAM,EAAE,qCADJ;AAEJmH,MAAAA,KAAK,EAAE,6CAFH;AAGJC,MAAAA,OAAO,EAAE;AAHL,KALD;AAULzC,IAAAA,KAAK,EAAE;AACL6B,MAAAA,MAAM,EAAE,gBADH;AAELjB,MAAAA,MAAM,EAAE,2BAFH;AAGLR,MAAAA,KAAK,EAAE,iBAHF;AAILO,MAAAA,MAAM,EAAE,iBAJH;AAKLT,MAAAA,MAAM,EAAE,gBALH;AAMLI,MAAAA,IAAI,EAAE,gBAND;AAOL,iBAAS,gBAPJ;AAQLL,MAAAA,OAAO,EAAE,iBARJ;AASL,eAAO,gBATF;AAULI,MAAAA,MAAM,EAAE,sBAVH;AAWLT,MAAAA,KAAK,EAAE,sBAXF;AAYLC,MAAAA,GAAG,EAAE,sBAZA;AAaLE,MAAAA,GAAG,EAAE;AAbA,KAVF;AAyBL8B,IAAAA,MAAM,EAAE;AACNpG,MAAAA,GAAG,EAAE,kCADC;AAENwF,MAAAA,GAAG,EAAE,mCAFC;AAGNC,MAAAA,GAAG,EAAE,wCAHC;AAINF,MAAAA,KAAK,EAAE;AAJD,KAzBH;AA+BLd,IAAAA,MAAM,EAAE;AACNzE,MAAAA,GAAG,EAAE,kBADC;AAENwF,MAAAA,GAAG,EAAE,2BAFC;AAGNC,MAAAA,GAAG,EAAE,8BAHC;AAINF,MAAAA,KAAK,EAAE;AAJD,KA/BH;AAqCLZ,IAAAA,KAAK,EAAE;AACL3E,MAAAA,GAAG,EAAE,iCADA;AAELwF,MAAAA,GAAG,EAAE,qCAFA;AAGLC,MAAAA,GAAG,EAAE,wCAHA;AAILF,MAAAA,KAAK,EAAE;AAJF,KArCF;AA2CLrB,IAAAA,OAAO,EAAE;AACP+B,MAAAA,QAAQ,EAAE;AADH,KA3CJ;AA8CLgB,IAAAA,KA9CK,mBA8CG;AACN,UAAMC,MAAM,GAAG1G,IAAI,CAACuG,KAAL,CAAWvG,IAAI,CAACC,SAAL,CAAe,IAAf,CAAX,CAAf;AACAyG,MAAAA,MAAM,CAACD,KAAP,GAAe,KAAKA,KAApB;AACA,aAAOC,MAAP;AACD;AAlDI,GAAP;AAoDD;AAED,AAAO,IAAMnD,QAAQ,GAAG+C,WAAW,EAA5B;;AC5CP;;;;;;;AAMA,SAASK,MAAT,CAAgBC,UAAhB,EAA4B;AAC1B,OAAKd,KAAL,GAAa,IAAb;AACA,OAAKe,SAAL,GAAiBC,QAAjB;AACA,OAAKC,MAAL,CAAYH,UAAZ;AACD;;AAEDD,MAAM,CAACK,SAAP,GAAmB;AACjBzD,EAAAA,QADiB,oBACRA,SADQ,EACE;AACjB,QAAIA,SAAJ,EAAc;AACZ,WAAKsD,SAAL,GAAiB9D,SAAS,CAACuD,WAAW,EAAZ,EAAgB/C,SAAhB,CAA1B;AACD;;AACD,WAAO,KAAKsD,SAAZ;AACD,GANgB;AAOjBE,EAAAA,MAPiB,kBAOVjB,KAPU,EAOH;AACZ,QAAI,CAACA,KAAL,EAAY;AACV,YAAM,IAAImB,KAAJ,CAAU,yCAAV,CAAN;AACD;;AACD,QAAI,OAAOnB,KAAP,KAAiB,QAAjB,IAA6BtF,KAAK,CAACC,OAAN,CAAcqF,KAAd,CAAjC,EAAuD;AACrD,YAAM,IAAImB,KAAJ,CAAU,yBAAV,CAAN;AACD;;AACD,SAAKnB,KAAL,GAAa,EAAb;AACA,QAAIoB,CAAJ;AACA,QAAIC,IAAJ;;AACA,SAAKD,CAAL,IAAUpB,KAAV,EAAiB;AACf,UAAIA,KAAK,CAAC3C,cAAN,CAAqB+D,CAArB,CAAJ,EAA6B;AAC3BC,QAAAA,IAAI,GAAGrB,KAAK,CAACoB,CAAD,CAAZ;AACA,aAAKpB,KAAL,CAAWoB,CAAX,IAAgB1G,KAAK,CAACC,OAAN,CAAc0G,IAAd,IAAsBA,IAAtB,GAA6B,CAACA,IAAD,CAA7C;AACD;AACF;AACF,GAvBgB;AAwBjBtB,EAAAA,QAxBiB,oBAwBRuB,OAxBQ,EAwBCC,CAxBD,EAwBSC,EAxBT,EAwBwB;AAAA;;AAAA,QAAvBD,CAAuB;AAAvBA,MAAAA,CAAuB,GAAnB,EAAmB;AAAA;;AAAA,QAAfC,EAAe;AAAfA,MAAAA,EAAe,GAAV,cAAM,EAAI;AAAA;;AACvC,QAAIrE,MAAM,GAAGmE,OAAb;AACA,QAAI/D,OAAO,GAAGgE,CAAd;AACA,QAAIxG,QAAQ,GAAGyG,EAAf;;AACA,QAAI,OAAOjE,OAAP,KAAmB,UAAvB,EAAmC;AACjCxC,MAAAA,QAAQ,GAAGwC,OAAX;AACAA,MAAAA,OAAO,GAAG,EAAV;AACD;;AACD,QAAI,CAAC,KAAKyC,KAAN,IAAepE,MAAM,CAACC,IAAP,CAAY,KAAKmE,KAAjB,EAAwBhH,MAAxB,KAAmC,CAAtD,EAAyD;AACvD,UAAI+B,QAAJ,EAAc;AACZA,QAAAA,QAAQ;AACT;;AACD,aAAOoB,OAAO,CAACC,OAAR,EAAP;AACD;;AAED,aAASqF,QAAT,CAAkBzG,OAAlB,EAA2B;AACzB,UAAIxB,CAAJ;AACA,UAAId,MAAM,GAAG,EAAb;AACA,UAAIO,MAAM,GAAG,EAAb;;AAEA,eAASyI,GAAT,CAAa5I,CAAb,EAAgB;AACd,YAAI4B,KAAK,CAACC,OAAN,CAAc7B,CAAd,CAAJ,EAAsB;AAAA;;AACpBJ,UAAAA,MAAM,GAAG,WAAAA,MAAM,EAACiJ,MAAP,gBAAiB7I,CAAjB,CAAT;AACD,SAFD,MAEO;AACLJ,UAAAA,MAAM,CAACW,IAAP,CAAYP,CAAZ;AACD;AACF;;AAED,WAAKU,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwB,OAAO,CAAChC,MAAxB,EAAgCQ,CAAC,EAAjC,EAAqC;AACnCkI,QAAAA,GAAG,CAAC1G,OAAO,CAACxB,CAAD,CAAR,CAAH;AACD;;AACD,UAAI,CAACd,MAAM,CAACM,MAAZ,EAAoB;AAClBN,QAAAA,MAAM,GAAG,IAAT;AACAO,QAAAA,MAAM,GAAG,IAAT;AACD,OAHD,MAGO;AACLA,QAAAA,MAAM,GAAGF,kBAAkB,CAACL,MAAD,CAA3B;AACD;;AACDqC,MAAAA,QAAQ,CAACrC,MAAD,EAASO,MAAT,CAAR;AACD;;AAED,QAAIsE,OAAO,CAACE,QAAZ,EAAsB;AACpB,UAAIA,UAAQ,GAAG,KAAKA,QAAL,EAAf;;AACA,UAAIA,UAAQ,KAAKuD,QAAjB,EAAkC;AAChCvD,QAAAA,UAAQ,GAAG+C,WAAW,EAAtB;AACD;;AACDvD,MAAAA,SAAS,CAACQ,UAAD,EAAWF,OAAO,CAACE,QAAnB,CAAT;AACAF,MAAAA,OAAO,CAACE,QAAR,GAAmBA,UAAnB;AACD,KAPD,MAOO;AACLF,MAAAA,OAAO,CAACE,QAAR,GAAmB,KAAKA,QAAL,EAAnB;AACD;;AACD,QAAI5C,GAAJ;AACA,QAAIL,KAAJ;AACA,QAAMoH,MAAM,GAAG,EAAf;AACA,QAAM/F,IAAI,GAAG0B,OAAO,CAAC1B,IAAR,IAAgBD,MAAM,CAACC,IAAP,CAAY,KAAKmE,KAAjB,CAA7B;AACAnE,IAAAA,IAAI,CAAC3C,OAAL,CAAa,UAAAkI,CAAC,EAAI;AAChBvG,MAAAA,GAAG,GAAG,KAAI,CAACmF,KAAL,CAAWoB,CAAX,CAAN;AACA5G,MAAAA,KAAK,GAAG2C,MAAM,CAACiE,CAAD,CAAd;AACAvG,MAAAA,GAAG,CAAC3B,OAAJ,CAAY,UAAA2I,CAAC,EAAI;AACf,YAAIhF,IAAI,GAAGgF,CAAX;;AACA,YAAI,OAAOhF,IAAI,CAACiF,SAAZ,KAA0B,UAA9B,EAA0C;AACxC,cAAI3E,MAAM,KAAKmE,OAAf,EAAwB;AACtBnE,YAAAA,MAAM,gBAAQA,MAAR,CAAN;AACD;;AACD3C,UAAAA,KAAK,GAAG2C,MAAM,CAACiE,CAAD,CAAN,GAAYvE,IAAI,CAACiF,SAAL,CAAetH,KAAf,CAApB;AACD;;AACD,YAAI,OAAOqC,IAAP,KAAgB,UAApB,EAAgC;AAC9BA,UAAAA,IAAI,GAAG;AACLkF,YAAAA,SAAS,EAAElF;AADN,WAAP;AAGD,SAJD,MAIO;AACLA,UAAAA,IAAI,gBAAQA,IAAR,CAAJ;AACD;;AACDA,QAAAA,IAAI,CAACkF,SAAL,GAAiB,KAAI,CAACC,mBAAL,CAAyBnF,IAAzB,CAAjB;AACAA,QAAAA,IAAI,CAACzD,KAAL,GAAagI,CAAb;AACAvE,QAAAA,IAAI,CAACG,SAAL,GAAiBH,IAAI,CAACG,SAAL,IAAkBoE,CAAnC;AACAvE,QAAAA,IAAI,CAACpE,IAAL,GAAY,KAAI,CAACwJ,OAAL,CAAapF,IAAb,CAAZ;;AACA,YAAI,CAACA,IAAI,CAACkF,SAAV,EAAqB;AACnB;AACD;;AACDH,QAAAA,MAAM,CAACR,CAAD,CAAN,GAAYQ,MAAM,CAACR,CAAD,CAAN,IAAa,EAAzB;AACAQ,QAAAA,MAAM,CAACR,CAAD,CAAN,CAAU/H,IAAV,CAAe;AACbwD,UAAAA,IAAI,EAAJA,IADa;AAEbrC,UAAAA,KAAK,EAALA,KAFa;AAGb2C,UAAAA,MAAM,EAANA,MAHa;AAIb/D,UAAAA,KAAK,EAAEgI;AAJM,SAAf;AAMD,OA7BD;AA8BD,KAjCD;AAkCA,QAAMc,WAAW,GAAG,EAApB;AACA,WAAOnG,QAAQ,CACb6F,MADa,EAEbrE,OAFa,EAGb,UAAC4E,IAAD,EAAOC,IAAP,EAAgB;AACd,UAAMvF,IAAI,GAAGsF,IAAI,CAACtF,IAAlB;AACA,UAAIwF,IAAI,GACN,CAACxF,IAAI,CAACpE,IAAL,KAAc,QAAd,IAA0BoE,IAAI,CAACpE,IAAL,KAAc,OAAzC,MACC,OAAOoE,IAAI,CAAC5D,MAAZ,KAAuB,QAAvB,IACC,OAAO4D,IAAI,CAACyF,YAAZ,KAA6B,QAF/B,CADF;AAIAD,MAAAA,IAAI,GAAGA,IAAI,KAAKxF,IAAI,CAACS,QAAL,IAAkB,CAACT,IAAI,CAACS,QAAN,IAAkB6E,IAAI,CAAC3H,KAA9C,CAAX;AACAqC,MAAAA,IAAI,CAACzD,KAAL,GAAa+I,IAAI,CAAC/I,KAAlB;;AAEA,eAASmJ,YAAT,CAAsB7F,GAAtB,EAA2B8F,MAA3B,EAAmC;AACjC,4BACKA,MADL;AAEExF,UAAAA,SAAS,EAAKH,IAAI,CAACG,SAAV,SAAuBN;AAFlC;AAID;;AAED,eAAS+F,EAAT,CAAY3J,CAAZ,EAAoB;AAAA,YAARA,CAAQ;AAARA,UAAAA,CAAQ,GAAJ,EAAI;AAAA;;AAClB,YAAIJ,MAAM,GAAGI,CAAb;;AACA,YAAI,CAAC4B,KAAK,CAACC,OAAN,CAAcjC,MAAd,CAAL,EAA4B;AAC1BA,UAAAA,MAAM,GAAG,CAACA,MAAD,CAAT;AACD;;AACD,YAAI,CAAC6E,OAAO,CAACmF,eAAT,IAA4BhK,MAAM,CAACM,MAAvC,EAA+C;AAC7C6H,UAAAA,MAAM,CAAC1I,OAAP,CAAe,kBAAf,EAAmCO,MAAnC;AACD;;AACD,YAAIA,MAAM,CAACM,MAAP,IAAiB6D,IAAI,CAACE,OAA1B,EAAmC;AACjCrE,UAAAA,MAAM,GAAG,GAAGiJ,MAAH,CAAU9E,IAAI,CAACE,OAAf,CAAT;AACD;;AAEDrE,QAAAA,MAAM,GAAGA,MAAM,CAACiK,GAAP,CAAW/F,eAAe,CAACC,IAAD,CAA1B,CAAT;;AAEA,YAAIU,OAAO,CAACtB,KAAR,IAAiBvD,MAAM,CAACM,MAA5B,EAAoC;AAClCkJ,UAAAA,WAAW,CAACrF,IAAI,CAACzD,KAAN,CAAX,GAA0B,CAA1B;AACA,iBAAOgJ,IAAI,CAAC1J,MAAD,CAAX;AACD;;AACD,YAAI,CAAC2J,IAAL,EAAW;AACTD,UAAAA,IAAI,CAAC1J,MAAD,CAAJ;AACD,SAFD,MAEO;AACL;AACA;AACA;AACA,cAAImE,IAAI,CAACS,QAAL,IAAiB,CAAC6E,IAAI,CAAC3H,KAA3B,EAAkC;AAChC,gBAAIqC,IAAI,CAACE,OAAT,EAAkB;AAChBrE,cAAAA,MAAM,GAAG,GAAGiJ,MAAH,CAAU9E,IAAI,CAACE,OAAf,EAAwB4F,GAAxB,CAA4B/F,eAAe,CAACC,IAAD,CAA3C,CAAT;AACD,aAFD,MAEO,IAAIU,OAAO,CAACpE,KAAZ,EAAmB;AACxBT,cAAAA,MAAM,GAAG,CACP6E,OAAO,CAACpE,KAAR,CACE0D,IADF,EAEEvD,MAAM,CAACiE,OAAO,CAACE,QAAR,CAAiBH,QAAlB,EAA4BT,IAAI,CAACzD,KAAjC,CAFR,CADO,CAAT;AAMD,aAPM,MAOA;AACLV,cAAAA,MAAM,GAAG,EAAT;AACD;;AACD,mBAAO0J,IAAI,CAAC1J,MAAD,CAAX;AACD;;AAED,cAAIkK,YAAY,GAAG,EAAnB;;AACA,cAAI/F,IAAI,CAACyF,YAAT,EAAuB;AACrB,iBAAK,IAAMxG,CAAX,IAAgBqG,IAAI,CAAC3H,KAArB,EAA4B;AAC1B,kBAAI2H,IAAI,CAAC3H,KAAL,CAAW6C,cAAX,CAA0BvB,CAA1B,CAAJ,EAAkC;AAChC8G,gBAAAA,YAAY,CAAC9G,CAAD,CAAZ,GAAkBe,IAAI,CAACyF,YAAvB;AACD;AACF;AACF;;AACDM,UAAAA,YAAY,gBACPA,YADO,MAEPT,IAAI,CAACtF,IAAL,CAAU5D,MAFH,CAAZ;;AAIA,eAAK,IAAMQ,CAAX,IAAgBmJ,YAAhB,EAA8B;AAC5B,gBAAIA,YAAY,CAACvF,cAAb,CAA4B5D,CAA5B,CAAJ,EAAoC;AAClC,kBAAMoJ,WAAW,GAAGnI,KAAK,CAACC,OAAN,CAAciI,YAAY,CAACnJ,CAAD,CAA1B,IAChBmJ,YAAY,CAACnJ,CAAD,CADI,GAEhB,CAACmJ,YAAY,CAACnJ,CAAD,CAAb,CAFJ;AAGAmJ,cAAAA,YAAY,CAACnJ,CAAD,CAAZ,GAAkBoJ,WAAW,CAACF,GAAZ,CAAgBJ,YAAY,CAACO,IAAb,CAAkB,IAAlB,EAAwBrJ,CAAxB,CAAhB,CAAlB;AACD;AACF;;AACD,cAAM+I,MAAM,GAAG,IAAI3B,MAAJ,CAAW+B,YAAX,CAAf;AACAJ,UAAAA,MAAM,CAAC/E,QAAP,CAAgBF,OAAO,CAACE,QAAxB;;AACA,cAAI0E,IAAI,CAACtF,IAAL,CAAUU,OAAd,EAAuB;AACrB4E,YAAAA,IAAI,CAACtF,IAAL,CAAUU,OAAV,CAAkBE,QAAlB,GAA6BF,OAAO,CAACE,QAArC;AACA0E,YAAAA,IAAI,CAACtF,IAAL,CAAUU,OAAV,CAAkBpE,KAAlB,GAA0BoE,OAAO,CAACpE,KAAlC;AACD;;AACDqJ,UAAAA,MAAM,CAACzC,QAAP,CAAgBoC,IAAI,CAAC3H,KAArB,EAA4B2H,IAAI,CAACtF,IAAL,CAAUU,OAAV,IAAqBA,OAAjD,EAA0D,UAAAwF,IAAI,EAAI;AAChE,gBAAMC,WAAW,GAAG,EAApB;;AACA,gBAAItK,MAAM,IAAIA,MAAM,CAACM,MAArB,EAA6B;AAC3BgK,cAAAA,WAAW,CAAC3J,IAAZ,OAAA2J,WAAW,EAAStK,MAAT,CAAX;AACD;;AACD,gBAAIqK,IAAI,IAAIA,IAAI,CAAC/J,MAAjB,EAAyB;AACvBgK,cAAAA,WAAW,CAAC3J,IAAZ,OAAA2J,WAAW,EAASD,IAAT,CAAX;AACD;;AACDX,YAAAA,IAAI,CAACY,WAAW,CAAChK,MAAZ,GAAqBgK,WAArB,GAAmC,IAApC,CAAJ;AACD,WATD;AAUD;AACF;;AAED,UAAIC,GAAJ;;AACA,UAAIpG,IAAI,CAACqG,cAAT,EAAyB;AACvBD,QAAAA,GAAG,GAAGpG,IAAI,CAACqG,cAAL,CAAoBrG,IAApB,EAA0BsF,IAAI,CAAC3H,KAA/B,EAAsCiI,EAAtC,EAA0CN,IAAI,CAAChF,MAA/C,EAAuDI,OAAvD,CAAN;AACD,OAFD,MAEO,IAAIV,IAAI,CAACkF,SAAT,EAAoB;AACzBkB,QAAAA,GAAG,GAAGpG,IAAI,CAACkF,SAAL,CAAelF,IAAf,EAAqBsF,IAAI,CAAC3H,KAA1B,EAAiCiI,EAAjC,EAAqCN,IAAI,CAAChF,MAA1C,EAAkDI,OAAlD,CAAN;;AACA,YAAI0F,GAAG,KAAK,IAAZ,EAAkB;AAChBR,UAAAA,EAAE;AACH,SAFD,MAEO,IAAIQ,GAAG,KAAK,KAAZ,EAAmB;AACxBR,UAAAA,EAAE,CAAC5F,IAAI,CAACE,OAAL,IAAmBF,IAAI,CAACzD,KAAxB,WAAD,CAAF;AACD,SAFM,MAEA,IAAI6J,GAAG,YAAYvI,KAAnB,EAA0B;AAC/B+H,UAAAA,EAAE,CAACQ,GAAD,CAAF;AACD,SAFM,MAEA,IAAIA,GAAG,YAAY9B,KAAnB,EAA0B;AAC/BsB,UAAAA,EAAE,CAACQ,GAAG,CAAClG,OAAL,CAAF;AACD;AACF;;AACD,UAAIkG,GAAG,IAAIA,GAAG,CAACE,IAAf,EAAqB;AACnBF,QAAAA,GAAG,CAACE,IAAJ,CAAS;AAAA,iBAAMV,EAAE,EAAR;AAAA,SAAT,EAAqB,UAAA3J,CAAC;AAAA,iBAAI2J,EAAE,CAAC3J,CAAD,CAAN;AAAA,SAAtB;AACD;AACF,KApHY,EAqHb,UAAAkC,OAAO,EAAI;AACTyG,MAAAA,QAAQ,CAACzG,OAAD,CAAR;AACD,KAvHY,CAAf;AAyHD,GA1OgB;AA2OjBiH,EAAAA,OA3OiB,mBA2OTpF,IA3OS,EA2OH;AACZ,QAAIA,IAAI,CAACpE,IAAL,KAAcgC,SAAd,IAA2BoC,IAAI,CAACe,OAAL,YAAwBG,MAAvD,EAA+D;AAC7DlB,MAAAA,IAAI,CAACpE,IAAL,GAAY,SAAZ;AACD;;AACD,QACE,OAAOoE,IAAI,CAACkF,SAAZ,KAA0B,UAA1B,IACClF,IAAI,CAACpE,IAAL,IAAa,CAAC2K,UAAU,CAAC/F,cAAX,CAA0BR,IAAI,CAACpE,IAA/B,CAFjB,EAGE;AACA,YAAM,IAAI0I,KAAJ,CAAU7H,MAAM,CAAC,sBAAD,EAAyBuD,IAAI,CAACpE,IAA9B,CAAhB,CAAN;AACD;;AACD,WAAOoE,IAAI,CAACpE,IAAL,IAAa,QAApB;AACD,GAtPgB;AAuPjBuJ,EAAAA,mBAvPiB,+BAuPGnF,IAvPH,EAuPS;AACxB,QAAI,OAAOA,IAAI,CAACkF,SAAZ,KAA0B,UAA9B,EAA0C;AACxC,aAAOlF,IAAI,CAACkF,SAAZ;AACD;;AACD,QAAMlG,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYgB,IAAZ,CAAb;AACA,QAAMwG,YAAY,GAAGxH,IAAI,CAACc,OAAL,CAAa,SAAb,CAArB;;AACA,QAAI0G,YAAY,KAAK,CAAC,CAAtB,EAAyB;AACvBxH,MAAAA,IAAI,CAACyH,MAAL,CAAYD,YAAZ,EAA0B,CAA1B;AACD;;AACD,QAAIxH,IAAI,CAAC7C,MAAL,KAAgB,CAAhB,IAAqB6C,IAAI,CAAC,CAAD,CAAJ,KAAY,UAArC,EAAiD;AAC/C,aAAOuH,UAAU,CAAC9F,QAAlB;AACD;;AACD,WAAO8F,UAAU,CAAC,KAAKnB,OAAL,CAAapF,IAAb,CAAD,CAAV,IAAkC,KAAzC;AACD;AApQgB,CAAnB;;AAuQAgE,MAAM,CAAC0C,QAAP,GAAkB,SAASA,QAAT,CAAkB9K,IAAlB,EAAwBsJ,SAAxB,EAAmC;AACnD,MAAI,OAAOA,SAAP,KAAqB,UAAzB,EAAqC;AACnC,UAAM,IAAIZ,KAAJ,CACJ,kEADI,CAAN;AAGD;;AACDiC,EAAAA,UAAU,CAAC3K,IAAD,CAAV,GAAmBsJ,SAAnB;AACD,CAPD;;AASAlB,MAAM,CAAC1I,OAAP,GAAiBA,OAAjB;AAEA0I,MAAM,CAACpD,QAAP,GAAkBuD,QAAlB;;;;"}
\ No newline at end of file
diff --git a/node_modules/async-validator/package.json b/node_modules/async-validator/package.json
new file mode 100644
index 0000000..80a4741
--- /dev/null
+++ b/node_modules/async-validator/package.json
@@ -0,0 +1,71 @@
+{
+ "_from": "async-validator",
+ "_id": "async-validator@3.2.4",
+ "_inBundle": false,
+ "_integrity": "sha1-Tnc6HQ10EBa0VbeZW0aaR8zg2+A=",
+ "_location": "/async-validator",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "async-validator",
+ "name": "async-validator",
+ "escapedName": "async-validator",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.2.4.tgz",
+ "_shasum": "4e773a1d0d741016b455b7995b469a47cce0dbe0",
+ "_spec": "async-validator",
+ "_where": "/Users/piao/Documents/Project/yshopmall_uni",
+ "bugs": {
+ "url": "http://github.com/yiminghe/async-validator/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {},
+ "deprecated": false,
+ "description": "validate form asynchronous",
+ "devDependencies": {
+ "@babel/preset-env": "^7.8.7",
+ "@pika/pack": "^0.5.0",
+ "@pika/plugin-build-types": "^0.6.0",
+ "@pika/plugin-standard-pkg": "^0.6.0",
+ "@pika/types": "^0.6.0",
+ "babel-jest": "^24.8.0",
+ "coveralls": "^2.13.1",
+ "jest": "^24.8.0",
+ "lint-staged": "^7.2.0",
+ "np": "^5.0.3",
+ "pika-plugin-build-web-babel": "^0.8.0",
+ "pika-plugin-clean-dist-src": "^0.1.1",
+ "pre-commit": "^1.2.2",
+ "prettier": "^1.11.1"
+ },
+ "files": [
+ "dist-*/",
+ "bin/"
+ ],
+ "homepage": "http://github.com/yiminghe/async-validator",
+ "keywords": [
+ "validator",
+ "validate",
+ "async"
+ ],
+ "license": "MIT",
+ "main": "dist-node/index.js",
+ "module": "dist-web/index.js",
+ "name": "async-validator",
+ "pika": true,
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/yiminghe/async-validator.git"
+ },
+ "sideEffects": false,
+ "types": "dist-types/index.d.ts",
+ "version": "3.2.4"
+}
diff --git a/node_modules/dayjs/.editorconfig b/node_modules/dayjs/.editorconfig
new file mode 100644
index 0000000..14c1d8c
--- /dev/null
+++ b/node_modules/dayjs/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
diff --git a/node_modules/dayjs/CHANGELOG.md b/node_modules/dayjs/CHANGELOG.md
new file mode 100644
index 0000000..1829012
--- /dev/null
+++ b/node_modules/dayjs/CHANGELOG.md
@@ -0,0 +1,416 @@
+## [1.8.22](https://github.com/iamkun/dayjs/compare/v1.8.21...v1.8.22) (2020-03-08)
+
+
+### Bug Fixes
+
+* Add IsoWeek plugin ([#811](https://github.com/iamkun/dayjs/issues/811)) ([28a2207](https://github.com/iamkun/dayjs/commit/28a2207ef9849afbac15dd29267b2e7a09cd3c16))
+* Fix unsupported locale fallback to previous one ([#819](https://github.com/iamkun/dayjs/issues/819)) ([4868715](https://github.com/iamkun/dayjs/commit/48687152cf5bee6a4c1b8ceea4bda8b9bab9be10))
+
+## [1.8.21](https://github.com/iamkun/dayjs/compare/v1.8.20...v1.8.21) (2020-02-26)
+
+
+### Bug Fixes
+
+* Set + Get accept 'D' as the short version of 'date' ([#795](https://github.com/iamkun/dayjs/issues/795)) ([523c038](https://github.com/iamkun/dayjs/commit/523c03880fa8bbad83214494ad02cd606cdb8b30))
+* Update DayOfYear plugin type ([#799](https://github.com/iamkun/dayjs/issues/799)) ([5809652](https://github.com/iamkun/dayjs/commit/5809652e40245b7759827d9bf317abdcfa75a330))
+* Update fi (Finnish) locale relativeTime ([#797](https://github.com/iamkun/dayjs/issues/797)) ([4a470fb](https://github.com/iamkun/dayjs/commit/4a470fbd6fef9e051727d0f26d53cc050b85935d))
+
+## [1.8.20](https://github.com/iamkun/dayjs/compare/v1.8.19...v1.8.20) (2020-02-04)
+
+
+### Bug Fixes
+
+* Add Bislama Locale (bi) ([#780](https://github.com/iamkun/dayjs/issues/780)) ([9ac6ab4](https://github.com/iamkun/dayjs/commit/9ac6ab481bc883dd4ecc02caab12c8b2fc218a42))
+* Fix weekOfYear plugin to support yearStart locale for better week number result ([#769](https://github.com/iamkun/dayjs/issues/769)) ([f00db36](https://github.com/iamkun/dayjs/commit/f00db36e70bc7beaca1abadeb30a9b1fbb3261ee))
+* Update et (Estonian) locale relativeTime ([#790](https://github.com/iamkun/dayjs/issues/790)) ([d8e0f45](https://github.com/iamkun/dayjs/commit/d8e0f45f6cd2d5e5704b9797929227454c92d1a5))
+* Update LocaleData plugin to support dayjs.localeData().weekdays() API ([287fed6](https://github.com/iamkun/dayjs/commit/287fed6db9eb4fd979b4861aca4dacbd32422533)), closes [#779](https://github.com/iamkun/dayjs/issues/779)
+* Update LocaleData plugin to support dayjs.months dayjs.weekdays API ([144c2ae](https://github.com/iamkun/dayjs/commit/144c2ae6e15fbf89e3acd7c8cb9e237c5f6e1348)), closes [#779](https://github.com/iamkun/dayjs/issues/779)
+* Update pl locale fusional config ([d372475](https://github.com/iamkun/dayjs/commit/d3724758bb27d5b17587b995ba14e7e80dcd1151))
+
+## [1.8.19](https://github.com/iamkun/dayjs/compare/v1.8.18...v1.8.19) (2020-01-06)
+
+
+### Bug Fixes
+
+* Add UpdateLocale plugin to update a locale's properties ([#766](https://github.com/iamkun/dayjs/issues/766)) ([82ce2ba](https://github.com/iamkun/dayjs/commit/82ce2ba8d7e402e40f6d005d400eb5356a0b0633))
+* Fix CustomParseFormat Plugin 'YYYY-MM' use first day of the month ([ba709ec](https://github.com/iamkun/dayjs/commit/ba709eca86a71ae648bc68bf67d9abdc229198d4)), closes [#761](https://github.com/iamkun/dayjs/issues/761)
+* Fix CustomParseFormat Plugin to set correct locale ([66ce23f](https://github.com/iamkun/dayjs/commit/66ce23f2e18c5506e8f1a7ef20d3483a4df80087))
+* Fix WeekOfYear Plugin wrong calender week number bug ([79b86db](https://github.com/iamkun/dayjs/commit/79b86dbbf3cfd3f1e2165b3d479a7061ad1b6925)), closes [#760](https://github.com/iamkun/dayjs/issues/760)
+* Update RelativeTime plugin to support function to make additional processing ([#767](https://github.com/iamkun/dayjs/issues/767)) ([4bd9250](https://github.com/iamkun/dayjs/commit/4bd9250fbe7131e2fddfb5fa1b3350e8c2262ca9))
+* Update ru, uk, cs locale to support relativeTime with plural ([3f080f7](https://github.com/iamkun/dayjs/commit/3f080f7d6bfdc4018cbb7c4d0112ff1ead4ef6b8))
+
+## [1.8.18](https://github.com/iamkun/dayjs/compare/v1.8.17...v1.8.18) (2019-12-18)
+
+
+### Bug Fixes
+
+* Add missing locale type definition ([#716](https://github.com/iamkun/dayjs/issues/716)) ([cde5d0b](https://github.com/iamkun/dayjs/commit/cde5d0b91be7b2f5f3098de4aa0b9a4f0f28ea5c))
+* Fix .locale() handel unsupported locale ([78ec173](https://github.com/iamkun/dayjs/commit/78ec173fcecc1299516ab7b44f4554d431b4b2fd))
+* Update Italian locale (it) ([#727](https://github.com/iamkun/dayjs/issues/727)) ([5b53e98](https://github.com/iamkun/dayjs/commit/5b53e98c0a3ba0eb9573a9c77caeb907439be9e7))
+* Update locale (fa) ([#733](https://github.com/iamkun/dayjs/issues/733)) ([9ad2e47](https://github.com/iamkun/dayjs/commit/9ad2e47e0569b23991bb0d5578f49c792c12df08))
+* Update locale (zh-cn) ([#706](https://github.com/iamkun/dayjs/issues/706)) ([e31e544](https://github.com/iamkun/dayjs/commit/e31e54414fb90e1f54da13a117748ba37f52645d))
+* Update locale (zh-cn) meridiem ([#735](https://github.com/iamkun/dayjs/issues/735)) ([15d1b81](https://github.com/iamkun/dayjs/commit/15d1b813e7faf5a1f9d1ea6fc673fd27ac49d8b1))
+* Update LocaleData plugin to support dayjs().longDateFormat() ([#734](https://github.com/iamkun/dayjs/issues/734)) ([aa0f210](https://github.com/iamkun/dayjs/commit/aa0f210a1e3c4f6aba61c3b96f9eb445b43a33f0)), closes [#680](https://github.com/iamkun/dayjs/issues/680)
+* Update Mongolian (mn) locale relativeTime ([#753](https://github.com/iamkun/dayjs/issues/753)) ([6d51435](https://github.com/iamkun/dayjs/commit/6d51435092c0c94d8e50256d3f0f058cdd15febe))
+* Update Swedish locale (sv) fix ordinal error ([#745](https://github.com/iamkun/dayjs/issues/745)) ([49670d5](https://github.com/iamkun/dayjs/commit/49670d5ae31e4e21636cc5a8bfe35fef0f6d9e4a)), closes [#743](https://github.com/iamkun/dayjs/issues/743)
+
+## [1.8.17](https://github.com/iamkun/dayjs/compare/v1.8.16...v1.8.17) (2019-11-06)
+
+
+### Bug Fixes
+
+* Fix set utcOffset in utc mode ([d148115](https://github.com/iamkun/dayjs/commit/d148115dad8f1a5afc0a64e9b8163dfeba4616b6))
+* Update advancedFormat plugin to support w ww wo week tokens … ([#678](https://github.com/iamkun/dayjs/issues/678)) ([26cfa63](https://github.com/iamkun/dayjs/commit/26cfa63a524b803f7966dac5464f9cbf8f63387e)), closes [#676](https://github.com/iamkun/dayjs/issues/676)
+* Update ka locale weekdays ([f8ca3d4](https://github.com/iamkun/dayjs/commit/f8ca3d4ba1d3cbe41613d3909c0627935a51a0c4))
+* Update nb locale ([#679](https://github.com/iamkun/dayjs/issues/679)) ([1063b0e](https://github.com/iamkun/dayjs/commit/1063b0e1b5c19a1354d233cc0f21438e7073233a))
+* Update Polish locale (pl)([#713](https://github.com/iamkun/dayjs/issues/713)) ([30d2f02](https://github.com/iamkun/dayjs/commit/30d2f026b47188833a4f44fee4bab52467d4a718))
+* Update Ukrainian locale (uk) ([#710](https://github.com/iamkun/dayjs/issues/710)) ([360161c](https://github.com/iamkun/dayjs/commit/360161cac75f597fdd51d9d1ff138601282a1b4b))
+* UTC plugin set utcOffset value ([#668](https://github.com/iamkun/dayjs/issues/668)) ([8877883](https://github.com/iamkun/dayjs/commit/88778838e71dd309e79cd1a8094d5bea36ca3390))
+
+## [1.8.16](https://github.com/iamkun/dayjs/compare/v1.8.15...v1.8.16) (2019-08-27)
+
+
+### Bug Fixes
+
+* Fix relativeTime Plugin .FromNow() result error in UTC mode ([a385d5c](https://github.com/iamkun/dayjs/commit/a385d5c))
+* Handle locale in WeekOfYear plugin ([#658](https://github.com/iamkun/dayjs/issues/658)) ([0e45b0a](https://github.com/iamkun/dayjs/commit/0e45b0a))
+* LocaleData plugin returns all months and weekdays data when pas no argument ([#645](https://github.com/iamkun/dayjs/issues/645)) ([95e70b4](https://github.com/iamkun/dayjs/commit/95e70b4))
+* Return null in toJSON if not valid ([#633](https://github.com/iamkun/dayjs/issues/633)) ([19affc8](https://github.com/iamkun/dayjs/commit/19affc8))
+* Update Danish (da) locale ([#626](https://github.com/iamkun/dayjs/issues/626)) ([ac2ec77](https://github.com/iamkun/dayjs/commit/ac2ec77))
+* Update Korean locale meridiem ([#642](https://github.com/iamkun/dayjs/issues/642)) ([b457146](https://github.com/iamkun/dayjs/commit/b457146))
+* update Occitan locale Catalan locale ([#630](https://github.com/iamkun/dayjs/issues/630)) ([fef135e](https://github.com/iamkun/dayjs/commit/fef135e))
+* update pt-br locale ([#628](https://github.com/iamkun/dayjs/issues/628)) ([ccf596d](https://github.com/iamkun/dayjs/commit/ccf596d))
+* Update weekdaysShort to some locale files ([#643](https://github.com/iamkun/dayjs/issues/643)) ([cc1f15f](https://github.com/iamkun/dayjs/commit/cc1f15f))
+
+## [1.8.15](https://github.com/iamkun/dayjs/compare/v1.8.14...v1.8.15) (2019-07-08)
+
+
+### Bug Fixes
+
+* Fix dayjs.locale() returns current global locale ([#602](https://github.com/iamkun/dayjs/issues/602)) ([790cd1a](https://github.com/iamkun/dayjs/commit/790cd1a))
+* Fix incorrect Thai locale translation of July ([#607](https://github.com/iamkun/dayjs/issues/607)) ([43cbfd3](https://github.com/iamkun/dayjs/commit/43cbfd3))
+* Lowercase french locale months and weekdays ([#615](https://github.com/iamkun/dayjs/issues/615)) ([e5a257c](https://github.com/iamkun/dayjs/commit/e5a257c))
+* Type - Export Ls object to query all available locales ([#623](https://github.com/iamkun/dayjs/issues/623)) ([f6bfae0](https://github.com/iamkun/dayjs/commit/f6bfae0))
+* Update nb (Norsk Bokmål) locale ([#604](https://github.com/iamkun/dayjs/issues/604)) ([907f5c9](https://github.com/iamkun/dayjs/commit/907f5c9))
+* Update types of `.diff` API ([#617](https://github.com/iamkun/dayjs/issues/617)) ([f0f43d2](https://github.com/iamkun/dayjs/commit/f0f43d2))
+
+## [1.8.14](https://github.com/iamkun/dayjs/compare/v1.8.13...v1.8.14) (2019-05-07)
+
+
+### Bug Fixes
+
+* Fix `.format` API returns UTC offset when value is 0 bug ([b254964](https://github.com/iamkun/dayjs/commit/b254964))
+* Fix QuarterOfYear plugin bug ([#591](https://github.com/iamkun/dayjs/issues/591)) ([434f774](https://github.com/iamkun/dayjs/commit/434f774))
+* Fix UTC plugin add day DST bug ([#590](https://github.com/iamkun/dayjs/issues/590)) ([86cd839](https://github.com/iamkun/dayjs/commit/86cd839))
+
+## [1.8.13](https://github.com/iamkun/dayjs/compare/v1.8.12...v1.8.13) (2019-04-26)
+
+
+### Bug Fixes
+
+* Add missing relativeTime and formats for some locales ([#560](https://github.com/iamkun/dayjs/issues/560)) ([96b917e](https://github.com/iamkun/dayjs/commit/96b917e))
+* Add weekday (locale aware day of the week) plugin ([#569](https://github.com/iamkun/dayjs/issues/569)) ([9007cc5](https://github.com/iamkun/dayjs/commit/9007cc5)), closes [#559](https://github.com/iamkun/dayjs/issues/559)
+* Allow customizing "am" / "pm" strings with locale meridiem function ([#580](https://github.com/iamkun/dayjs/issues/580)) ([576e93e](https://github.com/iamkun/dayjs/commit/576e93e)), closes [#578](https://github.com/iamkun/dayjs/issues/578)
+* Fix `.add` day/week decimal rouding bug ([800f6c9](https://github.com/iamkun/dayjs/commit/800f6c9))
+* Fix `.diff` type definition error ([#565](https://github.com/iamkun/dayjs/issues/565)) ([c4921ae](https://github.com/iamkun/dayjs/commit/c4921ae)), closes [#561](https://github.com/iamkun/dayjs/issues/561)
+* Fix CustomParseFormat plugin bug ([#568](https://github.com/iamkun/dayjs/issues/568)) ([1f5a9db](https://github.com/iamkun/dayjs/commit/1f5a9db)), closes [#555](https://github.com/iamkun/dayjs/issues/555)
+* Fix relativeTime plugin Math.round bug ([40bea40](https://github.com/iamkun/dayjs/commit/40bea40))
+* skip square brackets in buddhistEra, advancedFormat plugins ([#556](https://github.com/iamkun/dayjs/issues/556)) ([9279718](https://github.com/iamkun/dayjs/commit/9279718)), closes [#554](https://github.com/iamkun/dayjs/issues/554)
+* Update Indonesian locale([#574](https://github.com/iamkun/dayjs/issues/574)) ([0aa7143](https://github.com/iamkun/dayjs/commit/0aa7143))
+* Update locale month to support both array and function ([#581](https://github.com/iamkun/dayjs/issues/581)) ([b6599d3](https://github.com/iamkun/dayjs/commit/b6599d3))
+* Update LocalizedFormat plugin lowercase formats logic ([#557](https://github.com/iamkun/dayjs/issues/557)) ([d409304](https://github.com/iamkun/dayjs/commit/d409304))
+
+## [1.8.12](https://github.com/iamkun/dayjs/compare/v1.8.11...v1.8.12) (2019-04-02)
+
+
+### Bug Fixes
+
+* Add .get API ([7318797](https://github.com/iamkun/dayjs/commit/7318797))
+* Add 79 locales ([#541](https://github.com/iamkun/dayjs/issues/541)) ([f75a125](https://github.com/iamkun/dayjs/commit/f75a125))
+* Add Calendar plugin ([d1b9cf9](https://github.com/iamkun/dayjs/commit/d1b9cf9))
+* Add isoWeeksInYear plugin ([2db8631](https://github.com/iamkun/dayjs/commit/2db8631))
+* Add Occitan (oc-lnc) locale file ([#551](https://github.com/iamkun/dayjs/issues/551)) ([c30b715](https://github.com/iamkun/dayjs/commit/c30b715))
+* Add plugin minMax to sopport .max .min ([2870a23](https://github.com/iamkun/dayjs/commit/2870a23))
+* Fix set Month Year error in last day of the month ([d058f4a](https://github.com/iamkun/dayjs/commit/d058f4a))
+* Update ko locale weekdaysShort ([#543](https://github.com/iamkun/dayjs/issues/543)) ([317fd3e](https://github.com/iamkun/dayjs/commit/317fd3e))
+* Update localizedFormat plugin to support lowercase localizable formats (l, ll, lll, llll) ([#546](https://github.com/iamkun/dayjs/issues/546)) ([f2b5ebf](https://github.com/iamkun/dayjs/commit/f2b5ebf))
+
+## [1.8.11](https://github.com/iamkun/dayjs/compare/v1.8.10...v1.8.11) (2019-03-21)
+
+
+### Bug Fixes
+
+* Add .add('quarter') .startOf('quarter') through plugin quarterOfYear ([dde39e9](https://github.com/iamkun/dayjs/commit/dde39e9)), closes [#537](https://github.com/iamkun/dayjs/issues/537) [#531](https://github.com/iamkun/dayjs/issues/531)
+* Add locale support for Azerbaijani language (az) ([#535](https://github.com/iamkun/dayjs/issues/535)) ([eeb20fa](https://github.com/iamkun/dayjs/commit/eeb20fa))
+* Correct typescript definition `add` ([22a249c](https://github.com/iamkun/dayjs/commit/22a249c)), closes [#531](https://github.com/iamkun/dayjs/issues/531)
+* Fix CustomParseFormat plugin formatting bug ([#536](https://github.com/iamkun/dayjs/issues/536)) ([8578546](https://github.com/iamkun/dayjs/commit/8578546)), closes [#533](https://github.com/iamkun/dayjs/issues/533)
+* Update pt locale ([#538](https://github.com/iamkun/dayjs/issues/538)) ([1ac9e1e](https://github.com/iamkun/dayjs/commit/1ac9e1e))
+
+## [1.8.10](https://github.com/iamkun/dayjs/compare/v1.8.9...v1.8.10) (2019-03-10)
+
+
+### Bug Fixes
+
+* **locale:** Add nepali (ne) locale ([#524](https://github.com/iamkun/dayjs/issues/524)) ([bdbec01](https://github.com/iamkun/dayjs/commit/bdbec01))
+* Add WeekYear plugin ([a892608](https://github.com/iamkun/dayjs/commit/a892608))
+* API .locale() with no argument should return current locale name string ([8d63d88](https://github.com/iamkun/dayjs/commit/8d63d88))
+* CustomParseFormat correct parse HH:mm:ss with only one digit like 0:12:10 ([600d547](https://github.com/iamkun/dayjs/commit/600d547))
+* CustomParseFormat plugin parse Do format string ([bf27fda](https://github.com/iamkun/dayjs/commit/bf27fda)), closes [#522](https://github.com/iamkun/dayjs/issues/522)
+* Expand setters like .year(2000) .hour(12) ([ac532a0](https://github.com/iamkun/dayjs/commit/ac532a0))
+* Move toObject, toArray API to separate plugin from core ([40a3431](https://github.com/iamkun/dayjs/commit/40a3431))
+
+## [1.8.9](https://github.com/iamkun/dayjs/compare/v1.8.8...v1.8.9) (2019-03-06)
+
+
+### Features
+
+* Add UTC mode with UTC plugin ([#517](https://github.com/iamkun/dayjs/issues/517)) ([caf335c](https://github.com/iamkun/dayjs/commit/caf335c))
+
+> For plugin developers: Please note, we have changed the name of some method in `Utils` in order to reduce the file size. ([#517](https://github.com/iamkun/dayjs/issues/517)) ([detail](https://github.com/iamkun/dayjs/pull/517/files#diff-2b4ca49d4bb0a774c4d4c1672d7aa781R46))
+
+### Bug Fixes
+
+* Add locale de-AT ([#515](https://github.com/iamkun/dayjs/issues/515)) ([d93f7b6](https://github.com/iamkun/dayjs/commit/d93f7b6))
+* Add locale zh-hk ([#516](https://github.com/iamkun/dayjs/issues/516)) ([5fc05a6](https://github.com/iamkun/dayjs/commit/5fc05a6))
+
+## [1.8.8](https://github.com/iamkun/dayjs/compare/v1.8.7...v1.8.8) (2019-02-25)
+
+
+### Bug Fixes
+
+* Update relativeTime plugin type definition ([de56f2c](https://github.com/iamkun/dayjs/commit/de56f2c))
+
+## [1.8.7](https://github.com/iamkun/dayjs/compare/v1.8.6...v1.8.7) (2019-02-24)
+
+
+### Bug Fixes
+
+* Add plugin type definitions ([#418](https://github.com/iamkun/dayjs/issues/418)) ([361d437](https://github.com/iamkun/dayjs/commit/361d437))
+* Add Swahili locale ([#508](https://github.com/iamkun/dayjs/issues/508)) ([b9cee84](https://github.com/iamkun/dayjs/commit/b9cee84))
+* Parse month string 'MMMM MMM (February, Feb)' in customParseFormat ([#457](https://github.com/iamkun/dayjs/issues/457)) ([f343206](https://github.com/iamkun/dayjs/commit/f343206))
+* Update declaration file .diff .isBefore .isSame .isAfter ([#496](https://github.com/iamkun/dayjs/issues/496)) ([4523275](https://github.com/iamkun/dayjs/commit/4523275))
+* Word orders corrections for locale 'fa' ([#491](https://github.com/iamkun/dayjs/issues/491)) ([56050c2](https://github.com/iamkun/dayjs/commit/56050c2))
+
+## [1.8.6](https://github.com/iamkun/dayjs/compare/v1.8.5...v1.8.6) (2019-02-14)
+
+
+### Bug Fixes
+
+* Add Bahasa Melayu (Malaysia) locale ([#485](https://github.com/iamkun/dayjs/issues/485)) ([cb208b0](https://github.com/iamkun/dayjs/commit/cb208b0))
+* Copy & export built-in en locale to /locale folder as a separate file ([a7e05e0](https://github.com/iamkun/dayjs/commit/a7e05e0))
+* Fix bug in customParseFormat plugin while month(MM) is '01' ([9884ca5](https://github.com/iamkun/dayjs/commit/9884ca5)), closes [#494](https://github.com/iamkun/dayjs/issues/494)
+* Fix startOf week bug while week start is not Sunday ([5eaf77b](https://github.com/iamkun/dayjs/commit/5eaf77b))
+* Implemented isBetween inclusivity ([#464](https://github.com/iamkun/dayjs/issues/464)) ([af2f4f1](https://github.com/iamkun/dayjs/commit/af2f4f1))
+* Update Swedish and Finnish locales ([#488](https://github.com/iamkun/dayjs/issues/488)) ([f142082](https://github.com/iamkun/dayjs/commit/f142082))
+* Fix commonJS require ES Module bug in webpack4 ([23f9f3d](https://github.com/iamkun/dayjs/commit/23f9f3d)), check [#492](https://github.com/iamkun/dayjs/issues/492)
+
+> Get access to ESM code with `import dayjs from 'dayjs/esm'`
+
+## [1.8.5](https://github.com/iamkun/dayjs/compare/v1.8.4...v1.8.5) (2019-02-07)
+
+
+### Bug Fixes
+
+* Add en-gb locale ([#478](https://github.com/iamkun/dayjs/issues/478)) ([508c3a7](https://github.com/iamkun/dayjs/commit/508c3a7))
+* **module:** transpile everything except ES6 modules in the 'module' entrypoint ([#477](https://github.com/iamkun/dayjs/issues/477)) ([#480](https://github.com/iamkun/dayjs/issues/480)) ([#482](https://github.com/iamkun/dayjs/issues/482)) ([767017d](https://github.com/iamkun/dayjs/commit/767017d))
+* update customParseFormat plugin support hh:mm ([54947cc](https://github.com/iamkun/dayjs/commit/54947cc)), closes [#484](https://github.com/iamkun/dayjs/issues/484)
+* Update module in package.json ([5c5a7a0](https://github.com/iamkun/dayjs/commit/5c5a7a0))
+
+## [1.8.4](https://github.com/iamkun/dayjs/compare/v1.8.3...v1.8.4) (2019-02-05)
+
+* Allow set start day of week in locale && Allow set week in weekOfYear plugin ([1295591](https://github.com/iamkun/dayjs/commit/1295591))
+### Bug Fixes
+* update all locale files with correct week start ([5b03412](https://github.com/iamkun/dayjs/commit/5b03412))
+* update es es-do locale adding weekStart && update weekStart test ([66e42ec](https://github.com/iamkun/dayjs/commit/66e42ec))
+* Revert default export ([b00da1b](https://github.com/iamkun/dayjs/commit/b00da1b))
+
+## [1.8.3](https://github.com/iamkun/dayjs/compare/v1.8.2...v1.8.3) (2019-02-04)
+
+
+### Bug Fixes
+
+* fix ios safari YYYY-MM-DD HH:mm parse BUG ([e02ae82](https://github.com/iamkun/dayjs/commit/e02ae82)), closes [#254](https://github.com/iamkun/dayjs/issues/254)
+
+## [1.8.2](https://github.com/iamkun/dayjs/compare/v1.8.1...v1.8.2) (2019-02-02)
+
+
+### Bug Fixes
+
+* Add missing czech language locale ([#461](https://github.com/iamkun/dayjs/issues/461)) ([7e04004](https://github.com/iamkun/dayjs/commit/7e04004))
+* Add utcOffset api method and fix calculating diff error in DST ([#453](https://github.com/iamkun/dayjs/issues/453)) ([ce2e30e](https://github.com/iamkun/dayjs/commit/ce2e30e))
+* Fix it locale error ([#458](https://github.com/iamkun/dayjs/issues/458)) ([f6d9a64](https://github.com/iamkun/dayjs/commit/f6d9a64))
+* Add DayOfYear plugin (#454)
+* Fix es locale monthsShort error
+
+## [1.8.1](https://github.com/iamkun/dayjs/compare/v1.8.0...v1.8.1) (2019-02-02)
+
+* Add LocalizedFormat plugin supplying format like LTS, LT, LLLL
+
+* update declaration File with default export (#278)
+> From v1.8.1, in TypeScript Project, just `import from dayjs from 'dayjs'`
+* add ES2015 module support (#451)
+
+### Performance Improvements
+
+* **format:** reuse matches instead of created when replacing ([#441](https://github.com/iamkun/dayjs/issues/441)) ([10b79d8](https://github.com/iamkun/dayjs/commit/10b79d8))
+
+# [1.8.0](https://github.com/iamkun/dayjs/compare/v1.7.8...v1.8.0) (2019-01-14)
+
+
+### Features
+
+* add CustomParseFormat plugin and QuarterOfYear plugin ([#450](https://github.com/iamkun/dayjs/issues/450)) ([8f6f63c](https://github.com/iamkun/dayjs/commit/8f6f63c))
+
+## [1.7.8](https://github.com/iamkun/dayjs/compare/v1.7.7...v1.7.8) (2018-12-13)
+
+
+### Feature
+
+* update isSame isBefore isAfter supports units ([fd65464](https://github.com/iamkun/dayjs/commit/fd65464))
+
+* add greek lithuanian locales
+
+## [1.7.7](https://github.com/iamkun/dayjs/compare/v1.7.6...v1.7.7) (2018-09-26)
+
+
+### Bug Fixes
+
+* **DST:** fix daylight saving time DST bug && add test ([#354](https://github.com/iamkun/dayjs/issues/354)) ([6fca6d5](https://github.com/iamkun/dayjs/commit/6fca6d5))
+
+## [1.7.6](https://github.com/iamkun/dayjs/compare/v1.7.5...v1.7.6) (2018-09-25)
+
+
+### Bug Fixes
+
+* **add dayjs.unix:** add dayjs.unix to parse timestamp in seconds && locale update ([5711c5e](https://github.com/iamkun/dayjs/commit/5711c5e))
+
+## [1.7.5](https://github.com/iamkun/dayjs/compare/v1.7.4...v1.7.5) (2018-08-10)
+
+
+### Bug Fixes
+
+* add isBetween API & update ([b5fc3d1](https://github.com/iamkun/dayjs/commit/b5fc3d1))
+
+## [1.7.4](https://github.com/iamkun/dayjs/compare/v1.7.3...v1.7.4) (2018-07-11)
+
+
+### Bug Fixes
+
+* update set week logic ([60b6325](https://github.com/iamkun/dayjs/commit/60b6325)), closes [#276](https://github.com/iamkun/dayjs/issues/276)
+
+## [1.7.3](https://github.com/iamkun/dayjs/compare/v1.7.2...v1.7.3) (2018-07-10)
+
+
+### Bug Fixes
+
+* **locale-nl:** set correct weekdays and months ([6d089d7](https://github.com/iamkun/dayjs/commit/6d089d7))
+
+## [1.7.2](https://github.com/iamkun/dayjs/compare/v1.7.1...v1.7.2) (2018-07-04)
+
+
+### Bug Fixes
+
+* DEPRECATED isLeapYear, use IsLeapYear plugin instead ([e2e5116](https://github.com/iamkun/dayjs/commit/e2e5116))
+
+## [1.7.1](https://github.com/iamkun/dayjs/compare/v1.7.0...v1.7.1) (2018-07-03)
+
+
+### Bug Fixes
+
+* fix week() error near the end of the year ([fa03689](https://github.com/iamkun/dayjs/commit/fa03689))
+
+# [1.7.0](https://github.com/iamkun/dayjs/compare/v1.6.10...v1.7.0) (2018-07-02)
+
+
+### Features
+
+* Added method `.week()` to retrieve week of the year ([e1c1b1c](https://github.com/iamkun/dayjs/commit/e1c1b1c))
+* Updated Japanese locae
+
+## [1.6.10](https://github.com/iamkun/dayjs/compare/v1.6.9...v1.6.10) (2018-06-25)
+
+
+### Bug Fixes
+
+* Add relative locales to russian language ([c7e9898](https://github.com/iamkun/dayjs/commit/c7e9898)), closes [#256](https://github.com/iamkun/dayjs/issues/256)
+
+## [1.6.9](https://github.com/iamkun/dayjs/compare/v1.6.8...v1.6.9) (2018-06-14)
+
+
+### Bug Fixes
+
+* add isDayjs => boolean API ([6227c8b](https://github.com/iamkun/dayjs/commit/6227c8b))
+
+## [1.6.8](https://github.com/iamkun/dayjs/compare/v1.6.7...v1.6.8) (2018-06-14)
+
+
+### Bug Fixes
+
+* fix Advanced format bug in zh-cn ([0c07874](https://github.com/iamkun/dayjs/commit/0c07874)), closes [#242](https://github.com/iamkun/dayjs/issues/242)
+
+## [1.6.7](https://github.com/iamkun/dayjs/compare/v1.6.6...v1.6.7) (2018-06-11)
+
+
+### Bug Fixes
+
+* fix id locale ([1ebbeb8](https://github.com/iamkun/dayjs/commit/1ebbeb8)), closes [#234](https://github.com/iamkun/dayjs/issues/234)
+
+
+## [1.6.6](https://github.com/iamkun/dayjs/compare/v1.6.5...v1.6.6) (2018-06-06)
+
+
+### Bug Fixes
+
+* format API update and locale file update ([5ca48f0](https://github.com/iamkun/dayjs/commit/5ca48f0)), closes [#228](https://github.com/iamkun/dayjs/issues/228)
+
+
+## [1.6.5](https://github.com/iamkun/dayjs/compare/v1.6.4...v1.6.5) (2018-05-31)
+
+
+### Bug Fixes
+
+* bugfix, utils update and locale file update ([ebcb6d5](https://github.com/iamkun/dayjs/commit/ebcb6d5)), closes [#214](https://github.com/iamkun/dayjs/issues/214)
+
+
+## [1.6.4](https://github.com/iamkun/dayjs/compare/v1.6.3...v1.6.4) (2018-05-25)
+
+
+### Bug Fixes
+
+* add RelativeTime plugin and locale file update ([c1fbbca](https://github.com/iamkun/dayjs/commit/c1fbbca)), closes [#198](https://github.com/iamkun/dayjs/issues/198)
+
+
+## [1.6.3](https://github.com/iamkun/dayjs/compare/v1.6.2...v1.6.3) (2018-05-21)
+
+
+### Bug Fixes
+
+* Changing locales locally is immutable from this release ([2cce729](https://github.com/iamkun/dayjs/commit/2cce729)), closes [#182](https://github.com/iamkun/dayjs/issues/182)
+* instance locale change should be immutable ([84597c9](https://github.com/iamkun/dayjs/commit/84597c9))
+* Add more locales
+* english ordinal fix
+
+
+## [1.6.2](https://github.com/iamkun/dayjs/compare/v1.6.1...v1.6.2) (2018-05-18)
+
+
+### Bug Fixes
+
+* change-log update && test new npm release ([aa49cba](https://github.com/iamkun/dayjs/commit/aa49cba)), closes [#163](https://github.com/iamkun/dayjs/issues/163)
+
+
+## [1.6.1](https://github.com/iamkun/dayjs/compare/v1.6.0...v1.6.1) (2018-05-18)
+
+
+### Bug Fixes
+
+* Add German, Brazilian Portuguese locales
+* add() & parse() bug fix & add locale de, pt-br ([bf1331e](https://github.com/iamkun/dayjs/commit/bf1331e))
+
+
+# [1.6.0](https://github.com/iamkun/dayjs/compare/v1.5.24...v1.6.0) (2018-05-15)
+
+
+### Features
+
+* Locale && Plugin ([2342c55](https://github.com/iamkun/dayjs/commit/2342c55)), closes [#141](https://github.com/iamkun/dayjs/issues/141)
diff --git a/node_modules/dayjs/LICENSE b/node_modules/dayjs/LICENSE
new file mode 100644
index 0000000..caf9315
--- /dev/null
+++ b/node_modules/dayjs/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018-present, iamkun
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/dayjs/README.md b/node_modules/dayjs/README.md
new file mode 100644
index 0000000..c1394b9
--- /dev/null
+++ b/node_modules/dayjs/README.md
@@ -0,0 +1,127 @@
+English | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md)
+
+
+
Fast 2kB alternative to Moment.js with the same modern API