[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"es2015\", \"stage-2\"],\n  \"plugins\": [\"transform-runtime\",\"add-module-exports\"],\n  \"comments\": false\n}\n"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"env\": {\n    \"browser\": true,\n    \"node\": true\n  },\n\n  \"ecmaFeatures\": {\n    \"arrowFunctions\": true,\n    \"destructuring\": true,\n    \"classes\": true,\n    \"defaultParams\": true,\n    \"blockBindings\": true,\n    \"modules\": true,\n    \"objectLiteralComputedProperties\": true,\n    \"objectLiteralShorthandMethods\": true,\n    \"objectLiteralShorthandProperties\": true,\n    \"restParams\": true,\n    \"spread\": true,\n    \"templateStrings\": true\n  },\n\n  \"rules\": {\n    \"accessor-pairs\": 2,\n    \"array-bracket-spacing\": 0,\n    \"block-scoped-var\": 0,\n    \"brace-style\": [2, \"1tbs\", { \"allowSingleLine\": true }],\n    \"camelcase\": 0,\n    \"comma-dangle\": [2, \"never\"],\n    \"comma-spacing\": [2, { \"before\": false, \"after\": true }],\n    \"comma-style\": [2, \"last\"],\n    \"complexity\": 0,\n    \"computed-property-spacing\": 0,\n    \"consistent-return\": 0,\n    \"consistent-this\": 0,\n    \"constructor-super\": 2,\n    \"curly\": [2, \"multi-line\"],\n    \"default-case\": 0,\n    \"dot-location\": [2, \"property\"],\n    \"dot-notation\": 0,\n    \"eol-last\": 2,\n    \"eqeqeq\": [2, \"allow-null\"],\n    \"func-names\": 0,\n    \"func-style\": 0,\n    \"generator-star-spacing\": [2, { \"before\": true, \"after\": true }],\n    \"guard-for-in\": 0,\n    \"handle-callback-err\": [2, \"^(err|error)$\" ],\n    \"indent\": [2, 2, { \"SwitchCase\": 1 }],\n    \"key-spacing\": [2, { \"beforeColon\": false, \"afterColon\": true }],\n    \"linebreak-style\": 0,\n    \"lines-around-comment\": 0,\n    \"max-nested-callbacks\": 0,\n    \"new-cap\": [2, { \"newIsCap\": true, \"capIsNew\": false }],\n    \"new-parens\": 2,\n    \"newline-after-var\": 0,\n    \"no-alert\": 0,\n    \"no-array-constructor\": 2,\n    \"no-caller\": 2,\n    \"no-catch-shadow\": 0,\n    \"no-cond-assign\": 2,\n    \"no-console\": 0,\n    \"no-constant-condition\": 0,\n    \"no-continue\": 0,\n    \"no-control-regex\": 2,\n    \"no-debugger\": 2,\n    \"no-delete-var\": 2,\n    \"no-div-regex\": 0,\n    \"no-dupe-args\": 2,\n    \"no-dupe-keys\": 2,\n    \"no-duplicate-case\": 2,\n    \"no-else-return\": 0,\n    \"no-empty\": 0,\n    \"no-empty-character-class\": 2,\n    \"no-empty-label\": 2,\n    \"no-eq-null\": 0,\n    \"no-eval\": 2,\n    \"no-ex-assign\": 2,\n    \"no-extend-native\": 2,\n    \"no-extra-bind\": 2,\n    \"no-extra-boolean-cast\": 2,\n    \"no-extra-parens\": 0,\n    \"no-extra-semi\": 0,\n    \"no-fallthrough\": 2,\n    \"no-floating-decimal\": 2,\n    \"no-func-assign\": 2,\n    \"no-implied-eval\": 2,\n    \"no-inline-comments\": 0,\n    \"no-inner-declarations\": [2, \"functions\"],\n    \"no-invalid-regexp\": 2,\n    \"no-irregular-whitespace\": 2,\n    \"no-iterator\": 2,\n    \"no-label-var\": 2,\n    \"no-labels\": 2,\n    \"no-lone-blocks\": 2,\n    \"no-lonely-if\": 0,\n    \"no-loop-func\": 0,\n    \"no-mixed-requires\": 0,\n    \"no-mixed-spaces-and-tabs\": 2,\n    \"no-multi-spaces\": 2,\n    \"no-multi-str\": 2,\n    \"no-multiple-empty-lines\": [2, { \"max\": 1 }],\n    \"no-native-reassign\": 2,\n    \"no-negated-in-lhs\": 2,\n    \"no-nested-ternary\": 0,\n    \"no-new\": 0,\n    \"no-new-func\": 0,\n    \"no-new-object\": 2,\n    \"no-new-require\": 2,\n    \"no-new-wrappers\": 2,\n    \"no-obj-calls\": 2,\n    \"no-octal\": 2,\n    \"no-octal-escape\": 2,\n    \"no-param-reassign\": 0,\n    \"no-path-concat\": 0,\n    \"no-process-env\": 0,\n    \"no-process-exit\": 0,\n    \"no-proto\": 0,\n    \"no-redeclare\": 2,\n    \"no-regex-spaces\": 2,\n    \"no-restricted-modules\": 0,\n    \"no-return-assign\": 2,\n    \"no-script-url\": 0,\n    \"no-self-compare\": 2,\n    \"no-sequences\": 2,\n    \"no-shadow\": 0,\n    \"no-shadow-restricted-names\": 2,\n    \"no-spaced-func\": 2,\n    \"no-sparse-arrays\": 2,\n    \"no-sync\": 0,\n    \"no-ternary\": 0,\n    \"no-this-before-super\": 2,\n    \"no-throw-literal\": 2,\n    \"no-trailing-spaces\": 2,\n    \"no-undef\": 2,\n    \"no-undef-init\": 2,\n    \"no-undefined\": 0,\n    \"no-underscore-dangle\": 0,\n    \"no-unexpected-multiline\": 2,\n    \"no-unneeded-ternary\": 2,\n    \"no-unreachable\": 2,\n    \"no-unused-expressions\": 0,\n    \"no-unused-vars\": [2, { \"vars\": \"all\", \"args\": \"none\" }],\n    \"no-use-before-define\": 0,\n    \"no-var\": 0,\n    \"no-void\": 0,\n    \"no-warning-comments\": 0,\n    \"no-with\": 2,\n    \"object-curly-spacing\": 0,\n    \"object-shorthand\": 0,\n    \"one-var\": [2, { \"initialized\": \"never\" }],\n    \"operator-assignment\": 0,\n    \"operator-linebreak\": [2, \"after\", { \"overrides\": { \"?\": \"before\", \":\": \"before\" } }],\n    \"padded-blocks\": 0,\n    \"prefer-const\": 0,\n    \"quote-props\": 0,\n    \"quotes\": [2, \"single\", \"avoid-escape\"],\n    \"radix\": 2,\n    \"semi\": [2, \"never\"],\n    \"semi-spacing\": 0,\n    \"sort-vars\": 0,\n    \"space-after-keywords\": [2, \"always\"],\n    \"space-before-blocks\": [2, \"always\"],\n    \"space-before-function-paren\": [2, \"always\"],\n    \"space-in-parens\": [2, \"never\"],\n    \"space-infix-ops\": 2,\n    \"space-return-throw-case\": 2,\n    \"space-unary-ops\": [2, { \"words\": true, \"nonwords\": false }],\n    \"spaced-comment\": [2, \"always\", { \"markers\": [\"global\", \"globals\", \"eslint\", \"eslint-disable\", \"*package\", \"!\"] }],\n    \"strict\": 0,\n    \"use-isnan\": 2,\n    \"valid-jsdoc\": 0,\n    \"valid-typeof\": 2,\n    \"vars-on-top\": 0,\n    \"wrap-iife\": [2, \"any\"],\n    \"wrap-regex\": 0,\n    \"yoda\": [2, \"never\"]\n  }\n}\n"
  },
  {
    "path": "README.md",
    "content": "# vuex-tutorial\n\n> 一个`vuex`教程 主要介绍如何实际操作`vuex`\n[demo](http://yelingfeng.github.io/vuex-tutorial )\n\n# newList\n- [x] [vuex2.x新旧变化整理](/tutorial/03/INFO.md)\n- [x] [requirejs快速构建教程](/tutorial/02.md)\n- [x] [新增amd版本](https://github.com/yelingfeng/vuex-tutorial/tree/master/amd)\n\n## 前言 \n\n该代码示例使用的vue相关资源 详细看`package.json` 核心(`vue+vuex`) \n其他相关参考[jackblog](https://github.com/jackhutu/jackblog-vue) 工程(使用了该项目的gulp和webpack配置)\n\n- [x] [Vuejs](https://github.com/vuejs/vue)\n- [x] [Vuex](https://github.com/vuejs/vuex)\n- [x] [Vue-resource](https://github.com/vuejs/vue-resource)\n- [x] [bootstrap-material-design](https://github.com/FezVrasta/bootstrap-material-design)\n\n# vuex\n\n一句话介绍`vuex`是什么,官方说明\"一个专门为 `Vue.js` 应用设计的状态管理架构\"\n\n状态管理: 简单理解就是统一管理和维护各个vue组件的可变化状态(你可以理解成`vue`组件里的某些`data`)\n\n## 实战介绍\n完成一个简单搜索查询功能 效果如下\n\n![](/tutorial/img/result01.png)\n\n## 组件介绍\n -  `App` \n  主程序组件\n -  `Search`\n  搜索框组件\n -  `SearchGroup` \n  分组类型组件\n -  `List` \n  结果集合组件\n\n## 组件内actions说明\n(这里主要描述调用逻辑 结果都是一个`list`)\n\n### App \n `App`包含了组件`Search`和`List` \n \n> searchResultList 返回结果action 直接从`actions`获取放到`list`中\n \n### Search\n `Search`组件中包含子组件`SearchGroup` 主要包含功能\n \n> searchAction\n   根据key进行查询action  放大镜和回车同时绑定了事件\n    \n> clearAction \n   清除key的值action\n   \n### SearchGroup\n\n> setSearchGroup \n   根据分组值进行查询action \n   \n   \n# 教程\n  - [目录结构](/tutorial/01.md)\n  - [requirejs快速构建教程](/tutorial/02.md)\n  - [TODOS2](/tutorial/03.md)\n\n\n\n# 环境准备\n### 初始化\n```\n$ npm install\n```\n\n###  开发\n启动webpack环境\n```\nnpm run dev\n```\n启动一个express服务器\n```\nnode server.js \n```\n###  构建\n```\nnpm run build\n```\n\n# License\n\nMIT\n\n\n"
  },
  {
    "path": "amd/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>vuex-tutorial-amd</title>\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap/css/bootstrap.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/css/md-facefont.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap-material-design/css/bootstrap-material-design.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap-material-design/css/ripples.min.css\">\n    <style>\n        html ,body{\n            margin: 0;\n        }\n        #app{\n            width:1000px;\n            margin: 10px auto;\n        }\n        .i-search {\n            position: absolute;\n            right: 0;\n            top : 10px;\n            cursor: pointer;\n            z-index: 10;\n        }\n        .i-clear{\n            position: absolute;\n            right: 30px;\n            top : 13px;\n            cursor: pointer;\n            z-index: 10;\n            font-size : 16px;\n            color :#777;\n        }\n        .i-search:hover,.i-clear:hover{\n            color :#00aa9a;\n        }\n        .dropdown-menu{\n            min-width:100%;\n        }\n        .jumbotron {\n            text-align: center;\n\n        }\n        .jumbotron p{\n            font-family: \"Microsoft Himalaya\";\n            font-size: 14px;\n        }\n    </style>\n</head>\n<body>\n    <App></App>\n    <!--app模板-->\n    <script type=\"text/x-template\" id=\"app-template\">\n        <div id=\"app\">\n            <div class=\".container-fluid\" >\n                <div class=\"row\">\n                    <div class=\"col-md-6\">\n                        <search-component></search-component>\n                    </div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-6\">\n                        <div class=\"bs-component \">\n                            <search-list :data=\"searchResultList\"></search-list>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </script>\n\n    <!-- 显示结果列表模板-->\n    <script type=\"text/x-template\" id=\"list-template\">\n        <div class=\"list-group\">\n            <div class=\"list-group-item\" v-if=\"isEmpty\">\n                <div class=\"jumbotron\">\n                    <p>没有查到数据</p>\n                </div>\n            </div>\n            <div class=\"list-group-item\" v-for=\"item in data\">\n                 <div class=\"row-picture\">\n                     <img class=\"circle\" src=\"src/assets/images/xiaofan.png\" alt=\"\">\n                 </div>\n                 <div class=\"row-content\">\n                    <h4 class=\"list-group-item-heading\">{{item.name }} -- {{ item.type}}</h4>\n                    <p class=\"list-group-item-text\">{{item.address}}</p>\n                </div>\n             <div class=\"list-group-separator\"></div>\n            </div>\n        </div>\n    </script>\n\n    <!--查询组件模板-->\n    <script type=\"text/x-template\" id=\"search-template\">\n        <div class=\"form-group\">\n            <div class=\"input-group\">\n                <search-group  :items=\"searchGroupItem\"></search-group>\n                <input type=\"text\" class=\"form-control\"  :value=\"searchKey\" @input=\"update\" @keyup.enter=\"searchAction\" placeholder=\"搜索关键字...\" >\n                <span class=\"material-input\"></span>\n                <i class=\"material-icons i-clear\" v-show=\"isEmptySearchKey\" v-on:click.stop=\"clearAction\">clear</i>\n                <i class=\"material-icons i-search\" v-on:click.stop=\"searchAction\">search</i>\n            </div>\n        </div>\n    </script>\n    <!--查询组 模板-->\n    <script type=\"text/x-template\" id=\"searchgroup-template\">\n        <span class=\"input-group-btn\">\n            <a href=\"javascript:void(0)\" data-target=\"#\" class=\"btn btn-raised btn-primary dropdown-toggle\" data-toggle=\"dropdown\" aria-expanded=\"false\">\n                {{curName}}\n                <span class=\"caret\"></span>\n                <div class=\"ripple-container\"></div>\n            </a>\n            <ul class=\"dropdown-menu\" >\n                <li v-for=\"item in items\"><a href=\"javascript:void(0)\" @click=\"menuClick(item)\">{{item.name}}</a></li>\n            </ul>\n        </span>\n    </script>\n\n\n    <script src=\"src/require.js\" data-main=\"src/config.js\" ></script>\n</body>\n</html>"
  },
  {
    "path": "amd/src/api/index.js",
    "content": "/**\n * Created by  on 2016/5/6.\n */\ndefine(function(require){\n\n    var _ = require(\"lodash\");\n\n    return {\n        searchParamList : function(param){\n\n            var type  = param.type ;\n            var key = param.key ;\n\n            var data = [\n                {\n                    \"name\" : \"AA\",\n                    \"address\"  : \"北京市朝阳区101-0A\",\n                    \"type\" : \"1\"\n                },\n                {\n                    \"name\" : \"BB\",\n                    \"address\" : \"北京市朝阳区101-0B\",\n                    \"type\" : \"2\"\n                },\n                {\n                    \"name\" : \"CC\",\n                    \"address\" : \"北京市朝阳区101-0C\",\n                    \"type\" : \"3\"\n                },\n                {\n                    \"name\" : \"DD\",\n                    \"address\" : \"北京市朝阳区101-0D\",\n                    \"type\" : \"3\"\n                },\n                {\n                    \"name\" : \"EE\",\n                    \"address\" : \"北京市朝阳区101-0E\",\n                    \"type\" : \"3\"\n                },\n                {\n                    \"name\" : \"FFF\",\n                    \"address\" : \"北京市朝阳区101-0F\",\n                    \"type\" : \"2\"\n                }\n            ]\n\n            if(type != null && key !== \"\"){\n                if(type != 0 ){\n                    var newData = _.chain(data).filter(function(it){\n                       return it.type == type && it.name.indexOf(key) > -1 ;\n                    }).value();\n                    data = newData;\n                }\n\n            }\n\n\n\n            return {\n                data :data\n            }\n        }\n    }\n\n})"
  },
  {
    "path": "amd/src/assets/css/md-facefont.css",
    "content": "\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n\n@font-face {\n    font-family: 'Material Icons';\n    font-style: normal;\n    font-weight: 400;\n    src: url(\"./../font/iconfont/MaterialIcons-Regular.eot\"); /* For IE6-8 */\n    src: local('Material Icons'),\n    local('MaterialIcons-Regular'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.woff2\") format('woff2'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.woff\") format('woff'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.ttf\") format('truetype');\n}\n.material-icons {\n    font-family: 'Material Icons';\n    font-weight: normal;\n    font-style: normal;\n    font-size: 24px; /* Preferred icon size */\n    display: inline-block;\n    width: 1em;\n    height: 1em;\n    line-height: 1;\n    text-transform: none;\n    /* Support for all WebKit browsers. */\n    -webkit-font-smoothing: antialiased;\n    /* Support for Safari and Chrome. */\n    text-rendering: optimizeLegibility;\n    /* Support for Firefox. */\n    -moz-osx-font-smoothing: grayscale;\n    /* Support for IE. */\n    font-feature-settings: 'liga';\n}"
  },
  {
    "path": "amd/src/assets/font/iconfont/MaterialIcons-Regular.ijmap",
    "content": "{\"icons\":{\"e84d\":{\"name\":\"3d Rotation\"},\"e190\":{\"name\":\"Access Alarm\"},\"e191\":{\"name\":\"Access Alarms\"},\"e192\":{\"name\":\"Access Time\"},\"e84e\":{\"name\":\"Accessibility\"},\"e84f\":{\"name\":\"Account Balance\"},\"e850\":{\"name\":\"Account Balance Wallet\"},\"e851\":{\"name\":\"Account Box\"},\"e853\":{\"name\":\"Account Circle\"},\"e60e\":{\"name\":\"Adb\"},\"e145\":{\"name\":\"Add\"},\"e193\":{\"name\":\"Add Alarm\"},\"e003\":{\"name\":\"Add Alert\"},\"e146\":{\"name\":\"Add Box\"},\"e147\":{\"name\":\"Add Circle\"},\"e148\":{\"name\":\"Add Circle Outline\"},\"e854\":{\"name\":\"Add Shopping Cart\"},\"e39d\":{\"name\":\"Add To Photos\"},\"e39e\":{\"name\":\"Adjust\"},\"e630\":{\"name\":\"Airline Seat Flat\"},\"e631\":{\"name\":\"Airline Seat Flat Angled\"},\"e632\":{\"name\":\"Airline Seat Individual Suite\"},\"e633\":{\"name\":\"Airline Seat Legroom Extra\"},\"e634\":{\"name\":\"Airline Seat Legroom Normal\"},\"e635\":{\"name\":\"Airline Seat Legroom Reduced\"},\"e636\":{\"name\":\"Airline Seat Recline Extra\"},\"e637\":{\"name\":\"Airline Seat Recline Normal\"},\"e195\":{\"name\":\"Airplanemode Active\"},\"e194\":{\"name\":\"Airplanemode Inactive\"},\"e055\":{\"name\":\"Airplay\"},\"e855\":{\"name\":\"Alarm\"},\"e856\":{\"name\":\"Alarm Add\"},\"e857\":{\"name\":\"Alarm Off\"},\"e858\":{\"name\":\"Alarm On\"},\"e019\":{\"name\":\"Album\"},\"e859\":{\"name\":\"Android\"},\"e85a\":{\"name\":\"Announcement\"},\"e5c3\":{\"name\":\"Apps\"},\"e149\":{\"name\":\"Archive\"},\"e5c4\":{\"name\":\"Arrow Back\"},\"e5c5\":{\"name\":\"Arrow Drop Down\"},\"e5c6\":{\"name\":\"Arrow Drop Down Circle\"},\"e5c7\":{\"name\":\"Arrow Drop Up\"},\"e5c8\":{\"name\":\"Arrow Forward\"},\"e85b\":{\"name\":\"Aspect Ratio\"},\"e85c\":{\"name\":\"Assessment\"},\"e85d\":{\"name\":\"Assignment\"},\"e85e\":{\"name\":\"Assignment Ind\"},\"e85f\":{\"name\":\"Assignment Late\"},\"e860\":{\"name\":\"Assignment Return\"},\"e861\":{\"name\":\"Assignment Returned\"},\"e862\":{\"name\":\"Assignment Turned In\"},\"e39f\":{\"name\":\"Assistant\"},\"e3a0\":{\"name\":\"Assistant Photo\"},\"e226\":{\"name\":\"Attach File\"},\"e227\":{\"name\":\"Attach Money\"},\"e2bc\":{\"name\":\"Attachment\"},\"e3a1\":{\"name\":\"Audiotrack\"},\"e863\":{\"name\":\"Autorenew\"},\"e01b\":{\"name\":\"Av Timer\"},\"e14a\":{\"name\":\"Backspace\"},\"e864\":{\"name\":\"Backup\"},\"e19c\":{\"name\":\"Battery Alert\"},\"e1a3\":{\"name\":\"Battery Charging Full\"},\"e1a4\":{\"name\":\"Battery Full\"},\"e1a5\":{\"name\":\"Battery Std\"},\"e1a6\":{\"name\":\"Battery Unknown\"},\"e52d\":{\"name\":\"Beenhere\"},\"e14b\":{\"name\":\"Block\"},\"e1a7\":{\"name\":\"Bluetooth\"},\"e60f\":{\"name\":\"Bluetooth Audio\"},\"e1a8\":{\"name\":\"Bluetooth Connected\"},\"e1a9\":{\"name\":\"Bluetooth Disabled\"},\"e1aa\":{\"name\":\"Bluetooth Searching\"},\"e3a2\":{\"name\":\"Blur Circular\"},\"e3a3\":{\"name\":\"Blur Linear\"},\"e3a4\":{\"name\":\"Blur Off\"},\"e3a5\":{\"name\":\"Blur On\"},\"e865\":{\"name\":\"Book\"},\"e866\":{\"name\":\"Bookmark\"},\"e867\":{\"name\":\"Bookmark Border\"},\"e228\":{\"name\":\"Border All\"},\"e229\":{\"name\":\"Border Bottom\"},\"e22a\":{\"name\":\"Border Clear\"},\"e22b\":{\"name\":\"Border Color\"},\"e22c\":{\"name\":\"Border Horizontal\"},\"e22d\":{\"name\":\"Border Inner\"},\"e22e\":{\"name\":\"Border Left\"},\"e22f\":{\"name\":\"Border Outer\"},\"e230\":{\"name\":\"Border Right\"},\"e231\":{\"name\":\"Border Style\"},\"e232\":{\"name\":\"Border Top\"},\"e233\":{\"name\":\"Border Vertical\"},\"e3a6\":{\"name\":\"Brightness 1\"},\"e3a7\":{\"name\":\"Brightness 2\"},\"e3a8\":{\"name\":\"Brightness 3\"},\"e3a9\":{\"name\":\"Brightness 4\"},\"e3aa\":{\"name\":\"Brightness 5\"},\"e3ab\":{\"name\":\"Brightness 6\"},\"e3ac\":{\"name\":\"Brightness 7\"},\"e1ab\":{\"name\":\"Brightness Auto\"},\"e1ac\":{\"name\":\"Brightness High\"},\"e1ad\":{\"name\":\"Brightness Low\"},\"e1ae\":{\"name\":\"Brightness Medium\"},\"e3ad\":{\"name\":\"Broken Image\"},\"e3ae\":{\"name\":\"Brush\"},\"e868\":{\"name\":\"Bug Report\"},\"e869\":{\"name\":\"Build\"},\"e0af\":{\"name\":\"Business\"},\"e86a\":{\"name\":\"Cached\"},\"e7e9\":{\"name\":\"Cake\"},\"e0b0\":{\"name\":\"Call\"},\"e0b1\":{\"name\":\"Call End\"},\"e0b2\":{\"name\":\"Call Made\"},\"e0b3\":{\"name\":\"Call Merge\"},\"e0b4\":{\"name\":\"Call Missed\"},\"e0b5\":{\"name\":\"Call Received\"},\"e0b6\":{\"name\":\"Call Split\"},\"e3af\":{\"name\":\"Camera\"},\"e3b0\":{\"name\":\"Camera Alt\"},\"e8fc\":{\"name\":\"Camera Enhance\"},\"e3b1\":{\"name\":\"Camera Front\"},\"e3b2\":{\"name\":\"Camera Rear\"},\"e3b3\":{\"name\":\"Camera Roll\"},\"e5c9\":{\"name\":\"Cancel\"},\"e8f6\":{\"name\":\"Card Giftcard\"},\"e8f7\":{\"name\":\"Card Membership\"},\"e8f8\":{\"name\":\"Card Travel\"},\"e307\":{\"name\":\"Cast\"},\"e308\":{\"name\":\"Cast Connected\"},\"e3b4\":{\"name\":\"Center Focus Strong\"},\"e3b5\":{\"name\":\"Center Focus Weak\"},\"e86b\":{\"name\":\"Change History\"},\"e0b7\":{\"name\":\"Chat\"},\"e0ca\":{\"name\":\"Chat Bubble\"},\"e0cb\":{\"name\":\"Chat Bubble Outline\"},\"e5ca\":{\"name\":\"Check\"},\"e834\":{\"name\":\"Check Box\"},\"e835\":{\"name\":\"Check Box Outline Blank\"},\"e86c\":{\"name\":\"Check Circle\"},\"e5cb\":{\"name\":\"Chevron Left\"},\"e5cc\":{\"name\":\"Chevron Right\"},\"e86d\":{\"name\":\"Chrome Reader Mode\"},\"e86e\":{\"name\":\"Class\"},\"e14c\":{\"name\":\"Clear\"},\"e0b8\":{\"name\":\"Clear All\"},\"e5cd\":{\"name\":\"Close\"},\"e01c\":{\"name\":\"Closed Caption\"},\"e2bd\":{\"name\":\"Cloud\"},\"e2be\":{\"name\":\"Cloud Circle\"},\"e2bf\":{\"name\":\"Cloud Done\"},\"e2c0\":{\"name\":\"Cloud Download\"},\"e2c1\":{\"name\":\"Cloud Off\"},\"e2c2\":{\"name\":\"Cloud Queue\"},\"e2c3\":{\"name\":\"Cloud Upload\"},\"e86f\":{\"name\":\"Code\"},\"e3b6\":{\"name\":\"Collections\"},\"e431\":{\"name\":\"Collections Bookmark\"},\"e3b7\":{\"name\":\"Color Lens\"},\"e3b8\":{\"name\":\"Colorize\"},\"e0b9\":{\"name\":\"Comment\"},\"e3b9\":{\"name\":\"Compare\"},\"e30a\":{\"name\":\"Computer\"},\"e638\":{\"name\":\"Confirmation Number\"},\"e0cf\":{\"name\":\"Contact Phone\"},\"e0ba\":{\"name\":\"Contacts\"},\"e14d\":{\"name\":\"Content Copy\"},\"e14e\":{\"name\":\"Content Cut\"},\"e14f\":{\"name\":\"Content Paste\"},\"e3ba\":{\"name\":\"Control Point\"},\"e3bb\":{\"name\":\"Control Point Duplicate\"},\"e150\":{\"name\":\"Create\"},\"e870\":{\"name\":\"Credit Card\"},\"e3be\":{\"name\":\"Crop\"},\"e3bc\":{\"name\":\"Crop 16 9\"},\"e3bd\":{\"name\":\"Crop 3 2\"},\"e3bf\":{\"name\":\"Crop 5 4\"},\"e3c0\":{\"name\":\"Crop 7 5\"},\"e3c1\":{\"name\":\"Crop Din\"},\"e3c2\":{\"name\":\"Crop Free\"},\"e3c3\":{\"name\":\"Crop Landscape\"},\"e3c4\":{\"name\":\"Crop Original\"},\"e3c5\":{\"name\":\"Crop Portrait\"},\"e3c6\":{\"name\":\"Crop Square\"},\"e871\":{\"name\":\"Dashboard\"},\"e1af\":{\"name\":\"Data Usage\"},\"e3c7\":{\"name\":\"Dehaze\"},\"e872\":{\"name\":\"Delete\"},\"e873\":{\"name\":\"Description\"},\"e30b\":{\"name\":\"Desktop Mac\"},\"e30c\":{\"name\":\"Desktop Windows\"},\"e3c8\":{\"name\":\"Details\"},\"e30d\":{\"name\":\"Developer Board\"},\"e1b0\":{\"name\":\"Developer Mode\"},\"e335\":{\"name\":\"Device Hub\"},\"e1b1\":{\"name\":\"Devices\"},\"e0bb\":{\"name\":\"Dialer Sip\"},\"e0bc\":{\"name\":\"Dialpad\"},\"e52e\":{\"name\":\"Directions\"},\"e52f\":{\"name\":\"Directions Bike\"},\"e532\":{\"name\":\"Directions Boat\"},\"e530\":{\"name\":\"Directions Bus\"},\"e531\":{\"name\":\"Directions Car\"},\"e534\":{\"name\":\"Directions Railway\"},\"e566\":{\"name\":\"Directions Run\"},\"e533\":{\"name\":\"Directions Subway\"},\"e535\":{\"name\":\"Directions Transit\"},\"e536\":{\"name\":\"Directions Walk\"},\"e610\":{\"name\":\"Disc Full\"},\"e875\":{\"name\":\"Dns\"},\"e612\":{\"name\":\"Do Not Disturb\"},\"e611\":{\"name\":\"Do Not Disturb Alt\"},\"e30e\":{\"name\":\"Dock\"},\"e7ee\":{\"name\":\"Domain\"},\"e876\":{\"name\":\"Done\"},\"e877\":{\"name\":\"Done All\"},\"e151\":{\"name\":\"Drafts\"},\"e613\":{\"name\":\"Drive Eta\"},\"e1b2\":{\"name\":\"Dvr\"},\"e3c9\":{\"name\":\"Edit\"},\"e8fb\":{\"name\":\"Eject\"},\"e0be\":{\"name\":\"Email\"},\"e01d\":{\"name\":\"Equalizer\"},\"e000\":{\"name\":\"Error\"},\"e001\":{\"name\":\"Error Outline\"},\"e878\":{\"name\":\"Event\"},\"e614\":{\"name\":\"Event Available\"},\"e615\":{\"name\":\"Event Busy\"},\"e616\":{\"name\":\"Event Note\"},\"e903\":{\"name\":\"Event Seat\"},\"e879\":{\"name\":\"Exit To App\"},\"e5ce\":{\"name\":\"Expand Less\"},\"e5cf\":{\"name\":\"Expand More\"},\"e01e\":{\"name\":\"Explicit\"},\"e87a\":{\"name\":\"Explore\"},\"e3ca\":{\"name\":\"Exposure\"},\"e3cb\":{\"name\":\"Exposure Neg 1\"},\"e3cc\":{\"name\":\"Exposure Neg 2\"},\"e3cd\":{\"name\":\"Exposure Plus 1\"},\"e3ce\":{\"name\":\"Exposure Plus 2\"},\"e3cf\":{\"name\":\"Exposure Zero\"},\"e87b\":{\"name\":\"Extension\"},\"e87c\":{\"name\":\"Face\"},\"e01f\":{\"name\":\"Fast Forward\"},\"e020\":{\"name\":\"Fast Rewind\"},\"e87d\":{\"name\":\"Favorite\"},\"e87e\":{\"name\":\"Favorite Border\"},\"e87f\":{\"name\":\"Feedback\"},\"e2c4\":{\"name\":\"File Download\"},\"e2c6\":{\"name\":\"File Upload\"},\"e3d3\":{\"name\":\"Filter\"},\"e3d0\":{\"name\":\"Filter 1\"},\"e3d1\":{\"name\":\"Filter 2\"},\"e3d2\":{\"name\":\"Filter 3\"},\"e3d4\":{\"name\":\"Filter 4\"},\"e3d5\":{\"name\":\"Filter 5\"},\"e3d6\":{\"name\":\"Filter 6\"},\"e3d7\":{\"name\":\"Filter 7\"},\"e3d8\":{\"name\":\"Filter 8\"},\"e3d9\":{\"name\":\"Filter 9\"},\"e3da\":{\"name\":\"Filter 9 Plus\"},\"e3db\":{\"name\":\"Filter B And W\"},\"e3dc\":{\"name\":\"Filter Center Focus\"},\"e3dd\":{\"name\":\"Filter Drama\"},\"e3de\":{\"name\":\"Filter Frames\"},\"e3df\":{\"name\":\"Filter Hdr\"},\"e152\":{\"name\":\"Filter List\"},\"e3e0\":{\"name\":\"Filter None\"},\"e3e2\":{\"name\":\"Filter Tilt Shift\"},\"e3e3\":{\"name\":\"Filter Vintage\"},\"e880\":{\"name\":\"Find In Page\"},\"e881\":{\"name\":\"Find Replace\"},\"e153\":{\"name\":\"Flag\"},\"e3e4\":{\"name\":\"Flare\"},\"e3e5\":{\"name\":\"Flash Auto\"},\"e3e6\":{\"name\":\"Flash Off\"},\"e3e7\":{\"name\":\"Flash On\"},\"e539\":{\"name\":\"Flight\"},\"e904\":{\"name\":\"Flight Land\"},\"e905\":{\"name\":\"Flight Takeoff\"},\"e3e8\":{\"name\":\"Flip\"},\"e882\":{\"name\":\"Flip To Back\"},\"e883\":{\"name\":\"Flip To Front\"},\"e2c7\":{\"name\":\"Folder\"},\"e2c8\":{\"name\":\"Folder Open\"},\"e2c9\":{\"name\":\"Folder Shared\"},\"e617\":{\"name\":\"Folder Special\"},\"e167\":{\"name\":\"Font Download\"},\"e234\":{\"name\":\"Format Align Center\"},\"e235\":{\"name\":\"Format Align Justify\"},\"e236\":{\"name\":\"Format Align Left\"},\"e237\":{\"name\":\"Format Align Right\"},\"e238\":{\"name\":\"Format Bold\"},\"e239\":{\"name\":\"Format Clear\"},\"e23a\":{\"name\":\"Format Color Fill\"},\"e23b\":{\"name\":\"Format Color Reset\"},\"e23c\":{\"name\":\"Format Color Text\"},\"e23d\":{\"name\":\"Format Indent Decrease\"},\"e23e\":{\"name\":\"Format Indent Increase\"},\"e23f\":{\"name\":\"Format Italic\"},\"e240\":{\"name\":\"Format Line Spacing\"},\"e241\":{\"name\":\"Format List Bulleted\"},\"e242\":{\"name\":\"Format List Numbered\"},\"e243\":{\"name\":\"Format Paint\"},\"e244\":{\"name\":\"Format Quote\"},\"e245\":{\"name\":\"Format Size\"},\"e246\":{\"name\":\"Format Strikethrough\"},\"e247\":{\"name\":\"Format Textdirection L To R\"},\"e248\":{\"name\":\"Format Textdirection R To L\"},\"e249\":{\"name\":\"Format Underlined\"},\"e0bf\":{\"name\":\"Forum\"},\"e154\":{\"name\":\"Forward\"},\"e056\":{\"name\":\"Forward 10\"},\"e057\":{\"name\":\"Forward 30\"},\"e058\":{\"name\":\"Forward 5\"},\"e5d0\":{\"name\":\"Fullscreen\"},\"e5d1\":{\"name\":\"Fullscreen Exit\"},\"e24a\":{\"name\":\"Functions\"},\"e30f\":{\"name\":\"Gamepad\"},\"e021\":{\"name\":\"Games\"},\"e155\":{\"name\":\"Gesture\"},\"e884\":{\"name\":\"Get App\"},\"e908\":{\"name\":\"Gif\"},\"e1b3\":{\"name\":\"Gps Fixed\"},\"e1b4\":{\"name\":\"Gps Not Fixed\"},\"e1b5\":{\"name\":\"Gps Off\"},\"e885\":{\"name\":\"Grade\"},\"e3e9\":{\"name\":\"Gradient\"},\"e3ea\":{\"name\":\"Grain\"},\"e1b8\":{\"name\":\"Graphic Eq\"},\"e3eb\":{\"name\":\"Grid Off\"},\"e3ec\":{\"name\":\"Grid On\"},\"e7ef\":{\"name\":\"Group\"},\"e7f0\":{\"name\":\"Group Add\"},\"e886\":{\"name\":\"Group Work\"},\"e052\":{\"name\":\"Hd\"},\"e3ed\":{\"name\":\"Hdr Off\"},\"e3ee\":{\"name\":\"Hdr On\"},\"e3f1\":{\"name\":\"Hdr Strong\"},\"e3f2\":{\"name\":\"Hdr Weak\"},\"e310\":{\"name\":\"Headset\"},\"e311\":{\"name\":\"Headset Mic\"},\"e3f3\":{\"name\":\"Healing\"},\"e023\":{\"name\":\"Hearing\"},\"e887\":{\"name\":\"Help\"},\"e8fd\":{\"name\":\"Help Outline\"},\"e024\":{\"name\":\"High Quality\"},\"e888\":{\"name\":\"Highlight Off\"},\"e889\":{\"name\":\"History\"},\"e88a\":{\"name\":\"Home\"},\"e53a\":{\"name\":\"Hotel\"},\"e88b\":{\"name\":\"Hourglass Empty\"},\"e88c\":{\"name\":\"Hourglass Full\"},\"e902\":{\"name\":\"Http\"},\"e88d\":{\"name\":\"Https\"},\"e3f4\":{\"name\":\"Image\"},\"e3f5\":{\"name\":\"Image Aspect Ratio\"},\"e0c3\":{\"name\":\"Import Export\"},\"e156\":{\"name\":\"Inbox\"},\"e909\":{\"name\":\"Indeterminate Check Box\"},\"e88e\":{\"name\":\"Info\"},\"e88f\":{\"name\":\"Info Outline\"},\"e890\":{\"name\":\"Input\"},\"e24b\":{\"name\":\"Insert Chart\"},\"e24c\":{\"name\":\"Insert Comment\"},\"e24d\":{\"name\":\"Insert Drive File\"},\"e24e\":{\"name\":\"Insert Emoticon\"},\"e24f\":{\"name\":\"Insert Invitation\"},\"e250\":{\"name\":\"Insert Link\"},\"e251\":{\"name\":\"Insert Photo\"},\"e891\":{\"name\":\"Invert Colors\"},\"e0c4\":{\"name\":\"Invert Colors Off\"},\"e3f6\":{\"name\":\"Iso\"},\"e312\":{\"name\":\"Keyboard\"},\"e313\":{\"name\":\"Keyboard Arrow Down\"},\"e314\":{\"name\":\"Keyboard Arrow Left\"},\"e315\":{\"name\":\"Keyboard Arrow Right\"},\"e316\":{\"name\":\"Keyboard Arrow Up\"},\"e317\":{\"name\":\"Keyboard Backspace\"},\"e318\":{\"name\":\"Keyboard Capslock\"},\"e31a\":{\"name\":\"Keyboard Hide\"},\"e31b\":{\"name\":\"Keyboard Return\"},\"e31c\":{\"name\":\"Keyboard Tab\"},\"e31d\":{\"name\":\"Keyboard Voice\"},\"e892\":{\"name\":\"Label\"},\"e893\":{\"name\":\"Label Outline\"},\"e3f7\":{\"name\":\"Landscape\"},\"e894\":{\"name\":\"Language\"},\"e31e\":{\"name\":\"Laptop\"},\"e31f\":{\"name\":\"Laptop Chromebook\"},\"e320\":{\"name\":\"Laptop Mac\"},\"e321\":{\"name\":\"Laptop Windows\"},\"e895\":{\"name\":\"Launch\"},\"e53b\":{\"name\":\"Layers\"},\"e53c\":{\"name\":\"Layers Clear\"},\"e3f8\":{\"name\":\"Leak Add\"},\"e3f9\":{\"name\":\"Leak Remove\"},\"e3fa\":{\"name\":\"Lens\"},\"e02e\":{\"name\":\"Library Add\"},\"e02f\":{\"name\":\"Library Books\"},\"e030\":{\"name\":\"Library Music\"},\"e157\":{\"name\":\"Link\"},\"e896\":{\"name\":\"List\"},\"e0c6\":{\"name\":\"Live Help\"},\"e639\":{\"name\":\"Live Tv\"},\"e53f\":{\"name\":\"Local Activity\"},\"e53d\":{\"name\":\"Local Airport\"},\"e53e\":{\"name\":\"Local Atm\"},\"e540\":{\"name\":\"Local Bar\"},\"e541\":{\"name\":\"Local Cafe\"},\"e542\":{\"name\":\"Local Car Wash\"},\"e543\":{\"name\":\"Local Convenience Store\"},\"e556\":{\"name\":\"Local Dining\"},\"e544\":{\"name\":\"Local Drink\"},\"e545\":{\"name\":\"Local Florist\"},\"e546\":{\"name\":\"Local Gas Station\"},\"e547\":{\"name\":\"Local Grocery Store\"},\"e548\":{\"name\":\"Local Hospital\"},\"e549\":{\"name\":\"Local Hotel\"},\"e54a\":{\"name\":\"Local Laundry Service\"},\"e54b\":{\"name\":\"Local Library\"},\"e54c\":{\"name\":\"Local Mall\"},\"e54d\":{\"name\":\"Local Movies\"},\"e54e\":{\"name\":\"Local Offer\"},\"e54f\":{\"name\":\"Local Parking\"},\"e550\":{\"name\":\"Local Pharmacy\"},\"e551\":{\"name\":\"Local Phone\"},\"e552\":{\"name\":\"Local Pizza\"},\"e553\":{\"name\":\"Local Play\"},\"e554\":{\"name\":\"Local Post Office\"},\"e555\":{\"name\":\"Local Printshop\"},\"e557\":{\"name\":\"Local See\"},\"e558\":{\"name\":\"Local Shipping\"},\"e559\":{\"name\":\"Local Taxi\"},\"e7f1\":{\"name\":\"Location City\"},\"e1b6\":{\"name\":\"Location Disabled\"},\"e0c7\":{\"name\":\"Location Off\"},\"e0c8\":{\"name\":\"Location On\"},\"e1b7\":{\"name\":\"Location Searching\"},\"e897\":{\"name\":\"Lock\"},\"e898\":{\"name\":\"Lock Open\"},\"e899\":{\"name\":\"Lock Outline\"},\"e3fc\":{\"name\":\"Looks\"},\"e3fb\":{\"name\":\"Looks 3\"},\"e3fd\":{\"name\":\"Looks 4\"},\"e3fe\":{\"name\":\"Looks 5\"},\"e3ff\":{\"name\":\"Looks 6\"},\"e400\":{\"name\":\"Looks One\"},\"e401\":{\"name\":\"Looks Two\"},\"e028\":{\"name\":\"Loop\"},\"e402\":{\"name\":\"Loupe\"},\"e89a\":{\"name\":\"Loyalty\"},\"e158\":{\"name\":\"Mail\"},\"e55b\":{\"name\":\"Map\"},\"e159\":{\"name\":\"Markunread\"},\"e89b\":{\"name\":\"Markunread Mailbox\"},\"e322\":{\"name\":\"Memory\"},\"e5d2\":{\"name\":\"Menu\"},\"e252\":{\"name\":\"Merge Type\"},\"e0c9\":{\"name\":\"Message\"},\"e029\":{\"name\":\"Mic\"},\"e02a\":{\"name\":\"Mic None\"},\"e02b\":{\"name\":\"Mic Off\"},\"e618\":{\"name\":\"Mms\"},\"e253\":{\"name\":\"Mode Comment\"},\"e254\":{\"name\":\"Mode Edit\"},\"e25c\":{\"name\":\"Money Off\"},\"e403\":{\"name\":\"Monochrome Photos\"},\"e7f2\":{\"name\":\"Mood\"},\"e7f3\":{\"name\":\"Mood Bad\"},\"e619\":{\"name\":\"More\"},\"e5d3\":{\"name\":\"More Horiz\"},\"e5d4\":{\"name\":\"More Vert\"},\"e323\":{\"name\":\"Mouse\"},\"e02c\":{\"name\":\"Movie\"},\"e404\":{\"name\":\"Movie Creation\"},\"e405\":{\"name\":\"Music Note\"},\"e55c\":{\"name\":\"My Location\"},\"e406\":{\"name\":\"Nature\"},\"e407\":{\"name\":\"Nature People\"},\"e408\":{\"name\":\"Navigate Before\"},\"e409\":{\"name\":\"Navigate Next\"},\"e55d\":{\"name\":\"Navigation\"},\"e1b9\":{\"name\":\"Network Cell\"},\"e61a\":{\"name\":\"Network Locked\"},\"e1ba\":{\"name\":\"Network Wifi\"},\"e031\":{\"name\":\"New Releases\"},\"e1bb\":{\"name\":\"Nfc\"},\"e0cc\":{\"name\":\"No Sim\"},\"e033\":{\"name\":\"Not Interested\"},\"e89c\":{\"name\":\"Note Add\"},\"e7f4\":{\"name\":\"Notifications\"},\"e7f7\":{\"name\":\"Notifications Active\"},\"e7f5\":{\"name\":\"Notifications None\"},\"e7f6\":{\"name\":\"Notifications Off\"},\"e7f8\":{\"name\":\"Notifications Paused\"},\"e90a\":{\"name\":\"Offline Pin\"},\"e63a\":{\"name\":\"Ondemand Video\"},\"e89d\":{\"name\":\"Open In Browser\"},\"e89e\":{\"name\":\"Open In New\"},\"e89f\":{\"name\":\"Open With\"},\"e7f9\":{\"name\":\"Pages\"},\"e8a0\":{\"name\":\"Pageview\"},\"e40a\":{\"name\":\"Palette\"},\"e40b\":{\"name\":\"Panorama\"},\"e40c\":{\"name\":\"Panorama Fish Eye\"},\"e40d\":{\"name\":\"Panorama Horizontal\"},\"e40e\":{\"name\":\"Panorama Vertical\"},\"e40f\":{\"name\":\"Panorama Wide Angle\"},\"e7fa\":{\"name\":\"Party Mode\"},\"e034\":{\"name\":\"Pause\"},\"e035\":{\"name\":\"Pause Circle Filled\"},\"e036\":{\"name\":\"Pause Circle Outline\"},\"e8a1\":{\"name\":\"Payment\"},\"e7fb\":{\"name\":\"People\"},\"e7fc\":{\"name\":\"People Outline\"},\"e8a2\":{\"name\":\"Perm Camera Mic\"},\"e8a3\":{\"name\":\"Perm Contact Calendar\"},\"e8a4\":{\"name\":\"Perm Data Setting\"},\"e8a5\":{\"name\":\"Perm Device Information\"},\"e8a6\":{\"name\":\"Perm Identity\"},\"e8a7\":{\"name\":\"Perm Media\"},\"e8a8\":{\"name\":\"Perm Phone Msg\"},\"e8a9\":{\"name\":\"Perm Scan Wifi\"},\"e7fd\":{\"name\":\"Person\"},\"e7fe\":{\"name\":\"Person Add\"},\"e7ff\":{\"name\":\"Person Outline\"},\"e55a\":{\"name\":\"Person Pin\"},\"e63b\":{\"name\":\"Personal Video\"},\"e0cd\":{\"name\":\"Phone\"},\"e324\":{\"name\":\"Phone Android\"},\"e61b\":{\"name\":\"Phone Bluetooth Speaker\"},\"e61c\":{\"name\":\"Phone Forwarded\"},\"e61d\":{\"name\":\"Phone In Talk\"},\"e325\":{\"name\":\"Phone Iphone\"},\"e61e\":{\"name\":\"Phone Locked\"},\"e61f\":{\"name\":\"Phone Missed\"},\"e620\":{\"name\":\"Phone Paused\"},\"e326\":{\"name\":\"Phonelink\"},\"e0db\":{\"name\":\"Phonelink Erase\"},\"e0dc\":{\"name\":\"Phonelink Lock\"},\"e327\":{\"name\":\"Phonelink Off\"},\"e0dd\":{\"name\":\"Phonelink Ring\"},\"e0de\":{\"name\":\"Phonelink Setup\"},\"e410\":{\"name\":\"Photo\"},\"e411\":{\"name\":\"Photo Album\"},\"e412\":{\"name\":\"Photo Camera\"},\"e413\":{\"name\":\"Photo Library\"},\"e432\":{\"name\":\"Photo Size Select Actual\"},\"e433\":{\"name\":\"Photo Size Select Large\"},\"e434\":{\"name\":\"Photo Size Select Small\"},\"e415\":{\"name\":\"Picture As Pdf\"},\"e8aa\":{\"name\":\"Picture In Picture\"},\"e55e\":{\"name\":\"Pin Drop\"},\"e55f\":{\"name\":\"Place\"},\"e037\":{\"name\":\"Play Arrow\"},\"e038\":{\"name\":\"Play Circle Filled\"},\"e039\":{\"name\":\"Play Circle Outline\"},\"e906\":{\"name\":\"Play For Work\"},\"e03b\":{\"name\":\"Playlist Add\"},\"e800\":{\"name\":\"Plus One\"},\"e801\":{\"name\":\"Poll\"},\"e8ab\":{\"name\":\"Polymer\"},\"e0ce\":{\"name\":\"Portable Wifi Off\"},\"e416\":{\"name\":\"Portrait\"},\"e63c\":{\"name\":\"Power\"},\"e336\":{\"name\":\"Power Input\"},\"e8ac\":{\"name\":\"Power Settings New\"},\"e0df\":{\"name\":\"Present To All\"},\"e8ad\":{\"name\":\"Print\"},\"e80b\":{\"name\":\"Public\"},\"e255\":{\"name\":\"Publish\"},\"e8ae\":{\"name\":\"Query Builder\"},\"e8af\":{\"name\":\"Question Answer\"},\"e03c\":{\"name\":\"Queue\"},\"e03d\":{\"name\":\"Queue Music\"},\"e03e\":{\"name\":\"Radio\"},\"e837\":{\"name\":\"Radio Button Checked\"},\"e836\":{\"name\":\"Radio Button Unchecked\"},\"e560\":{\"name\":\"Rate Review\"},\"e8b0\":{\"name\":\"Receipt\"},\"e03f\":{\"name\":\"Recent Actors\"},\"e8b1\":{\"name\":\"Redeem\"},\"e15a\":{\"name\":\"Redo\"},\"e5d5\":{\"name\":\"Refresh\"},\"e15b\":{\"name\":\"Remove\"},\"e15c\":{\"name\":\"Remove Circle\"},\"e15d\":{\"name\":\"Remove Circle Outline\"},\"e417\":{\"name\":\"Remove Red Eye\"},\"e8fe\":{\"name\":\"Reorder\"},\"e040\":{\"name\":\"Repeat\"},\"e041\":{\"name\":\"Repeat One\"},\"e042\":{\"name\":\"Replay\"},\"e059\":{\"name\":\"Replay 10\"},\"e05a\":{\"name\":\"Replay 30\"},\"e05b\":{\"name\":\"Replay 5\"},\"e15e\":{\"name\":\"Reply\"},\"e15f\":{\"name\":\"Reply All\"},\"e160\":{\"name\":\"Report\"},\"e8b2\":{\"name\":\"Report Problem\"},\"e561\":{\"name\":\"Restaurant Menu\"},\"e8b3\":{\"name\":\"Restore\"},\"e0d1\":{\"name\":\"Ring Volume\"},\"e8b4\":{\"name\":\"Room\"},\"e418\":{\"name\":\"Rotate 90 Degrees Ccw\"},\"e419\":{\"name\":\"Rotate Left\"},\"e41a\":{\"name\":\"Rotate Right\"},\"e328\":{\"name\":\"Router\"},\"e562\":{\"name\":\"Satellite\"},\"e161\":{\"name\":\"Save\"},\"e329\":{\"name\":\"Scanner\"},\"e8b5\":{\"name\":\"Schedule\"},\"e80c\":{\"name\":\"School\"},\"e1be\":{\"name\":\"Screen Lock Landscape\"},\"e1bf\":{\"name\":\"Screen Lock Portrait\"},\"e1c0\":{\"name\":\"Screen Lock Rotation\"},\"e1c1\":{\"name\":\"Screen Rotation\"},\"e623\":{\"name\":\"Sd Card\"},\"e1c2\":{\"name\":\"Sd Storage\"},\"e8b6\":{\"name\":\"Search\"},\"e32a\":{\"name\":\"Security\"},\"e162\":{\"name\":\"Select All\"},\"e163\":{\"name\":\"Send\"},\"e8b8\":{\"name\":\"Settings\"},\"e8b9\":{\"name\":\"Settings Applications\"},\"e8ba\":{\"name\":\"Settings Backup Restore\"},\"e8bb\":{\"name\":\"Settings Bluetooth\"},\"e8bd\":{\"name\":\"Settings Brightness\"},\"e8bc\":{\"name\":\"Settings Cell\"},\"e8be\":{\"name\":\"Settings Ethernet\"},\"e8bf\":{\"name\":\"Settings Input Antenna\"},\"e8c0\":{\"name\":\"Settings Input Component\"},\"e8c1\":{\"name\":\"Settings Input Composite\"},\"e8c2\":{\"name\":\"Settings Input Hdmi\"},\"e8c3\":{\"name\":\"Settings Input Svideo\"},\"e8c4\":{\"name\":\"Settings Overscan\"},\"e8c5\":{\"name\":\"Settings Phone\"},\"e8c6\":{\"name\":\"Settings Power\"},\"e8c7\":{\"name\":\"Settings Remote\"},\"e1c3\":{\"name\":\"Settings System Daydream\"},\"e8c8\":{\"name\":\"Settings Voice\"},\"e80d\":{\"name\":\"Share\"},\"e8c9\":{\"name\":\"Shop\"},\"e8ca\":{\"name\":\"Shop Two\"},\"e8cb\":{\"name\":\"Shopping Basket\"},\"e8cc\":{\"name\":\"Shopping Cart\"},\"e043\":{\"name\":\"Shuffle\"},\"e1c8\":{\"name\":\"Signal Cellular 4 Bar\"},\"e1cd\":{\"name\":\"Signal Cellular Connected No Internet 4 Bar\"},\"e1ce\":{\"name\":\"Signal Cellular No Sim\"},\"e1cf\":{\"name\":\"Signal Cellular Null\"},\"e1d0\":{\"name\":\"Signal Cellular Off\"},\"e1d8\":{\"name\":\"Signal Wifi 4 Bar\"},\"e1d9\":{\"name\":\"Signal Wifi 4 Bar Lock\"},\"e1da\":{\"name\":\"Signal Wifi Off\"},\"e32b\":{\"name\":\"Sim Card\"},\"e624\":{\"name\":\"Sim Card Alert\"},\"e044\":{\"name\":\"Skip Next\"},\"e045\":{\"name\":\"Skip Previous\"},\"e41b\":{\"name\":\"Slideshow\"},\"e32c\":{\"name\":\"Smartphone\"},\"e625\":{\"name\":\"Sms\"},\"e626\":{\"name\":\"Sms Failed\"},\"e046\":{\"name\":\"Snooze\"},\"e164\":{\"name\":\"Sort\"},\"e053\":{\"name\":\"Sort By Alpha\"},\"e256\":{\"name\":\"Space Bar\"},\"e32d\":{\"name\":\"Speaker\"},\"e32e\":{\"name\":\"Speaker Group\"},\"e8cd\":{\"name\":\"Speaker Notes\"},\"e0d2\":{\"name\":\"Speaker Phone\"},\"e8ce\":{\"name\":\"Spellcheck\"},\"e838\":{\"name\":\"Star\"},\"e83a\":{\"name\":\"Star Border\"},\"e839\":{\"name\":\"Star Half\"},\"e8d0\":{\"name\":\"Stars\"},\"e0d3\":{\"name\":\"Stay Current Landscape\"},\"e0d4\":{\"name\":\"Stay Current Portrait\"},\"e0d5\":{\"name\":\"Stay Primary Landscape\"},\"e0d6\":{\"name\":\"Stay Primary Portrait\"},\"e047\":{\"name\":\"Stop\"},\"e1db\":{\"name\":\"Storage\"},\"e8d1\":{\"name\":\"Store\"},\"e563\":{\"name\":\"Store Mall Directory\"},\"e41c\":{\"name\":\"Straighten\"},\"e257\":{\"name\":\"Strikethrough S\"},\"e41d\":{\"name\":\"Style\"},\"e8d2\":{\"name\":\"Subject\"},\"e048\":{\"name\":\"Subtitles\"},\"e8d3\":{\"name\":\"Supervisor Account\"},\"e049\":{\"name\":\"Surround Sound\"},\"e0d7\":{\"name\":\"Swap Calls\"},\"e8d4\":{\"name\":\"Swap Horiz\"},\"e8d5\":{\"name\":\"Swap Vert\"},\"e8d6\":{\"name\":\"Swap Vertical Circle\"},\"e41e\":{\"name\":\"Switch Camera\"},\"e41f\":{\"name\":\"Switch Video\"},\"e627\":{\"name\":\"Sync\"},\"e628\":{\"name\":\"Sync Disabled\"},\"e629\":{\"name\":\"Sync Problem\"},\"e62a\":{\"name\":\"System Update\"},\"e8d7\":{\"name\":\"System Update Alt\"},\"e8d8\":{\"name\":\"Tab\"},\"e8d9\":{\"name\":\"Tab Unselected\"},\"e32f\":{\"name\":\"Tablet\"},\"e330\":{\"name\":\"Tablet Android\"},\"e331\":{\"name\":\"Tablet Mac\"},\"e420\":{\"name\":\"Tag Faces\"},\"e62b\":{\"name\":\"Tap And Play\"},\"e564\":{\"name\":\"Terrain\"},\"e165\":{\"name\":\"Text Format\"},\"e0d8\":{\"name\":\"Textsms\"},\"e421\":{\"name\":\"Texture\"},\"e8da\":{\"name\":\"Theaters\"},\"e8db\":{\"name\":\"Thumb Down\"},\"e8dc\":{\"name\":\"Thumb Up\"},\"e8dd\":{\"name\":\"Thumbs Up Down\"},\"e62c\":{\"name\":\"Time To Leave\"},\"e422\":{\"name\":\"Timelapse\"},\"e425\":{\"name\":\"Timer\"},\"e423\":{\"name\":\"Timer 10\"},\"e424\":{\"name\":\"Timer 3\"},\"e426\":{\"name\":\"Timer Off\"},\"e8de\":{\"name\":\"Toc\"},\"e8df\":{\"name\":\"Today\"},\"e8e0\":{\"name\":\"Toll\"},\"e427\":{\"name\":\"Tonality\"},\"e332\":{\"name\":\"Toys\"},\"e8e1\":{\"name\":\"Track Changes\"},\"e565\":{\"name\":\"Traffic\"},\"e428\":{\"name\":\"Transform\"},\"e8e2\":{\"name\":\"Translate\"},\"e8e3\":{\"name\":\"Trending Down\"},\"e8e4\":{\"name\":\"Trending Flat\"},\"e8e5\":{\"name\":\"Trending Up\"},\"e429\":{\"name\":\"Tune\"},\"e8e6\":{\"name\":\"Turned In\"},\"e8e7\":{\"name\":\"Turned In Not\"},\"e333\":{\"name\":\"Tv\"},\"e166\":{\"name\":\"Undo\"},\"e5d6\":{\"name\":\"Unfold Less\"},\"e5d7\":{\"name\":\"Unfold More\"},\"e1e0\":{\"name\":\"Usb\"},\"e8e8\":{\"name\":\"Verified User\"},\"e258\":{\"name\":\"Vertical Align Bottom\"},\"e259\":{\"name\":\"Vertical Align Center\"},\"e25a\":{\"name\":\"Vertical Align Top\"},\"e62d\":{\"name\":\"Vibration\"},\"e04a\":{\"name\":\"Video Library\"},\"e04b\":{\"name\":\"Videocam\"},\"e04c\":{\"name\":\"Videocam Off\"},\"e8e9\":{\"name\":\"View Agenda\"},\"e8ea\":{\"name\":\"View Array\"},\"e8eb\":{\"name\":\"View Carousel\"},\"e8ec\":{\"name\":\"View Column\"},\"e42a\":{\"name\":\"View Comfy\"},\"e42b\":{\"name\":\"View Compact\"},\"e8ed\":{\"name\":\"View Day\"},\"e8ee\":{\"name\":\"View Headline\"},\"e8ef\":{\"name\":\"View List\"},\"e8f0\":{\"name\":\"View Module\"},\"e8f1\":{\"name\":\"View Quilt\"},\"e8f2\":{\"name\":\"View Stream\"},\"e8f3\":{\"name\":\"View Week\"},\"e435\":{\"name\":\"Vignette\"},\"e8f4\":{\"name\":\"Visibility\"},\"e8f5\":{\"name\":\"Visibility Off\"},\"e62e\":{\"name\":\"Voice Chat\"},\"e0d9\":{\"name\":\"Voicemail\"},\"e04d\":{\"name\":\"Volume Down\"},\"e04e\":{\"name\":\"Volume Mute\"},\"e04f\":{\"name\":\"Volume Off\"},\"e050\":{\"name\":\"Volume Up\"},\"e0da\":{\"name\":\"Vpn Key\"},\"e62f\":{\"name\":\"Vpn Lock\"},\"e1bc\":{\"name\":\"Wallpaper\"},\"e002\":{\"name\":\"Warning\"},\"e334\":{\"name\":\"Watch\"},\"e42c\":{\"name\":\"Wb Auto\"},\"e42d\":{\"name\":\"Wb Cloudy\"},\"e42e\":{\"name\":\"Wb Incandescent\"},\"e436\":{\"name\":\"Wb Iridescent\"},\"e430\":{\"name\":\"Wb Sunny\"},\"e63d\":{\"name\":\"Wc\"},\"e051\":{\"name\":\"Web\"},\"e80e\":{\"name\":\"Whatshot\"},\"e1bd\":{\"name\":\"Widgets\"},\"e63e\":{\"name\":\"Wifi\"},\"e1e1\":{\"name\":\"Wifi Lock\"},\"e1e2\":{\"name\":\"Wifi Tethering\"},\"e8f9\":{\"name\":\"Work\"},\"e25b\":{\"name\":\"Wrap Text\"},\"e8fa\":{\"name\":\"Youtube Searched For\"},\"e8ff\":{\"name\":\"Zoom In\"},\"e900\":{\"name\":\"Zoom Out\"}}}"
  },
  {
    "path": "amd/src/assets/font/iconfont/README.md",
    "content": "The recommended way to use the Material Icons font is hosted by Google Fonts,\navailable here:\n\n```\n<link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\">\n```\n\nRead more in our full usage guide:\nhttp://google.github.io/material-design-icons/#icon-font-for-the-web\n\n"
  },
  {
    "path": "amd/src/assets/font/iconfont/codepoints",
    "content": "3d_rotation e84d\naccess_alarm e190\naccess_alarms e191\naccess_time e192\naccessibility e84e\naccount_balance e84f\naccount_balance_wallet e850\naccount_box e851\naccount_circle e853\nadb e60e\nadd e145\nadd_alarm e193\nadd_alert e003\nadd_box e146\nadd_circle e147\nadd_circle_outline e148\nadd_shopping_cart e854\nadd_to_photos e39d\nadjust e39e\nairline_seat_flat e630\nairline_seat_flat_angled e631\nairline_seat_individual_suite e632\nairline_seat_legroom_extra e633\nairline_seat_legroom_normal e634\nairline_seat_legroom_reduced e635\nairline_seat_recline_extra e636\nairline_seat_recline_normal e637\nairplanemode_active e195\nairplanemode_inactive e194\nairplay e055\nalarm e855\nalarm_add e856\nalarm_off e857\nalarm_on e858\nalbum e019\nandroid e859\nannouncement e85a\napps e5c3\narchive e149\narrow_back e5c4\narrow_drop_down e5c5\narrow_drop_down_circle e5c6\narrow_drop_up e5c7\narrow_forward e5c8\naspect_ratio e85b\nassessment e85c\nassignment e85d\nassignment_ind e85e\nassignment_late e85f\nassignment_return e860\nassignment_returned e861\nassignment_turned_in e862\nassistant e39f\nassistant_photo e3a0\nattach_file e226\nattach_money e227\nattachment e2bc\naudiotrack e3a1\nautorenew e863\nav_timer e01b\nbackspace e14a\nbackup e864\nbattery_alert e19c\nbattery_charging_full e1a3\nbattery_full e1a4\nbattery_std e1a5\nbattery_unknown e1a6\nbeenhere e52d\nblock e14b\nbluetooth e1a7\nbluetooth_audio e60f\nbluetooth_connected e1a8\nbluetooth_disabled e1a9\nbluetooth_searching e1aa\nblur_circular e3a2\nblur_linear e3a3\nblur_off e3a4\nblur_on e3a5\nbook e865\nbookmark e866\nbookmark_border e867\nborder_all e228\nborder_bottom e229\nborder_clear e22a\nborder_color e22b\nborder_horizontal e22c\nborder_inner e22d\nborder_left e22e\nborder_outer e22f\nborder_right e230\nborder_style e231\nborder_top e232\nborder_vertical e233\nbrightness_1 e3a6\nbrightness_2 e3a7\nbrightness_3 e3a8\nbrightness_4 e3a9\nbrightness_5 e3aa\nbrightness_6 e3ab\nbrightness_7 e3ac\nbrightness_auto e1ab\nbrightness_high e1ac\nbrightness_low e1ad\nbrightness_medium e1ae\nbroken_image e3ad\nbrush e3ae\nbug_report e868\nbuild e869\nbusiness e0af\ncached e86a\ncake e7e9\ncall e0b0\ncall_end e0b1\ncall_made e0b2\ncall_merge e0b3\ncall_missed e0b4\ncall_received e0b5\ncall_split e0b6\ncamera e3af\ncamera_alt e3b0\ncamera_enhance e8fc\ncamera_front e3b1\ncamera_rear e3b2\ncamera_roll e3b3\ncancel e5c9\ncard_giftcard e8f6\ncard_membership e8f7\ncard_travel e8f8\ncast e307\ncast_connected e308\ncenter_focus_strong e3b4\ncenter_focus_weak e3b5\nchange_history e86b\nchat e0b7\nchat_bubble e0ca\nchat_bubble_outline e0cb\ncheck e5ca\ncheck_box e834\ncheck_box_outline_blank e835\ncheck_circle e86c\nchevron_left e5cb\nchevron_right e5cc\nchrome_reader_mode e86d\nclass e86e\nclear e14c\nclear_all e0b8\nclose e5cd\nclosed_caption e01c\ncloud e2bd\ncloud_circle e2be\ncloud_done e2bf\ncloud_download e2c0\ncloud_off e2c1\ncloud_queue e2c2\ncloud_upload e2c3\ncode e86f\ncollections e3b6\ncollections_bookmark e431\ncolor_lens e3b7\ncolorize e3b8\ncomment e0b9\ncompare e3b9\ncomputer e30a\nconfirmation_number e638\ncontact_phone e0cf\ncontacts e0ba\ncontent_copy e14d\ncontent_cut e14e\ncontent_paste e14f\ncontrol_point e3ba\ncontrol_point_duplicate e3bb\ncreate e150\ncredit_card e870\ncrop e3be\ncrop_16_9 e3bc\ncrop_3_2 e3bd\ncrop_5_4 e3bf\ncrop_7_5 e3c0\ncrop_din e3c1\ncrop_free e3c2\ncrop_landscape e3c3\ncrop_original e3c4\ncrop_portrait e3c5\ncrop_square e3c6\ndashboard e871\ndata_usage e1af\ndehaze e3c7\ndelete e872\ndescription e873\ndesktop_mac e30b\ndesktop_windows e30c\ndetails e3c8\ndeveloper_board e30d\ndeveloper_mode e1b0\ndevice_hub e335\ndevices e1b1\ndialer_sip e0bb\ndialpad e0bc\ndirections e52e\ndirections_bike e52f\ndirections_boat e532\ndirections_bus e530\ndirections_car e531\ndirections_railway e534\ndirections_run e566\ndirections_subway e533\ndirections_transit e535\ndirections_walk e536\ndisc_full e610\ndns e875\ndo_not_disturb e612\ndo_not_disturb_alt e611\ndock e30e\ndomain e7ee\ndone e876\ndone_all e877\ndrafts e151\ndrive_eta e613\ndvr e1b2\nedit e3c9\neject e8fb\nemail e0be\nequalizer e01d\nerror e000\nerror_outline e001\nevent e878\nevent_available e614\nevent_busy e615\nevent_note e616\nevent_seat e903\nexit_to_app e879\nexpand_less e5ce\nexpand_more e5cf\nexplicit e01e\nexplore e87a\nexposure e3ca\nexposure_neg_1 e3cb\nexposure_neg_2 e3cc\nexposure_plus_1 e3cd\nexposure_plus_2 e3ce\nexposure_zero e3cf\nextension e87b\nface e87c\nfast_forward e01f\nfast_rewind e020\nfavorite e87d\nfavorite_border e87e\nfeedback e87f\nfile_download e2c4\nfile_upload e2c6\nfilter e3d3\nfilter_1 e3d0\nfilter_2 e3d1\nfilter_3 e3d2\nfilter_4 e3d4\nfilter_5 e3d5\nfilter_6 e3d6\nfilter_7 e3d7\nfilter_8 e3d8\nfilter_9 e3d9\nfilter_9_plus e3da\nfilter_b_and_w e3db\nfilter_center_focus e3dc\nfilter_drama e3dd\nfilter_frames e3de\nfilter_hdr e3df\nfilter_list e152\nfilter_none e3e0\nfilter_tilt_shift e3e2\nfilter_vintage e3e3\nfind_in_page e880\nfind_replace e881\nflag e153\nflare e3e4\nflash_auto e3e5\nflash_off e3e6\nflash_on e3e7\nflight e539\nflight_land e904\nflight_takeoff e905\nflip e3e8\nflip_to_back e882\nflip_to_front e883\nfolder e2c7\nfolder_open e2c8\nfolder_shared e2c9\nfolder_special e617\nfont_download e167\nformat_align_center e234\nformat_align_justify e235\nformat_align_left e236\nformat_align_right e237\nformat_bold e238\nformat_clear e239\nformat_color_fill e23a\nformat_color_reset e23b\nformat_color_text e23c\nformat_indent_decrease e23d\nformat_indent_increase e23e\nformat_italic e23f\nformat_line_spacing e240\nformat_list_bulleted e241\nformat_list_numbered e242\nformat_paint e243\nformat_quote e244\nformat_size e245\nformat_strikethrough e246\nformat_textdirection_l_to_r e247\nformat_textdirection_r_to_l e248\nformat_underlined e249\nforum e0bf\nforward e154\nforward_10 e056\nforward_30 e057\nforward_5 e058\nfullscreen e5d0\nfullscreen_exit e5d1\nfunctions e24a\ngamepad e30f\ngames e021\ngesture e155\nget_app e884\ngif e908\ngps_fixed e1b3\ngps_not_fixed e1b4\ngps_off e1b5\ngrade e885\ngradient e3e9\ngrain e3ea\ngraphic_eq e1b8\ngrid_off e3eb\ngrid_on e3ec\ngroup e7ef\ngroup_add e7f0\ngroup_work e886\nhd e052\nhdr_off e3ed\nhdr_on e3ee\nhdr_strong e3f1\nhdr_weak e3f2\nheadset e310\nheadset_mic e311\nhealing e3f3\nhearing e023\nhelp e887\nhelp_outline e8fd\nhigh_quality e024\nhighlight_off e888\nhistory e889\nhome e88a\nhotel e53a\nhourglass_empty e88b\nhourglass_full e88c\nhttp e902\nhttps e88d\nimage e3f4\nimage_aspect_ratio e3f5\nimport_export e0c3\ninbox e156\nindeterminate_check_box e909\ninfo e88e\ninfo_outline e88f\ninput e890\ninsert_chart e24b\ninsert_comment e24c\ninsert_drive_file e24d\ninsert_emoticon e24e\ninsert_invitation e24f\ninsert_link e250\ninsert_photo e251\ninvert_colors e891\ninvert_colors_off e0c4\niso e3f6\nkeyboard e312\nkeyboard_arrow_down e313\nkeyboard_arrow_left e314\nkeyboard_arrow_right e315\nkeyboard_arrow_up e316\nkeyboard_backspace e317\nkeyboard_capslock e318\nkeyboard_hide e31a\nkeyboard_return e31b\nkeyboard_tab e31c\nkeyboard_voice e31d\nlabel e892\nlabel_outline e893\nlandscape e3f7\nlanguage e894\nlaptop e31e\nlaptop_chromebook e31f\nlaptop_mac e320\nlaptop_windows e321\nlaunch e895\nlayers e53b\nlayers_clear e53c\nleak_add e3f8\nleak_remove e3f9\nlens e3fa\nlibrary_add e02e\nlibrary_books e02f\nlibrary_music e030\nlink e157\nlist e896\nlive_help e0c6\nlive_tv e639\nlocal_activity e53f\nlocal_airport e53d\nlocal_atm e53e\nlocal_bar e540\nlocal_cafe e541\nlocal_car_wash e542\nlocal_convenience_store e543\nlocal_dining e556\nlocal_drink e544\nlocal_florist e545\nlocal_gas_station e546\nlocal_grocery_store e547\nlocal_hospital e548\nlocal_hotel e549\nlocal_laundry_service e54a\nlocal_library e54b\nlocal_mall e54c\nlocal_movies e54d\nlocal_offer e54e\nlocal_parking e54f\nlocal_pharmacy e550\nlocal_phone e551\nlocal_pizza e552\nlocal_play e553\nlocal_post_office e554\nlocal_printshop e555\nlocal_see e557\nlocal_shipping e558\nlocal_taxi e559\nlocation_city e7f1\nlocation_disabled e1b6\nlocation_off e0c7\nlocation_on e0c8\nlocation_searching e1b7\nlock e897\nlock_open e898\nlock_outline e899\nlooks e3fc\nlooks_3 e3fb\nlooks_4 e3fd\nlooks_5 e3fe\nlooks_6 e3ff\nlooks_one e400\nlooks_two e401\nloop e028\nloupe e402\nloyalty e89a\nmail e158\nmap e55b\nmarkunread e159\nmarkunread_mailbox e89b\nmemory e322\nmenu e5d2\nmerge_type e252\nmessage e0c9\nmic e029\nmic_none e02a\nmic_off e02b\nmms e618\nmode_comment e253\nmode_edit e254\nmoney_off e25c\nmonochrome_photos e403\nmood e7f2\nmood_bad e7f3\nmore e619\nmore_horiz e5d3\nmore_vert e5d4\nmouse e323\nmovie e02c\nmovie_creation e404\nmusic_note e405\nmy_location e55c\nnature e406\nnature_people e407\nnavigate_before e408\nnavigate_next e409\nnavigation e55d\nnetwork_cell e1b9\nnetwork_locked e61a\nnetwork_wifi e1ba\nnew_releases e031\nnfc e1bb\nno_sim e0cc\nnot_interested e033\nnote_add e89c\nnotifications e7f4\nnotifications_active e7f7\nnotifications_none e7f5\nnotifications_off e7f6\nnotifications_paused e7f8\noffline_pin e90a\nondemand_video e63a\nopen_in_browser e89d\nopen_in_new e89e\nopen_with e89f\npages e7f9\npageview e8a0\npalette e40a\npanorama e40b\npanorama_fish_eye e40c\npanorama_horizontal e40d\npanorama_vertical e40e\npanorama_wide_angle e40f\nparty_mode e7fa\npause e034\npause_circle_filled e035\npause_circle_outline e036\npayment e8a1\npeople e7fb\npeople_outline e7fc\nperm_camera_mic e8a2\nperm_contact_calendar e8a3\nperm_data_setting e8a4\nperm_device_information e8a5\nperm_identity e8a6\nperm_media e8a7\nperm_phone_msg e8a8\nperm_scan_wifi e8a9\nperson e7fd\nperson_add e7fe\nperson_outline e7ff\nperson_pin e55a\npersonal_video e63b\nphone e0cd\nphone_android e324\nphone_bluetooth_speaker e61b\nphone_forwarded e61c\nphone_in_talk e61d\nphone_iphone e325\nphone_locked e61e\nphone_missed e61f\nphone_paused e620\nphonelink e326\nphonelink_erase e0db\nphonelink_lock e0dc\nphonelink_off e327\nphonelink_ring e0dd\nphonelink_setup e0de\nphoto e410\nphoto_album e411\nphoto_camera e412\nphoto_library e413\nphoto_size_select_actual e432\nphoto_size_select_large e433\nphoto_size_select_small e434\npicture_as_pdf e415\npicture_in_picture e8aa\npin_drop e55e\nplace e55f\nplay_arrow e037\nplay_circle_filled e038\nplay_circle_outline e039\nplay_for_work e906\nplaylist_add e03b\nplus_one e800\npoll e801\npolymer e8ab\nportable_wifi_off e0ce\nportrait e416\npower e63c\npower_input e336\npower_settings_new e8ac\npresent_to_all e0df\nprint e8ad\npublic e80b\npublish e255\nquery_builder e8ae\nquestion_answer e8af\nqueue e03c\nqueue_music e03d\nradio e03e\nradio_button_checked e837\nradio_button_unchecked e836\nrate_review e560\nreceipt e8b0\nrecent_actors e03f\nredeem e8b1\nredo e15a\nrefresh e5d5\nremove e15b\nremove_circle e15c\nremove_circle_outline e15d\nremove_red_eye e417\nreorder e8fe\nrepeat e040\nrepeat_one e041\nreplay e042\nreplay_10 e059\nreplay_30 e05a\nreplay_5 e05b\nreply e15e\nreply_all e15f\nreport e160\nreport_problem e8b2\nrestaurant_menu e561\nrestore e8b3\nring_volume e0d1\nroom e8b4\nrotate_90_degrees_ccw e418\nrotate_left e419\nrotate_right e41a\nrouter e328\nsatellite e562\nsave e161\nscanner e329\nschedule e8b5\nschool e80c\nscreen_lock_landscape e1be\nscreen_lock_portrait e1bf\nscreen_lock_rotation e1c0\nscreen_rotation e1c1\nsd_card e623\nsd_storage e1c2\nsearch e8b6\nsecurity e32a\nselect_all e162\nsend e163\nsettings e8b8\nsettings_applications e8b9\nsettings_backup_restore e8ba\nsettings_bluetooth e8bb\nsettings_brightness e8bd\nsettings_cell e8bc\nsettings_ethernet e8be\nsettings_input_antenna e8bf\nsettings_input_component e8c0\nsettings_input_composite e8c1\nsettings_input_hdmi e8c2\nsettings_input_svideo e8c3\nsettings_overscan e8c4\nsettings_phone e8c5\nsettings_power e8c6\nsettings_remote e8c7\nsettings_system_daydream e1c3\nsettings_voice e8c8\nshare e80d\nshop e8c9\nshop_two e8ca\nshopping_basket e8cb\nshopping_cart e8cc\nshuffle e043\nsignal_cellular_4_bar e1c8\nsignal_cellular_connected_no_internet_4_bar e1cd\nsignal_cellular_no_sim e1ce\nsignal_cellular_null e1cf\nsignal_cellular_off e1d0\nsignal_wifi_4_bar e1d8\nsignal_wifi_4_bar_lock e1d9\nsignal_wifi_off e1da\nsim_card e32b\nsim_card_alert e624\nskip_next e044\nskip_previous e045\nslideshow e41b\nsmartphone e32c\nsms e625\nsms_failed e626\nsnooze e046\nsort e164\nsort_by_alpha e053\nspace_bar e256\nspeaker e32d\nspeaker_group e32e\nspeaker_notes e8cd\nspeaker_phone e0d2\nspellcheck e8ce\nstar e838\nstar_border e83a\nstar_half e839\nstars e8d0\nstay_current_landscape e0d3\nstay_current_portrait e0d4\nstay_primary_landscape e0d5\nstay_primary_portrait e0d6\nstop e047\nstorage e1db\nstore e8d1\nstore_mall_directory e563\nstraighten e41c\nstrikethrough_s e257\nstyle e41d\nsubject e8d2\nsubtitles e048\nsupervisor_account e8d3\nsurround_sound e049\nswap_calls e0d7\nswap_horiz e8d4\nswap_vert e8d5\nswap_vertical_circle e8d6\nswitch_camera e41e\nswitch_video e41f\nsync e627\nsync_disabled e628\nsync_problem e629\nsystem_update e62a\nsystem_update_alt e8d7\ntab e8d8\ntab_unselected e8d9\ntablet e32f\ntablet_android e330\ntablet_mac e331\ntag_faces e420\ntap_and_play e62b\nterrain e564\ntext_format e165\ntextsms e0d8\ntexture e421\ntheaters e8da\nthumb_down e8db\nthumb_up e8dc\nthumbs_up_down e8dd\ntime_to_leave e62c\ntimelapse e422\ntimer e425\ntimer_10 e423\ntimer_3 e424\ntimer_off e426\ntoc e8de\ntoday e8df\ntoll e8e0\ntonality e427\ntoys e332\ntrack_changes e8e1\ntraffic e565\ntransform e428\ntranslate e8e2\ntrending_down e8e3\ntrending_flat e8e4\ntrending_up e8e5\ntune e429\nturned_in e8e6\nturned_in_not e8e7\ntv e333\nundo e166\nunfold_less e5d6\nunfold_more e5d7\nusb e1e0\nverified_user e8e8\nvertical_align_bottom e258\nvertical_align_center e259\nvertical_align_top e25a\nvibration e62d\nvideo_library e04a\nvideocam e04b\nvideocam_off e04c\nview_agenda e8e9\nview_array e8ea\nview_carousel e8eb\nview_column e8ec\nview_comfy e42a\nview_compact e42b\nview_day e8ed\nview_headline e8ee\nview_list e8ef\nview_module e8f0\nview_quilt e8f1\nview_stream e8f2\nview_week e8f3\nvignette e435\nvisibility e8f4\nvisibility_off e8f5\nvoice_chat e62e\nvoicemail e0d9\nvolume_down e04d\nvolume_mute e04e\nvolume_off e04f\nvolume_up e050\nvpn_key e0da\nvpn_lock e62f\nwallpaper e1bc\nwarning e002\nwatch e334\nwb_auto e42c\nwb_cloudy e42d\nwb_incandescent e42e\nwb_iridescent e436\nwb_sunny e430\nwc e63d\nweb e051\nwhatshot e80e\nwidgets e1bd\nwifi e63e\nwifi_lock e1e1\nwifi_tethering e1e2\nwork e8f9\nwrap_text e25b\nyoutube_searched_for e8fa\nzoom_in e8ff\nzoom_out e900\n"
  },
  {
    "path": "amd/src/assets/font/material-design-icons/LICENSE.txt",
    "content": "https://github.com/google/material-design-icons/blob/master/LICENSE\nhttps://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt\n\nAttribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n    wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public:\n    wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n\n     including for purposes of Section 3(b); and\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the \"Licensor.\" Except for the limited purpose of indicating\nthat material is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "amd/src/assets/js/bootstrap/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "amd/src/assets/js/bootstrap/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "amd/src/assets/js/bootstrap/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.6\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.6\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.6'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.6\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.6'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"]') || $(e.target).is('input[type=\"checkbox\"]'))) e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.6\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.6'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.6\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.6'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.6\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.6'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.6\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.6'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.6\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.6'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.6\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.6'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.6\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.6'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.6\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.6'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.6\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.6'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "amd/src/assets/js/bootstrap/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "amd/src/assets/js/bootstrap-material-design/css/bootstrap-material-design.css",
    "content": "/*\n\nTo get this list of colors inject jQuery at http://www.google.com/design/spec/style/color.html#color-color-palette\n\nThen, run this script to get the list.\n\n\n(function() {\n  var colors = {}, main = {};\n  $(\".color-group\").each(function() {\n    var color = $(this).find(\".name\").text().trim().toLowerCase().replace(\" \", \"-\");\n    colors[color] = {};\n\n    $(this).find(\".color\").not(\".main-color\").each(function() {\n      var shade = $(this).find(\".shade\").text().trim(),\n          hex   = $(this).find(\".hex\").text().trim();\n\n      colors[color][shade] = hex;\n    });\n    main[color] = color + \"-\" + $(this).find(\".main-color .shade\").text().trim();\n\n  });\n  var LESS = \"\";\n  $.each(colors, function(name, shades) {\n    LESS += \"\\n\\n\";\n    $.each(shades, function(shade, hex) {\n      LESS += \"@\" + name + \"-\" + shade + \": \" + hex + \";\\n\";\n    });\n    if (main[name]) {\n      LESS += \"@\" + name + \": \" + main[name] + \";\\n\";\n    }\n  });\n  console.log(LESS);\n})();\n\n\n*/\n/* ANIMATION */\n/* SHADOWS */\n/* Shadows (from mdl http://www.getmdl.io/) */\nbody {\n  background-color: #EEEEEE;\n}\nbody.inverse {\n  background: #333333;\n}\nbody.inverse,\nbody.inverse .form-control {\n  color: rgba(255,255,255, 0.84);\n}\nbody.inverse .modal,\nbody.inverse .panel-default,\nbody.inverse .card,\nbody.inverse .modal .form-control,\nbody.inverse .panel-default .form-control,\nbody.inverse .card .form-control {\n  background-color: initial;\n  color: initial;\n}\nbody,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4 {\n  font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n  font-weight: 300;\n}\nh5,\nh6 {\n  font-weight: 400;\n}\na,\na:hover,\na:focus {\n  color: #009688;\n}\na .material-icons,\na:hover .material-icons,\na:focus .material-icons {\n  vertical-align: middle;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 0;\n}\n.form-horizontal .radio {\n  margin-bottom: 10px;\n}\n.form-horizontal label {\n  text-align: right;\n}\n.form-horizontal label.control-label {\n  margin: 0;\n}\nbody .container .well.well-sm,\nbody .container-fluid .well.well-sm {\n  padding: 10px;\n}\nbody .container .well.well-lg,\nbody .container-fluid .well.well-lg {\n  padding: 26px;\n}\nbody .container .well,\nbody .container-fluid .well,\nbody .container .jumbotron,\nbody .container-fluid .jumbotron {\n  background-color: #fff;\n  padding: 19px;\n  margin-bottom: 20px;\n  -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n          box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n  border-radius: 2px;\n  border: 0;\n}\nbody .container .well p,\nbody .container-fluid .well p,\nbody .container .jumbotron p,\nbody .container-fluid .jumbotron p {\n  font-weight: 300;\n}\nbody .container .well,\nbody .container-fluid .well,\nbody .container .jumbotron,\nbody .container-fluid .jumbotron,\nbody .container .well-default,\nbody .container-fluid .well-default,\nbody .container .jumbotron-default,\nbody .container-fluid .jumbotron-default {\n  background-color: #ffffff;\n}\nbody .container .well-inverse,\nbody .container-fluid .well-inverse,\nbody .container .jumbotron-inverse,\nbody .container-fluid .jumbotron-inverse {\n  background-color: #3f51b5;\n}\nbody .container .well-primary,\nbody .container-fluid .well-primary,\nbody .container .jumbotron-primary,\nbody .container-fluid .jumbotron-primary {\n  background-color: #009688;\n}\nbody .container .well-success,\nbody .container-fluid .well-success,\nbody .container .jumbotron-success,\nbody .container-fluid .jumbotron-success {\n  background-color: #4caf50;\n}\nbody .container .well-info,\nbody .container-fluid .well-info,\nbody .container .jumbotron-info,\nbody .container-fluid .jumbotron-info {\n  background-color: #03a9f4;\n}\nbody .container .well-warning,\nbody .container-fluid .well-warning,\nbody .container .jumbotron-warning,\nbody .container-fluid .jumbotron-warning {\n  background-color: #ff5722;\n}\nbody .container .well-danger,\nbody .container-fluid .well-danger,\nbody .container .jumbotron-danger,\nbody .container-fluid .jumbotron-danger {\n  background-color: #f44336;\n}\n.btn,\n.input-group-btn .btn {\n  border: none;\n  border-radius: 2px;\n  position: relative;\n  padding: 8px 30px;\n  margin: 10px 1px;\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  letter-spacing: 0;\n  will-change: box-shadow, transform;\n  -webkit-transition: -webkit-box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n       -o-transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n          transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n  outline: 0;\n  cursor: pointer;\n  text-decoration: none;\n  background: transparent;\n}\n.btn::-moz-focus-inner,\n.input-group-btn .btn::-moz-focus-inner {\n  border: 0;\n}\n.btn:not(.btn-raised),\n.input-group-btn .btn:not(.btn-raised) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn:not(.btn-raised),\n.input-group-btn .btn:not(.btn-raised),\n.btn:not(.btn-raised).btn-default,\n.input-group-btn .btn:not(.btn-raised).btn-default {\n  color: rgba(0,0,0, 0.87);\n}\n.btn:not(.btn-raised).btn-inverse,\n.input-group-btn .btn:not(.btn-raised).btn-inverse {\n  color: #3f51b5;\n}\n.btn:not(.btn-raised).btn-primary,\n.input-group-btn .btn:not(.btn-raised).btn-primary {\n  color: #009688;\n}\n.btn:not(.btn-raised).btn-success,\n.input-group-btn .btn:not(.btn-raised).btn-success {\n  color: #4caf50;\n}\n.btn:not(.btn-raised).btn-info,\n.input-group-btn .btn:not(.btn-raised).btn-info {\n  color: #03a9f4;\n}\n.btn:not(.btn-raised).btn-warning,\n.input-group-btn .btn:not(.btn-raised).btn-warning {\n  color: #ff5722;\n}\n.btn:not(.btn-raised).btn-danger,\n.input-group-btn .btn:not(.btn-raised).btn-danger {\n  color: #f44336;\n}\n.btn:not(.btn-raised):not(.btn-link):hover,\n.input-group-btn .btn:not(.btn-raised):not(.btn-link):hover,\n.btn:not(.btn-raised):not(.btn-link):focus,\n.input-group-btn .btn:not(.btn-raised):not(.btn-link):focus {\n  background-color: rgba(153, 153, 153, 0.2);\n}\n.theme-dark .btn:not(.btn-raised):not(.btn-link):hover,\n.theme-dark .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover,\n.theme-dark .btn:not(.btn-raised):not(.btn-link):focus,\n.theme-dark .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus {\n  background-color: rgba(204, 204, 204, 0.15);\n}\n.btn.btn-raised,\n.input-group-btn .btn.btn-raised,\n.btn.btn-fab,\n.input-group-btn .btn.btn-fab,\n.btn-group-raised .btn,\n.btn-group-raised .input-group-btn .btn,\n.btn.btn-raised.btn-default,\n.input-group-btn .btn.btn-raised.btn-default,\n.btn.btn-fab.btn-default,\n.input-group-btn .btn.btn-fab.btn-default,\n.btn-group-raised .btn.btn-default,\n.btn-group-raised .input-group-btn .btn.btn-default {\n  background-color: #EEEEEE;\n  color: rgba(0,0,0, 0.87);\n}\n.btn.btn-raised.btn-inverse,\n.input-group-btn .btn.btn-raised.btn-inverse,\n.btn.btn-fab.btn-inverse,\n.input-group-btn .btn.btn-fab.btn-inverse,\n.btn-group-raised .btn.btn-inverse,\n.btn-group-raised .input-group-btn .btn.btn-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.btn.btn-raised.btn-primary,\n.input-group-btn .btn.btn-raised.btn-primary,\n.btn.btn-fab.btn-primary,\n.input-group-btn .btn.btn-fab.btn-primary,\n.btn-group-raised .btn.btn-primary,\n.btn-group-raised .input-group-btn .btn.btn-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-success,\n.input-group-btn .btn.btn-raised.btn-success,\n.btn.btn-fab.btn-success,\n.input-group-btn .btn.btn-fab.btn-success,\n.btn-group-raised .btn.btn-success,\n.btn-group-raised .input-group-btn .btn.btn-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-info,\n.input-group-btn .btn.btn-raised.btn-info,\n.btn.btn-fab.btn-info,\n.input-group-btn .btn.btn-fab.btn-info,\n.btn-group-raised .btn.btn-info,\n.btn-group-raised .input-group-btn .btn.btn-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-warning,\n.input-group-btn .btn.btn-raised.btn-warning,\n.btn.btn-fab.btn-warning,\n.input-group-btn .btn.btn-fab.btn-warning,\n.btn-group-raised .btn.btn-warning,\n.btn-group-raised .input-group-btn .btn.btn-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-danger,\n.input-group-btn .btn.btn-raised.btn-danger,\n.btn.btn-fab.btn-danger,\n.input-group-btn .btn.btn-fab.btn-danger,\n.btn-group-raised .btn.btn-danger,\n.btn-group-raised .input-group-btn .btn.btn-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised:not(.btn-link),\n.input-group-btn .btn.btn-raised:not(.btn-link),\n.btn-group-raised .btn:not(.btn-link),\n.btn-group-raised .input-group-btn .btn:not(.btn-link) {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.btn.btn-raised:not(.btn-link):hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover,\n.btn-group-raised .btn:not(.btn-link):hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover,\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active {\n  outline: 0;\n}\n.btn.btn-raised:not(.btn-link):hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover,\n.btn-group-raised .btn:not(.btn-link):hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover,\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active,\n.btn.btn-raised:not(.btn-link):hover.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-default,\n.btn-group-raised .btn:not(.btn-link):hover.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-default,\n.btn.btn-raised:not(.btn-link):focus.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-default,\n.btn-group-raised .btn:not(.btn-link):focus.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-default,\n.btn.btn-raised:not(.btn-link).active.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-default,\n.btn-group-raised .btn:not(.btn-link).active.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-default,\n.btn.btn-raised:not(.btn-link):active.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-default,\n.btn-group-raised .btn:not(.btn-link):active.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-default {\n  background-color: #e4e4e4;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):hover.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-inverse,\n.btn.btn-raised:not(.btn-link):focus.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):focus.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-inverse,\n.btn.btn-raised:not(.btn-link).active.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-inverse,\n.btn-group-raised .btn:not(.btn-link).active.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-inverse,\n.btn.btn-raised:not(.btn-link):active.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):active.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-inverse {\n  background-color: #495bc0;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-primary,\n.btn-group-raised .btn:not(.btn-link):hover.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-primary,\n.btn.btn-raised:not(.btn-link):focus.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-primary,\n.btn-group-raised .btn:not(.btn-link):focus.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-primary,\n.btn.btn-raised:not(.btn-link).active.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-primary,\n.btn-group-raised .btn:not(.btn-link).active.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-primary,\n.btn.btn-raised:not(.btn-link):active.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-primary,\n.btn-group-raised .btn:not(.btn-link):active.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-primary {\n  background-color: #00aa9a;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-success,\n.btn-group-raised .btn:not(.btn-link):hover.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-success,\n.btn.btn-raised:not(.btn-link):focus.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-success,\n.btn-group-raised .btn:not(.btn-link):focus.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-success,\n.btn.btn-raised:not(.btn-link).active.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-success,\n.btn-group-raised .btn:not(.btn-link).active.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-success,\n.btn.btn-raised:not(.btn-link):active.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-success,\n.btn-group-raised .btn:not(.btn-link):active.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-success {\n  background-color: #59b75c;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-info,\n.btn-group-raised .btn:not(.btn-link):hover.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-info,\n.btn.btn-raised:not(.btn-link):focus.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-info,\n.btn-group-raised .btn:not(.btn-link):focus.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-info,\n.btn.btn-raised:not(.btn-link).active.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-info,\n.btn-group-raised .btn:not(.btn-link).active.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-info,\n.btn.btn-raised:not(.btn-link):active.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-info,\n.btn-group-raised .btn:not(.btn-link):active.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-info {\n  background-color: #0fb2fc;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-warning,\n.btn-group-raised .btn:not(.btn-link):hover.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-warning,\n.btn.btn-raised:not(.btn-link):focus.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-warning,\n.btn-group-raised .btn:not(.btn-link):focus.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-warning,\n.btn.btn-raised:not(.btn-link).active.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-warning,\n.btn-group-raised .btn:not(.btn-link).active.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-warning,\n.btn.btn-raised:not(.btn-link):active.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-warning,\n.btn-group-raised .btn:not(.btn-link):active.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-warning {\n  background-color: #ff6736;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-danger,\n.btn-group-raised .btn:not(.btn-link):hover.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-danger,\n.btn.btn-raised:not(.btn-link):focus.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-danger,\n.btn-group-raised .btn:not(.btn-link):focus.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-danger,\n.btn.btn-raised:not(.btn-link).active.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-danger,\n.btn-group-raised .btn:not(.btn-link).active.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-danger,\n.btn.btn-raised:not(.btn-link):active.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-danger,\n.btn-group-raised .btn:not(.btn-link):active.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-danger {\n  background-color: #f55549;\n}\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active,\n.btn.btn-raised:not(.btn-link).active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link).active:hover,\n.btn-group-raised .btn:not(.btn-link).active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active:hover,\n.btn.btn-raised:not(.btn-link):active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):active:hover,\n.btn-group-raised .btn:not(.btn-link):active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active:hover {\n  -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link):focus.active,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.active,\n.btn-group-raised .btn:not(.btn-link):focus.active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.active,\n.btn.btn-raised:not(.btn-link):focus:active,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:active,\n.btn-group-raised .btn:not(.btn-link):focus:active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:active,\n.btn.btn-raised:not(.btn-link):focus:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:hover,\n.btn-group-raised .btn:not(.btn-link):focus:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:hover,\n.btn.btn-raised:not(.btn-link):focus.active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.active:hover,\n.btn-group-raised .btn:not(.btn-link):focus.active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.active:hover,\n.btn.btn-raised:not(.btn-link):focus:active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:active:hover,\n.btn-group-raised .btn:not(.btn-link):focus:active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:active:hover {\n  -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n          box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n}\n.btn.btn-fab,\n.input-group-btn .btn.btn-fab {\n  border-radius: 50%;\n  font-size: 24px;\n  height: 56px;\n  margin: auto;\n  min-width: 56px;\n  width: 56px;\n  padding: 0;\n  overflow: hidden;\n  -webkit-box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);\n          box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);\n  position: relative;\n  line-height: normal;\n}\n.btn.btn-fab .ripple-container,\n.input-group-btn .btn.btn-fab .ripple-container {\n  border-radius: 50%;\n}\n.btn.btn-fab.btn-fab-mini,\n.input-group-btn .btn.btn-fab.btn-fab-mini,\n.btn-group-sm .btn.btn-fab,\n.btn-group-sm .input-group-btn .btn.btn-fab {\n  height: 40px;\n  min-width: 40px;\n  width: 40px;\n}\n.btn.btn-fab.btn-fab-mini.material-icons,\n.input-group-btn .btn.btn-fab.btn-fab-mini.material-icons,\n.btn-group-sm .btn.btn-fab.material-icons,\n.btn-group-sm .input-group-btn .btn.btn-fab.material-icons {\n  top: 0px;\n  left: 0px;\n}\n.btn.btn-fab i.material-icons,\n.input-group-btn .btn.btn-fab i.material-icons {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translate(-12px, -12px);\n      -ms-transform: translate(-12px, -12px);\n       -o-transform: translate(-12px, -12px);\n          transform: translate(-12px, -12px);\n  line-height: 24px;\n  width: 24px;\n}\n.btn i.material-icons,\n.input-group-btn .btn i.material-icons {\n  vertical-align: middle;\n}\n.btn.btn-lg,\n.input-group-btn .btn.btn-lg,\n.btn-group-lg .btn,\n.btn-group-lg .input-group-btn .btn {\n  font-size: 16px;\n}\n.btn.btn-sm,\n.input-group-btn .btn.btn-sm,\n.btn-group-sm .btn,\n.btn-group-sm .input-group-btn .btn {\n  padding: 5px 20px;\n  font-size: 12px;\n}\n.btn.btn-xs,\n.input-group-btn .btn.btn-xs,\n.btn-group-xs .btn,\n.btn-group-xs .input-group-btn .btn {\n  padding: 4px 15px;\n  font-size: 10px;\n}\nfieldset[disabled][disabled] .btn,\nfieldset[disabled][disabled] .input-group-btn .btn,\nfieldset[disabled][disabled] .btn-group,\nfieldset[disabled][disabled] .btn-group-vertical,\n.btn.disabled,\n.input-group-btn .btn.disabled,\n.btn-group.disabled,\n.btn-group-vertical.disabled,\n.btn:disabled,\n.input-group-btn .btn:disabled,\n.btn-group:disabled,\n.btn-group-vertical:disabled,\n.btn[disabled][disabled],\n.input-group-btn .btn[disabled][disabled],\n.btn-group[disabled][disabled],\n.btn-group-vertical[disabled][disabled] {\n  color: rgba(0, 0, 0, 0.26);\n  background: transparent;\n}\n.theme-dark fieldset[disabled][disabled] .btn,\n.theme-dark fieldset[disabled][disabled] .input-group-btn .btn,\n.theme-dark fieldset[disabled][disabled] .btn-group,\n.theme-dark fieldset[disabled][disabled] .btn-group-vertical,\n.theme-dark .btn.disabled,\n.theme-dark .input-group-btn .btn.disabled,\n.theme-dark .btn-group.disabled,\n.theme-dark .btn-group-vertical.disabled,\n.theme-dark .btn:disabled,\n.theme-dark .input-group-btn .btn:disabled,\n.theme-dark .btn-group:disabled,\n.theme-dark .btn-group-vertical:disabled,\n.theme-dark .btn[disabled][disabled],\n.theme-dark .input-group-btn .btn[disabled][disabled],\n.theme-dark .btn-group[disabled][disabled],\n.theme-dark .btn-group-vertical[disabled][disabled] {\n  color: rgba(255, 255, 255, 0.3);\n}\nfieldset[disabled][disabled] .btn.btn-raised,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised,\nfieldset[disabled][disabled] .btn-group.btn-raised,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised,\n.btn.disabled.btn-raised,\n.input-group-btn .btn.disabled.btn-raised,\n.btn-group.disabled.btn-raised,\n.btn-group-vertical.disabled.btn-raised,\n.btn:disabled.btn-raised,\n.input-group-btn .btn:disabled.btn-raised,\n.btn-group:disabled.btn-raised,\n.btn-group-vertical:disabled.btn-raised,\n.btn[disabled][disabled].btn-raised,\n.input-group-btn .btn[disabled][disabled].btn-raised,\n.btn-group[disabled][disabled].btn-raised,\n.btn-group-vertical[disabled][disabled].btn-raised,\nfieldset[disabled][disabled] .btn.btn-group-raised,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised,\nfieldset[disabled][disabled] .btn-group.btn-group-raised,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised,\n.btn.disabled.btn-group-raised,\n.input-group-btn .btn.disabled.btn-group-raised,\n.btn-group.disabled.btn-group-raised,\n.btn-group-vertical.disabled.btn-group-raised,\n.btn:disabled.btn-group-raised,\n.input-group-btn .btn:disabled.btn-group-raised,\n.btn-group:disabled.btn-group-raised,\n.btn-group-vertical:disabled.btn-group-raised,\n.btn[disabled][disabled].btn-group-raised,\n.input-group-btn .btn[disabled][disabled].btn-group-raised,\n.btn-group[disabled][disabled].btn-group-raised,\n.btn-group-vertical[disabled][disabled].btn-group-raised,\nfieldset[disabled][disabled] .btn.btn-raised.active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised.active,\nfieldset[disabled][disabled] .btn-group.btn-raised.active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised.active,\n.btn.disabled.btn-raised.active,\n.input-group-btn .btn.disabled.btn-raised.active,\n.btn-group.disabled.btn-raised.active,\n.btn-group-vertical.disabled.btn-raised.active,\n.btn:disabled.btn-raised.active,\n.input-group-btn .btn:disabled.btn-raised.active,\n.btn-group:disabled.btn-raised.active,\n.btn-group-vertical:disabled.btn-raised.active,\n.btn[disabled][disabled].btn-raised.active,\n.input-group-btn .btn[disabled][disabled].btn-raised.active,\n.btn-group[disabled][disabled].btn-raised.active,\n.btn-group-vertical[disabled][disabled].btn-raised.active,\nfieldset[disabled][disabled] .btn.btn-group-raised.active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised.active,\nfieldset[disabled][disabled] .btn-group.btn-group-raised.active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised.active,\n.btn.disabled.btn-group-raised.active,\n.input-group-btn .btn.disabled.btn-group-raised.active,\n.btn-group.disabled.btn-group-raised.active,\n.btn-group-vertical.disabled.btn-group-raised.active,\n.btn:disabled.btn-group-raised.active,\n.input-group-btn .btn:disabled.btn-group-raised.active,\n.btn-group:disabled.btn-group-raised.active,\n.btn-group-vertical:disabled.btn-group-raised.active,\n.btn[disabled][disabled].btn-group-raised.active,\n.input-group-btn .btn[disabled][disabled].btn-group-raised.active,\n.btn-group[disabled][disabled].btn-group-raised.active,\n.btn-group-vertical[disabled][disabled].btn-group-raised.active,\nfieldset[disabled][disabled] .btn.btn-raised:active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised:active,\nfieldset[disabled][disabled] .btn-group.btn-raised:active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised:active,\n.btn.disabled.btn-raised:active,\n.input-group-btn .btn.disabled.btn-raised:active,\n.btn-group.disabled.btn-raised:active,\n.btn-group-vertical.disabled.btn-raised:active,\n.btn:disabled.btn-raised:active,\n.input-group-btn .btn:disabled.btn-raised:active,\n.btn-group:disabled.btn-raised:active,\n.btn-group-vertical:disabled.btn-raised:active,\n.btn[disabled][disabled].btn-raised:active,\n.input-group-btn .btn[disabled][disabled].btn-raised:active,\n.btn-group[disabled][disabled].btn-raised:active,\n.btn-group-vertical[disabled][disabled].btn-raised:active,\nfieldset[disabled][disabled] .btn.btn-group-raised:active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised:active,\nfieldset[disabled][disabled] .btn-group.btn-group-raised:active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised:active,\n.btn.disabled.btn-group-raised:active,\n.input-group-btn .btn.disabled.btn-group-raised:active,\n.btn-group.disabled.btn-group-raised:active,\n.btn-group-vertical.disabled.btn-group-raised:active,\n.btn:disabled.btn-group-raised:active,\n.input-group-btn .btn:disabled.btn-group-raised:active,\n.btn-group:disabled.btn-group-raised:active,\n.btn-group-vertical:disabled.btn-group-raised:active,\n.btn[disabled][disabled].btn-group-raised:active,\n.input-group-btn .btn[disabled][disabled].btn-group-raised:active,\n.btn-group[disabled][disabled].btn-group-raised:active,\n.btn-group-vertical[disabled][disabled].btn-group-raised:active,\nfieldset[disabled][disabled] .btn.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised:focus:not(:active),\n.btn.disabled.btn-raised:focus:not(:active),\n.input-group-btn .btn.disabled.btn-raised:focus:not(:active),\n.btn-group.disabled.btn-raised:focus:not(:active),\n.btn-group-vertical.disabled.btn-raised:focus:not(:active),\n.btn:disabled.btn-raised:focus:not(:active),\n.input-group-btn .btn:disabled.btn-raised:focus:not(:active),\n.btn-group:disabled.btn-raised:focus:not(:active),\n.btn-group-vertical:disabled.btn-raised:focus:not(:active),\n.btn[disabled][disabled].btn-raised:focus:not(:active),\n.input-group-btn .btn[disabled][disabled].btn-raised:focus:not(:active),\n.btn-group[disabled][disabled].btn-raised:focus:not(:active),\n.btn-group-vertical[disabled][disabled].btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised:focus:not(:active),\n.btn.disabled.btn-group-raised:focus:not(:active),\n.input-group-btn .btn.disabled.btn-group-raised:focus:not(:active),\n.btn-group.disabled.btn-group-raised:focus:not(:active),\n.btn-group-vertical.disabled.btn-group-raised:focus:not(:active),\n.btn:disabled.btn-group-raised:focus:not(:active),\n.input-group-btn .btn:disabled.btn-group-raised:focus:not(:active),\n.btn-group:disabled.btn-group-raised:focus:not(:active),\n.btn-group-vertical:disabled.btn-group-raised:focus:not(:active),\n.btn[disabled][disabled].btn-group-raised:focus:not(:active),\n.input-group-btn .btn[disabled][disabled].btn-group-raised:focus:not(:active),\n.btn-group[disabled][disabled].btn-group-raised:focus:not(:active),\n.btn-group-vertical[disabled][disabled].btn-group-raised:focus:not(:active) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  margin: 10px 1px;\n}\n.btn-group.open > .dropdown-toggle.btn,\n.btn-group-vertical.open > .dropdown-toggle.btn,\n.btn-group.open > .dropdown-toggle.btn.btn-default,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-default {\n  background-color: #EEEEEE;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-inverse,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-inverse {\n  background-color: #3f51b5;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-primary,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-primary {\n  background-color: #009688;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-success,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-success {\n  background-color: #4caf50;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-info,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-info {\n  background-color: #03a9f4;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-warning,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-warning {\n  background-color: #ff5722;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-danger,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-danger {\n  background-color: #f44336;\n}\n.btn-group .dropdown-menu,\n.btn-group-vertical .dropdown-menu {\n  border-radius: 0 0 2px 2px;\n}\n.btn-group.btn-group-raised,\n.btn-group-vertical.btn-group-raised {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.btn-group .btn + .btn,\n.btn-group-vertical .btn + .btn,\n.btn-group .btn,\n.btn-group-vertical .btn,\n.btn-group .btn:active,\n.btn-group-vertical .btn:active,\n.btn-group .btn-group,\n.btn-group-vertical .btn-group {\n  margin: 0;\n}\n.checkbox label {\n  cursor: pointer;\n  padding-left: 0;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .checkbox label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .checkbox label:hover,\n.form-group.is-focused .checkbox label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .checkbox label {\n  color: rgba(0,0,0, 0.26);\n}\n.checkbox input[type=checkbox] {\n  opacity: 0;\n  position: absolute;\n  margin: 0;\n  z-index: -1;\n  width: 0;\n  height: 0;\n  overflow: hidden;\n  left: 0;\n  pointer-events: none;\n}\n.checkbox .checkbox-material {\n  vertical-align: middle;\n  position: relative;\n  top: 3px;\n}\n.checkbox .checkbox-material:before {\n  display: block;\n  position: absolute;\n  left: 0;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0.84);\n  height: 20px;\n  width: 20px;\n  border-radius: 100%;\n  z-index: 1;\n  opacity: 0;\n  margin: 0;\n  -webkit-transform: scale3d(2.3, 2.3, 1);\n          transform: scale3d(2.3, 2.3, 1);\n}\n.checkbox .checkbox-material .check {\n  position: relative;\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  border: 2px solid rgba(0,0,0, .54);\n  border-radius: 2px;\n  overflow: hidden;\n  z-index: 1;\n}\n.checkbox .checkbox-material .check:before {\n  position: absolute;\n  content: \"\";\n  -webkit-transform: rotate(45deg);\n      -ms-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  display: block;\n  margin-top: -4px;\n  margin-left: 6px;\n  width: 0;\n  height: 0;\n  -webkit-box-shadow: 0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0 inset;\n          box-shadow: 0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0 inset;\n  -webkit-animation: checkbox-off;\n       -o-animation: checkbox-off;\n          animation: checkbox-off;\n}\n.checkbox input[type=checkbox]:focus + .checkbox-material .check:after {\n  opacity: 0.2;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check {\n  color: #009688;\n  border-color: #009688;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check:before {\n  color: #009688;\n  -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n          box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  -webkit-animation: checkbox-on 0.3s forwards;\n       -o-animation: checkbox-on 0.3s forwards;\n          animation: checkbox-on 0.3s forwards;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material:before {\n  -webkit-animation: rippleOn;\n       -o-animation: rippleOn;\n          animation: rippleOn;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check:after {\n  -webkit-animation: rippleOn 500ms forwards;\n       -o-animation: rippleOn 500ms forwards;\n          animation: rippleOn 500ms forwards;\n}\n.checkbox input[type=checkbox]:not(:checked) + .checkbox-material:before {\n  -webkit-animation: rippleOff;\n       -o-animation: rippleOff;\n          animation: rippleOff;\n}\n.checkbox input[type=checkbox]:not(:checked) + .checkbox-material .check:after {\n  -webkit-animation: rippleOff 500ms forwards;\n       -o-animation: rippleOff 500ms forwards;\n          animation: rippleOff 500ms forwards;\n}\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox input[type=checkbox],\n.checkbox input[type=checkbox][disabled]:not(:checked) ~ .checkbox-material .check:before,\n.checkbox input[type=checkbox][disabled]:not(:checked) ~ .checkbox-material .check,\n.checkbox input[type=checkbox][disabled] + .circle {\n  opacity: 0.5;\n}\n.checkbox input[type=checkbox][disabled] + .checkbox-material .check:after {\n  background-color: rgba(0,0,0, 0.87);\n  -webkit-transform: rotate(-45deg);\n      -ms-transform: rotate(-45deg);\n       -o-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n}\n.is-focused .checkbox .checkbox-material .check:before {\n  -webkit-animation: checkbox-off 0.3s forwards;\n       -o-animation: checkbox-off 0.3s forwards;\n          animation: checkbox-off 0.3s forwards;\n}\n.is-focused .checkbox input[type=checkbox]:checked + .checkbox-material:before {\n  -webkit-animation: rippleOn 500ms;\n       -o-animation: rippleOn 500ms;\n          animation: rippleOn 500ms;\n}\n.is-focused .checkbox input[type=checkbox]:not(:checked) + .checkbox-material:before {\n  -webkit-animation: rippleOff 500ms;\n       -o-animation: rippleOff 500ms;\n          animation: rippleOff 500ms;\n}\n@-webkit-keyframes checkbox-on {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@-o-keyframes checkbox-on {\n  0% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@keyframes checkbox-on {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@-webkit-keyframes checkbox-off {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -webkit-transform: rotate(45deg);\n            transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@-o-keyframes checkbox-off {\n  0% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -o-transform: rotate(45deg);\n       transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -o-transform: rotate(0deg);\n       transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -o-transform: rotate(0deg);\n       transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@keyframes checkbox-off {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -webkit-transform: rotate(45deg);\n         -o-transform: rotate(45deg);\n            transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -webkit-transform: rotate(0deg);\n         -o-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -webkit-transform: rotate(0deg);\n         -o-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@-webkit-keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-o-keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-webkit-keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-o-keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n.togglebutton {\n  vertical-align: middle;\n}\n.togglebutton,\n.togglebutton label,\n.togglebutton input,\n.togglebutton .toggle {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.togglebutton label {\n  cursor: pointer;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .togglebutton label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .togglebutton label:hover,\n.form-group.is-focused .togglebutton label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .togglebutton label {\n  color: rgba(0,0,0, 0.26);\n}\n.togglebutton label input[type=checkbox] {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n.togglebutton label .toggle {\n  text-align: left;\n}\n.togglebutton label .toggle,\n.togglebutton label input[type=checkbox][disabled] + .toggle {\n  content: \"\";\n  display: inline-block;\n  width: 30px;\n  height: 15px;\n  background-color: rgba(80, 80, 80, 0.7);\n  border-radius: 15px;\n  margin-right: 15px;\n  -webkit-transition: background 0.3s ease;\n       -o-transition: background 0.3s ease;\n          transition: background 0.3s ease;\n  vertical-align: middle;\n}\n.togglebutton label .toggle:after {\n  content: \"\";\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background-color: #F1F1F1;\n  border-radius: 20px;\n  position: relative;\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);\n  left: -5px;\n  top: -2px;\n  -webkit-transition: left 0.3s ease, background 0.3s ease, -webkit-box-shadow 0.1s ease;\n       -o-transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;\n          transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;\n}\n.togglebutton label input[type=checkbox][disabled] + .toggle:after,\n.togglebutton label input[type=checkbox][disabled]:checked + .toggle:after {\n  background-color: #BDBDBD;\n}\n.togglebutton label input[type=checkbox] + .toggle:active:after,\n.togglebutton label input[type=checkbox][disabled] + .toggle:active:after {\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:after {\n  left: 15px;\n}\n.togglebutton label input[type=checkbox]:checked + .toggle {\n  background-color: rgba(0, 150, 136, 0.5);\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:after {\n  background-color: #009688;\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:active:after {\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 150, 136, 0.1);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 150, 136, 0.1);\n}\n.radio label {\n  cursor: pointer;\n  padding-left: 45px;\n  position: relative;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .radio label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .radio label:hover,\n.form-group.is-focused .radio label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .radio label {\n  color: rgba(0,0,0, 0.26);\n}\n.radio label span {\n  display: block;\n  position: absolute;\n  left: 10px;\n  top: 2px;\n  -webkit-transition-duration: 0.2s;\n       -o-transition-duration: 0.2s;\n          transition-duration: 0.2s;\n}\n.radio label .circle {\n  border: 2px solid rgba(0,0,0, .54);\n  height: 15px;\n  width: 15px;\n  border-radius: 100%;\n}\n.radio label .check {\n  height: 15px;\n  width: 15px;\n  border-radius: 100%;\n  background-color: #009688;\n  -webkit-transform: scale3d(0, 0, 0);\n          transform: scale3d(0, 0, 0);\n}\n.radio label .check:after {\n  display: block;\n  position: absolute;\n  content: \"\";\n  background-color: rgba(0,0,0, 0.87);\n  left: -18px;\n  top: -18px;\n  height: 50px;\n  width: 50px;\n  border-radius: 100%;\n  z-index: 1;\n  opacity: 0;\n  margin: 0;\n  -webkit-transform: scale3d(1.5, 1.5, 1);\n          transform: scale3d(1.5, 1.5, 1);\n}\n.radio label input[type=radio]:not(:checked) ~ .check:after {\n  -webkit-animation: rippleOff 500ms;\n       -o-animation: rippleOff 500ms;\n          animation: rippleOff 500ms;\n}\n.radio label input[type=radio]:checked ~ .check:after {\n  -webkit-animation: rippleOn;\n       -o-animation: rippleOn;\n          animation: rippleOn;\n}\n.radio input[type=radio] {\n  opacity: 0;\n  height: 0;\n  width: 0;\n  overflow: hidden;\n}\n.radio input[type=radio]:checked ~ .check,\n.radio input[type=radio]:checked ~ .circle {\n  opacity: 1;\n}\n.radio input[type=radio]:checked ~ .check {\n  background-color: #009688;\n}\n.radio input[type=radio]:checked ~ .circle {\n  border-color: #009688;\n}\n.radio input[type=radio]:checked ~ .check {\n  -webkit-transform: scale3d(0.55, 0.55, 1);\n          transform: scale3d(0.55, 0.55, 1);\n}\n.radio input[type=radio][disabled] ~ .check,\n.radio input[type=radio][disabled] ~ .circle {\n  opacity: 0.26;\n}\n.radio input[type=radio][disabled] ~ .check {\n  background-color: #000000;\n}\n.radio input[type=radio][disabled] ~ .circle {\n  border-color: #000000;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .check,\n.theme-dark .radio input[type=radio][disabled] ~ .circle {\n  opacity: 0.3;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .check {\n  background-color: #ffffff;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .circle {\n  border-color: #ffffff;\n}\n.is-focused .radio input[type=radio]:checked ~ .check:after {\n  -webkit-animation: rippleOn 500ms;\n       -o-animation: rippleOn 500ms;\n          animation: rippleOn 500ms;\n}\n@keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\nlegend {\n  margin-bottom: 22px;\n  font-size: 24px;\n}\noutput {\n  padding-top: 8px;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n.form-control {\n  height: 38px;\n  padding: 7px 0;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 38px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 24px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 44px;\n  }\n}\n.radio label,\n.checkbox label {\n  min-height: 22px;\n}\n.form-control-static {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  min-height: 38px;\n}\n.input-sm .input-sm {\n  height: 24px;\n  padding: 3px 0;\n  font-size: 11px;\n  line-height: 1.5;\n  border-radius: 0;\n}\n.input-sm select.input-sm {\n  height: 24px;\n  line-height: 24px;\n}\n.input-sm textarea.input-sm,\n.input-sm select[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 24px;\n  padding: 3px 0;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.form-group-sm select.form-control {\n  height: 24px;\n  line-height: 24px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 24px;\n  min-height: 33px;\n  padding: 4px 0;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.input-lg .input-lg {\n  height: 44px;\n  padding: 9px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 0;\n}\n.input-lg select.input-lg {\n  height: 44px;\n  line-height: 44px;\n}\n.input-lg textarea.input-lg,\n.input-lg select[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 44px;\n  padding: 9px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-group-lg select.form-control {\n  height: 44px;\n  line-height: 44px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 44px;\n  min-height: 40px;\n  padding: 10px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 8px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 30px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 8px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 12.9999997px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 4px;\n    font-size: 11px;\n  }\n}\n.label {\n  border-radius: 1px;\n  padding: .3em .6em;\n}\n.label,\n.label.label-default {\n  background-color: #9e9e9e;\n}\n.label.label-inverse {\n  background-color: #3f51b5;\n}\n.label.label-primary {\n  background-color: #009688;\n}\n.label.label-success {\n  background-color: #4caf50;\n}\n.label.label-info {\n  background-color: #03a9f4;\n}\n.label.label-warning {\n  background-color: #ff5722;\n}\n.label.label-danger {\n  background-color: #f44336;\n}\n.form-control,\n.form-group .form-control {\n  border: 0;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#009688), to(#009688)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#009688, #009688), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#009688, #009688), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);\n  -webkit-background-size: 0 2px, 100% 1px;\n          background-size: 0 2px, 100% 1px;\n  background-repeat: no-repeat;\n  background-position: center bottom, center -webkit-calc(100% - 1px);\n  background-position: center bottom, center calc(100% - 1px);\n  background-color: rgba(0, 0, 0, 0);\n  -webkit-transition: background 0s ease-out;\n       -o-transition: background 0s ease-out;\n          transition: background 0s ease-out;\n  float: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0;\n}\n.form-control::-moz-placeholder,\n.form-group .form-control::-moz-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control:-ms-input-placeholder,\n.form-group .form-control:-ms-input-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control::-webkit-input-placeholder,\n.form-group .form-control::-webkit-input-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control[readonly],\n.form-group .form-control[readonly],\n.form-control[disabled],\n.form-group .form-control[disabled],\nfieldset[disabled] .form-control,\nfieldset[disabled] .form-group .form-control {\n  background-color: rgba(0, 0, 0, 0);\n}\n.form-control[disabled],\n.form-group .form-control[disabled],\nfieldset[disabled] .form-control,\nfieldset[disabled] .form-group .form-control {\n  background-image: none;\n  border-bottom: 1px dotted #D2D2D2;\n}\n.form-group {\n  position: relative;\n}\n.form-group.label-static label.control-label,\n.form-group.label-placeholder label.control-label,\n.form-group.label-floating label.control-label {\n  position: absolute;\n  pointer-events: none;\n  -webkit-transition: 0.3s ease all;\n       -o-transition: 0.3s ease all;\n          transition: 0.3s ease all;\n}\n.form-group.label-floating label.control-label {\n  will-change: left, top, contents;\n}\n.form-group.label-placeholder:not(.is-empty) label.control-label {\n  display: none;\n}\n.form-group .help-block {\n  position: absolute;\n  display: none;\n}\n.form-group.is-focused .form-control {\n  outline: none;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#009688), to(#009688)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#009688, #009688), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#009688, #009688), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);\n  -webkit-background-size: 100% 2px, 100% 1px;\n          background-size: 100% 2px, 100% 1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition-duration: 0.3s;\n       -o-transition-duration: 0.3s;\n          transition-duration: 0.3s;\n}\n.form-group.is-focused .form-control .material-input:after {\n  background-color: #009688;\n}\n.form-group.is-focused label,\n.form-group.is-focused label.control-label {\n  color: #009688;\n}\n.form-group.is-focused.label-placeholder label,\n.form-group.is-focused.label-placeholder label.control-label {\n  color: #BDBDBD;\n}\n.form-group.is-focused .help-block {\n  display: block;\n}\n.form-group.has-warning .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-warning.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ff5722), to(#ff5722)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#ff5722, #ff5722), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#ff5722, #ff5722), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-warning label.control-label,\n.form-group.has-warning .help-block {\n  color: #ff5722;\n}\n.form-group.has-error .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-error.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f44336), to(#f44336)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#f44336, #f44336), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#f44336, #f44336), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#f44336, #f44336), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-error label.control-label,\n.form-group.has-error .help-block {\n  color: #f44336;\n}\n.form-group.has-success .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-success.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#4caf50), to(#4caf50)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#4caf50, #4caf50), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#4caf50, #4caf50), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-success label.control-label,\n.form-group.has-success .help-block {\n  color: #4caf50;\n}\n.form-group.has-info .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-info.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#03a9f4), to(#03a9f4)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#03a9f4, #03a9f4), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#03a9f4, #03a9f4), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-info label.control-label,\n.form-group.has-info .help-block {\n  color: #03a9f4;\n}\n.form-group textarea {\n  resize: none;\n}\n.form-group textarea ~ .form-control-highlight {\n  margin-top: -11px;\n}\n.form-group select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n}\n.form-group select ~ .material-input:after {\n  display: none;\n}\n.form-control {\n  margin-bottom: 7px;\n}\n.form-control::-moz-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control:-ms-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control::-webkit-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.checkbox label,\n.radio label,\nlabel {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\nlabel.control-label {\n  font-size: 12px;\n  line-height: 1.07142857;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.help-block {\n  margin-top: 0;\n  font-size: 12px;\n}\n.form-group {\n  padding-bottom: 7px;\n  margin: 28px 0 0 0;\n}\n.form-group .form-control {\n  margin-bottom: 7px;\n}\n.form-group .form-control::-moz-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .form-control:-ms-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .form-control::-webkit-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .checkbox label,\n.form-group .radio label,\n.form-group label {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group label.control-label {\n  font-size: 12px;\n  line-height: 1.07142857;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group .help-block {\n  margin-top: 0;\n  font-size: 12px;\n}\n.form-group.label-floating label.control-label,\n.form-group.label-placeholder label.control-label {\n  top: -7px;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n.form-group.label-static label.control-label,\n.form-group.label-floating.is-focused label.control-label,\n.form-group.label-floating:not(.is-empty) label.control-label {\n  top: -30px;\n  left: 0;\n  font-size: 12px;\n  line-height: 1.07142857;\n}\n.form-group.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -30px;\n  left: 0;\n  font-size: 12px;\n  line-height: 1.07142857;\n}\n.form-group.form-group-sm {\n  padding-bottom: 3px;\n  margin: 21px 0 0 0;\n}\n.form-group.form-group-sm .form-control {\n  margin-bottom: 3px;\n}\n.form-group.form-group-sm .form-control::-moz-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .form-control:-ms-input-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .form-control::-webkit-input-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .checkbox label,\n.form-group.form-group-sm .radio label,\n.form-group.form-group-sm label {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm label.control-label {\n  font-size: 9px;\n  line-height: 1.125;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group.form-group-sm .help-block {\n  margin-top: 0;\n  font-size: 9px;\n}\n.form-group.form-group-sm.label-floating label.control-label,\n.form-group.form-group-sm.label-placeholder label.control-label {\n  top: -11px;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.form-group.form-group-sm.label-static label.control-label,\n.form-group.form-group-sm.label-floating.is-focused label.control-label,\n.form-group.form-group-sm.label-floating:not(.is-empty) label.control-label {\n  top: -25px;\n  left: 0;\n  font-size: 9px;\n  line-height: 1.125;\n}\n.form-group.form-group-sm.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -25px;\n  left: 0;\n  font-size: 9px;\n  line-height: 1.125;\n}\n.form-group.form-group-lg {\n  padding-bottom: 9px;\n  margin: 30px 0 0 0;\n}\n.form-group.form-group-lg .form-control {\n  margin-bottom: 9px;\n}\n.form-group.form-group-lg .form-control::-moz-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .form-control:-ms-input-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .form-control::-webkit-input-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .checkbox label,\n.form-group.form-group-lg .radio label,\n.form-group.form-group-lg label {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg label.control-label {\n  font-size: 14px;\n  line-height: 0.99999998;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group.form-group-lg .help-block {\n  margin-top: 0;\n  font-size: 14px;\n}\n.form-group.form-group-lg.label-floating label.control-label,\n.form-group.form-group-lg.label-placeholder label.control-label {\n  top: -5px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-group.form-group-lg.label-static label.control-label,\n.form-group.form-group-lg.label-floating.is-focused label.control-label,\n.form-group.form-group-lg.label-floating:not(.is-empty) label.control-label {\n  top: -32px;\n  left: 0;\n  font-size: 14px;\n  line-height: 0.99999998;\n}\n.form-group.form-group-lg.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -32px;\n  left: 0;\n  font-size: 14px;\n  line-height: 0.99999998;\n}\nselect.form-control {\n  border: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0;\n}\n.form-group.is-focused select.form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: #D2D2D2;\n}\nselect.form-control[multiple],\n.form-group.is-focused select.form-control[multiple] {\n  height: 85px;\n}\n.input-group-btn .btn {\n  margin: 0 0 7px 0;\n}\n.form-group.form-group-sm .input-group-btn .btn {\n  margin: 0 0 3px 0;\n}\n.form-group.form-group-lg .input-group-btn .btn {\n  margin: 0 0 9px 0;\n}\n.input-group .input-group-btn {\n  padding: 0 12px;\n}\n.input-group .input-group-addon {\n  border: 0;\n  background: transparent;\n}\n.form-group input[type=file] {\n  opacity: 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\nlegend {\n  border-bottom: 0;\n}\n.list-group {\n  border-radius: 0;\n}\n.list-group .list-group-item {\n  background-color: transparent;\n  overflow: hidden;\n  border: 0;\n  border-radius: 0;\n  padding: 0 16px;\n}\n.list-group .list-group-item.baseline {\n  border-bottom: 1px solid #cecece;\n}\n.list-group .list-group-item.baseline:last-child {\n  border-bottom: none;\n}\n.list-group .list-group-item .row-picture,\n.list-group .list-group-item .row-action-primary {\n  display: inline-block;\n  padding-right: 16px;\n}\n.list-group .list-group-item .row-picture img,\n.list-group .list-group-item .row-action-primary img,\n.list-group .list-group-item .row-picture i,\n.list-group .list-group-item .row-action-primary i,\n.list-group .list-group-item .row-picture label,\n.list-group .list-group-item .row-action-primary label {\n  display: block;\n  width: 56px;\n  height: 56px;\n}\n.list-group .list-group-item .row-picture img,\n.list-group .list-group-item .row-action-primary img {\n  background: rgba(0, 0, 0, 0.1);\n  padding: 1px;\n}\n.list-group .list-group-item .row-picture img.circle,\n.list-group .list-group-item .row-action-primary img.circle {\n  border-radius: 100%;\n}\n.list-group .list-group-item .row-picture i,\n.list-group .list-group-item .row-action-primary i {\n  background: rgba(0, 0, 0, 0.25);\n  border-radius: 100%;\n  text-align: center;\n  line-height: 56px;\n  font-size: 20px;\n  color: white;\n}\n.list-group .list-group-item .row-picture label,\n.list-group .list-group-item .row-action-primary label {\n  margin-left: 7px;\n  margin-right: -7px;\n  margin-top: 5px;\n  margin-bottom: -5px;\n}\n.list-group .list-group-item .row-picture label .checkbox-material,\n.list-group .list-group-item .row-action-primary label .checkbox-material {\n  left: -10px;\n}\n.list-group .list-group-item .row-content {\n  display: inline-block;\n  width: -webkit-calc(100% - 92px);\n  width: calc(100% - 92px);\n  min-height: 66px;\n}\n.list-group .list-group-item .row-content .action-secondary {\n  position: absolute;\n  right: 16px;\n  top: 16px;\n}\n.list-group .list-group-item .row-content .action-secondary i {\n  font-size: 20px;\n  color: rgba(0, 0, 0, 0.25);\n  cursor: pointer;\n}\n.list-group .list-group-item .row-content .action-secondary ~ * {\n  max-width: -webkit-calc(100% - 30px);\n  max-width: calc(100% - 30px);\n}\n.list-group .list-group-item .row-content .least-content {\n  position: absolute;\n  right: 16px;\n  top: 0;\n  color: rgba(0, 0, 0, 0.54);\n  font-size: 14px;\n}\n.list-group .list-group-item .list-group-item-heading {\n  color: rgba(0, 0, 0, 0.77);\n  font-size: 20px;\n  line-height: 29px;\n}\n.list-group .list-group-item.active:hover,\n.list-group .list-group-item.active:focus {\n  background: rgba(0, 0, 0, 0.15);\n  outline: 10px solid rgba(0, 0, 0, 0.15);\n}\n.list-group .list-group-item.active .list-group-item-heading,\n.list-group .list-group-item.active .list-group-item-text {\n  color: rgba(0,0,0, 0.87);\n}\n.list-group .list-group-separator {\n  clear: both;\n  overflow: hidden;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.list-group .list-group-separator:before {\n  content: \"\";\n  width: -webkit-calc(100% - 90px);\n  width: calc(100% - 90px);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  float: right;\n}\n.navbar {\n  background-color: #009688;\n  border: 0;\n  border-radius: 0;\n}\n.navbar .navbar-brand {\n  position: relative;\n  height: 60px;\n  line-height: 30px;\n  color: inherit;\n}\n.navbar .navbar-brand:hover,\n.navbar .navbar-brand:focus {\n  color: inherit;\n  background-color: transparent;\n}\n.navbar .navbar-text {\n  color: inherit;\n  margin-top: 20px;\n  margin-bottom: 20px;\n}\n.navbar .navbar-nav > li > a {\n  color: inherit;\n  padding-top: 20px;\n  padding-bottom: 20px;\n}\n.navbar .navbar-nav > li > a:hover,\n.navbar .navbar-nav > li > a:focus {\n  color: inherit;\n  background-color: transparent;\n}\n.navbar .navbar-nav > .active > a,\n.navbar .navbar-nav > .active > a:hover,\n.navbar .navbar-nav > .active > a:focus {\n  color: inherit;\n  background-color: rgba(255, 255, 255, 0.1);\n}\n.navbar .navbar-nav > .disabled > a,\n.navbar .navbar-nav > .disabled > a:hover,\n.navbar .navbar-nav > .disabled > a:focus {\n  color: inherit;\n  background-color: transparent;\n  opacity: 0.9;\n}\n.navbar .navbar-toggle {\n  border: 0;\n}\n.navbar .navbar-toggle:hover,\n.navbar .navbar-toggle:focus {\n  background-color: transparent;\n}\n.navbar .navbar-toggle .icon-bar {\n  background-color: inherit;\n  border: 1px solid;\n}\n.navbar .navbar-default .navbar-toggle,\n.navbar .navbar-inverse .navbar-toggle {\n  border-color: transparent;\n}\n.navbar .navbar-collapse,\n.navbar .navbar-form {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar .navbar-nav > .open > a,\n.navbar .navbar-nav > .open > a:hover,\n.navbar .navbar-nav > .open > a:focus {\n  background-color: transparent;\n  color: inherit;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .navbar-text {\n    color: inherit;\n    margin-top: 15px;\n    margin-bottom: 15px;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border: 0;\n    color: inherit;\n  }\n  .navbar .navbar-nav .open .dropdown-menu .divider {\n    border-bottom: 1px solid;\n    opacity: 0.08;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > li > a {\n    color: inherit;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n}\n.navbar .navbar-link {\n  color: inherit;\n}\n.navbar .navbar-link:hover {\n  color: inherit;\n}\n.navbar .btn-link {\n  color: inherit;\n}\n.navbar .btn-link:hover,\n.navbar .btn-link:focus {\n  color: inherit;\n}\n.navbar .btn-link[disabled]:hover,\nfieldset[disabled] .navbar .btn-link:hover,\n.navbar .btn-link[disabled]:focus,\nfieldset[disabled] .navbar .btn-link:focus {\n  color: inherit;\n}\n.navbar .navbar-form {\n  margin-top: 16px;\n}\n.navbar .navbar-form .form-group {\n  margin: 0;\n  padding: 0;\n}\n.navbar .navbar-form .form-group .material-input:before,\n.navbar .navbar-form .form-group.is-focused .material-input:after {\n  background-color: inherit;\n}\n.navbar .navbar-form .form-group .form-control,\n.navbar .navbar-form .form-control {\n  border-color: inherit;\n  color: inherit;\n  padding: 0;\n  margin: 0;\n  height: 28px;\n  font-size: 14px;\n  line-height: 1.42857143;\n}\n.navbar,\n.navbar.navbar-default {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar .navbar-form input.form-control::-moz-placeholder,\n.navbar.navbar-default .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar .navbar-form input.form-control:-ms-input-placeholder,\n.navbar.navbar-default .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar .navbar-form input.form-control::-webkit-input-placeholder,\n.navbar.navbar-default .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .dropdown-menu,\n.navbar.navbar-default .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar .dropdown-menu li > a,\n.navbar.navbar-default .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar .dropdown-menu li > a:hover,\n.navbar.navbar-default .dropdown-menu li > a:hover,\n.navbar .dropdown-menu li > a:focus,\n.navbar.navbar-default .dropdown-menu li > a:focus {\n  color: #009688;\n  background-color: #eeeeee;\n}\n.navbar .dropdown-menu .active > a,\n.navbar.navbar-default .dropdown-menu .active > a {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .dropdown-menu .active > a:hover,\n.navbar.navbar-default .dropdown-menu .active > a:hover,\n.navbar .dropdown-menu .active > a:focus,\n.navbar.navbar-default .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control::-moz-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control:-ms-input-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control::-webkit-input-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-inverse .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-inverse .dropdown-menu li > a:hover,\n.navbar.navbar-inverse .dropdown-menu li > a:focus {\n  color: #3f51b5;\n  background-color: #eeeeee;\n}\n.navbar.navbar-inverse .dropdown-menu .active > a {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.navbar.navbar-inverse .dropdown-menu .active > a:hover,\n.navbar.navbar-inverse .dropdown-menu .active > a:focus {\n  color: #ffffff;\n}\n.navbar.navbar-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-primary .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-primary .dropdown-menu li > a:hover,\n.navbar.navbar-primary .dropdown-menu li > a:focus {\n  color: #009688;\n  background-color: #eeeeee;\n}\n.navbar.navbar-primary .dropdown-menu .active > a {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .dropdown-menu .active > a:hover,\n.navbar.navbar-primary .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-success .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-success .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-success .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-success .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-success .dropdown-menu li > a:hover,\n.navbar.navbar-success .dropdown-menu li > a:focus {\n  color: #4caf50;\n  background-color: #eeeeee;\n}\n.navbar.navbar-success .dropdown-menu .active > a {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .dropdown-menu .active > a:hover,\n.navbar.navbar-success .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-info .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-info .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-info .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-info .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-info .dropdown-menu li > a:hover,\n.navbar.navbar-info .dropdown-menu li > a:focus {\n  color: #03a9f4;\n  background-color: #eeeeee;\n}\n.navbar.navbar-info .dropdown-menu .active > a {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .dropdown-menu .active > a:hover,\n.navbar.navbar-info .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-warning .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-warning .dropdown-menu li > a:hover,\n.navbar.navbar-warning .dropdown-menu li > a:focus {\n  color: #ff5722;\n  background-color: #eeeeee;\n}\n.navbar.navbar-warning .dropdown-menu .active > a {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .dropdown-menu .active > a:hover,\n.navbar.navbar-warning .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-danger .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-danger .dropdown-menu li > a:hover,\n.navbar.navbar-danger .dropdown-menu li > a:focus {\n  color: #f44336;\n  background-color: #eeeeee;\n}\n.navbar.navbar-danger .dropdown-menu .active > a {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .dropdown-menu .active > a:hover,\n.navbar.navbar-danger .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar-inverse {\n  background-color: #3f51b5;\n}\n@media (max-width: 1199px) {\n  .navbar .navbar-brand {\n    height: 50px;\n    padding: 10px 15px;\n  }\n  .navbar .navbar-form {\n    margin-top: 10px;\n  }\n  .navbar .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.dropdown-menu {\n  border: 0;\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n          box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n}\n.dropdown-menu .divider {\n  background-color: rgba(0, 0, 0, 0.12);\n}\n.dropdown-menu li {\n  overflow: hidden;\n  position: relative;\n}\n.dropdown-menu li a:hover {\n  background-color: transparent;\n  color: #009688;\n}\n.alert {\n  border: 0;\n  border-radius: 0;\n}\n.alert,\n.alert.alert-default {\n  background-color: rgba(255,255,255, 0.84);\n  color: rgba(255,255,255, 0.84);\n}\n.alert a,\n.alert.alert-default a,\n.alert .alert-link,\n.alert.alert-default .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.alert.alert-inverse a,\n.alert.alert-inverse .alert-link {\n  color: #ffffff;\n}\n.alert.alert-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-primary a,\n.alert.alert-primary .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-success a,\n.alert.alert-success .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-info a,\n.alert.alert-info .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-warning a,\n.alert.alert-warning .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-danger a,\n.alert.alert-danger .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert-info,\n.alert-danger,\n.alert-warning,\n.alert-success {\n  color: rgba(255,255,255, 0.84);\n}\n.alert-default a,\n.alert-default .alert-link {\n  color: rgba(0,0,0, 0.87);\n}\n.progress {\n  height: 4px;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: #c8c8c8;\n}\n.progress .progress-bar {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.progress .progress-bar,\n.progress .progress-bar.progress-bar-default {\n  background-color: #009688;\n}\n.progress .progress-bar.progress-bar-inverse {\n  background-color: #3f51b5;\n}\n.progress .progress-bar.progress-bar-primary {\n  background-color: #009688;\n}\n.progress .progress-bar.progress-bar-success {\n  background-color: #4caf50;\n}\n.progress .progress-bar.progress-bar-info {\n  background-color: #03a9f4;\n}\n.progress .progress-bar.progress-bar-warning {\n  background-color: #ff5722;\n}\n.progress .progress-bar.progress-bar-danger {\n  background-color: #f44336;\n}\n.text-warning {\n  color: #ff5722;\n}\n.text-primary {\n  color: #009688;\n}\n.text-danger {\n  color: #f44336;\n}\n.text-success {\n  color: #4caf50;\n}\n.text-info {\n  color: #03a9f4;\n}\n.nav-tabs {\n  background: #009688;\n}\n.nav-tabs > li > a {\n  color: #FFFFFF;\n  border: 0;\n  margin: 0;\n}\n.nav-tabs > li > a:hover {\n  background-color: transparent;\n  border: 0;\n}\n.nav-tabs > li > a,\n.nav-tabs > li > a:hover,\n.nav-tabs > li > a:focus {\n  background-color: transparent !important;\n  border: 0 !important;\n  color: #FFFFFF !important;\n  font-weight: 500;\n}\n.nav-tabs > li.disabled > a,\n.nav-tabs > li.disabled > a:hover {\n  color: rgba(255, 255, 255, 0.5);\n}\n.popover,\n.tooltip-inner {\n  color: #ececec;\n  line-height: 1em;\n  background: rgba(101, 101, 101, 0.9);\n  border: none;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n}\n.tooltip,\n.tooltip.in {\n  opacity: 1;\n}\n.popover .arrow,\n.tooltip .arrow,\n.popover .tooltip-arrow,\n.tooltip .tooltip-arrow {\n  display: none;\n}\n.card {\n  /***** Make height equal to width (http://stackoverflow.com/a/6615994) ****/\n  display: inline-block;\n  position: relative;\n  width: 100%;\n  /**************************************************************************/\n  border-radius: 2px;\n  color: rgba(0,0,0, 0.87);\n  background: #fff;\n  -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n          box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n.card .card-height-indicator {\n  margin-top: 100%;\n}\n.card .card-content {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.card .card-image {\n  height: 60%;\n  position: relative;\n  overflow: hidden;\n}\n.card .card-image img {\n  width: 100%;\n  height: 100%;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px;\n  pointer-events: none;\n}\n.card .card-image .card-image-headline {\n  position: absolute;\n  bottom: 16px;\n  left: 18px;\n  color: #fff;\n  font-size: 2em;\n}\n.card .card-body {\n  height: 30%;\n  padding: 18px;\n}\n.card .card-footer {\n  height: 10%;\n  padding: 18px;\n}\n.card .card-footer button,\n.card .card-footer a {\n  margin: 0 !important;\n  position: relative;\n  bottom: 25px;\n  width: auto;\n}\n.card .card-footer button:first-child,\n.card .card-footer a:first-child {\n  left: -15px;\n}\n.modal-content {\n  -webkit-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);\n          box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);\n  border-radius: 2px;\n  border: none;\n}\n.modal-content .modal-header {\n  border-bottom: none;\n  padding-top: 24px;\n  padding-right: 24px;\n  padding-bottom: 0;\n  padding-left: 24px;\n}\n.modal-content .modal-body {\n  padding-top: 24px;\n  padding-right: 24px;\n  padding-bottom: 16px;\n  padding-left: 24px;\n}\n.modal-content .modal-footer {\n  border-top: none;\n  padding: 7px;\n}\n.modal-content .modal-footer button {\n  margin: 0;\n  padding-left: 16px;\n  padding-right: 16px;\n  width: auto;\n}\n.modal-content .modal-footer button.pull-left {\n  padding-left: 5px;\n  padding-right: 5px;\n  position: relative;\n  left: -5px;\n}\n.modal-content .modal-footer button + button {\n  margin-bottom: 16px;\n}\n.modal-content .modal-body + .modal-footer {\n  padding-top: 0;\n}\n.modal-backdrop {\n  background: rgba(0, 0, 0, 0.3);\n}\n.panel {\n  border-radius: 2px;\n  border: 0;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n}\n.panel > .panel-heading,\n.panel.panel-default > .panel-heading {\n  background-color: #eeeeee;\n}\n.panel.panel-inverse > .panel-heading {\n  background-color: #3f51b5;\n}\n.panel.panel-primary > .panel-heading {\n  background-color: #009688;\n}\n.panel.panel-success > .panel-heading {\n  background-color: #4caf50;\n}\n.panel.panel-info > .panel-heading {\n  background-color: #03a9f4;\n}\n.panel.panel-warning > .panel-heading {\n  background-color: #ff5722;\n}\n.panel.panel-danger > .panel-heading {\n  background-color: #f44336;\n}\n[class*=\"panel-\"] > .panel-heading {\n  color: rgba(255,255,255, 0.84);\n  border: 0;\n}\n.panel-default > .panel-heading,\n.panel:not([class*=\"panel-\"]) > .panel-heading {\n  color: rgba(0,0,0, 0.87);\n}\n.panel-footer {\n  background-color: #eeeeee;\n}\nhr.on-dark {\n  color: #1a1a1a;\n}\nhr.on-light {\n  color: #ffffff;\n}\n@media (-webkit-min-device-pixel-ratio: 0.75), (min--moz-device-pixel-ratio: 0.75), (-o-device-pixel-ratio: 3/4), (min-device-pixel-ratio: 0.75), (-o-min-device-pixel-ratio: 3/4), (min-resolution: 0.75dppx), (-webkit-min-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 120dpi) {\n  hr {\n    height: 0.75px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1), (min--moz-device-pixel-ratio: 1), (-o-device-pixel-ratio: 1), (min-device-pixel-ratio: 1), (-o-min-device-pixel-ratio: 1/1), (min-resolution: 1dppx), (-webkit-min-device-pixel-ratio: 1.6666666666666667), (-o-min-device-pixel-ratio: 5/3), (min-resolution: 160dpi) {\n  hr {\n    height: 1px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1.33), (min--moz-device-pixel-ratio: 1.33), (-o-device-pixel-ratio: 133/100), (min-device-pixel-ratio: 1.33), (-o-min-device-pixel-ratio: 133/100), (min-resolution: 1.33dppx), (-webkit-min-device-pixel-ratio: 2.21875), (-o-min-device-pixel-ratio: 71/32), (min-resolution: 213dpi) {\n  hr {\n    height: 1.333px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx), (-webkit-min-device-pixel-ratio: 2.5), (-o-min-device-pixel-ratio: 5/2), (min-resolution: 240dpi) {\n  hr {\n    height: 1.5px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-device-pixel-ratio: 2/1), (min-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 3.9583333333333335), (-o-min-device-pixel-ratio: 95/24), (min-resolution: 380dpi) {\n  hr {\n    height: 2px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 3), (min--moz-device-pixel-ratio: 3), (-o-device-pixel-ratio: 3/1), (min-device-pixel-ratio: 3), (-o-min-device-pixel-ratio: 3/1), (min-resolution: 3dppx), (-webkit-min-device-pixel-ratio: 5), (-o-min-device-pixel-ratio: 5/1), (min-resolution: 480dpi) {\n  hr {\n    height: 3px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 4), (min--moz-device-pixel-ratio: 4), (-o-device-pixel-ratio: 4/1), (min-device-pixel-ratio: 3), (-o-min-device-pixel-ratio: 4/1), (min-resolution: 4dppx), (-webkit-min-device-pixel-ratio: 6.666666666666667), (-o-min-device-pixel-ratio: 20/3), (min-resolution: 640dpi) {\n  hr {\n    height: 4px;\n  }\n}\n* {\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  -webkit-tap-highlight-color: transparent;\n}\n*:focus {\n  outline: 0;\n}\n.snackbar {\n  background-color: #323232;\n  color: rgba(255,255,255, 0.84);\n  font-size: 14px;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n  height: 0;\n  -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n       -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n          transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n  -webkit-transform: translateY(200%);\n      -ms-transform: translateY(200%);\n       -o-transform: translateY(200%);\n          transform: translateY(200%);\n}\n.snackbar.snackbar-opened {\n  padding: 14px 15px;\n  margin-bottom: 20px;\n  height: auto;\n  -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n       -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n          transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n  -webkit-transform: none;\n      -ms-transform: none;\n       -o-transform: none;\n          transform: none;\n}\n.snackbar.toast {\n  border-radius: 200px;\n}\n.noUi-target,\n.noUi-target * {\n  -webkit-touch-callout: none;\n  -ms-touch-action: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.noUi-base {\n  width: 100%;\n  height: 100%;\n  position: relative;\n}\n.noUi-origin {\n  position: absolute;\n  right: 0;\n  top: 0;\n  left: 0;\n  bottom: 0;\n}\n.noUi-handle {\n  position: relative;\n  z-index: 1;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.noUi-stacking .noUi-handle {\n  z-index: 10;\n}\n.noUi-state-tap .noUi-origin {\n  -webkit-transition: left 0.3s, top 0.3s;\n       -o-transition: left 0.3s, top 0.3s;\n          transition: left 0.3s, top 0.3s;\n}\n.noUi-state-drag * {\n  cursor: inherit !important;\n}\n.noUi-horizontal {\n  height: 10px;\n}\n.noUi-handle {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  width: 12px;\n  height: 12px;\n  left: -10px;\n  top: -5px;\n  cursor: ew-resize;\n  border-radius: 100%;\n  -webkit-transition: all 0.2s ease-out;\n       -o-transition: all 0.2s ease-out;\n          transition: all 0.2s ease-out;\n  border: 1px solid;\n}\n.noUi-vertical .noUi-handle {\n  margin-left: 5px;\n  cursor: ns-resize;\n}\n.noUi-horizontal.noUi-extended {\n  padding: 0 15px;\n}\n.noUi-horizontal.noUi-extended .noUi-origin {\n  right: -15px;\n}\n.noUi-background {\n  height: 2px;\n  margin: 20px 0;\n}\n.noUi-origin {\n  margin: 0;\n  border-radius: 0;\n  height: 2px;\n  background: #c8c8c8;\n}\n.noUi-origin[style^=\"left: 0\"] .noUi-handle {\n  background-color: #fff;\n  border: 2px solid #c8c8c8;\n}\n.noUi-origin[style^=\"left: 0\"] .noUi-handle.noUi-active {\n  border-width: 1px;\n}\n.noUi-target {\n  border-radius: 2px;\n}\n.noUi-horizontal {\n  height: 2px;\n  margin: 15px 0;\n}\n.noUi-vertical {\n  height: 100%;\n  width: 2px;\n  margin: 0 15px;\n  display: inline-block;\n}\n.noUi-handle.noUi-active {\n  -webkit-transform: scale3d(2.5, 2.5, 1);\n          transform: scale3d(2.5, 2.5, 1);\n}\n[disabled].noUi-slider {\n  opacity: 0.5;\n}\n[disabled] .noUi-handle {\n  cursor: not-allowed;\n}\n.slider {\n  background: #c8c8c8;\n}\n.slider.noUi-connect,\n.slider.slider-default.noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-inverse.noUi-connect {\n  background-color: #3f51b5;\n}\n.slider.slider-primary.noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-success.noUi-connect {\n  background-color: #4caf50;\n}\n.slider.slider-info.noUi-connect {\n  background-color: #03a9f4;\n}\n.slider.slider-warning.noUi-connect {\n  background-color: #ff5722;\n}\n.slider.slider-danger.noUi-connect {\n  background-color: #f44336;\n}\n.slider .noUi-connect,\n.slider.slider-default .noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-inverse .noUi-connect {\n  background-color: #3f51b5;\n}\n.slider.slider-primary .noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-success .noUi-connect {\n  background-color: #4caf50;\n}\n.slider.slider-info .noUi-connect {\n  background-color: #03a9f4;\n}\n.slider.slider-warning .noUi-connect {\n  background-color: #ff5722;\n}\n.slider.slider-danger .noUi-connect {\n  background-color: #f44336;\n}\n.slider .noUi-handle,\n.slider.slider-default .noUi-handle {\n  background-color: #009688;\n}\n.slider.slider-inverse .noUi-handle {\n  background-color: #3f51b5;\n}\n.slider.slider-primary .noUi-handle {\n  background-color: #009688;\n}\n.slider.slider-success .noUi-handle {\n  background-color: #4caf50;\n}\n.slider.slider-info .noUi-handle {\n  background-color: #03a9f4;\n}\n.slider.slider-warning .noUi-handle {\n  background-color: #ff5722;\n}\n.slider.slider-danger .noUi-handle {\n  background-color: #f44336;\n}\n.slider .noUi-handle,\n.slider.slider-default .noUi-handle {\n  border-color: #009688;\n}\n.slider.slider-inverse .noUi-handle {\n  border-color: #3f51b5;\n}\n.slider.slider-primary .noUi-handle {\n  border-color: #009688;\n}\n.slider.slider-success .noUi-handle {\n  border-color: #4caf50;\n}\n.slider.slider-info .noUi-handle {\n  border-color: #03a9f4;\n}\n.slider.slider-warning .noUi-handle {\n  border-color: #ff5722;\n}\n.slider.slider-danger .noUi-handle {\n  border-color: #f44336;\n}\n.selectize-control.single,\n.selectize-control.multi {\n  padding: 0;\n}\n.selectize-control.single .selectize-input,\n.selectize-control.multi .selectize-input,\n.selectize-control.single .selectize-input.input-active,\n.selectize-control.multi .selectize-input.input-active {\n  cursor: text;\n  background: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 0;\n  padding: 0;\n  height: 100%;\n  font-size: 14px;\n  line-height: 30px;\n}\n.selectize-control.single .selectize-input .has-items,\n.selectize-control.multi .selectize-input .has-items,\n.selectize-control.single .selectize-input.input-active .has-items,\n.selectize-control.multi .selectize-input.input-active .has-items {\n  padding: 0;\n}\n.selectize-control.single .selectize-input:after,\n.selectize-control.multi .selectize-input:after,\n.selectize-control.single .selectize-input.input-active:after,\n.selectize-control.multi .selectize-input.input-active:after {\n  right: 5px;\n  position: absolute;\n  font-size: 25px;\n  content: \"\\e5c5\";\n  font-family: 'Material Icons';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.selectize-control.single .selectize-input input,\n.selectize-control.multi .selectize-input input,\n.selectize-control.single .selectize-input.input-active input,\n.selectize-control.multi .selectize-input.input-active input {\n  font-size: 14px;\n  outline: 0;\n  border: 0;\n  background: transparent;\n}\n.selectize-control.single .selectize-input.label-floating-fix input,\n.selectize-control.multi .selectize-input.label-floating-fix input,\n.selectize-control.single .selectize-input.input-active.label-floating-fix input,\n.selectize-control.multi .selectize-input.input-active.label-floating-fix input {\n  opacity: 0;\n}\n.selectize-control.single .selectize-input > div,\n.selectize-control.multi .selectize-input > div,\n.selectize-control.single .selectize-input.input-active > div,\n.selectize-control.multi .selectize-input.input-active > div,\n.selectize-control.single .selectize-input > .item,\n.selectize-control.multi .selectize-input > .item,\n.selectize-control.single .selectize-input.input-active > .item,\n.selectize-control.multi .selectize-input.input-active > .item {\n  display: inline-block;\n  margin: 0 8px 3px 0;\n  padding: 0;\n  background: transparent;\n  border: 0;\n}\n.selectize-control.single .selectize-input > div:after,\n.selectize-control.multi .selectize-input > div:after,\n.selectize-control.single .selectize-input.input-active > div:after,\n.selectize-control.multi .selectize-input.input-active > div:after,\n.selectize-control.single .selectize-input > .item:after,\n.selectize-control.multi .selectize-input > .item:after,\n.selectize-control.single .selectize-input.input-active > .item:after,\n.selectize-control.multi .selectize-input.input-active > .item:after {\n  content: \",\";\n}\n.selectize-control.single .selectize-input > div:last-of-type:after,\n.selectize-control.multi .selectize-input > div:last-of-type:after,\n.selectize-control.single .selectize-input.input-active > div:last-of-type:after,\n.selectize-control.multi .selectize-input.input-active > div:last-of-type:after,\n.selectize-control.single .selectize-input > .item:last-of-type:after,\n.selectize-control.multi .selectize-input > .item:last-of-type:after,\n.selectize-control.single .selectize-input.input-active > .item:last-of-type:after,\n.selectize-control.multi .selectize-input.input-active > .item:last-of-type:after {\n  content: \"\";\n}\n.selectize-control.single .selectize-input > div.active,\n.selectize-control.multi .selectize-input > div.active,\n.selectize-control.single .selectize-input.input-active > div.active,\n.selectize-control.multi .selectize-input.input-active > div.active,\n.selectize-control.single .selectize-input > .item.active,\n.selectize-control.multi .selectize-input > .item.active,\n.selectize-control.single .selectize-input.input-active > .item.active,\n.selectize-control.multi .selectize-input.input-active > .item.active {\n  font-weight: bold;\n  background: transparent;\n  border: 0;\n}\n.selectize-control.single .selectize-dropdown,\n.selectize-control.multi .selectize-dropdown {\n  position: absolute;\n  z-index: 1000;\n  border: 0;\n  width: 100% !important;\n  left: 0 !important;\n  height: auto;\n  background-color: #FFF;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n  border-radius: 2px;\n  padding: 0;\n  margin-top: 3px;\n}\n.selectize-control.single .selectize-dropdown .active,\n.selectize-control.multi .selectize-dropdown .active {\n  background-color: inherit;\n}\n.selectize-control.single .selectize-dropdown .highlight,\n.selectize-control.multi .selectize-dropdown .highlight {\n  background-color: #d5d8ff;\n}\n.selectize-control.single .selectize-dropdown .selected,\n.selectize-control.multi .selectize-dropdown .selected,\n.selectize-control.single .selectize-dropdown .selected.active,\n.selectize-control.multi .selectize-dropdown .selected.active {\n  background-color: #EEEEEE;\n}\n.selectize-control.single .selectize-dropdown [data-selectable],\n.selectize-control.multi .selectize-dropdown [data-selectable],\n.selectize-control.single .selectize-dropdown .optgroup-header,\n.selectize-control.multi .selectize-dropdown .optgroup-header {\n  padding: 10px 20px;\n  cursor: pointer;\n}\n.selectize-control.single .dropdown-active ~ .selectize-dropdown,\n.selectize-control.multi .dropdown-active ~ .selectize-dropdown {\n  display: block;\n}\n.dropdownjs::after {\n  right: 5px;\n  top: 3px;\n  font-size: 25px;\n  position: absolute;\n  font-family: 'Material Icons';\n  font-style: normal;\n  font-weight: 400;\n  content: \"\\e5c5\";\n  pointer-events: none;\n  color: #757575;\n}\n/*# sourceMappingURL=bootstrap-material-design.css.map */"
  },
  {
    "path": "amd/src/assets/js/bootstrap-material-design/css/ripples.css",
    "content": ".withripple {\n  position: relative;\n}\n.ripple-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  border-radius: inherit;\n  pointer-events: none;\n}\n.ripple {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  margin-left: -10px;\n  margin-top: -10px;\n  border-radius: 100%;\n  background-color: #000;\n  background-color: rgba(0, 0, 0, 0.05);\n  -webkit-transform: scale(1);\n      -ms-transform: scale(1);\n       -o-transform: scale(1);\n          transform: scale(1);\n  -webkit-transform-origin: 50%;\n      -ms-transform-origin: 50%;\n       -o-transform-origin: 50%;\n          transform-origin: 50%;\n  opacity: 0;\n  pointer-events: none;\n}\n.ripple.ripple-on {\n  -webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n       -o-transition: opacity 0.15s ease-in 0s, -o-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n          transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n  opacity: 0.1;\n}\n.ripple.ripple-out {\n  -webkit-transition: opacity 0.1s linear 0s !important;\n       -o-transition: opacity 0.1s linear 0s !important;\n          transition: opacity 0.1s linear 0s !important;\n  opacity: 0;\n}\n/*# sourceMappingURL=ripples.css.map */"
  },
  {
    "path": "amd/src/assets/js/bootstrap-material-design/js/material.js",
    "content": "/* globals jQuery */\n\n(function ($) {\n  // Selector to select only not already processed elements\n  $.expr[\":\"].notmdproc = function (obj) {\n    if ($(obj).data(\"mdproc\")) {\n      return false;\n    } else {\n      return true;\n    }\n  };\n\n  function _isChar(evt) {\n    if (typeof evt.which == \"undefined\") {\n      return true;\n    } else if (typeof evt.which == \"number\" && evt.which > 0) {\n      return (\n        !evt.ctrlKey\n        && !evt.metaKey\n        && !evt.altKey\n        && evt.which != 8  // backspace\n        && evt.which != 9  // tab\n        && evt.which != 13 // enter\n        && evt.which != 16 // shift\n        && evt.which != 17 // ctrl\n        && evt.which != 20 // caps lock\n        && evt.which != 27 // escape\n      );\n    }\n    return false;\n  }\n\n  function _addFormGroupFocus(element) {\n    var $element = $(element);\n    if (!$element.prop('disabled')) {  // this is showing as undefined on chrome but works fine on firefox??\n      $element.closest(\".form-group\").addClass(\"is-focused\");\n    }\n  }\n\n  function _toggleTypeFocus($input) {\n    $input.closest('label').hover(function () {\n      var $i = $(this).find('input');\n      if (!$i.prop('disabled')) { // hack because the _addFormGroupFocus() wasn't identifying the property on chrome\n        _addFormGroupFocus($i);     // need to find the input so we can check disablement\n      }\n    }, function () {\n      _removeFormGroupFocus($(this).find('input'));\n    });\n  }\n\n  function _removeFormGroupFocus(element) {\n    $(element).closest(\".form-group\").removeClass(\"is-focused\"); // remove class from form-group\n  }\n\n  $.material = {\n    \"options\": {\n      // These options set what will be started by $.material.init()\n      \"validate\": true,\n      \"input\": true,\n      \"ripples\": true,\n      \"checkbox\": true,\n      \"togglebutton\": true,\n      \"radio\": true,\n      \"arrive\": true,\n      \"autofill\": false,\n\n      \"withRipples\": [\n        \".btn:not(.btn-link)\",\n        \".card-image\",\n        \".navbar a:not(.withoutripple)\",\n        \".dropdown-menu a\",\n        \".nav-tabs a:not(.withoutripple)\",\n        \".withripple\",\n        \".pagination li:not(.active):not(.disabled) a:not(.withoutripple)\"\n      ].join(\",\"),\n      \"inputElements\": \"input.form-control, textarea.form-control, select.form-control\",\n      \"checkboxElements\": \".checkbox > label > input[type=checkbox]\",\n      \"togglebuttonElements\": \".togglebutton > label > input[type=checkbox]\",\n      \"radioElements\": \".radio > label > input[type=radio]\"\n    },\n    \"checkbox\": function (selector) {\n      // Add fake-checkbox to material checkboxes\n      var $input = $((selector) ? selector : this.options.checkboxElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='checkbox-material'><span class='check'></span></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"togglebutton\": function (selector) {\n      // Add fake-checkbox to material checkboxes\n      var $input = $((selector) ? selector : this.options.togglebuttonElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='toggle'></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"radio\": function (selector) {\n      // Add fake-radio to material radios\n      var $input = $((selector) ? selector : this.options.radioElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='circle'></span><span class='check'></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"input\": function (selector) {\n      $((selector) ? selector : this.options.inputElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .each(function () {\n          var $input = $(this);\n\n          // Requires form-group standard markup (will add it if necessary)\n          var $formGroup = $input.closest(\".form-group\"); // note that form-group may be grandparent in the case of an input-group\n          if ($formGroup.length === 0 && $input.attr('type') !== \"hidden\" && !$input.attr('hidden')) {\n            $input.wrap(\"<div class='form-group'></div>\");\n            $formGroup = $input.closest(\".form-group\"); // find node after attached (otherwise additional attachments don't work)\n          }\n\n          // Legacy - Add hint label if using the old shorthand data-hint attribute on the input\n          if ($input.attr(\"data-hint\")) {\n            $input.after(\"<p class='help-block'>\" + $input.attr(\"data-hint\") + \"</p>\");\n            $input.removeAttr(\"data-hint\");\n          }\n\n          // Legacy - Change input-sm/lg to form-group-sm/lg instead (preferred standard and simpler css/less variants)\n          var legacySizes = {\n            \"input-lg\": \"form-group-lg\",\n            \"input-sm\": \"form-group-sm\"\n          };\n          $.each(legacySizes, function (legacySize, standardSize) {\n            if ($input.hasClass(legacySize)) {\n              $input.removeClass(legacySize);\n              $formGroup.addClass(standardSize);\n            }\n          });\n\n          // Legacy - Add label-floating if using old shorthand <input class=\"floating-label\" placeholder=\"foo\">\n          if ($input.hasClass(\"floating-label\")) {\n            var placeholder = $input.attr(\"placeholder\");\n            $input.attr(\"placeholder\", null).removeClass(\"floating-label\");\n            var id = $input.attr(\"id\");\n            var forAttribute = \"\";\n            if (id) {\n              forAttribute = \"for='\" + id + \"'\";\n            }\n            $formGroup.addClass(\"label-floating\");\n            $input.after(\"<label \" + forAttribute + \"class='control-label'>\" + placeholder + \"</label>\");\n          }\n\n          // Set as empty if is empty (damn I must improve this...)\n          if ($input.val() === null || $input.val() == \"undefined\" || $input.val() === \"\") {\n            $formGroup.addClass(\"is-empty\");\n          }\n\n          // Add at the end of the form-group\n          $formGroup.append(\"<span class='material-input'></span>\");\n\n          // Support for file input\n          if ($formGroup.find(\"input[type=file]\").length > 0) {\n            $formGroup.addClass(\"is-fileinput\");\n          }\n        });\n    },\n    \"attachInputEventHandlers\": function () {\n      var validate = this.options.validate;\n\n      $(document)\n        .on(\"change\", \".checkbox input[type=checkbox]\", function () {\n          $(this).blur();\n        })\n        .on(\"keydown paste\", \".form-control\", function (e) {\n          if (_isChar(e)) {\n            $(this).closest(\".form-group\").removeClass(\"is-empty\");\n          }\n        })\n        .on(\"keyup change\", \".form-control\", function () {\n          var $input = $(this);\n          var $formGroup = $input.closest(\".form-group\");\n          var isValid = (typeof $input[0].checkValidity === \"undefined\" || $input[0].checkValidity());\n\n          if ($input.val() === \"\") {\n            $formGroup.addClass(\"is-empty\");\n          }\n          else {\n            $formGroup.removeClass(\"is-empty\");\n          }\n\n          // Validation events do not bubble, so they must be attached directly to the input: http://jsfiddle.net/PEpRM/1/\n          //  Further, even the bind method is being caught, but since we are already calling #checkValidity here, just alter\n          //  the form-group on change.\n          //\n          // NOTE: I'm not sure we should be intervening regarding validation, this seems better as a README and snippet of code.\n          //        BUT, I've left it here for backwards compatibility.\n          if (validate) {\n            if (isValid) {\n              $formGroup.removeClass(\"has-error\");\n            }\n            else {\n              $formGroup.addClass(\"has-error\");\n            }\n          }\n        })\n        .on(\"focus\", \".form-control, .form-group.is-fileinput\", function () {\n          _addFormGroupFocus(this);\n        })\n        .on(\"blur\", \".form-control, .form-group.is-fileinput\", function () {\n          _removeFormGroupFocus(this);\n        })\n        // make sure empty is added back when there is a programmatic value change.\n        //  NOTE: programmatic changing of value using $.val() must trigger the change event i.e. $.val('x').trigger('change')\n        .on(\"change\", \".form-group input\", function () {\n          var $input = $(this);\n          if ($input.attr(\"type\") == \"file\") {\n            return;\n          }\n\n          var $formGroup = $input.closest(\".form-group\");\n          var value = $input.val();\n          if (value) {\n            $formGroup.removeClass(\"is-empty\");\n          } else {\n            $formGroup.addClass(\"is-empty\");\n          }\n        })\n        // set the fileinput readonly field with the name of the file\n        .on(\"change\", \".form-group.is-fileinput input[type='file']\", function () {\n          var $input = $(this);\n          var $formGroup = $input.closest(\".form-group\");\n          var value = \"\";\n          $.each(this.files, function (i, file) {\n            value += file.name + \", \";\n          });\n          value = value.substring(0, value.length - 2);\n          if (value) {\n            $formGroup.removeClass(\"is-empty\");\n          } else {\n            $formGroup.addClass(\"is-empty\");\n          }\n          $formGroup.find(\"input.form-control[readonly]\").val(value);\n        });\n    },\n    \"ripples\": function (selector) {\n      $((selector) ? selector : this.options.withRipples).ripples();\n    },\n    \"autofill\": function () {\n      // This part of code will detect autofill when the page is loading (username and password inputs for example)\n      var loading = setInterval(function () {\n        $(\"input[type!=checkbox]\").each(function () {\n          var $this = $(this);\n          if ($this.val() && $this.val() !== $this.attr(\"value\")) {\n            $this.trigger(\"change\");\n          }\n        });\n      }, 100);\n\n      // After 10 seconds we are quite sure all the needed inputs are autofilled then we can stop checking them\n      setTimeout(function () {\n        clearInterval(loading);\n      }, 10000);\n    },\n    \"attachAutofillEventHandlers\": function () {\n      // Listen on inputs of the focused form (because user can select from the autofill dropdown only when the input has focus)\n      var focused;\n      $(document)\n        .on(\"focus\", \"input\", function () {\n          var $inputs = $(this).parents(\"form\").find(\"input\").not(\"[type=file]\");\n          focused = setInterval(function () {\n            $inputs.each(function () {\n              var $this = $(this);\n              if ($this.val() !== $this.attr(\"value\")) {\n                $this.trigger(\"change\");\n              }\n            });\n          }, 100);\n        })\n        .on(\"blur\", \".form-group input\", function () {\n          clearInterval(focused);\n        });\n    },\n    \"init\": function (options) {\n      this.options = $.extend({}, this.options, options);\n      var $document = $(document);\n\n      if ($.fn.ripples && this.options.ripples) {\n        this.ripples();\n      }\n      if (this.options.input) {\n        this.input();\n        this.attachInputEventHandlers();\n      }\n      if (this.options.checkbox) {\n        this.checkbox();\n      }\n      if (this.options.togglebutton) {\n        this.togglebutton();\n      }\n      if (this.options.radio) {\n        this.radio();\n      }\n      if (this.options.autofill) {\n        this.autofill();\n        this.attachAutofillEventHandlers();\n      }\n\n      if (document.arrive && this.options.arrive) {\n        if ($.fn.ripples && this.options.ripples) {\n          $document.arrive(this.options.withRipples, function () {\n            $.material.ripples($(this));\n          });\n        }\n        if (this.options.input) {\n          $document.arrive(this.options.inputElements, function () {\n            $.material.input($(this));\n          });\n        }\n        if (this.options.checkbox) {\n          $document.arrive(this.options.checkboxElements, function () {\n            $.material.checkbox($(this));\n          });\n        }\n        if (this.options.radio) {\n          $document.arrive(this.options.radioElements, function () {\n            $.material.radio($(this));\n          });\n        }\n        if (this.options.togglebutton) {\n          $document.arrive(this.options.togglebuttonElements, function () {\n            $.material.togglebutton($(this));\n          });\n        }\n\n      }\n    }\n  };\n\n})(jQuery);\n"
  },
  {
    "path": "amd/src/assets/js/bootstrap-material-design/js/ripples.js",
    "content": "/* Copyright 2014+, Federico Zivolo, LICENSE at https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE.md */\n/* globals jQuery, navigator */\n\n(function($, window, document, undefined) {\n\n  \"use strict\";\n\n  /**\n   * Define the name of the plugin\n   */\n  var ripples = \"ripples\";\n\n\n  /**\n   * Get an instance of the plugin\n   */\n  var self = null;\n\n\n  /**\n   * Define the defaults of the plugin\n   */\n  var defaults = {};\n\n\n  /**\n   * Create the main plugin function\n   */\n  function Ripples(element, options) {\n    self = this;\n\n    this.element = $(element);\n\n    this.options = $.extend({}, defaults, options);\n\n    this._defaults = defaults;\n    this._name = ripples;\n\n    this.init();\n  }\n\n\n  /**\n   * Initialize the plugin\n   */\n  Ripples.prototype.init = function() {\n    var $element  = this.element;\n\n    $element.on(\"mousedown touchstart\", function(event) {\n      /**\n       * Verify if the user is just touching on a device and return if so\n       */\n      if(self.isTouch() && event.type === \"mousedown\") {\n        return;\n      }\n\n\n      /**\n       * Verify if the current element already has a ripple wrapper element and\n       * creates if it doesn't\n       */\n      if(!($element.find(\".ripple-container\").length)) {\n        $element.append(\"<div class=\\\"ripple-container\\\"></div>\");\n      }\n\n\n      /**\n       * Find the ripple wrapper\n       */\n      var $wrapper = $element.children(\".ripple-container\");\n\n\n      /**\n       * Get relY and relX positions\n       */\n      var relY = self.getRelY($wrapper, event);\n      var relX = self.getRelX($wrapper, event);\n\n\n      /**\n       * If relY and/or relX are false, return the event\n       */\n      if(!relY && !relX) {\n        return;\n      }\n\n\n      /**\n       * Get the ripple color\n       */\n      var rippleColor = self.getRipplesColor($element);\n\n\n      /**\n       * Create the ripple element\n       */\n      var $ripple = $(\"<div></div>\");\n\n      $ripple\n      .addClass(\"ripple\")\n      .css({\n        \"left\": relX,\n        \"top\": relY,\n        \"background-color\": rippleColor\n      });\n\n\n      /**\n       * Append the ripple to the wrapper\n       */\n      $wrapper.append($ripple);\n\n\n      /**\n       * Make sure the ripple has the styles applied (ugly hack but it works)\n       */\n      (function() { return window.getComputedStyle($ripple[0]).opacity; })();\n\n\n      /**\n       * Turn on the ripple animation\n       */\n      self.rippleOn($element, $ripple);\n\n\n      /**\n       * Call the rippleEnd function when the transition \"on\" ends\n       */\n      setTimeout(function() {\n        self.rippleEnd($ripple);\n      }, 500);\n\n\n      /**\n       * Detect when the user leaves the element\n       */\n      $element.on(\"mouseup mouseleave touchend\", function() {\n        $ripple.data(\"mousedown\", \"off\");\n\n        if($ripple.data(\"animating\") === \"off\") {\n          self.rippleOut($ripple);\n        }\n      });\n\n    });\n  };\n\n\n  /**\n   * Get the new size based on the element height/width and the ripple width\n   */\n  Ripples.prototype.getNewSize = function($element, $ripple) {\n\n    return (Math.max($element.outerWidth(), $element.outerHeight()) / $ripple.outerWidth()) * 2.5;\n  };\n\n\n  /**\n   * Get the relX\n   */\n  Ripples.prototype.getRelX = function($wrapper,  event) {\n    var wrapperOffset = $wrapper.offset();\n\n    if(!self.isTouch()) {\n      /**\n       * Get the mouse position relative to the ripple wrapper\n       */\n      return event.pageX - wrapperOffset.left;\n    } else {\n      /**\n       * Make sure the user is using only one finger and then get the touch\n       * position relative to the ripple wrapper\n       */\n      event = event.originalEvent;\n\n      if(event.touches.length === 1) {\n        return event.touches[0].pageX - wrapperOffset.left;\n      }\n\n      return false;\n    }\n  };\n\n\n  /**\n   * Get the relY\n   */\n  Ripples.prototype.getRelY = function($wrapper, event) {\n    var wrapperOffset = $wrapper.offset();\n\n    if(!self.isTouch()) {\n      /**\n       * Get the mouse position relative to the ripple wrapper\n       */\n      return event.pageY - wrapperOffset.top;\n    } else {\n      /**\n       * Make sure the user is using only one finger and then get the touch\n       * position relative to the ripple wrapper\n       */\n      event = event.originalEvent;\n\n      if(event.touches.length === 1) {\n        return event.touches[0].pageY - wrapperOffset.top;\n      }\n\n      return false;\n    }\n  };\n\n\n  /**\n   * Get the ripple color\n   */\n  Ripples.prototype.getRipplesColor = function($element) {\n\n    var color = $element.data(\"ripple-color\") ? $element.data(\"ripple-color\") : window.getComputedStyle($element[0]).color;\n\n    return color;\n  };\n\n\n  /**\n   * Verify if the client browser has transistion support\n   */\n  Ripples.prototype.hasTransitionSupport = function() {\n    var thisBody  = document.body || document.documentElement;\n    var thisStyle = thisBody.style;\n\n    var support = (\n      thisStyle.transition !== undefined ||\n      thisStyle.WebkitTransition !== undefined ||\n      thisStyle.MozTransition !== undefined ||\n      thisStyle.MsTransition !== undefined ||\n      thisStyle.OTransition !== undefined\n    );\n\n    return support;\n  };\n\n\n  /**\n   * Verify if the client is using a mobile device\n   */\n  Ripples.prototype.isTouch = function() {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n  };\n\n\n  /**\n   * End the animation of the ripple\n   */\n  Ripples.prototype.rippleEnd = function($ripple) {\n    $ripple.data(\"animating\", \"off\");\n\n    if($ripple.data(\"mousedown\") === \"off\") {\n      self.rippleOut($ripple);\n    }\n  };\n\n\n  /**\n   * Turn off the ripple effect\n   */\n  Ripples.prototype.rippleOut = function($ripple) {\n    $ripple.off();\n\n    if(self.hasTransitionSupport()) {\n      $ripple.addClass(\"ripple-out\");\n    } else {\n      $ripple.animate({\"opacity\": 0}, 100, function() {\n        $ripple.trigger(\"transitionend\");\n      });\n    }\n\n    $ripple.on(\"transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd\", function() {\n      $ripple.remove();\n    });\n  };\n\n\n  /**\n   * Turn on the ripple effect\n   */\n  Ripples.prototype.rippleOn = function($element, $ripple) {\n    var size = self.getNewSize($element, $ripple);\n\n    if(self.hasTransitionSupport()) {\n      $ripple\n      .css({\n        \"-ms-transform\": \"scale(\" + size + \")\",\n        \"-moz-transform\": \"scale(\" + size + \")\",\n        \"-webkit-transform\": \"scale(\" + size + \")\",\n        \"transform\": \"scale(\" + size + \")\"\n      })\n      .addClass(\"ripple-on\")\n      .data(\"animating\", \"on\")\n      .data(\"mousedown\", \"on\");\n    } else {\n      $ripple.animate({\n        \"width\": Math.max($element.outerWidth(), $element.outerHeight()) * 2,\n        \"height\": Math.max($element.outerWidth(), $element.outerHeight()) * 2,\n        \"margin-left\": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),\n        \"margin-top\": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),\n        \"opacity\": 0.2\n      }, 500, function() {\n        $ripple.trigger(\"transitionend\");\n      });\n    }\n  };\n\n\n  /**\n   * Create the jquery plugin function\n   */\n  $.fn.ripples = function(options) {\n    return this.each(function() {\n      if(!$.data(this, \"plugin_\" + ripples)) {\n        $.data(this, \"plugin_\" + ripples, new Ripples(this, options));\n      }\n    });\n  };\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "amd/src/component/App.js",
    "content": "/**\n * Created by  on 2016/3/25.\n */\ndefine(function(require){\n\n    var Vue = require(\"vue\");\n    var searchComponent = require(\"component/Search\");\n    var searchList = require(\"component/List\");\n    var app = Vue.extend({\n        template : \"#app-template\",\n        vuex :{\n            getters : {\n                searchResultList: function(store){\n                    return store.search.searchResultList\n                }\n            }\n        },\n        components:{\n            searchComponent : searchComponent,\n            searchList : searchList\n        }\n    });\n    return app\n});\n\n\n"
  },
  {
    "path": "amd/src/component/List.js",
    "content": "\ndefine(function(require){\n    var Vue = require(\"vue\");\n    return Vue.extend({\n        template : \"#list-template\",\n        props:['data'],\n        computed : {\n            isEmpty : function(){\n                return this.data.length == 0 ;\n            }\n        }\n    });\n});\n"
  },
  {
    "path": "amd/src/component/Search.js",
    "content": "define(function(require){\n    var Vue = require(\"vue\");\n    var SearchGroup = require(\"component/SearchGroup\");\n    var actions = require(\"vuex/actions\")\n    var getters = require(\"vuex/getters\");\n\n    return Vue.extend({\n        vuex :{\n           getters : {\n               searchGroupItem: function(store){\n                   return store.searchGroup.searchGroupItem\n               },\n               searchGroup:function(store){\n                   return store.searchGroup.searchGroup\n               },\n               searchKey : function(store){\n                   return store.search.searchKey\n               },\n               isEmptySearchKey : getters.isEmptySearchKey\n           },\n           actions: {\n               searchParamList:actions.searchParamList ,\n               clearSearchKey:actions.clearSearchKey,\n               updateSearchKey:actions.updateSearchKey\n           }\n        },\n        methods : {\n            clearAction:function(){\n                this.clearSearchKey()\n            },\n            searchAction:function(e){\n                if(this.searchKey.length){\n                    this.searchParamList(this.searchGroup,this.searchKey)\n                }\n            },\n            update:function(e){\n                this.updateSearchKey(e.target.value)\n            }\n        },\n        template : \"#search-template\",\n        components:{\n            searchGroup:SearchGroup\n        }\n    });\n});\n\n"
  },
  {
    "path": "amd/src/component/SearchGroup.js",
    "content": "    \n define(function(require){\n     var actions = require(\"vuex/actions\");\n     var Vue = require(\"vue\");\n     return Vue.extend({\n         template: \"#searchgroup-template\",\n         vuex : {\n             getters : {\n                 searchKey : function(store){\n                     return store.search.searchKey;\n                 },\n                 searchGroup : function(store){\n                     return store.searchGroup.searchGroup\n                 }\n             },\n             actions : {\n                 setSearchGroup :actions.setSearchGroup\n             }\n         },\n         computed : {\n             curName : function(){\n                 let cname ;\n                 this.items.forEach((it) =>{\n                     if(it.value == this.searchGroup) cname = it.name\n                 })\n                 return cname\n             }\n         },\n         methods : {\n             menuClick : function(it){\n                 this.setSearchGroup(it.value,this.searchKey)\n             }\n         },\n         components:{\n         },\n         props : ['items']\n     })\n })   \n"
  },
  {
    "path": "amd/src/config.js",
    "content": "require.config({\n    baseUrl : \"./src\",\n    paths :{\n        jquery:\"./lib/jquery.min\",\n        vue:\"./lib/vue\",\n        vueResource:\"./lib/vue-resource.min\",\n        vueX:\"./lib/vuex\",\n        api :\"./api/index\",\n        lodash : \"./lib/lodash.min\",\n        bootstrap : \"./assets/js/bootstrap/js/bootstrap.min\",\n        ripples : \"./assets/js/bootstrap-material-design/js/ripples.min\",\n        material:\"./assets/js/bootstrap-material-design/js/material.min\"\n    },\n    shim : {\n        bootstrap : ['jquery'],\n        ripples:['jquery'],\n        material:['jquery'],\n    },\n    packages: [\n        {\n            name: 'components',\n            location: 'component',\n            main: 'components'\n        },\n        {\n            name : \"vuex\",\n            location :\"vuex\",\n            main : \"vuex\"\n        }\n    ]\n})\nrequire([\"./main\"])"
  },
  {
    "path": "amd/src/lib/vue.js",
    "content": "/*!\n * Vue.js v1.0.21\n * (c) 2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Vue = factory());\n}(this, function () { 'use strict';\n\n  function set(obj, key, val) {\n    if (hasOwn(obj, key)) {\n      obj[key] = val;\n      return;\n    }\n    if (obj._isVue) {\n      set(obj._data, key, val);\n      return;\n    }\n    var ob = obj.__ob__;\n    if (!ob) {\n      obj[key] = val;\n      return;\n    }\n    ob.convert(key, val);\n    ob.dep.notify();\n    if (ob.vms) {\n      var i = ob.vms.length;\n      while (i--) {\n        var vm = ob.vms[i];\n        vm._proxy(key);\n        vm._digest();\n      }\n    }\n    return val;\n  }\n\n  /**\n   * Delete a property and trigger change if necessary.\n   *\n   * @param {Object} obj\n   * @param {String} key\n   */\n\n  function del(obj, key) {\n    if (!hasOwn(obj, key)) {\n      return;\n    }\n    delete obj[key];\n    var ob = obj.__ob__;\n    if (!ob) {\n      return;\n    }\n    ob.dep.notify();\n    if (ob.vms) {\n      var i = ob.vms.length;\n      while (i--) {\n        var vm = ob.vms[i];\n        vm._unproxy(key);\n        vm._digest();\n      }\n    }\n  }\n\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n  /**\n   * Check whether the object has the property.\n   *\n   * @param {Object} obj\n   * @param {String} key\n   * @return {Boolean}\n   */\n\n  function hasOwn(obj, key) {\n    return hasOwnProperty.call(obj, key);\n  }\n\n  /**\n   * Check if an expression is a literal value.\n   *\n   * @param {String} exp\n   * @return {Boolean}\n   */\n\n  var literalValueRE = /^\\s?(true|false|-?[\\d\\.]+|'[^']*'|\"[^\"]*\")\\s?$/;\n\n  function isLiteral(exp) {\n    return literalValueRE.test(exp);\n  }\n\n  /**\n   * Check if a string starts with $ or _\n   *\n   * @param {String} str\n   * @return {Boolean}\n   */\n\n  function isReserved(str) {\n    var c = (str + '').charCodeAt(0);\n    return c === 0x24 || c === 0x5F;\n  }\n\n  /**\n   * Guard text output, make sure undefined outputs\n   * empty string\n   *\n   * @param {*} value\n   * @return {String}\n   */\n\n  function _toString(value) {\n    return value == null ? '' : value.toString();\n  }\n\n  /**\n   * Check and convert possible numeric strings to numbers\n   * before setting back to data\n   *\n   * @param {*} value\n   * @return {*|Number}\n   */\n\n  function toNumber(value) {\n    if (typeof value !== 'string') {\n      return value;\n    } else {\n      var parsed = Number(value);\n      return isNaN(parsed) ? value : parsed;\n    }\n  }\n\n  /**\n   * Convert string boolean literals into real booleans.\n   *\n   * @param {*} value\n   * @return {*|Boolean}\n   */\n\n  function toBoolean(value) {\n    return value === 'true' ? true : value === 'false' ? false : value;\n  }\n\n  /**\n   * Strip quotes from a string\n   *\n   * @param {String} str\n   * @return {String | false}\n   */\n\n  function stripQuotes(str) {\n    var a = str.charCodeAt(0);\n    var b = str.charCodeAt(str.length - 1);\n    return a === b && (a === 0x22 || a === 0x27) ? str.slice(1, -1) : str;\n  }\n\n  /**\n   * Camelize a hyphen-delmited string.\n   *\n   * @param {String} str\n   * @return {String}\n   */\n\n  var camelizeRE = /-(\\w)/g;\n\n  function camelize(str) {\n    return str.replace(camelizeRE, toUpper);\n  }\n\n  function toUpper(_, c) {\n    return c ? c.toUpperCase() : '';\n  }\n\n  /**\n   * Hyphenate a camelCase string.\n   *\n   * @param {String} str\n   * @return {String}\n   */\n\n  var hyphenateRE = /([a-z\\d])([A-Z])/g;\n\n  function hyphenate(str) {\n    return str.replace(hyphenateRE, '$1-$2').toLowerCase();\n  }\n\n  /**\n   * Converts hyphen/underscore/slash delimitered names into\n   * camelized classNames.\n   *\n   * e.g. my-component => MyComponent\n   *      some_else    => SomeElse\n   *      some/comp    => SomeComp\n   *\n   * @param {String} str\n   * @return {String}\n   */\n\n  var classifyRE = /(?:^|[-_\\/])(\\w)/g;\n\n  function classify(str) {\n    return str.replace(classifyRE, toUpper);\n  }\n\n  /**\n   * Simple bind, faster than native\n   *\n   * @param {Function} fn\n   * @param {Object} ctx\n   * @return {Function}\n   */\n\n  function bind(fn, ctx) {\n    return function (a) {\n      var l = arguments.length;\n      return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);\n    };\n  }\n\n  /**\n   * Convert an Array-like object to a real Array.\n   *\n   * @param {Array-like} list\n   * @param {Number} [start] - start index\n   * @return {Array}\n   */\n\n  function toArray(list, start) {\n    start = start || 0;\n    var i = list.length - start;\n    var ret = new Array(i);\n    while (i--) {\n      ret[i] = list[i + start];\n    }\n    return ret;\n  }\n\n  /**\n   * Mix properties into target object.\n   *\n   * @param {Object} to\n   * @param {Object} from\n   */\n\n  function extend(to, from) {\n    var keys = Object.keys(from);\n    var i = keys.length;\n    while (i--) {\n      to[keys[i]] = from[keys[i]];\n    }\n    return to;\n  }\n\n  /**\n   * Quick object check - this is primarily used to tell\n   * Objects from primitive values when we know the value\n   * is a JSON-compliant type.\n   *\n   * @param {*} obj\n   * @return {Boolean}\n   */\n\n  function isObject(obj) {\n    return obj !== null && typeof obj === 'object';\n  }\n\n  /**\n   * Strict object type check. Only returns true\n   * for plain JavaScript objects.\n   *\n   * @param {*} obj\n   * @return {Boolean}\n   */\n\n  var toString = Object.prototype.toString;\n  var OBJECT_STRING = '[object Object]';\n\n  function isPlainObject(obj) {\n    return toString.call(obj) === OBJECT_STRING;\n  }\n\n  /**\n   * Array type check.\n   *\n   * @param {*} obj\n   * @return {Boolean}\n   */\n\n  var isArray = Array.isArray;\n\n  /**\n   * Define a property.\n   *\n   * @param {Object} obj\n   * @param {String} key\n   * @param {*} val\n   * @param {Boolean} [enumerable]\n   */\n\n  function def(obj, key, val, enumerable) {\n    Object.defineProperty(obj, key, {\n      value: val,\n      enumerable: !!enumerable,\n      writable: true,\n      configurable: true\n    });\n  }\n\n  /**\n   * Debounce a function so it only gets called after the\n   * input stops arriving after the given wait period.\n   *\n   * @param {Function} func\n   * @param {Number} wait\n   * @return {Function} - the debounced function\n   */\n\n  function _debounce(func, wait) {\n    var timeout, args, context, timestamp, result;\n    var later = function later() {\n      var last = Date.now() - timestamp;\n      if (last < wait && last >= 0) {\n        timeout = setTimeout(later, wait - last);\n      } else {\n        timeout = null;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      }\n    };\n    return function () {\n      context = this;\n      args = arguments;\n      timestamp = Date.now();\n      if (!timeout) {\n        timeout = setTimeout(later, wait);\n      }\n      return result;\n    };\n  }\n\n  /**\n   * Manual indexOf because it's slightly faster than\n   * native.\n   *\n   * @param {Array} arr\n   * @param {*} obj\n   */\n\n  function indexOf(arr, obj) {\n    var i = arr.length;\n    while (i--) {\n      if (arr[i] === obj) return i;\n    }\n    return -1;\n  }\n\n  /**\n   * Make a cancellable version of an async callback.\n   *\n   * @param {Function} fn\n   * @return {Function}\n   */\n\n  function cancellable(fn) {\n    var cb = function cb() {\n      if (!cb.cancelled) {\n        return fn.apply(this, arguments);\n      }\n    };\n    cb.cancel = function () {\n      cb.cancelled = true;\n    };\n    return cb;\n  }\n\n  /**\n   * Check if two values are loosely equal - that is,\n   * if they are plain objects, do they have the same shape?\n   *\n   * @param {*} a\n   * @param {*} b\n   * @return {Boolean}\n   */\n\n  function looseEqual(a, b) {\n    /* eslint-disable eqeqeq */\n    return a == b || (isObject(a) && isObject(b) ? JSON.stringify(a) === JSON.stringify(b) : false);\n    /* eslint-enable eqeqeq */\n  }\n\n  var hasProto = ('__proto__' in {});\n\n  // Browser environment sniffing\n  var inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n  // detect devtools\n  var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n  // UA sniffing for working around browser-specific quirks\n  var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n  var isAndroid = UA && UA.indexOf('android') > 0;\n\n  var transitionProp = undefined;\n  var transitionEndEvent = undefined;\n  var animationProp = undefined;\n  var animationEndEvent = undefined;\n\n  // Transition property/event sniffing\n  if (inBrowser && !isIE9) {\n    var isWebkitTrans = window.ontransitionend === undefined && window.onwebkittransitionend !== undefined;\n    var isWebkitAnim = window.onanimationend === undefined && window.onwebkitanimationend !== undefined;\n    transitionProp = isWebkitTrans ? 'WebkitTransition' : 'transition';\n    transitionEndEvent = isWebkitTrans ? 'webkitTransitionEnd' : 'transitionend';\n    animationProp = isWebkitAnim ? 'WebkitAnimation' : 'animation';\n    animationEndEvent = isWebkitAnim ? 'webkitAnimationEnd' : 'animationend';\n  }\n\n  /**\n   * Defer a task to execute it asynchronously. Ideally this\n   * should be executed as a microtask, so we leverage\n   * MutationObserver if it's available, and fallback to\n   * setTimeout(0).\n   *\n   * @param {Function} cb\n   * @param {Object} ctx\n   */\n\n  var nextTick = (function () {\n    var callbacks = [];\n    var pending = false;\n    var timerFunc;\n    function nextTickHandler() {\n      pending = false;\n      var copies = callbacks.slice(0);\n      callbacks = [];\n      for (var i = 0; i < copies.length; i++) {\n        copies[i]();\n      }\n    }\n\n    /* istanbul ignore if */\n    if (typeof MutationObserver !== 'undefined') {\n      var counter = 1;\n      var observer = new MutationObserver(nextTickHandler);\n      var textNode = document.createTextNode(counter);\n      observer.observe(textNode, {\n        characterData: true\n      });\n      timerFunc = function () {\n        counter = (counter + 1) % 2;\n        textNode.data = counter;\n      };\n    } else {\n      // webpack attempts to inject a shim for setImmediate\n      // if it is used as a global, so we have to work around that to\n      // avoid bundling unnecessary code.\n      var context = inBrowser ? window : typeof global !== 'undefined' ? global : {};\n      timerFunc = context.setImmediate || setTimeout;\n    }\n    return function (cb, ctx) {\n      var func = ctx ? function () {\n        cb.call(ctx);\n      } : cb;\n      callbacks.push(func);\n      if (pending) return;\n      pending = true;\n      timerFunc(nextTickHandler, 0);\n    };\n  })();\n\n  function Cache(limit) {\n    this.size = 0;\n    this.limit = limit;\n    this.head = this.tail = undefined;\n    this._keymap = Object.create(null);\n  }\n\n  var p = Cache.prototype;\n\n  /**\n   * Put <value> into the cache associated with <key>.\n   * Returns the entry which was removed to make room for\n   * the new entry. Otherwise undefined is returned.\n   * (i.e. if there was enough room already).\n   *\n   * @param {String} key\n   * @param {*} value\n   * @return {Entry|undefined}\n   */\n\n  p.put = function (key, value) {\n    var removed;\n    if (this.size === this.limit) {\n      removed = this.shift();\n    }\n\n    var entry = this.get(key, true);\n    if (!entry) {\n      entry = {\n        key: key\n      };\n      this._keymap[key] = entry;\n      if (this.tail) {\n        this.tail.newer = entry;\n        entry.older = this.tail;\n      } else {\n        this.head = entry;\n      }\n      this.tail = entry;\n      this.size++;\n    }\n    entry.value = value;\n\n    return removed;\n  };\n\n  /**\n   * Purge the least recently used (oldest) entry from the\n   * cache. Returns the removed entry or undefined if the\n   * cache was empty.\n   */\n\n  p.shift = function () {\n    var entry = this.head;\n    if (entry) {\n      this.head = this.head.newer;\n      this.head.older = undefined;\n      entry.newer = entry.older = undefined;\n      this._keymap[entry.key] = undefined;\n      this.size--;\n    }\n    return entry;\n  };\n\n  /**\n   * Get and register recent use of <key>. Returns the value\n   * associated with <key> or undefined if not in cache.\n   *\n   * @param {String} key\n   * @param {Boolean} returnEntry\n   * @return {Entry|*}\n   */\n\n  p.get = function (key, returnEntry) {\n    var entry = this._keymap[key];\n    if (entry === undefined) return;\n    if (entry === this.tail) {\n      return returnEntry ? entry : entry.value;\n    }\n    // HEAD--------------TAIL\n    //   <.older   .newer>\n    //  <--- add direction --\n    //   A  B  C  <D>  E\n    if (entry.newer) {\n      if (entry === this.head) {\n        this.head = entry.newer;\n      }\n      entry.newer.older = entry.older; // C <-- E.\n    }\n    if (entry.older) {\n      entry.older.newer = entry.newer; // C. --> E\n    }\n    entry.newer = undefined; // D --x\n    entry.older = this.tail; // D. --> E\n    if (this.tail) {\n      this.tail.newer = entry; // E. <-- D\n    }\n    this.tail = entry;\n    return returnEntry ? entry : entry.value;\n  };\n\n  var cache$1 = new Cache(1000);\n  var filterTokenRE = /[^\\s'\"]+|'[^']*'|\"[^\"]*\"/g;\n  var reservedArgRE = /^in$|^-?\\d+/;\n\n  /**\n   * Parser state\n   */\n\n  var str;\n  var dir;\n  var c;\n  var prev;\n  var i;\n  var l;\n  var lastFilterIndex;\n  var inSingle;\n  var inDouble;\n  var curly;\n  var square;\n  var paren;\n  /**\n   * Push a filter to the current directive object\n   */\n\n  function pushFilter() {\n    var exp = str.slice(lastFilterIndex, i).trim();\n    var filter;\n    if (exp) {\n      filter = {};\n      var tokens = exp.match(filterTokenRE);\n      filter.name = tokens[0];\n      if (tokens.length > 1) {\n        filter.args = tokens.slice(1).map(processFilterArg);\n      }\n    }\n    if (filter) {\n      (dir.filters = dir.filters || []).push(filter);\n    }\n    lastFilterIndex = i + 1;\n  }\n\n  /**\n   * Check if an argument is dynamic and strip quotes.\n   *\n   * @param {String} arg\n   * @return {Object}\n   */\n\n  function processFilterArg(arg) {\n    if (reservedArgRE.test(arg)) {\n      return {\n        value: toNumber(arg),\n        dynamic: false\n      };\n    } else {\n      var stripped = stripQuotes(arg);\n      var dynamic = stripped === arg;\n      return {\n        value: dynamic ? arg : stripped,\n        dynamic: dynamic\n      };\n    }\n  }\n\n  /**\n   * Parse a directive value and extract the expression\n   * and its filters into a descriptor.\n   *\n   * Example:\n   *\n   * \"a + 1 | uppercase\" will yield:\n   * {\n   *   expression: 'a + 1',\n   *   filters: [\n   *     { name: 'uppercase', args: null }\n   *   ]\n   * }\n   *\n   * @param {String} s\n   * @return {Object}\n   */\n\n  function parseDirective(s) {\n    var hit = cache$1.get(s);\n    if (hit) {\n      return hit;\n    }\n\n    // reset parser state\n    str = s;\n    inSingle = inDouble = false;\n    curly = square = paren = 0;\n    lastFilterIndex = 0;\n    dir = {};\n\n    for (i = 0, l = str.length; i < l; i++) {\n      prev = c;\n      c = str.charCodeAt(i);\n      if (inSingle) {\n        // check single quote\n        if (c === 0x27 && prev !== 0x5C) inSingle = !inSingle;\n      } else if (inDouble) {\n        // check double quote\n        if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble;\n      } else if (c === 0x7C && // pipe\n      str.charCodeAt(i + 1) !== 0x7C && str.charCodeAt(i - 1) !== 0x7C) {\n        if (dir.expression == null) {\n          // first filter, end of expression\n          lastFilterIndex = i + 1;\n          dir.expression = str.slice(0, i).trim();\n        } else {\n          // already has filter\n          pushFilter();\n        }\n      } else {\n        switch (c) {\n          case 0x22:\n            inDouble = true;break; // \"\n          case 0x27:\n            inSingle = true;break; // '\n          case 0x28:\n            paren++;break; // (\n          case 0x29:\n            paren--;break; // )\n          case 0x5B:\n            square++;break; // [\n          case 0x5D:\n            square--;break; // ]\n          case 0x7B:\n            curly++;break; // {\n          case 0x7D:\n            curly--;break; // }\n        }\n      }\n    }\n\n    if (dir.expression == null) {\n      dir.expression = str.slice(0, i).trim();\n    } else if (lastFilterIndex !== 0) {\n      pushFilter();\n    }\n\n    cache$1.put(s, dir);\n    return dir;\n  }\n\nvar directive = Object.freeze({\n    parseDirective: parseDirective\n  });\n\n  var regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n  var cache = undefined;\n  var tagRE = undefined;\n  var htmlRE = undefined;\n  /**\n   * Escape a string so it can be used in a RegExp\n   * constructor.\n   *\n   * @param {String} str\n   */\n\n  function escapeRegex(str) {\n    return str.replace(regexEscapeRE, '\\\\$&');\n  }\n\n  function compileRegex() {\n    var open = escapeRegex(config.delimiters[0]);\n    var close = escapeRegex(config.delimiters[1]);\n    var unsafeOpen = escapeRegex(config.unsafeDelimiters[0]);\n    var unsafeClose = escapeRegex(config.unsafeDelimiters[1]);\n    tagRE = new RegExp(unsafeOpen + '((?:.|\\\\n)+?)' + unsafeClose + '|' + open + '((?:.|\\\\n)+?)' + close, 'g');\n    htmlRE = new RegExp('^' + unsafeOpen + '.*' + unsafeClose + '$');\n    // reset cache\n    cache = new Cache(1000);\n  }\n\n  /**\n   * Parse a template text string into an array of tokens.\n   *\n   * @param {String} text\n   * @return {Array<Object> | null}\n   *               - {String} type\n   *               - {String} value\n   *               - {Boolean} [html]\n   *               - {Boolean} [oneTime]\n   */\n\n  function parseText(text) {\n    if (!cache) {\n      compileRegex();\n    }\n    var hit = cache.get(text);\n    if (hit) {\n      return hit;\n    }\n    if (!tagRE.test(text)) {\n      return null;\n    }\n    var tokens = [];\n    var lastIndex = tagRE.lastIndex = 0;\n    var match, index, html, value, first, oneTime;\n    /* eslint-disable no-cond-assign */\n    while (match = tagRE.exec(text)) {\n      /* eslint-enable no-cond-assign */\n      index = match.index;\n      // push text token\n      if (index > lastIndex) {\n        tokens.push({\n          value: text.slice(lastIndex, index)\n        });\n      }\n      // tag token\n      html = htmlRE.test(match[0]);\n      value = html ? match[1] : match[2];\n      first = value.charCodeAt(0);\n      oneTime = first === 42; // *\n      value = oneTime ? value.slice(1) : value;\n      tokens.push({\n        tag: true,\n        value: value.trim(),\n        html: html,\n        oneTime: oneTime\n      });\n      lastIndex = index + match[0].length;\n    }\n    if (lastIndex < text.length) {\n      tokens.push({\n        value: text.slice(lastIndex)\n      });\n    }\n    cache.put(text, tokens);\n    return tokens;\n  }\n\n  /**\n   * Format a list of tokens into an expression.\n   * e.g. tokens parsed from 'a {{b}} c' can be serialized\n   * into one single expression as '\"a \" + b + \" c\"'.\n   *\n   * @param {Array} tokens\n   * @param {Vue} [vm]\n   * @return {String}\n   */\n\n  function tokensToExp(tokens, vm) {\n    if (tokens.length > 1) {\n      return tokens.map(function (token) {\n        return formatToken(token, vm);\n      }).join('+');\n    } else {\n      return formatToken(tokens[0], vm, true);\n    }\n  }\n\n  /**\n   * Format a single token.\n   *\n   * @param {Object} token\n   * @param {Vue} [vm]\n   * @param {Boolean} [single]\n   * @return {String}\n   */\n\n  function formatToken(token, vm, single) {\n    return token.tag ? token.oneTime && vm ? '\"' + vm.$eval(token.value) + '\"' : inlineFilters(token.value, single) : '\"' + token.value + '\"';\n  }\n\n  /**\n   * For an attribute with multiple interpolation tags,\n   * e.g. attr=\"some-{{thing | filter}}\", in order to combine\n   * the whole thing into a single watchable expression, we\n   * have to inline those filters. This function does exactly\n   * that. This is a bit hacky but it avoids heavy changes\n   * to directive parser and watcher mechanism.\n   *\n   * @param {String} exp\n   * @param {Boolean} single\n   * @return {String}\n   */\n\n  var filterRE = /[^|]\\|[^|]/;\n  function inlineFilters(exp, single) {\n    if (!filterRE.test(exp)) {\n      return single ? exp : '(' + exp + ')';\n    } else {\n      var dir = parseDirective(exp);\n      if (!dir.filters) {\n        return '(' + exp + ')';\n      } else {\n        return 'this._applyFilters(' + dir.expression + // value\n        ',null,' + // oldValue (null for read)\n        JSON.stringify(dir.filters) + // filter descriptors\n        ',false)'; // write?\n      }\n    }\n  }\n\nvar text = Object.freeze({\n    compileRegex: compileRegex,\n    parseText: parseText,\n    tokensToExp: tokensToExp\n  });\n\n  var delimiters = ['{{', '}}'];\n  var unsafeDelimiters = ['{{{', '}}}'];\n\n  var config = Object.defineProperties({\n\n    /**\n     * Whether to print debug messages.\n     * Also enables stack trace for warnings.\n     *\n     * @type {Boolean}\n     */\n\n    debug: false,\n\n    /**\n     * Whether to suppress warnings.\n     *\n     * @type {Boolean}\n     */\n\n    silent: false,\n\n    /**\n     * Whether to use async rendering.\n     */\n\n    async: true,\n\n    /**\n     * Whether to warn against errors caught when evaluating\n     * expressions.\n     */\n\n    warnExpressionErrors: true,\n\n    /**\n     * Whether to allow devtools inspection.\n     * Disabled by default in production builds.\n     */\n\n    devtools: 'development' !== 'production',\n\n    /**\n     * Internal flag to indicate the delimiters have been\n     * changed.\n     *\n     * @type {Boolean}\n     */\n\n    _delimitersChanged: true,\n\n    /**\n     * List of asset types that a component can own.\n     *\n     * @type {Array}\n     */\n\n    _assetTypes: ['component', 'directive', 'elementDirective', 'filter', 'transition', 'partial'],\n\n    /**\n     * prop binding modes\n     */\n\n    _propBindingModes: {\n      ONE_WAY: 0,\n      TWO_WAY: 1,\n      ONE_TIME: 2\n    },\n\n    /**\n     * Max circular updates allowed in a batcher flush cycle.\n     */\n\n    _maxUpdateCount: 100\n\n  }, {\n    delimiters: { /**\n                   * Interpolation delimiters. Changing these would trigger\n                   * the text parser to re-compile the regular expressions.\n                   *\n                   * @type {Array<String>}\n                   */\n\n      get: function get() {\n        return delimiters;\n      },\n      set: function set(val) {\n        delimiters = val;\n        compileRegex();\n      },\n      configurable: true,\n      enumerable: true\n    },\n    unsafeDelimiters: {\n      get: function get() {\n        return unsafeDelimiters;\n      },\n      set: function set(val) {\n        unsafeDelimiters = val;\n        compileRegex();\n      },\n      configurable: true,\n      enumerable: true\n    }\n  });\n\n  var warn = undefined;\n  var formatComponentName = undefined;\n\n  if ('development' !== 'production') {\n    (function () {\n      var hasConsole = typeof console !== 'undefined';\n\n      warn = function (msg, vm) {\n        if (hasConsole && !config.silent) {\n          console.error('[Vue warn]: ' + msg + (vm ? formatComponentName(vm) : ''));\n        }\n      };\n\n      formatComponentName = function (vm) {\n        var name = vm._isVue ? vm.$options.name : vm.name;\n        return name ? ' (found in component: <' + hyphenate(name) + '>)' : '';\n      };\n    })();\n  }\n\n  /**\n   * Append with transition.\n   *\n   * @param {Element} el\n   * @param {Element} target\n   * @param {Vue} vm\n   * @param {Function} [cb]\n   */\n\n  function appendWithTransition(el, target, vm, cb) {\n    applyTransition(el, 1, function () {\n      target.appendChild(el);\n    }, vm, cb);\n  }\n\n  /**\n   * InsertBefore with transition.\n   *\n   * @param {Element} el\n   * @param {Element} target\n   * @param {Vue} vm\n   * @param {Function} [cb]\n   */\n\n  function beforeWithTransition(el, target, vm, cb) {\n    applyTransition(el, 1, function () {\n      before(el, target);\n    }, vm, cb);\n  }\n\n  /**\n   * Remove with transition.\n   *\n   * @param {Element} el\n   * @param {Vue} vm\n   * @param {Function} [cb]\n   */\n\n  function removeWithTransition(el, vm, cb) {\n    applyTransition(el, -1, function () {\n      remove(el);\n    }, vm, cb);\n  }\n\n  /**\n   * Apply transitions with an operation callback.\n   *\n   * @param {Element} el\n   * @param {Number} direction\n   *                  1: enter\n   *                 -1: leave\n   * @param {Function} op - the actual DOM operation\n   * @param {Vue} vm\n   * @param {Function} [cb]\n   */\n\n  function applyTransition(el, direction, op, vm, cb) {\n    var transition = el.__v_trans;\n    if (!transition ||\n    // skip if there are no js hooks and CSS transition is\n    // not supported\n    !transition.hooks && !transitionEndEvent ||\n    // skip transitions for initial compile\n    !vm._isCompiled ||\n    // if the vm is being manipulated by a parent directive\n    // during the parent's compilation phase, skip the\n    // animation.\n    vm.$parent && !vm.$parent._isCompiled) {\n      op();\n      if (cb) cb();\n      return;\n    }\n    var action = direction > 0 ? 'enter' : 'leave';\n    transition[action](op, cb);\n  }\n\nvar transition = Object.freeze({\n    appendWithTransition: appendWithTransition,\n    beforeWithTransition: beforeWithTransition,\n    removeWithTransition: removeWithTransition,\n    applyTransition: applyTransition\n  });\n\n  /**\n   * Query an element selector if it's not an element already.\n   *\n   * @param {String|Element} el\n   * @return {Element}\n   */\n\n  function query(el) {\n    if (typeof el === 'string') {\n      var selector = el;\n      el = document.querySelector(el);\n      if (!el) {\n        'development' !== 'production' && warn('Cannot find element: ' + selector);\n      }\n    }\n    return el;\n  }\n\n  /**\n   * Check if a node is in the document.\n   * Note: document.documentElement.contains should work here\n   * but always returns false for comment nodes in phantomjs,\n   * making unit tests difficult. This is fixed by doing the\n   * contains() check on the node's parentNode instead of\n   * the node itself.\n   *\n   * @param {Node} node\n   * @return {Boolean}\n   */\n\n  function inDoc(node) {\n    var doc = document.documentElement;\n    var parent = node && node.parentNode;\n    return doc === node || doc === parent || !!(parent && parent.nodeType === 1 && doc.contains(parent));\n  }\n\n  /**\n   * Get and remove an attribute from a node.\n   *\n   * @param {Node} node\n   * @param {String} _attr\n   */\n\n  function getAttr(node, _attr) {\n    var val = node.getAttribute(_attr);\n    if (val !== null) {\n      node.removeAttribute(_attr);\n    }\n    return val;\n  }\n\n  /**\n   * Get an attribute with colon or v-bind: prefix.\n   *\n   * @param {Node} node\n   * @param {String} name\n   * @return {String|null}\n   */\n\n  function getBindAttr(node, name) {\n    var val = getAttr(node, ':' + name);\n    if (val === null) {\n      val = getAttr(node, 'v-bind:' + name);\n    }\n    return val;\n  }\n\n  /**\n   * Check the presence of a bind attribute.\n   *\n   * @param {Node} node\n   * @param {String} name\n   * @return {Boolean}\n   */\n\n  function hasBindAttr(node, name) {\n    return node.hasAttribute(name) || node.hasAttribute(':' + name) || node.hasAttribute('v-bind:' + name);\n  }\n\n  /**\n   * Insert el before target\n   *\n   * @param {Element} el\n   * @param {Element} target\n   */\n\n  function before(el, target) {\n    target.parentNode.insertBefore(el, target);\n  }\n\n  /**\n   * Insert el after target\n   *\n   * @param {Element} el\n   * @param {Element} target\n   */\n\n  function after(el, target) {\n    if (target.nextSibling) {\n      before(el, target.nextSibling);\n    } else {\n      target.parentNode.appendChild(el);\n    }\n  }\n\n  /**\n   * Remove el from DOM\n   *\n   * @param {Element} el\n   */\n\n  function remove(el) {\n    el.parentNode.removeChild(el);\n  }\n\n  /**\n   * Prepend el to target\n   *\n   * @param {Element} el\n   * @param {Element} target\n   */\n\n  function prepend(el, target) {\n    if (target.firstChild) {\n      before(el, target.firstChild);\n    } else {\n      target.appendChild(el);\n    }\n  }\n\n  /**\n   * Replace target with el\n   *\n   * @param {Element} target\n   * @param {Element} el\n   */\n\n  function replace(target, el) {\n    var parent = target.parentNode;\n    if (parent) {\n      parent.replaceChild(el, target);\n    }\n  }\n\n  /**\n   * Add event listener shorthand.\n   *\n   * @param {Element} el\n   * @param {String} event\n   * @param {Function} cb\n   * @param {Boolean} [useCapture]\n   */\n\n  function on(el, event, cb, useCapture) {\n    el.addEventListener(event, cb, useCapture);\n  }\n\n  /**\n   * Remove event listener shorthand.\n   *\n   * @param {Element} el\n   * @param {String} event\n   * @param {Function} cb\n   */\n\n  function off(el, event, cb) {\n    el.removeEventListener(event, cb);\n  }\n\n  /**\n   * For IE9 compat: when both class and :class are present\n   * getAttribute('class') returns wrong value...\n   *\n   * @param {Element} el\n   * @return {String}\n   */\n\n  function getClass(el) {\n    var classname = el.className;\n    if (typeof classname === 'object') {\n      classname = classname.baseVal || '';\n    }\n    return classname;\n  }\n\n  /**\n   * In IE9, setAttribute('class') will result in empty class\n   * if the element also has the :class attribute; However in\n   * PhantomJS, setting `className` does not work on SVG elements...\n   * So we have to do a conditional check here.\n   *\n   * @param {Element} el\n   * @param {String} cls\n   */\n\n  function setClass(el, cls) {\n    /* istanbul ignore if */\n    if (isIE9 && !/svg$/.test(el.namespaceURI)) {\n      el.className = cls;\n    } else {\n      el.setAttribute('class', cls);\n    }\n  }\n\n  /**\n   * Add class with compatibility for IE & SVG\n   *\n   * @param {Element} el\n   * @param {String} cls\n   */\n\n  function addClass(el, cls) {\n    if (el.classList) {\n      el.classList.add(cls);\n    } else {\n      var cur = ' ' + getClass(el) + ' ';\n      if (cur.indexOf(' ' + cls + ' ') < 0) {\n        setClass(el, (cur + cls).trim());\n      }\n    }\n  }\n\n  /**\n   * Remove class with compatibility for IE & SVG\n   *\n   * @param {Element} el\n   * @param {String} cls\n   */\n\n  function removeClass(el, cls) {\n    if (el.classList) {\n      el.classList.remove(cls);\n    } else {\n      var cur = ' ' + getClass(el) + ' ';\n      var tar = ' ' + cls + ' ';\n      while (cur.indexOf(tar) >= 0) {\n        cur = cur.replace(tar, ' ');\n      }\n      setClass(el, cur.trim());\n    }\n    if (!el.className) {\n      el.removeAttribute('class');\n    }\n  }\n\n  /**\n   * Extract raw content inside an element into a temporary\n   * container div\n   *\n   * @param {Element} el\n   * @param {Boolean} asFragment\n   * @return {Element|DocumentFragment}\n   */\n\n  function extractContent(el, asFragment) {\n    var child;\n    var rawContent;\n    /* istanbul ignore if */\n    if (isTemplate(el) && isFragment(el.content)) {\n      el = el.content;\n    }\n    if (el.hasChildNodes()) {\n      trimNode(el);\n      rawContent = asFragment ? document.createDocumentFragment() : document.createElement('div');\n      /* eslint-disable no-cond-assign */\n      while (child = el.firstChild) {\n        /* eslint-enable no-cond-assign */\n        rawContent.appendChild(child);\n      }\n    }\n    return rawContent;\n  }\n\n  /**\n   * Trim possible empty head/tail text and comment\n   * nodes inside a parent.\n   *\n   * @param {Node} node\n   */\n\n  function trimNode(node) {\n    var child;\n    /* eslint-disable no-sequences */\n    while ((child = node.firstChild, isTrimmable(child))) {\n      node.removeChild(child);\n    }\n    while ((child = node.lastChild, isTrimmable(child))) {\n      node.removeChild(child);\n    }\n    /* eslint-enable no-sequences */\n  }\n\n  function isTrimmable(node) {\n    return node && (node.nodeType === 3 && !node.data.trim() || node.nodeType === 8);\n  }\n\n  /**\n   * Check if an element is a template tag.\n   * Note if the template appears inside an SVG its tagName\n   * will be in lowercase.\n   *\n   * @param {Element} el\n   */\n\n  function isTemplate(el) {\n    return el.tagName && el.tagName.toLowerCase() === 'template';\n  }\n\n  /**\n   * Create an \"anchor\" for performing dom insertion/removals.\n   * This is used in a number of scenarios:\n   * - fragment instance\n   * - v-html\n   * - v-if\n   * - v-for\n   * - component\n   *\n   * @param {String} content\n   * @param {Boolean} persist - IE trashes empty textNodes on\n   *                            cloneNode(true), so in certain\n   *                            cases the anchor needs to be\n   *                            non-empty to be persisted in\n   *                            templates.\n   * @return {Comment|Text}\n   */\n\n  function createAnchor(content, persist) {\n    var anchor = config.debug ? document.createComment(content) : document.createTextNode(persist ? ' ' : '');\n    anchor.__v_anchor = true;\n    return anchor;\n  }\n\n  /**\n   * Find a component ref attribute that starts with $.\n   *\n   * @param {Element} node\n   * @return {String|undefined}\n   */\n\n  var refRE = /^v-ref:/;\n\n  function findRef(node) {\n    if (node.hasAttributes()) {\n      var attrs = node.attributes;\n      for (var i = 0, l = attrs.length; i < l; i++) {\n        var name = attrs[i].name;\n        if (refRE.test(name)) {\n          return camelize(name.replace(refRE, ''));\n        }\n      }\n    }\n  }\n\n  /**\n   * Map a function to a range of nodes .\n   *\n   * @param {Node} node\n   * @param {Node} end\n   * @param {Function} op\n   */\n\n  function mapNodeRange(node, end, op) {\n    var next;\n    while (node !== end) {\n      next = node.nextSibling;\n      op(node);\n      node = next;\n    }\n    op(end);\n  }\n\n  /**\n   * Remove a range of nodes with transition, store\n   * the nodes in a fragment with correct ordering,\n   * and call callback when done.\n   *\n   * @param {Node} start\n   * @param {Node} end\n   * @param {Vue} vm\n   * @param {DocumentFragment} frag\n   * @param {Function} cb\n   */\n\n  function removeNodeRange(start, end, vm, frag, cb) {\n    var done = false;\n    var removed = 0;\n    var nodes = [];\n    mapNodeRange(start, end, function (node) {\n      if (node === end) done = true;\n      nodes.push(node);\n      removeWithTransition(node, vm, onRemoved);\n    });\n    function onRemoved() {\n      removed++;\n      if (done && removed >= nodes.length) {\n        for (var i = 0; i < nodes.length; i++) {\n          frag.appendChild(nodes[i]);\n        }\n        cb && cb();\n      }\n    }\n  }\n\n  /**\n   * Check if a node is a DocumentFragment.\n   *\n   * @param {Node} node\n   * @return {Boolean}\n   */\n\n  function isFragment(node) {\n    return node && node.nodeType === 11;\n  }\n\n  /**\n   * Get outerHTML of elements, taking care\n   * of SVG elements in IE as well.\n   *\n   * @param {Element} el\n   * @return {String}\n   */\n\n  function getOuterHTML(el) {\n    if (el.outerHTML) {\n      return el.outerHTML;\n    } else {\n      var container = document.createElement('div');\n      container.appendChild(el.cloneNode(true));\n      return container.innerHTML;\n    }\n  }\n\n  var commonTagRE = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i;\n  var reservedTagRE = /^(slot|partial|component)$/i;\n\n  var isUnknownElement = undefined;\n  if ('development' !== 'production') {\n    isUnknownElement = function (el, tag) {\n      if (tag.indexOf('-') > -1) {\n        // http://stackoverflow.com/a/28210364/1070244\n        return el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement;\n      } else {\n        return (/HTMLUnknownElement/.test(el.toString()) &&\n          // Chrome returns unknown for several HTML5 elements.\n          // https://code.google.com/p/chromium/issues/detail?id=540526\n          !/^(data|time|rtc|rb)$/.test(tag)\n        );\n      }\n    };\n  }\n\n  /**\n   * Check if an element is a component, if yes return its\n   * component id.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @return {Object|undefined}\n   */\n\n  function checkComponentAttr(el, options) {\n    var tag = el.tagName.toLowerCase();\n    var hasAttrs = el.hasAttributes();\n    if (!commonTagRE.test(tag) && !reservedTagRE.test(tag)) {\n      if (resolveAsset(options, 'components', tag)) {\n        return { id: tag };\n      } else {\n        var is = hasAttrs && getIsBinding(el);\n        if (is) {\n          return is;\n        } else if ('development' !== 'production') {\n          var expectedTag = options._componentNameMap && options._componentNameMap[tag];\n          if (expectedTag) {\n            warn('Unknown custom element: <' + tag + '> - ' + 'did you mean <' + expectedTag + '>? ' + 'HTML is case-insensitive, remember to use kebab-case in templates.');\n          } else if (isUnknownElement(el, tag)) {\n            warn('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the \"name\" option.');\n          }\n        }\n      }\n    } else if (hasAttrs) {\n      return getIsBinding(el);\n    }\n  }\n\n  /**\n   * Get \"is\" binding from an element.\n   *\n   * @param {Element} el\n   * @return {Object|undefined}\n   */\n\n  function getIsBinding(el) {\n    // dynamic syntax\n    var exp = getAttr(el, 'is');\n    if (exp != null) {\n      return { id: exp };\n    } else {\n      exp = getBindAttr(el, 'is');\n      if (exp != null) {\n        return { id: exp, dynamic: true };\n      }\n    }\n  }\n\n  /**\n   * Option overwriting strategies are functions that handle\n   * how to merge a parent option value and a child option\n   * value into the final value.\n   *\n   * All strategy functions follow the same signature:\n   *\n   * @param {*} parentVal\n   * @param {*} childVal\n   * @param {Vue} [vm]\n   */\n\n  var strats = config.optionMergeStrategies = Object.create(null);\n\n  /**\n   * Helper that recursively merges two data objects together.\n   */\n\n  function mergeData(to, from) {\n    var key, toVal, fromVal;\n    for (key in from) {\n      toVal = to[key];\n      fromVal = from[key];\n      if (!hasOwn(to, key)) {\n        set(to, key, fromVal);\n      } else if (isObject(toVal) && isObject(fromVal)) {\n        mergeData(toVal, fromVal);\n      }\n    }\n    return to;\n  }\n\n  /**\n   * Data\n   */\n\n  strats.data = function (parentVal, childVal, vm) {\n    if (!vm) {\n      // in a Vue.extend merge, both should be functions\n      if (!childVal) {\n        return parentVal;\n      }\n      if (typeof childVal !== 'function') {\n        'development' !== 'production' && warn('The \"data\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n        return parentVal;\n      }\n      if (!parentVal) {\n        return childVal;\n      }\n      // when parentVal & childVal are both present,\n      // we need to return a function that returns the\n      // merged result of both functions... no need to\n      // check if parentVal is a function here because\n      // it has to be a function to pass previous merges.\n      return function mergedDataFn() {\n        return mergeData(childVal.call(this), parentVal.call(this));\n      };\n    } else if (parentVal || childVal) {\n      return function mergedInstanceDataFn() {\n        // instance merge\n        var instanceData = typeof childVal === 'function' ? childVal.call(vm) : childVal;\n        var defaultData = typeof parentVal === 'function' ? parentVal.call(vm) : undefined;\n        if (instanceData) {\n          return mergeData(instanceData, defaultData);\n        } else {\n          return defaultData;\n        }\n      };\n    }\n  };\n\n  /**\n   * El\n   */\n\n  strats.el = function (parentVal, childVal, vm) {\n    if (!vm && childVal && typeof childVal !== 'function') {\n      'development' !== 'production' && warn('The \"el\" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm);\n      return;\n    }\n    var ret = childVal || parentVal;\n    // invoke the element factory if this is instance merge\n    return vm && typeof ret === 'function' ? ret.call(vm) : ret;\n  };\n\n  /**\n   * Hooks and param attributes are merged as arrays.\n   */\n\n  strats.init = strats.created = strats.ready = strats.attached = strats.detached = strats.beforeCompile = strats.compiled = strats.beforeDestroy = strats.destroyed = strats.activate = function (parentVal, childVal) {\n    return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;\n  };\n\n  /**\n   * Assets\n   *\n   * When a vm is present (instance creation), we need to do\n   * a three-way merge between constructor options, instance\n   * options and parent options.\n   */\n\n  function mergeAssets(parentVal, childVal) {\n    var res = Object.create(parentVal);\n    return childVal ? extend(res, guardArrayAssets(childVal)) : res;\n  }\n\n  config._assetTypes.forEach(function (type) {\n    strats[type + 's'] = mergeAssets;\n  });\n\n  /**\n   * Events & Watchers.\n   *\n   * Events & watchers hashes should not overwrite one\n   * another, so we merge them as arrays.\n   */\n\n  strats.watch = strats.events = function (parentVal, childVal) {\n    if (!childVal) return parentVal;\n    if (!parentVal) return childVal;\n    var ret = {};\n    extend(ret, parentVal);\n    for (var key in childVal) {\n      var parent = ret[key];\n      var child = childVal[key];\n      if (parent && !isArray(parent)) {\n        parent = [parent];\n      }\n      ret[key] = parent ? parent.concat(child) : [child];\n    }\n    return ret;\n  };\n\n  /**\n   * Other object hashes.\n   */\n\n  strats.props = strats.methods = strats.computed = function (parentVal, childVal) {\n    if (!childVal) return parentVal;\n    if (!parentVal) return childVal;\n    var ret = Object.create(null);\n    extend(ret, parentVal);\n    extend(ret, childVal);\n    return ret;\n  };\n\n  /**\n   * Default strategy.\n   */\n\n  var defaultStrat = function defaultStrat(parentVal, childVal) {\n    return childVal === undefined ? parentVal : childVal;\n  };\n\n  /**\n   * Make sure component options get converted to actual\n   * constructors.\n   *\n   * @param {Object} options\n   */\n\n  function guardComponents(options) {\n    if (options.components) {\n      var components = options.components = guardArrayAssets(options.components);\n      var ids = Object.keys(components);\n      var def;\n      if ('development' !== 'production') {\n        var map = options._componentNameMap = {};\n      }\n      for (var i = 0, l = ids.length; i < l; i++) {\n        var key = ids[i];\n        if (commonTagRE.test(key) || reservedTagRE.test(key)) {\n          'development' !== 'production' && warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + key);\n          continue;\n        }\n        // record a all lowercase <-> kebab-case mapping for\n        // possible custom element case error warning\n        if ('development' !== 'production') {\n          map[key.replace(/-/g, '').toLowerCase()] = hyphenate(key);\n        }\n        def = components[key];\n        if (isPlainObject(def)) {\n          components[key] = Vue.extend(def);\n        }\n      }\n    }\n  }\n\n  /**\n   * Ensure all props option syntax are normalized into the\n   * Object-based format.\n   *\n   * @param {Object} options\n   */\n\n  function guardProps(options) {\n    var props = options.props;\n    var i, val;\n    if (isArray(props)) {\n      options.props = {};\n      i = props.length;\n      while (i--) {\n        val = props[i];\n        if (typeof val === 'string') {\n          options.props[val] = null;\n        } else if (val.name) {\n          options.props[val.name] = val;\n        }\n      }\n    } else if (isPlainObject(props)) {\n      var keys = Object.keys(props);\n      i = keys.length;\n      while (i--) {\n        val = props[keys[i]];\n        if (typeof val === 'function') {\n          props[keys[i]] = { type: val };\n        }\n      }\n    }\n  }\n\n  /**\n   * Guard an Array-format assets option and converted it\n   * into the key-value Object format.\n   *\n   * @param {Object|Array} assets\n   * @return {Object}\n   */\n\n  function guardArrayAssets(assets) {\n    if (isArray(assets)) {\n      var res = {};\n      var i = assets.length;\n      var asset;\n      while (i--) {\n        asset = assets[i];\n        var id = typeof asset === 'function' ? asset.options && asset.options.name || asset.id : asset.name || asset.id;\n        if (!id) {\n          'development' !== 'production' && warn('Array-syntax assets must provide a \"name\" or \"id\" field.');\n        } else {\n          res[id] = asset;\n        }\n      }\n      return res;\n    }\n    return assets;\n  }\n\n  /**\n   * Merge two option objects into a new one.\n   * Core utility used in both instantiation and inheritance.\n   *\n   * @param {Object} parent\n   * @param {Object} child\n   * @param {Vue} [vm] - if vm is present, indicates this is\n   *                     an instantiation merge.\n   */\n\n  function mergeOptions(parent, child, vm) {\n    guardComponents(child);\n    guardProps(child);\n    var options = {};\n    var key;\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n    for (key in parent) {\n      mergeField(key);\n    }\n    for (key in child) {\n      if (!hasOwn(parent, key)) {\n        mergeField(key);\n      }\n    }\n    function mergeField(key) {\n      var strat = strats[key] || defaultStrat;\n      options[key] = strat(parent[key], child[key], vm, key);\n    }\n    return options;\n  }\n\n  /**\n   * Resolve an asset.\n   * This function is used because child instances need access\n   * to assets defined in its ancestor chain.\n   *\n   * @param {Object} options\n   * @param {String} type\n   * @param {String} id\n   * @param {Boolean} warnMissing\n   * @return {Object|Function}\n   */\n\n  function resolveAsset(options, type, id, warnMissing) {\n    /* istanbul ignore if */\n    if (typeof id !== 'string') {\n      return;\n    }\n    var assets = options[type];\n    var camelizedId;\n    var res = assets[id] ||\n    // camelCase ID\n    assets[camelizedId = camelize(id)] ||\n    // Pascal Case ID\n    assets[camelizedId.charAt(0).toUpperCase() + camelizedId.slice(1)];\n    if ('development' !== 'production' && warnMissing && !res) {\n      warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options);\n    }\n    return res;\n  }\n\n  var uid$1 = 0;\n\n  /**\n   * A dep is an observable that can have multiple\n   * directives subscribing to it.\n   *\n   * @constructor\n   */\n  function Dep() {\n    this.id = uid$1++;\n    this.subs = [];\n  }\n\n  // the current target watcher being evaluated.\n  // this is globally unique because there could be only one\n  // watcher being evaluated at any time.\n  Dep.target = null;\n\n  /**\n   * Add a directive subscriber.\n   *\n   * @param {Directive} sub\n   */\n\n  Dep.prototype.addSub = function (sub) {\n    this.subs.push(sub);\n  };\n\n  /**\n   * Remove a directive subscriber.\n   *\n   * @param {Directive} sub\n   */\n\n  Dep.prototype.removeSub = function (sub) {\n    this.subs.$remove(sub);\n  };\n\n  /**\n   * Add self as a dependency to the target watcher.\n   */\n\n  Dep.prototype.depend = function () {\n    Dep.target.addDep(this);\n  };\n\n  /**\n   * Notify all subscribers of a new value.\n   */\n\n  Dep.prototype.notify = function () {\n    // stablize the subscriber list first\n    var subs = toArray(this.subs);\n    for (var i = 0, l = subs.length; i < l; i++) {\n      subs[i].update();\n    }\n  };\n\n  var arrayProto = Array.prototype;\n  var arrayMethods = Object.create(arrayProto)\n\n  /**\n   * Intercept mutating methods and emit events\n   */\n\n  ;['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(function (method) {\n    // cache original method\n    var original = arrayProto[method];\n    def(arrayMethods, method, function mutator() {\n      // avoid leaking arguments:\n      // http://jsperf.com/closure-with-arguments\n      var i = arguments.length;\n      var args = new Array(i);\n      while (i--) {\n        args[i] = arguments[i];\n      }\n      var result = original.apply(this, args);\n      var ob = this.__ob__;\n      var inserted;\n      switch (method) {\n        case 'push':\n          inserted = args;\n          break;\n        case 'unshift':\n          inserted = args;\n          break;\n        case 'splice':\n          inserted = args.slice(2);\n          break;\n      }\n      if (inserted) ob.observeArray(inserted);\n      // notify change\n      ob.dep.notify();\n      return result;\n    });\n  });\n\n  /**\n   * Swap the element at the given index with a new value\n   * and emits corresponding event.\n   *\n   * @param {Number} index\n   * @param {*} val\n   * @return {*} - replaced element\n   */\n\n  def(arrayProto, '$set', function $set(index, val) {\n    if (index >= this.length) {\n      this.length = Number(index) + 1;\n    }\n    return this.splice(index, 1, val)[0];\n  });\n\n  /**\n   * Convenience method to remove the element at given index or target element reference.\n   *\n   * @param {*} item\n   */\n\n  def(arrayProto, '$remove', function $remove(item) {\n    /* istanbul ignore if */\n    if (!this.length) return;\n    var index = indexOf(this, item);\n    if (index > -1) {\n      return this.splice(index, 1);\n    }\n  });\n\n  var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n  /**\n   * By default, when a reactive property is set, the new value is\n   * also converted to become reactive. However in certain cases, e.g.\n   * v-for scope alias and props, we don't want to force conversion\n   * because the value may be a nested value under a frozen data structure.\n   *\n   * So whenever we want to set a reactive property without forcing\n   * conversion on the new value, we wrap that call inside this function.\n   */\n\n  var shouldConvert = true;\n\n  function withoutConversion(fn) {\n    shouldConvert = false;\n    fn();\n    shouldConvert = true;\n  }\n\n  /**\n   * Observer class that are attached to each observed\n   * object. Once attached, the observer converts target\n   * object's property keys into getter/setters that\n   * collect dependencies and dispatches updates.\n   *\n   * @param {Array|Object} value\n   * @constructor\n   */\n\n  function Observer(value) {\n    this.value = value;\n    this.dep = new Dep();\n    def(value, '__ob__', this);\n    if (isArray(value)) {\n      var augment = hasProto ? protoAugment : copyAugment;\n      augment(value, arrayMethods, arrayKeys);\n      this.observeArray(value);\n    } else {\n      this.walk(value);\n    }\n  }\n\n  // Instance methods\n\n  /**\n   * Walk through each property and convert them into\n   * getter/setters. This method should only be called when\n   * value type is Object.\n   *\n   * @param {Object} obj\n   */\n\n  Observer.prototype.walk = function (obj) {\n    var keys = Object.keys(obj);\n    for (var i = 0, l = keys.length; i < l; i++) {\n      this.convert(keys[i], obj[keys[i]]);\n    }\n  };\n\n  /**\n   * Observe a list of Array items.\n   *\n   * @param {Array} items\n   */\n\n  Observer.prototype.observeArray = function (items) {\n    for (var i = 0, l = items.length; i < l; i++) {\n      observe(items[i]);\n    }\n  };\n\n  /**\n   * Convert a property into getter/setter so we can emit\n   * the events when the property is accessed/changed.\n   *\n   * @param {String} key\n   * @param {*} val\n   */\n\n  Observer.prototype.convert = function (key, val) {\n    defineReactive(this.value, key, val);\n  };\n\n  /**\n   * Add an owner vm, so that when $set/$delete mutations\n   * happen we can notify owner vms to proxy the keys and\n   * digest the watchers. This is only called when the object\n   * is observed as an instance's root $data.\n   *\n   * @param {Vue} vm\n   */\n\n  Observer.prototype.addVm = function (vm) {\n    (this.vms || (this.vms = [])).push(vm);\n  };\n\n  /**\n   * Remove an owner vm. This is called when the object is\n   * swapped out as an instance's $data object.\n   *\n   * @param {Vue} vm\n   */\n\n  Observer.prototype.removeVm = function (vm) {\n    this.vms.$remove(vm);\n  };\n\n  // helpers\n\n  /**\n   * Augment an target Object or Array by intercepting\n   * the prototype chain using __proto__\n   *\n   * @param {Object|Array} target\n   * @param {Object} src\n   */\n\n  function protoAugment(target, src) {\n    /* eslint-disable no-proto */\n    target.__proto__ = src;\n    /* eslint-enable no-proto */\n  }\n\n  /**\n   * Augment an target Object or Array by defining\n   * hidden properties.\n   *\n   * @param {Object|Array} target\n   * @param {Object} proto\n   */\n\n  function copyAugment(target, src, keys) {\n    for (var i = 0, l = keys.length; i < l; i++) {\n      var key = keys[i];\n      def(target, key, src[key]);\n    }\n  }\n\n  /**\n   * Attempt to create an observer instance for a value,\n   * returns the new observer if successfully observed,\n   * or the existing observer if the value already has one.\n   *\n   * @param {*} value\n   * @param {Vue} [vm]\n   * @return {Observer|undefined}\n   * @static\n   */\n\n  function observe(value, vm) {\n    if (!value || typeof value !== 'object') {\n      return;\n    }\n    var ob;\n    if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n      ob = value.__ob__;\n    } else if (shouldConvert && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value._isVue) {\n      ob = new Observer(value);\n    }\n    if (ob && vm) {\n      ob.addVm(vm);\n    }\n    return ob;\n  }\n\n  /**\n   * Define a reactive property on an Object.\n   *\n   * @param {Object} obj\n   * @param {String} key\n   * @param {*} val\n   */\n\n  function defineReactive(obj, key, val) {\n    var dep = new Dep();\n\n    var property = Object.getOwnPropertyDescriptor(obj, key);\n    if (property && property.configurable === false) {\n      return;\n    }\n\n    // cater for pre-defined getter/setters\n    var getter = property && property.get;\n    var setter = property && property.set;\n\n    var childOb = observe(val);\n    Object.defineProperty(obj, key, {\n      enumerable: true,\n      configurable: true,\n      get: function reactiveGetter() {\n        var value = getter ? getter.call(obj) : val;\n        if (Dep.target) {\n          dep.depend();\n          if (childOb) {\n            childOb.dep.depend();\n          }\n          if (isArray(value)) {\n            for (var e, i = 0, l = value.length; i < l; i++) {\n              e = value[i];\n              e && e.__ob__ && e.__ob__.dep.depend();\n            }\n          }\n        }\n        return value;\n      },\n      set: function reactiveSetter(newVal) {\n        var value = getter ? getter.call(obj) : val;\n        if (newVal === value) {\n          return;\n        }\n        if (setter) {\n          setter.call(obj, newVal);\n        } else {\n          val = newVal;\n        }\n        childOb = observe(newVal);\n        dep.notify();\n      }\n    });\n  }\n\n\n\n  var util = Object.freeze({\n  \tdefineReactive: defineReactive,\n  \tset: set,\n  \tdel: del,\n  \thasOwn: hasOwn,\n  \tisLiteral: isLiteral,\n  \tisReserved: isReserved,\n  \t_toString: _toString,\n  \ttoNumber: toNumber,\n  \ttoBoolean: toBoolean,\n  \tstripQuotes: stripQuotes,\n  \tcamelize: camelize,\n  \thyphenate: hyphenate,\n  \tclassify: classify,\n  \tbind: bind,\n  \ttoArray: toArray,\n  \textend: extend,\n  \tisObject: isObject,\n  \tisPlainObject: isPlainObject,\n  \tdef: def,\n  \tdebounce: _debounce,\n  \tindexOf: indexOf,\n  \tcancellable: cancellable,\n  \tlooseEqual: looseEqual,\n  \tisArray: isArray,\n  \thasProto: hasProto,\n  \tinBrowser: inBrowser,\n  \tdevtools: devtools,\n  \tisIE9: isIE9,\n  \tisAndroid: isAndroid,\n  \tget transitionProp () { return transitionProp; },\n  \tget transitionEndEvent () { return transitionEndEvent; },\n  \tget animationProp () { return animationProp; },\n  \tget animationEndEvent () { return animationEndEvent; },\n  \tnextTick: nextTick,\n  \tquery: query,\n  \tinDoc: inDoc,\n  \tgetAttr: getAttr,\n  \tgetBindAttr: getBindAttr,\n  \thasBindAttr: hasBindAttr,\n  \tbefore: before,\n  \tafter: after,\n  \tremove: remove,\n  \tprepend: prepend,\n  \treplace: replace,\n  \ton: on,\n  \toff: off,\n  \tsetClass: setClass,\n  \taddClass: addClass,\n  \tremoveClass: removeClass,\n  \textractContent: extractContent,\n  \ttrimNode: trimNode,\n  \tisTemplate: isTemplate,\n  \tcreateAnchor: createAnchor,\n  \tfindRef: findRef,\n  \tmapNodeRange: mapNodeRange,\n  \tremoveNodeRange: removeNodeRange,\n  \tisFragment: isFragment,\n  \tgetOuterHTML: getOuterHTML,\n  \tmergeOptions: mergeOptions,\n  \tresolveAsset: resolveAsset,\n  \tcheckComponentAttr: checkComponentAttr,\n  \tcommonTagRE: commonTagRE,\n  \treservedTagRE: reservedTagRE,\n  \tget warn () { return warn; }\n  });\n\n  var uid = 0;\n\n  function initMixin (Vue) {\n    /**\n     * The main init sequence. This is called for every\n     * instance, including ones that are created from extended\n     * constructors.\n     *\n     * @param {Object} options - this options object should be\n     *                           the result of merging class\n     *                           options and the options passed\n     *                           in to the constructor.\n     */\n\n    Vue.prototype._init = function (options) {\n      options = options || {};\n\n      this.$el = null;\n      this.$parent = options.parent;\n      this.$root = this.$parent ? this.$parent.$root : this;\n      this.$children = [];\n      this.$refs = {}; // child vm references\n      this.$els = {}; // element references\n      this._watchers = []; // all watchers as an array\n      this._directives = []; // all directives\n\n      // a uid\n      this._uid = uid++;\n\n      // a flag to avoid this being observed\n      this._isVue = true;\n\n      // events bookkeeping\n      this._events = {}; // registered callbacks\n      this._eventsCount = {}; // for $broadcast optimization\n\n      // fragment instance properties\n      this._isFragment = false;\n      this._fragment = // @type {DocumentFragment}\n      this._fragmentStart = // @type {Text|Comment}\n      this._fragmentEnd = null; // @type {Text|Comment}\n\n      // lifecycle state\n      this._isCompiled = this._isDestroyed = this._isReady = this._isAttached = this._isBeingDestroyed = this._vForRemoving = false;\n      this._unlinkFn = null;\n\n      // context:\n      // if this is a transcluded component, context\n      // will be the common parent vm of this instance\n      // and its host.\n      this._context = options._context || this.$parent;\n\n      // scope:\n      // if this is inside an inline v-for, the scope\n      // will be the intermediate scope created for this\n      // repeat fragment. this is used for linking props\n      // and container directives.\n      this._scope = options._scope;\n\n      // fragment:\n      // if this instance is compiled inside a Fragment, it\n      // needs to reigster itself as a child of that fragment\n      // for attach/detach to work properly.\n      this._frag = options._frag;\n      if (this._frag) {\n        this._frag.children.push(this);\n      }\n\n      // push self into parent / transclusion host\n      if (this.$parent) {\n        this.$parent.$children.push(this);\n      }\n\n      // merge options.\n      options = this.$options = mergeOptions(this.constructor.options, options, this);\n\n      // set ref\n      this._updateRef();\n\n      // initialize data as empty object.\n      // it will be filled up in _initScope().\n      this._data = {};\n\n      // save raw constructor data before merge\n      // so that we know which properties are provided at\n      // instantiation.\n      this._runtimeData = options.data;\n\n      // call init hook\n      this._callHook('init');\n\n      // initialize data observation and scope inheritance.\n      this._initState();\n\n      // setup event system and option events.\n      this._initEvents();\n\n      // call created hook\n      this._callHook('created');\n\n      // if `el` option is passed, start compilation.\n      if (options.el) {\n        this.$mount(options.el);\n      }\n    };\n  }\n\n  var pathCache = new Cache(1000);\n\n  // actions\n  var APPEND = 0;\n  var PUSH = 1;\n  var INC_SUB_PATH_DEPTH = 2;\n  var PUSH_SUB_PATH = 3;\n\n  // states\n  var BEFORE_PATH = 0;\n  var IN_PATH = 1;\n  var BEFORE_IDENT = 2;\n  var IN_IDENT = 3;\n  var IN_SUB_PATH = 4;\n  var IN_SINGLE_QUOTE = 5;\n  var IN_DOUBLE_QUOTE = 6;\n  var AFTER_PATH = 7;\n  var ERROR = 8;\n\n  var pathStateMachine = [];\n\n  pathStateMachine[BEFORE_PATH] = {\n    'ws': [BEFORE_PATH],\n    'ident': [IN_IDENT, APPEND],\n    '[': [IN_SUB_PATH],\n    'eof': [AFTER_PATH]\n  };\n\n  pathStateMachine[IN_PATH] = {\n    'ws': [IN_PATH],\n    '.': [BEFORE_IDENT],\n    '[': [IN_SUB_PATH],\n    'eof': [AFTER_PATH]\n  };\n\n  pathStateMachine[BEFORE_IDENT] = {\n    'ws': [BEFORE_IDENT],\n    'ident': [IN_IDENT, APPEND]\n  };\n\n  pathStateMachine[IN_IDENT] = {\n    'ident': [IN_IDENT, APPEND],\n    '0': [IN_IDENT, APPEND],\n    'number': [IN_IDENT, APPEND],\n    'ws': [IN_PATH, PUSH],\n    '.': [BEFORE_IDENT, PUSH],\n    '[': [IN_SUB_PATH, PUSH],\n    'eof': [AFTER_PATH, PUSH]\n  };\n\n  pathStateMachine[IN_SUB_PATH] = {\n    \"'\": [IN_SINGLE_QUOTE, APPEND],\n    '\"': [IN_DOUBLE_QUOTE, APPEND],\n    '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n    ']': [IN_PATH, PUSH_SUB_PATH],\n    'eof': ERROR,\n    'else': [IN_SUB_PATH, APPEND]\n  };\n\n  pathStateMachine[IN_SINGLE_QUOTE] = {\n    \"'\": [IN_SUB_PATH, APPEND],\n    'eof': ERROR,\n    'else': [IN_SINGLE_QUOTE, APPEND]\n  };\n\n  pathStateMachine[IN_DOUBLE_QUOTE] = {\n    '\"': [IN_SUB_PATH, APPEND],\n    'eof': ERROR,\n    'else': [IN_DOUBLE_QUOTE, APPEND]\n  };\n\n  /**\n   * Determine the type of a character in a keypath.\n   *\n   * @param {Char} ch\n   * @return {String} type\n   */\n\n  function getPathCharType(ch) {\n    if (ch === undefined) {\n      return 'eof';\n    }\n\n    var code = ch.charCodeAt(0);\n\n    switch (code) {\n      case 0x5B: // [\n      case 0x5D: // ]\n      case 0x2E: // .\n      case 0x22: // \"\n      case 0x27: // '\n      case 0x30:\n        // 0\n        return ch;\n\n      case 0x5F: // _\n      case 0x24:\n        // $\n        return 'ident';\n\n      case 0x20: // Space\n      case 0x09: // Tab\n      case 0x0A: // Newline\n      case 0x0D: // Return\n      case 0xA0: // No-break space\n      case 0xFEFF: // Byte Order Mark\n      case 0x2028: // Line Separator\n      case 0x2029:\n        // Paragraph Separator\n        return 'ws';\n    }\n\n    // a-z, A-Z\n    if (code >= 0x61 && code <= 0x7A || code >= 0x41 && code <= 0x5A) {\n      return 'ident';\n    }\n\n    // 1-9\n    if (code >= 0x31 && code <= 0x39) {\n      return 'number';\n    }\n\n    return 'else';\n  }\n\n  /**\n   * Format a subPath, return its plain form if it is\n   * a literal string or number. Otherwise prepend the\n   * dynamic indicator (*).\n   *\n   * @param {String} path\n   * @return {String}\n   */\n\n  function formatSubPath(path) {\n    var trimmed = path.trim();\n    // invalid leading 0\n    if (path.charAt(0) === '0' && isNaN(path)) {\n      return false;\n    }\n    return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed;\n  }\n\n  /**\n   * Parse a string path into an array of segments\n   *\n   * @param {String} path\n   * @return {Array|undefined}\n   */\n\n  function parse(path) {\n    var keys = [];\n    var index = -1;\n    var mode = BEFORE_PATH;\n    var subPathDepth = 0;\n    var c, newChar, key, type, transition, action, typeMap;\n\n    var actions = [];\n\n    actions[PUSH] = function () {\n      if (key !== undefined) {\n        keys.push(key);\n        key = undefined;\n      }\n    };\n\n    actions[APPEND] = function () {\n      if (key === undefined) {\n        key = newChar;\n      } else {\n        key += newChar;\n      }\n    };\n\n    actions[INC_SUB_PATH_DEPTH] = function () {\n      actions[APPEND]();\n      subPathDepth++;\n    };\n\n    actions[PUSH_SUB_PATH] = function () {\n      if (subPathDepth > 0) {\n        subPathDepth--;\n        mode = IN_SUB_PATH;\n        actions[APPEND]();\n      } else {\n        subPathDepth = 0;\n        key = formatSubPath(key);\n        if (key === false) {\n          return false;\n        } else {\n          actions[PUSH]();\n        }\n      }\n    };\n\n    function maybeUnescapeQuote() {\n      var nextChar = path[index + 1];\n      if (mode === IN_SINGLE_QUOTE && nextChar === \"'\" || mode === IN_DOUBLE_QUOTE && nextChar === '\"') {\n        index++;\n        newChar = '\\\\' + nextChar;\n        actions[APPEND]();\n        return true;\n      }\n    }\n\n    while (mode != null) {\n      index++;\n      c = path[index];\n\n      if (c === '\\\\' && maybeUnescapeQuote()) {\n        continue;\n      }\n\n      type = getPathCharType(c);\n      typeMap = pathStateMachine[mode];\n      transition = typeMap[type] || typeMap['else'] || ERROR;\n\n      if (transition === ERROR) {\n        return; // parse error\n      }\n\n      mode = transition[0];\n      action = actions[transition[1]];\n      if (action) {\n        newChar = transition[2];\n        newChar = newChar === undefined ? c : newChar;\n        if (action() === false) {\n          return;\n        }\n      }\n\n      if (mode === AFTER_PATH) {\n        keys.raw = path;\n        return keys;\n      }\n    }\n  }\n\n  /**\n   * External parse that check for a cache hit first\n   *\n   * @param {String} path\n   * @return {Array|undefined}\n   */\n\n  function parsePath(path) {\n    var hit = pathCache.get(path);\n    if (!hit) {\n      hit = parse(path);\n      if (hit) {\n        pathCache.put(path, hit);\n      }\n    }\n    return hit;\n  }\n\n  /**\n   * Get from an object from a path string\n   *\n   * @param {Object} obj\n   * @param {String} path\n   */\n\n  function getPath(obj, path) {\n    return parseExpression(path).get(obj);\n  }\n\n  /**\n   * Warn against setting non-existent root path on a vm.\n   */\n\n  var warnNonExistent;\n  if ('development' !== 'production') {\n    warnNonExistent = function (path, vm) {\n      warn('You are setting a non-existent path \"' + path.raw + '\" ' + 'on a vm instance. Consider pre-initializing the property ' + 'with the \"data\" option for more reliable reactivity ' + 'and better performance.', vm);\n    };\n  }\n\n  /**\n   * Set on an object from a path\n   *\n   * @param {Object} obj\n   * @param {String | Array} path\n   * @param {*} val\n   */\n\n  function setPath(obj, path, val) {\n    var original = obj;\n    if (typeof path === 'string') {\n      path = parse(path);\n    }\n    if (!path || !isObject(obj)) {\n      return false;\n    }\n    var last, key;\n    for (var i = 0, l = path.length; i < l; i++) {\n      last = obj;\n      key = path[i];\n      if (key.charAt(0) === '*') {\n        key = parseExpression(key.slice(1)).get.call(original, original);\n      }\n      if (i < l - 1) {\n        obj = obj[key];\n        if (!isObject(obj)) {\n          obj = {};\n          if ('development' !== 'production' && last._isVue) {\n            warnNonExistent(path, last);\n          }\n          set(last, key, obj);\n        }\n      } else {\n        if (isArray(obj)) {\n          obj.$set(key, val);\n        } else if (key in obj) {\n          obj[key] = val;\n        } else {\n          if ('development' !== 'production' && obj._isVue) {\n            warnNonExistent(path, obj);\n          }\n          set(obj, key, val);\n        }\n      }\n    }\n    return true;\n  }\n\nvar path = Object.freeze({\n    parsePath: parsePath,\n    getPath: getPath,\n    setPath: setPath\n  });\n\n  var expressionCache = new Cache(1000);\n\n  var allowedKeywords = 'Math,Date,this,true,false,null,undefined,Infinity,NaN,' + 'isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,' + 'encodeURIComponent,parseInt,parseFloat';\n  var allowedKeywordsRE = new RegExp('^(' + allowedKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n  // keywords that don't make sense inside expressions\n  var improperKeywords = 'break,case,class,catch,const,continue,debugger,default,' + 'delete,do,else,export,extends,finally,for,function,if,' + 'import,in,instanceof,let,return,super,switch,throw,try,' + 'var,while,with,yield,enum,await,implements,package,' + 'protected,static,interface,private,public';\n  var improperKeywordsRE = new RegExp('^(' + improperKeywords.replace(/,/g, '\\\\b|') + '\\\\b)');\n\n  var wsRE = /\\s/g;\n  var newlineRE = /\\n/g;\n  var saveRE = /[\\{,]\\s*[\\w\\$_]+\\s*:|('(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`)|new |typeof |void /g;\n  var restoreRE = /\"(\\d+)\"/g;\n  var pathTestRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?'\\]|\\[\".*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/;\n  var identRE = /[^\\w$\\.](?:[A-Za-z_$][\\w$]*)/g;\n  var booleanLiteralRE = /^(?:true|false)$/;\n\n  /**\n   * Save / Rewrite / Restore\n   *\n   * When rewriting paths found in an expression, it is\n   * possible for the same letter sequences to be found in\n   * strings and Object literal property keys. Therefore we\n   * remove and store these parts in a temporary array, and\n   * restore them after the path rewrite.\n   */\n\n  var saved = [];\n\n  /**\n   * Save replacer\n   *\n   * The save regex can match two possible cases:\n   * 1. An opening object literal\n   * 2. A string\n   * If matched as a plain string, we need to escape its\n   * newlines, since the string needs to be preserved when\n   * generating the function body.\n   *\n   * @param {String} str\n   * @param {String} isString - str if matched as a string\n   * @return {String} - placeholder with index\n   */\n\n  function save(str, isString) {\n    var i = saved.length;\n    saved[i] = isString ? str.replace(newlineRE, '\\\\n') : str;\n    return '\"' + i + '\"';\n  }\n\n  /**\n   * Path rewrite replacer\n   *\n   * @param {String} raw\n   * @return {String}\n   */\n\n  function rewrite(raw) {\n    var c = raw.charAt(0);\n    var path = raw.slice(1);\n    if (allowedKeywordsRE.test(path)) {\n      return raw;\n    } else {\n      path = path.indexOf('\"') > -1 ? path.replace(restoreRE, restore) : path;\n      return c + 'scope.' + path;\n    }\n  }\n\n  /**\n   * Restore replacer\n   *\n   * @param {String} str\n   * @param {String} i - matched save index\n   * @return {String}\n   */\n\n  function restore(str, i) {\n    return saved[i];\n  }\n\n  /**\n   * Rewrite an expression, prefixing all path accessors with\n   * `scope.` and generate getter/setter functions.\n   *\n   * @param {String} exp\n   * @return {Function}\n   */\n\n  function compileGetter(exp) {\n    if (improperKeywordsRE.test(exp)) {\n      'development' !== 'production' && warn('Avoid using reserved keywords in expression: ' + exp);\n    }\n    // reset state\n    saved.length = 0;\n    // save strings and object literal keys\n    var body = exp.replace(saveRE, save).replace(wsRE, '');\n    // rewrite all paths\n    // pad 1 space here becaue the regex matches 1 extra char\n    body = (' ' + body).replace(identRE, rewrite).replace(restoreRE, restore);\n    return makeGetterFn(body);\n  }\n\n  /**\n   * Build a getter function. Requires eval.\n   *\n   * We isolate the try/catch so it doesn't affect the\n   * optimization of the parse function when it is not called.\n   *\n   * @param {String} body\n   * @return {Function|undefined}\n   */\n\n  function makeGetterFn(body) {\n    try {\n      /* eslint-disable no-new-func */\n      return new Function('scope', 'return ' + body + ';');\n      /* eslint-enable no-new-func */\n    } catch (e) {\n      'development' !== 'production' && warn('Invalid expression. ' + 'Generated function body: ' + body);\n    }\n  }\n\n  /**\n   * Compile a setter function for the expression.\n   *\n   * @param {String} exp\n   * @return {Function|undefined}\n   */\n\n  function compileSetter(exp) {\n    var path = parsePath(exp);\n    if (path) {\n      return function (scope, val) {\n        setPath(scope, path, val);\n      };\n    } else {\n      'development' !== 'production' && warn('Invalid setter expression: ' + exp);\n    }\n  }\n\n  /**\n   * Parse an expression into re-written getter/setters.\n   *\n   * @param {String} exp\n   * @param {Boolean} needSet\n   * @return {Function}\n   */\n\n  function parseExpression(exp, needSet) {\n    exp = exp.trim();\n    // try cache\n    var hit = expressionCache.get(exp);\n    if (hit) {\n      if (needSet && !hit.set) {\n        hit.set = compileSetter(hit.exp);\n      }\n      return hit;\n    }\n    var res = { exp: exp };\n    res.get = isSimplePath(exp) && exp.indexOf('[') < 0\n    // optimized super simple getter\n    ? makeGetterFn('scope.' + exp)\n    // dynamic getter\n    : compileGetter(exp);\n    if (needSet) {\n      res.set = compileSetter(exp);\n    }\n    expressionCache.put(exp, res);\n    return res;\n  }\n\n  /**\n   * Check if an expression is a simple path.\n   *\n   * @param {String} exp\n   * @return {Boolean}\n   */\n\n  function isSimplePath(exp) {\n    return pathTestRE.test(exp) &&\n    // don't treat true/false as paths\n    !booleanLiteralRE.test(exp) &&\n    // Math constants e.g. Math.PI, Math.E etc.\n    exp.slice(0, 5) !== 'Math.';\n  }\n\nvar expression = Object.freeze({\n    parseExpression: parseExpression,\n    isSimplePath: isSimplePath\n  });\n\n  // we have two separate queues: one for directive updates\n  // and one for user watcher registered via $watch().\n  // we want to guarantee directive updates to be called\n  // before user watchers so that when user watchers are\n  // triggered, the DOM would have already been in updated\n  // state.\n\n  var queueIndex;\n  var queue = [];\n  var userQueue = [];\n  var has = {};\n  var circular = {};\n  var waiting = false;\n  var internalQueueDepleted = false;\n\n  /**\n   * Reset the batcher's state.\n   */\n\n  function resetBatcherState() {\n    queue = [];\n    userQueue = [];\n    has = {};\n    circular = {};\n    waiting = internalQueueDepleted = false;\n  }\n\n  /**\n   * Flush both queues and run the watchers.\n   */\n\n  function flushBatcherQueue() {\n    runBatcherQueue(queue);\n    internalQueueDepleted = true;\n    runBatcherQueue(userQueue);\n    // dev tool hook\n    /* istanbul ignore if */\n    if (devtools && config.devtools) {\n      devtools.emit('flush');\n    }\n    resetBatcherState();\n  }\n\n  /**\n   * Run the watchers in a single queue.\n   *\n   * @param {Array} queue\n   */\n\n  function runBatcherQueue(queue) {\n    // do not cache length because more watchers might be pushed\n    // as we run existing watchers\n    for (queueIndex = 0; queueIndex < queue.length; queueIndex++) {\n      var watcher = queue[queueIndex];\n      var id = watcher.id;\n      has[id] = null;\n      watcher.run();\n      // in dev build, check and stop circular updates.\n      if ('development' !== 'production' && has[id] != null) {\n        circular[id] = (circular[id] || 0) + 1;\n        if (circular[id] > config._maxUpdateCount) {\n          warn('You may have an infinite update loop for watcher ' + 'with expression \"' + watcher.expression + '\"', watcher.vm);\n          break;\n        }\n      }\n    }\n  }\n\n  /**\n   * Push a watcher into the watcher queue.\n   * Jobs with duplicate IDs will be skipped unless it's\n   * pushed when the queue is being flushed.\n   *\n   * @param {Watcher} watcher\n   *   properties:\n   *   - {Number} id\n   *   - {Function} run\n   */\n\n  function pushWatcher(watcher) {\n    var id = watcher.id;\n    if (has[id] == null) {\n      if (internalQueueDepleted && !watcher.user) {\n        // an internal watcher triggered by a user watcher...\n        // let's run it immediately after current user watcher is done.\n        userQueue.splice(queueIndex + 1, 0, watcher);\n      } else {\n        // push watcher into appropriate queue\n        var q = watcher.user ? userQueue : queue;\n        has[id] = q.length;\n        q.push(watcher);\n        // queue the flush\n        if (!waiting) {\n          waiting = true;\n          nextTick(flushBatcherQueue);\n        }\n      }\n    }\n  }\n\n  var uid$2 = 0;\n\n  /**\n   * A watcher parses an expression, collects dependencies,\n   * and fires callback when the expression value changes.\n   * This is used for both the $watch() api and directives.\n   *\n   * @param {Vue} vm\n   * @param {String|Function} expOrFn\n   * @param {Function} cb\n   * @param {Object} options\n   *                 - {Array} filters\n   *                 - {Boolean} twoWay\n   *                 - {Boolean} deep\n   *                 - {Boolean} user\n   *                 - {Boolean} sync\n   *                 - {Boolean} lazy\n   *                 - {Function} [preProcess]\n   *                 - {Function} [postProcess]\n   * @constructor\n   */\n  function Watcher(vm, expOrFn, cb, options) {\n    // mix in options\n    if (options) {\n      extend(this, options);\n    }\n    var isFn = typeof expOrFn === 'function';\n    this.vm = vm;\n    vm._watchers.push(this);\n    this.expression = expOrFn;\n    this.cb = cb;\n    this.id = ++uid$2; // uid for batching\n    this.active = true;\n    this.dirty = this.lazy; // for lazy watchers\n    this.deps = [];\n    this.newDeps = [];\n    this.depIds = Object.create(null);\n    this.newDepIds = null;\n    this.prevError = null; // for async error stacks\n    // parse expression for getter/setter\n    if (isFn) {\n      this.getter = expOrFn;\n      this.setter = undefined;\n    } else {\n      var res = parseExpression(expOrFn, this.twoWay);\n      this.getter = res.get;\n      this.setter = res.set;\n    }\n    this.value = this.lazy ? undefined : this.get();\n    // state for avoiding false triggers for deep and Array\n    // watchers during vm._digest()\n    this.queued = this.shallow = false;\n  }\n\n  /**\n   * Evaluate the getter, and re-collect dependencies.\n   */\n\n  Watcher.prototype.get = function () {\n    this.beforeGet();\n    var scope = this.scope || this.vm;\n    var value;\n    try {\n      value = this.getter.call(scope, scope);\n    } catch (e) {\n      if ('development' !== 'production' && config.warnExpressionErrors) {\n        warn('Error when evaluating expression ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n      }\n    }\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    if (this.preProcess) {\n      value = this.preProcess(value);\n    }\n    if (this.filters) {\n      value = scope._applyFilters(value, null, this.filters, false);\n    }\n    if (this.postProcess) {\n      value = this.postProcess(value);\n    }\n    this.afterGet();\n    return value;\n  };\n\n  /**\n   * Set the corresponding value with the setter.\n   *\n   * @param {*} value\n   */\n\n  Watcher.prototype.set = function (value) {\n    var scope = this.scope || this.vm;\n    if (this.filters) {\n      value = scope._applyFilters(value, this.value, this.filters, true);\n    }\n    try {\n      this.setter.call(scope, scope, value);\n    } catch (e) {\n      if ('development' !== 'production' && config.warnExpressionErrors) {\n        warn('Error when evaluating setter ' + '\"' + this.expression + '\": ' + e.toString(), this.vm);\n      }\n    }\n    // two-way sync for v-for alias\n    var forContext = scope.$forContext;\n    if (forContext && forContext.alias === this.expression) {\n      if (forContext.filters) {\n        'development' !== 'production' && warn('It seems you are using two-way binding on ' + 'a v-for alias (' + this.expression + '), and the ' + 'v-for has filters. This will not work properly. ' + 'Either remove the filters or use an array of ' + 'objects and bind to object properties instead.', this.vm);\n        return;\n      }\n      forContext._withLock(function () {\n        if (scope.$key) {\n          // original is an object\n          forContext.rawValue[scope.$key] = value;\n        } else {\n          forContext.rawValue.$set(scope.$index, value);\n        }\n      });\n    }\n  };\n\n  /**\n   * Prepare for dependency collection.\n   */\n\n  Watcher.prototype.beforeGet = function () {\n    Dep.target = this;\n    this.newDepIds = Object.create(null);\n    this.newDeps.length = 0;\n  };\n\n  /**\n   * Add a dependency to this directive.\n   *\n   * @param {Dep} dep\n   */\n\n  Watcher.prototype.addDep = function (dep) {\n    var id = dep.id;\n    if (!this.newDepIds[id]) {\n      this.newDepIds[id] = true;\n      this.newDeps.push(dep);\n      if (!this.depIds[id]) {\n        dep.addSub(this);\n      }\n    }\n  };\n\n  /**\n   * Clean up for dependency collection.\n   */\n\n  Watcher.prototype.afterGet = function () {\n    Dep.target = null;\n    var i = this.deps.length;\n    while (i--) {\n      var dep = this.deps[i];\n      if (!this.newDepIds[dep.id]) {\n        dep.removeSub(this);\n      }\n    }\n    this.depIds = this.newDepIds;\n    var tmp = this.deps;\n    this.deps = this.newDeps;\n    this.newDeps = tmp;\n  };\n\n  /**\n   * Subscriber interface.\n   * Will be called when a dependency changes.\n   *\n   * @param {Boolean} shallow\n   */\n\n  Watcher.prototype.update = function (shallow) {\n    if (this.lazy) {\n      this.dirty = true;\n    } else if (this.sync || !config.async) {\n      this.run();\n    } else {\n      // if queued, only overwrite shallow with non-shallow,\n      // but not the other way around.\n      this.shallow = this.queued ? shallow ? this.shallow : false : !!shallow;\n      this.queued = true;\n      // record before-push error stack in debug mode\n      /* istanbul ignore if */\n      if ('development' !== 'production' && config.debug) {\n        this.prevError = new Error('[vue] async stack trace');\n      }\n      pushWatcher(this);\n    }\n  };\n\n  /**\n   * Batcher job interface.\n   * Will be called by the batcher.\n   */\n\n  Watcher.prototype.run = function () {\n    if (this.active) {\n      var value = this.get();\n      if (value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated; but only do so if this is a\n      // non-shallow update (caused by a vm digest).\n      (isObject(value) || this.deep) && !this.shallow) {\n        // set new value\n        var oldValue = this.value;\n        this.value = value;\n        // in debug + async mode, when a watcher callbacks\n        // throws, we also throw the saved before-push error\n        // so the full cross-tick stack trace is available.\n        var prevError = this.prevError;\n        /* istanbul ignore if */\n        if ('development' !== 'production' && config.debug && prevError) {\n          this.prevError = null;\n          try {\n            this.cb.call(this.vm, value, oldValue);\n          } catch (e) {\n            nextTick(function () {\n              throw prevError;\n            }, 0);\n            throw e;\n          }\n        } else {\n          this.cb.call(this.vm, value, oldValue);\n        }\n      }\n      this.queued = this.shallow = false;\n    }\n  };\n\n  /**\n   * Evaluate the value of the watcher.\n   * This only gets called for lazy watchers.\n   */\n\n  Watcher.prototype.evaluate = function () {\n    // avoid overwriting another watcher that is being\n    // collected.\n    var current = Dep.target;\n    this.value = this.get();\n    this.dirty = false;\n    Dep.target = current;\n  };\n\n  /**\n   * Depend on all deps collected by this watcher.\n   */\n\n  Watcher.prototype.depend = function () {\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].depend();\n    }\n  };\n\n  /**\n   * Remove self from all dependencies' subcriber list.\n   */\n\n  Watcher.prototype.teardown = function () {\n    if (this.active) {\n      // remove self from vm's watcher list\n      // this is a somewhat expensive operation so we skip it\n      // if the vm is being destroyed or is performing a v-for\n      // re-render (the watcher list is then filtered by v-for).\n      if (!this.vm._isBeingDestroyed && !this.vm._vForRemoving) {\n        this.vm._watchers.$remove(this);\n      }\n      var i = this.deps.length;\n      while (i--) {\n        this.deps[i].removeSub(this);\n      }\n      this.active = false;\n      this.vm = this.cb = this.value = null;\n    }\n  };\n\n  /**\n   * Recrusively traverse an object to evoke all converted\n   * getters, so that every nested property inside the object\n   * is collected as a \"deep\" dependency.\n   *\n   * @param {*} val\n   */\n\n  function traverse(val) {\n    var i, keys;\n    if (isArray(val)) {\n      i = val.length;\n      while (i--) traverse(val[i]);\n    } else if (isObject(val)) {\n      keys = Object.keys(val);\n      i = keys.length;\n      while (i--) traverse(val[keys[i]]);\n    }\n  }\n\n  var text$1 = {\n\n    bind: function bind() {\n      this.attr = this.el.nodeType === 3 ? 'data' : 'textContent';\n    },\n\n    update: function update(value) {\n      this.el[this.attr] = _toString(value);\n    }\n  };\n\n  var templateCache = new Cache(1000);\n  var idSelectorCache = new Cache(1000);\n\n  var map = {\n    efault: [0, '', ''],\n    legend: [1, '<fieldset>', '</fieldset>'],\n    tr: [2, '<table><tbody>', '</tbody></table>'],\n    col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>']\n  };\n\n  map.td = map.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\n  map.option = map.optgroup = [1, '<select multiple=\"multiple\">', '</select>'];\n\n  map.thead = map.tbody = map.colgroup = map.caption = map.tfoot = [1, '<table>', '</table>'];\n\n  map.g = map.defs = map.symbol = map.use = map.image = map.text = map.circle = map.ellipse = map.line = map.path = map.polygon = map.polyline = map.rect = [1, '<svg ' + 'xmlns=\"http://www.w3.org/2000/svg\" ' + 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ' + 'xmlns:ev=\"http://www.w3.org/2001/xml-events\"' + 'version=\"1.1\">', '</svg>'];\n\n  /**\n   * Check if a node is a supported template node with a\n   * DocumentFragment content.\n   *\n   * @param {Node} node\n   * @return {Boolean}\n   */\n\n  function isRealTemplate(node) {\n    return isTemplate(node) && isFragment(node.content);\n  }\n\n  var tagRE$1 = /<([\\w:-]+)/;\n  var entityRE = /&#?\\w+?;/;\n\n  /**\n   * Convert a string template to a DocumentFragment.\n   * Determines correct wrapping by tag types. Wrapping\n   * strategy found in jQuery & component/domify.\n   *\n   * @param {String} templateString\n   * @param {Boolean} raw\n   * @return {DocumentFragment}\n   */\n\n  function stringToFragment(templateString, raw) {\n    // try a cache hit first\n    var cacheKey = raw ? templateString : templateString.trim();\n    var hit = templateCache.get(cacheKey);\n    if (hit) {\n      return hit;\n    }\n\n    var frag = document.createDocumentFragment();\n    var tagMatch = templateString.match(tagRE$1);\n    var entityMatch = entityRE.test(templateString);\n\n    if (!tagMatch && !entityMatch) {\n      // text only, return a single text node.\n      frag.appendChild(document.createTextNode(templateString));\n    } else {\n      var tag = tagMatch && tagMatch[1];\n      var wrap = map[tag] || map.efault;\n      var depth = wrap[0];\n      var prefix = wrap[1];\n      var suffix = wrap[2];\n      var node = document.createElement('div');\n\n      node.innerHTML = prefix + templateString + suffix;\n      while (depth--) {\n        node = node.lastChild;\n      }\n\n      var child;\n      /* eslint-disable no-cond-assign */\n      while (child = node.firstChild) {\n        /* eslint-enable no-cond-assign */\n        frag.appendChild(child);\n      }\n    }\n    if (!raw) {\n      trimNode(frag);\n    }\n    templateCache.put(cacheKey, frag);\n    return frag;\n  }\n\n  /**\n   * Convert a template node to a DocumentFragment.\n   *\n   * @param {Node} node\n   * @return {DocumentFragment}\n   */\n\n  function nodeToFragment(node) {\n    // if its a template tag and the browser supports it,\n    // its content is already a document fragment.\n    if (isRealTemplate(node)) {\n      trimNode(node.content);\n      return node.content;\n    }\n    // script template\n    if (node.tagName === 'SCRIPT') {\n      return stringToFragment(node.textContent);\n    }\n    // normal node, clone it to avoid mutating the original\n    var clonedNode = cloneNode(node);\n    var frag = document.createDocumentFragment();\n    var child;\n    /* eslint-disable no-cond-assign */\n    while (child = clonedNode.firstChild) {\n      /* eslint-enable no-cond-assign */\n      frag.appendChild(child);\n    }\n    trimNode(frag);\n    return frag;\n  }\n\n  // Test for the presence of the Safari template cloning bug\n  // https://bugs.webkit.org/showug.cgi?id=137755\n  var hasBrokenTemplate = (function () {\n    /* istanbul ignore else */\n    if (inBrowser) {\n      var a = document.createElement('div');\n      a.innerHTML = '<template>1</template>';\n      return !a.cloneNode(true).firstChild.innerHTML;\n    } else {\n      return false;\n    }\n  })();\n\n  // Test for IE10/11 textarea placeholder clone bug\n  var hasTextareaCloneBug = (function () {\n    /* istanbul ignore else */\n    if (inBrowser) {\n      var t = document.createElement('textarea');\n      t.placeholder = 't';\n      return t.cloneNode(true).value === 't';\n    } else {\n      return false;\n    }\n  })();\n\n  /**\n   * 1. Deal with Safari cloning nested <template> bug by\n   *    manually cloning all template instances.\n   * 2. Deal with IE10/11 textarea placeholder bug by setting\n   *    the correct value after cloning.\n   *\n   * @param {Element|DocumentFragment} node\n   * @return {Element|DocumentFragment}\n   */\n\n  function cloneNode(node) {\n    /* istanbul ignore if */\n    if (!node.querySelectorAll) {\n      return node.cloneNode();\n    }\n    var res = node.cloneNode(true);\n    var i, original, cloned;\n    /* istanbul ignore if */\n    if (hasBrokenTemplate) {\n      var tempClone = res;\n      if (isRealTemplate(node)) {\n        node = node.content;\n        tempClone = res.content;\n      }\n      original = node.querySelectorAll('template');\n      if (original.length) {\n        cloned = tempClone.querySelectorAll('template');\n        i = cloned.length;\n        while (i--) {\n          cloned[i].parentNode.replaceChild(cloneNode(original[i]), cloned[i]);\n        }\n      }\n    }\n    /* istanbul ignore if */\n    if (hasTextareaCloneBug) {\n      if (node.tagName === 'TEXTAREA') {\n        res.value = node.value;\n      } else {\n        original = node.querySelectorAll('textarea');\n        if (original.length) {\n          cloned = res.querySelectorAll('textarea');\n          i = cloned.length;\n          while (i--) {\n            cloned[i].value = original[i].value;\n          }\n        }\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Process the template option and normalizes it into a\n   * a DocumentFragment that can be used as a partial or a\n   * instance template.\n   *\n   * @param {*} template\n   *        Possible values include:\n   *        - DocumentFragment object\n   *        - Node object of type Template\n   *        - id selector: '#some-template-id'\n   *        - template string: '<div><span>{{msg}}</span></div>'\n   * @param {Boolean} shouldClone\n   * @param {Boolean} raw\n   *        inline HTML interpolation. Do not check for id\n   *        selector and keep whitespace in the string.\n   * @return {DocumentFragment|undefined}\n   */\n\n  function parseTemplate(template, shouldClone, raw) {\n    var node, frag;\n\n    // if the template is already a document fragment,\n    // do nothing\n    if (isFragment(template)) {\n      trimNode(template);\n      return shouldClone ? cloneNode(template) : template;\n    }\n\n    if (typeof template === 'string') {\n      // id selector\n      if (!raw && template.charAt(0) === '#') {\n        // id selector can be cached too\n        frag = idSelectorCache.get(template);\n        if (!frag) {\n          node = document.getElementById(template.slice(1));\n          if (node) {\n            frag = nodeToFragment(node);\n            // save selector to cache\n            idSelectorCache.put(template, frag);\n          }\n        }\n      } else {\n        // normal string template\n        frag = stringToFragment(template, raw);\n      }\n    } else if (template.nodeType) {\n      // a direct node\n      frag = nodeToFragment(template);\n    }\n\n    return frag && shouldClone ? cloneNode(frag) : frag;\n  }\n\nvar template = Object.freeze({\n    cloneNode: cloneNode,\n    parseTemplate: parseTemplate\n  });\n\n  var html = {\n\n    bind: function bind() {\n      // a comment node means this is a binding for\n      // {{{ inline unescaped html }}}\n      if (this.el.nodeType === 8) {\n        // hold nodes\n        this.nodes = [];\n        // replace the placeholder with proper anchor\n        this.anchor = createAnchor('v-html');\n        replace(this.el, this.anchor);\n      }\n    },\n\n    update: function update(value) {\n      value = _toString(value);\n      if (this.nodes) {\n        this.swap(value);\n      } else {\n        this.el.innerHTML = value;\n      }\n    },\n\n    swap: function swap(value) {\n      // remove old nodes\n      var i = this.nodes.length;\n      while (i--) {\n        remove(this.nodes[i]);\n      }\n      // convert new value to a fragment\n      // do not attempt to retrieve from id selector\n      var frag = parseTemplate(value, true, true);\n      // save a reference to these nodes so we can remove later\n      this.nodes = toArray(frag.childNodes);\n      before(frag, this.anchor);\n    }\n  };\n\n  /**\n   * Abstraction for a partially-compiled fragment.\n   * Can optionally compile content with a child scope.\n   *\n   * @param {Function} linker\n   * @param {Vue} vm\n   * @param {DocumentFragment} frag\n   * @param {Vue} [host]\n   * @param {Object} [scope]\n   * @param {Fragment} [parentFrag]\n   */\n  function Fragment(linker, vm, frag, host, scope, parentFrag) {\n    this.children = [];\n    this.childFrags = [];\n    this.vm = vm;\n    this.scope = scope;\n    this.inserted = false;\n    this.parentFrag = parentFrag;\n    if (parentFrag) {\n      parentFrag.childFrags.push(this);\n    }\n    this.unlink = linker(vm, frag, host, scope, this);\n    var single = this.single = frag.childNodes.length === 1 &&\n    // do not go single mode if the only node is an anchor\n    !frag.childNodes[0].__v_anchor;\n    if (single) {\n      this.node = frag.childNodes[0];\n      this.before = singleBefore;\n      this.remove = singleRemove;\n    } else {\n      this.node = createAnchor('fragment-start');\n      this.end = createAnchor('fragment-end');\n      this.frag = frag;\n      prepend(this.node, frag);\n      frag.appendChild(this.end);\n      this.before = multiBefore;\n      this.remove = multiRemove;\n    }\n    this.node.__v_frag = this;\n  }\n\n  /**\n   * Call attach/detach for all components contained within\n   * this fragment. Also do so recursively for all child\n   * fragments.\n   *\n   * @param {Function} hook\n   */\n\n  Fragment.prototype.callHook = function (hook) {\n    var i, l;\n    for (i = 0, l = this.childFrags.length; i < l; i++) {\n      this.childFrags[i].callHook(hook);\n    }\n    for (i = 0, l = this.children.length; i < l; i++) {\n      hook(this.children[i]);\n    }\n  };\n\n  /**\n   * Insert fragment before target, single node version\n   *\n   * @param {Node} target\n   * @param {Boolean} withTransition\n   */\n\n  function singleBefore(target, withTransition) {\n    this.inserted = true;\n    var method = withTransition !== false ? beforeWithTransition : before;\n    method(this.node, target, this.vm);\n    if (inDoc(this.node)) {\n      this.callHook(attach);\n    }\n  }\n\n  /**\n   * Remove fragment, single node version\n   */\n\n  function singleRemove() {\n    this.inserted = false;\n    var shouldCallRemove = inDoc(this.node);\n    var self = this;\n    this.beforeRemove();\n    removeWithTransition(this.node, this.vm, function () {\n      if (shouldCallRemove) {\n        self.callHook(detach);\n      }\n      self.destroy();\n    });\n  }\n\n  /**\n   * Insert fragment before target, multi-nodes version\n   *\n   * @param {Node} target\n   * @param {Boolean} withTransition\n   */\n\n  function multiBefore(target, withTransition) {\n    this.inserted = true;\n    var vm = this.vm;\n    var method = withTransition !== false ? beforeWithTransition : before;\n    mapNodeRange(this.node, this.end, function (node) {\n      method(node, target, vm);\n    });\n    if (inDoc(this.node)) {\n      this.callHook(attach);\n    }\n  }\n\n  /**\n   * Remove fragment, multi-nodes version\n   */\n\n  function multiRemove() {\n    this.inserted = false;\n    var self = this;\n    var shouldCallRemove = inDoc(this.node);\n    this.beforeRemove();\n    removeNodeRange(this.node, this.end, this.vm, this.frag, function () {\n      if (shouldCallRemove) {\n        self.callHook(detach);\n      }\n      self.destroy();\n    });\n  }\n\n  /**\n   * Prepare the fragment for removal.\n   */\n\n  Fragment.prototype.beforeRemove = function () {\n    var i, l;\n    for (i = 0, l = this.childFrags.length; i < l; i++) {\n      // call the same method recursively on child\n      // fragments, depth-first\n      this.childFrags[i].beforeRemove(false);\n    }\n    for (i = 0, l = this.children.length; i < l; i++) {\n      // Call destroy for all contained instances,\n      // with remove:false and defer:true.\n      // Defer is necessary because we need to\n      // keep the children to call detach hooks\n      // on them.\n      this.children[i].$destroy(false, true);\n    }\n    var dirs = this.unlink.dirs;\n    for (i = 0, l = dirs.length; i < l; i++) {\n      // disable the watchers on all the directives\n      // so that the rendered content stays the same\n      // during removal.\n      dirs[i]._watcher && dirs[i]._watcher.teardown();\n    }\n  };\n\n  /**\n   * Destroy the fragment.\n   */\n\n  Fragment.prototype.destroy = function () {\n    if (this.parentFrag) {\n      this.parentFrag.childFrags.$remove(this);\n    }\n    this.node.__v_frag = null;\n    this.unlink();\n  };\n\n  /**\n   * Call attach hook for a Vue instance.\n   *\n   * @param {Vue} child\n   */\n\n  function attach(child) {\n    if (!child._isAttached && inDoc(child.$el)) {\n      child._callHook('attached');\n    }\n  }\n\n  /**\n   * Call detach hook for a Vue instance.\n   *\n   * @param {Vue} child\n   */\n\n  function detach(child) {\n    if (child._isAttached && !inDoc(child.$el)) {\n      child._callHook('detached');\n    }\n  }\n\n  var linkerCache = new Cache(5000);\n\n  /**\n   * A factory that can be used to create instances of a\n   * fragment. Caches the compiled linker if possible.\n   *\n   * @param {Vue} vm\n   * @param {Element|String} el\n   */\n  function FragmentFactory(vm, el) {\n    this.vm = vm;\n    var template;\n    var isString = typeof el === 'string';\n    if (isString || isTemplate(el)) {\n      template = parseTemplate(el, true);\n    } else {\n      template = document.createDocumentFragment();\n      template.appendChild(el);\n    }\n    this.template = template;\n    // linker can be cached, but only for components\n    var linker;\n    var cid = vm.constructor.cid;\n    if (cid > 0) {\n      var cacheId = cid + (isString ? el : getOuterHTML(el));\n      linker = linkerCache.get(cacheId);\n      if (!linker) {\n        linker = compile(template, vm.$options, true);\n        linkerCache.put(cacheId, linker);\n      }\n    } else {\n      linker = compile(template, vm.$options, true);\n    }\n    this.linker = linker;\n  }\n\n  /**\n   * Create a fragment instance with given host and scope.\n   *\n   * @param {Vue} host\n   * @param {Object} scope\n   * @param {Fragment} parentFrag\n   */\n\n  FragmentFactory.prototype.create = function (host, scope, parentFrag) {\n    var frag = cloneNode(this.template);\n    return new Fragment(this.linker, this.vm, frag, host, scope, parentFrag);\n  };\n\n  var ON = 700;\n  var MODEL = 800;\n  var BIND = 850;\n  var TRANSITION = 1100;\n  var EL = 1500;\n  var COMPONENT = 1500;\n  var PARTIAL = 1750;\n  var IF = 2100;\n  var FOR = 2200;\n  var SLOT = 2300;\n\n  var uid$3 = 0;\n\n  var vFor = {\n\n    priority: FOR,\n    terminal: true,\n\n    params: ['track-by', 'stagger', 'enter-stagger', 'leave-stagger'],\n\n    bind: function bind() {\n      // support \"item in/of items\" syntax\n      var inMatch = this.expression.match(/(.*) (?:in|of) (.*)/);\n      if (inMatch) {\n        var itMatch = inMatch[1].match(/\\((.*),(.*)\\)/);\n        if (itMatch) {\n          this.iterator = itMatch[1].trim();\n          this.alias = itMatch[2].trim();\n        } else {\n          this.alias = inMatch[1].trim();\n        }\n        this.expression = inMatch[2];\n      }\n\n      if (!this.alias) {\n        'development' !== 'production' && warn('Invalid v-for expression \"' + this.descriptor.raw + '\": ' + 'alias is required.', this.vm);\n        return;\n      }\n\n      // uid as a cache identifier\n      this.id = '__v-for__' + ++uid$3;\n\n      // check if this is an option list,\n      // so that we know if we need to update the <select>'s\n      // v-model when the option list has changed.\n      // because v-model has a lower priority than v-for,\n      // the v-model is not bound here yet, so we have to\n      // retrive it in the actual updateModel() function.\n      var tag = this.el.tagName;\n      this.isOption = (tag === 'OPTION' || tag === 'OPTGROUP') && this.el.parentNode.tagName === 'SELECT';\n\n      // setup anchor nodes\n      this.start = createAnchor('v-for-start');\n      this.end = createAnchor('v-for-end');\n      replace(this.el, this.end);\n      before(this.start, this.end);\n\n      // cache\n      this.cache = Object.create(null);\n\n      // fragment factory\n      this.factory = new FragmentFactory(this.vm, this.el);\n    },\n\n    update: function update(data) {\n      this.diff(data);\n      this.updateRef();\n      this.updateModel();\n    },\n\n    /**\n     * Diff, based on new data and old data, determine the\n     * minimum amount of DOM manipulations needed to make the\n     * DOM reflect the new data Array.\n     *\n     * The algorithm diffs the new data Array by storing a\n     * hidden reference to an owner vm instance on previously\n     * seen data. This allows us to achieve O(n) which is\n     * better than a levenshtein distance based algorithm,\n     * which is O(m * n).\n     *\n     * @param {Array} data\n     */\n\n    diff: function diff(data) {\n      // check if the Array was converted from an Object\n      var item = data[0];\n      var convertedFromObject = this.fromObject = isObject(item) && hasOwn(item, '$key') && hasOwn(item, '$value');\n\n      var trackByKey = this.params.trackBy;\n      var oldFrags = this.frags;\n      var frags = this.frags = new Array(data.length);\n      var alias = this.alias;\n      var iterator = this.iterator;\n      var start = this.start;\n      var end = this.end;\n      var inDocument = inDoc(start);\n      var init = !oldFrags;\n      var i, l, frag, key, value, primitive;\n\n      // First pass, go through the new Array and fill up\n      // the new frags array. If a piece of data has a cached\n      // instance for it, we reuse it. Otherwise build a new\n      // instance.\n      for (i = 0, l = data.length; i < l; i++) {\n        item = data[i];\n        key = convertedFromObject ? item.$key : null;\n        value = convertedFromObject ? item.$value : item;\n        primitive = !isObject(value);\n        frag = !init && this.getCachedFrag(value, i, key);\n        if (frag) {\n          // reusable fragment\n          frag.reused = true;\n          // update $index\n          frag.scope.$index = i;\n          // update $key\n          if (key) {\n            frag.scope.$key = key;\n          }\n          // update iterator\n          if (iterator) {\n            frag.scope[iterator] = key !== null ? key : i;\n          }\n          // update data for track-by, object repeat &\n          // primitive values.\n          if (trackByKey || convertedFromObject || primitive) {\n            withoutConversion(function () {\n              frag.scope[alias] = value;\n            });\n          }\n        } else {\n          // new isntance\n          frag = this.create(value, alias, i, key);\n          frag.fresh = !init;\n        }\n        frags[i] = frag;\n        if (init) {\n          frag.before(end);\n        }\n      }\n\n      // we're done for the initial render.\n      if (init) {\n        return;\n      }\n\n      // Second pass, go through the old fragments and\n      // destroy those who are not reused (and remove them\n      // from cache)\n      var removalIndex = 0;\n      var totalRemoved = oldFrags.length - frags.length;\n      // when removing a large number of fragments, watcher removal\n      // turns out to be a perf bottleneck, so we batch the watcher\n      // removals into a single filter call!\n      this.vm._vForRemoving = true;\n      for (i = 0, l = oldFrags.length; i < l; i++) {\n        frag = oldFrags[i];\n        if (!frag.reused) {\n          this.deleteCachedFrag(frag);\n          this.remove(frag, removalIndex++, totalRemoved, inDocument);\n        }\n      }\n      this.vm._vForRemoving = false;\n      if (removalIndex) {\n        this.vm._watchers = this.vm._watchers.filter(function (w) {\n          return w.active;\n        });\n      }\n\n      // Final pass, move/insert new fragments into the\n      // right place.\n      var targetPrev, prevEl, currentPrev;\n      var insertionIndex = 0;\n      for (i = 0, l = frags.length; i < l; i++) {\n        frag = frags[i];\n        // this is the frag that we should be after\n        targetPrev = frags[i - 1];\n        prevEl = targetPrev ? targetPrev.staggerCb ? targetPrev.staggerAnchor : targetPrev.end || targetPrev.node : start;\n        if (frag.reused && !frag.staggerCb) {\n          currentPrev = findPrevFrag(frag, start, this.id);\n          if (currentPrev !== targetPrev && (!currentPrev ||\n          // optimization for moving a single item.\n          // thanks to suggestions by @livoras in #1807\n          findPrevFrag(currentPrev, start, this.id) !== targetPrev)) {\n            this.move(frag, prevEl);\n          }\n        } else {\n          // new instance, or still in stagger.\n          // insert with updated stagger index.\n          this.insert(frag, insertionIndex++, prevEl, inDocument);\n        }\n        frag.reused = frag.fresh = false;\n      }\n    },\n\n    /**\n     * Create a new fragment instance.\n     *\n     * @param {*} value\n     * @param {String} alias\n     * @param {Number} index\n     * @param {String} [key]\n     * @return {Fragment}\n     */\n\n    create: function create(value, alias, index, key) {\n      var host = this._host;\n      // create iteration scope\n      var parentScope = this._scope || this.vm;\n      var scope = Object.create(parentScope);\n      // ref holder for the scope\n      scope.$refs = Object.create(parentScope.$refs);\n      scope.$els = Object.create(parentScope.$els);\n      // make sure point $parent to parent scope\n      scope.$parent = parentScope;\n      // for two-way binding on alias\n      scope.$forContext = this;\n      // define scope properties\n      // important: define the scope alias without forced conversion\n      // so that frozen data structures remain non-reactive.\n      withoutConversion(function () {\n        defineReactive(scope, alias, value);\n      });\n      defineReactive(scope, '$index', index);\n      if (key) {\n        defineReactive(scope, '$key', key);\n      } else if (scope.$key) {\n        // avoid accidental fallback\n        def(scope, '$key', null);\n      }\n      if (this.iterator) {\n        defineReactive(scope, this.iterator, key !== null ? key : index);\n      }\n      var frag = this.factory.create(host, scope, this._frag);\n      frag.forId = this.id;\n      this.cacheFrag(value, frag, index, key);\n      return frag;\n    },\n\n    /**\n     * Update the v-ref on owner vm.\n     */\n\n    updateRef: function updateRef() {\n      var ref = this.descriptor.ref;\n      if (!ref) return;\n      var hash = (this._scope || this.vm).$refs;\n      var refs;\n      if (!this.fromObject) {\n        refs = this.frags.map(findVmFromFrag);\n      } else {\n        refs = {};\n        this.frags.forEach(function (frag) {\n          refs[frag.scope.$key] = findVmFromFrag(frag);\n        });\n      }\n      hash[ref] = refs;\n    },\n\n    /**\n     * For option lists, update the containing v-model on\n     * parent <select>.\n     */\n\n    updateModel: function updateModel() {\n      if (this.isOption) {\n        var parent = this.start.parentNode;\n        var model = parent && parent.__v_model;\n        if (model) {\n          model.forceUpdate();\n        }\n      }\n    },\n\n    /**\n     * Insert a fragment. Handles staggering.\n     *\n     * @param {Fragment} frag\n     * @param {Number} index\n     * @param {Node} prevEl\n     * @param {Boolean} inDocument\n     */\n\n    insert: function insert(frag, index, prevEl, inDocument) {\n      if (frag.staggerCb) {\n        frag.staggerCb.cancel();\n        frag.staggerCb = null;\n      }\n      var staggerAmount = this.getStagger(frag, index, null, 'enter');\n      if (inDocument && staggerAmount) {\n        // create an anchor and insert it synchronously,\n        // so that we can resolve the correct order without\n        // worrying about some elements not inserted yet\n        var anchor = frag.staggerAnchor;\n        if (!anchor) {\n          anchor = frag.staggerAnchor = createAnchor('stagger-anchor');\n          anchor.__v_frag = frag;\n        }\n        after(anchor, prevEl);\n        var op = frag.staggerCb = cancellable(function () {\n          frag.staggerCb = null;\n          frag.before(anchor);\n          remove(anchor);\n        });\n        setTimeout(op, staggerAmount);\n      } else {\n        frag.before(prevEl.nextSibling);\n      }\n    },\n\n    /**\n     * Remove a fragment. Handles staggering.\n     *\n     * @param {Fragment} frag\n     * @param {Number} index\n     * @param {Number} total\n     * @param {Boolean} inDocument\n     */\n\n    remove: function remove(frag, index, total, inDocument) {\n      if (frag.staggerCb) {\n        frag.staggerCb.cancel();\n        frag.staggerCb = null;\n        // it's not possible for the same frag to be removed\n        // twice, so if we have a pending stagger callback,\n        // it means this frag is queued for enter but removed\n        // before its transition started. Since it is already\n        // destroyed, we can just leave it in detached state.\n        return;\n      }\n      var staggerAmount = this.getStagger(frag, index, total, 'leave');\n      if (inDocument && staggerAmount) {\n        var op = frag.staggerCb = cancellable(function () {\n          frag.staggerCb = null;\n          frag.remove();\n        });\n        setTimeout(op, staggerAmount);\n      } else {\n        frag.remove();\n      }\n    },\n\n    /**\n     * Move a fragment to a new position.\n     * Force no transition.\n     *\n     * @param {Fragment} frag\n     * @param {Node} prevEl\n     */\n\n    move: function move(frag, prevEl) {\n      // fix a common issue with Sortable:\n      // if prevEl doesn't have nextSibling, this means it's\n      // been dragged after the end anchor. Just re-position\n      // the end anchor to the end of the container.\n      /* istanbul ignore if */\n      if (!prevEl.nextSibling) {\n        this.end.parentNode.appendChild(this.end);\n      }\n      frag.before(prevEl.nextSibling, false);\n    },\n\n    /**\n     * Cache a fragment using track-by or the object key.\n     *\n     * @param {*} value\n     * @param {Fragment} frag\n     * @param {Number} index\n     * @param {String} [key]\n     */\n\n    cacheFrag: function cacheFrag(value, frag, index, key) {\n      var trackByKey = this.params.trackBy;\n      var cache = this.cache;\n      var primitive = !isObject(value);\n      var id;\n      if (key || trackByKey || primitive) {\n        id = trackByKey ? trackByKey === '$index' ? index : getPath(value, trackByKey) : key || value;\n        if (!cache[id]) {\n          cache[id] = frag;\n        } else if (trackByKey !== '$index') {\n          'development' !== 'production' && this.warnDuplicate(value);\n        }\n      } else {\n        id = this.id;\n        if (hasOwn(value, id)) {\n          if (value[id] === null) {\n            value[id] = frag;\n          } else {\n            'development' !== 'production' && this.warnDuplicate(value);\n          }\n        } else {\n          def(value, id, frag);\n        }\n      }\n      frag.raw = value;\n    },\n\n    /**\n     * Get a cached fragment from the value/index/key\n     *\n     * @param {*} value\n     * @param {Number} index\n     * @param {String} key\n     * @return {Fragment}\n     */\n\n    getCachedFrag: function getCachedFrag(value, index, key) {\n      var trackByKey = this.params.trackBy;\n      var primitive = !isObject(value);\n      var frag;\n      if (key || trackByKey || primitive) {\n        var id = trackByKey ? trackByKey === '$index' ? index : getPath(value, trackByKey) : key || value;\n        frag = this.cache[id];\n      } else {\n        frag = value[this.id];\n      }\n      if (frag && (frag.reused || frag.fresh)) {\n        'development' !== 'production' && this.warnDuplicate(value);\n      }\n      return frag;\n    },\n\n    /**\n     * Delete a fragment from cache.\n     *\n     * @param {Fragment} frag\n     */\n\n    deleteCachedFrag: function deleteCachedFrag(frag) {\n      var value = frag.raw;\n      var trackByKey = this.params.trackBy;\n      var scope = frag.scope;\n      var index = scope.$index;\n      // fix #948: avoid accidentally fall through to\n      // a parent repeater which happens to have $key.\n      var key = hasOwn(scope, '$key') && scope.$key;\n      var primitive = !isObject(value);\n      if (trackByKey || key || primitive) {\n        var id = trackByKey ? trackByKey === '$index' ? index : getPath(value, trackByKey) : key || value;\n        this.cache[id] = null;\n      } else {\n        value[this.id] = null;\n        frag.raw = null;\n      }\n    },\n\n    /**\n     * Get the stagger amount for an insertion/removal.\n     *\n     * @param {Fragment} frag\n     * @param {Number} index\n     * @param {Number} total\n     * @param {String} type\n     */\n\n    getStagger: function getStagger(frag, index, total, type) {\n      type = type + 'Stagger';\n      var trans = frag.node.__v_trans;\n      var hooks = trans && trans.hooks;\n      var hook = hooks && (hooks[type] || hooks.stagger);\n      return hook ? hook.call(frag, index, total) : index * parseInt(this.params[type] || this.params.stagger, 10);\n    },\n\n    /**\n     * Pre-process the value before piping it through the\n     * filters. This is passed to and called by the watcher.\n     */\n\n    _preProcess: function _preProcess(value) {\n      // regardless of type, store the un-filtered raw value.\n      this.rawValue = value;\n      return value;\n    },\n\n    /**\n     * Post-process the value after it has been piped through\n     * the filters. This is passed to and called by the watcher.\n     *\n     * It is necessary for this to be called during the\n     * wathcer's dependency collection phase because we want\n     * the v-for to update when the source Object is mutated.\n     */\n\n    _postProcess: function _postProcess(value) {\n      if (isArray(value)) {\n        return value;\n      } else if (isPlainObject(value)) {\n        // convert plain object to array.\n        var keys = Object.keys(value);\n        var i = keys.length;\n        var res = new Array(i);\n        var key;\n        while (i--) {\n          key = keys[i];\n          res[i] = {\n            $key: key,\n            $value: value[key]\n          };\n        }\n        return res;\n      } else {\n        if (typeof value === 'number' && !isNaN(value)) {\n          value = range(value);\n        }\n        return value || [];\n      }\n    },\n\n    unbind: function unbind() {\n      if (this.descriptor.ref) {\n        (this._scope || this.vm).$refs[this.descriptor.ref] = null;\n      }\n      if (this.frags) {\n        var i = this.frags.length;\n        var frag;\n        while (i--) {\n          frag = this.frags[i];\n          this.deleteCachedFrag(frag);\n          frag.destroy();\n        }\n      }\n    }\n  };\n\n  /**\n   * Helper to find the previous element that is a fragment\n   * anchor. This is necessary because a destroyed frag's\n   * element could still be lingering in the DOM before its\n   * leaving transition finishes, but its inserted flag\n   * should have been set to false so we can skip them.\n   *\n   * If this is a block repeat, we want to make sure we only\n   * return frag that is bound to this v-for. (see #929)\n   *\n   * @param {Fragment} frag\n   * @param {Comment|Text} anchor\n   * @param {String} id\n   * @return {Fragment}\n   */\n\n  function findPrevFrag(frag, anchor, id) {\n    var el = frag.node.previousSibling;\n    /* istanbul ignore if */\n    if (!el) return;\n    frag = el.__v_frag;\n    while ((!frag || frag.forId !== id || !frag.inserted) && el !== anchor) {\n      el = el.previousSibling;\n      /* istanbul ignore if */\n      if (!el) return;\n      frag = el.__v_frag;\n    }\n    return frag;\n  }\n\n  /**\n   * Find a vm from a fragment.\n   *\n   * @param {Fragment} frag\n   * @return {Vue|undefined}\n   */\n\n  function findVmFromFrag(frag) {\n    var node = frag.node;\n    // handle multi-node frag\n    if (frag.end) {\n      while (!node.__vue__ && node !== frag.end && node.nextSibling) {\n        node = node.nextSibling;\n      }\n    }\n    return node.__vue__;\n  }\n\n  /**\n   * Create a range array from given number.\n   *\n   * @param {Number} n\n   * @return {Array}\n   */\n\n  function range(n) {\n    var i = -1;\n    var ret = new Array(Math.floor(n));\n    while (++i < n) {\n      ret[i] = i;\n    }\n    return ret;\n  }\n\n  if ('development' !== 'production') {\n    vFor.warnDuplicate = function (value) {\n      warn('Duplicate value found in v-for=\"' + this.descriptor.raw + '\": ' + JSON.stringify(value) + '. Use track-by=\"$index\" if ' + 'you are expecting duplicate values.', this.vm);\n    };\n  }\n\n  var vIf = {\n\n    priority: IF,\n    terminal: true,\n\n    bind: function bind() {\n      var el = this.el;\n      if (!el.__vue__) {\n        // check else block\n        var next = el.nextElementSibling;\n        if (next && getAttr(next, 'v-else') !== null) {\n          remove(next);\n          this.elseEl = next;\n        }\n        // check main block\n        this.anchor = createAnchor('v-if');\n        replace(el, this.anchor);\n      } else {\n        'development' !== 'production' && warn('v-if=\"' + this.expression + '\" cannot be ' + 'used on an instance root element.', this.vm);\n        this.invalid = true;\n      }\n    },\n\n    update: function update(value) {\n      if (this.invalid) return;\n      if (value) {\n        if (!this.frag) {\n          this.insert();\n        }\n      } else {\n        this.remove();\n      }\n    },\n\n    insert: function insert() {\n      if (this.elseFrag) {\n        this.elseFrag.remove();\n        this.elseFrag = null;\n      }\n      // lazy init factory\n      if (!this.factory) {\n        this.factory = new FragmentFactory(this.vm, this.el);\n      }\n      this.frag = this.factory.create(this._host, this._scope, this._frag);\n      this.frag.before(this.anchor);\n    },\n\n    remove: function remove() {\n      if (this.frag) {\n        this.frag.remove();\n        this.frag = null;\n      }\n      if (this.elseEl && !this.elseFrag) {\n        if (!this.elseFactory) {\n          this.elseFactory = new FragmentFactory(this.elseEl._context || this.vm, this.elseEl);\n        }\n        this.elseFrag = this.elseFactory.create(this._host, this._scope, this._frag);\n        this.elseFrag.before(this.anchor);\n      }\n    },\n\n    unbind: function unbind() {\n      if (this.frag) {\n        this.frag.destroy();\n      }\n      if (this.elseFrag) {\n        this.elseFrag.destroy();\n      }\n    }\n  };\n\n  var show = {\n\n    bind: function bind() {\n      // check else block\n      var next = this.el.nextElementSibling;\n      if (next && getAttr(next, 'v-else') !== null) {\n        this.elseEl = next;\n      }\n    },\n\n    update: function update(value) {\n      this.apply(this.el, value);\n      if (this.elseEl) {\n        this.apply(this.elseEl, !value);\n      }\n    },\n\n    apply: function apply(el, value) {\n      if (inDoc(el)) {\n        applyTransition(el, value ? 1 : -1, toggle, this.vm);\n      } else {\n        toggle();\n      }\n      function toggle() {\n        el.style.display = value ? '' : 'none';\n      }\n    }\n  };\n\n  var text$2 = {\n\n    bind: function bind() {\n      var self = this;\n      var el = this.el;\n      var isRange = el.type === 'range';\n      var lazy = this.params.lazy;\n      var number = this.params.number;\n      var debounce = this.params.debounce;\n\n      // handle composition events.\n      //   http://blog.evanyou.me/2014/01/03/composition-event/\n      // skip this for Android because it handles composition\n      // events quite differently. Android doesn't trigger\n      // composition events for language input methods e.g.\n      // Chinese, but instead triggers them for spelling\n      // suggestions... (see Discussion/#162)\n      var composing = false;\n      if (!isAndroid && !isRange) {\n        this.on('compositionstart', function () {\n          composing = true;\n        });\n        this.on('compositionend', function () {\n          composing = false;\n          // in IE11 the \"compositionend\" event fires AFTER\n          // the \"input\" event, so the input handler is blocked\n          // at the end... have to call it here.\n          //\n          // #1327: in lazy mode this is unecessary.\n          if (!lazy) {\n            self.listener();\n          }\n        });\n      }\n\n      // prevent messing with the input when user is typing,\n      // and force update on blur.\n      this.focused = false;\n      if (!isRange && !lazy) {\n        this.on('focus', function () {\n          self.focused = true;\n        });\n        this.on('blur', function () {\n          self.focused = false;\n          // do not sync value after fragment removal (#2017)\n          if (!self._frag || self._frag.inserted) {\n            self.rawListener();\n          }\n        });\n      }\n\n      // Now attach the main listener\n      this.listener = this.rawListener = function () {\n        if (composing || !self._bound) {\n          return;\n        }\n        var val = number || isRange ? toNumber(el.value) : el.value;\n        self.set(val);\n        // force update on next tick to avoid lock & same value\n        // also only update when user is not typing\n        nextTick(function () {\n          if (self._bound && !self.focused) {\n            self.update(self._watcher.value);\n          }\n        });\n      };\n\n      // apply debounce\n      if (debounce) {\n        this.listener = _debounce(this.listener, debounce);\n      }\n\n      // Support jQuery events, since jQuery.trigger() doesn't\n      // trigger native events in some cases and some plugins\n      // rely on $.trigger()\n      //\n      // We want to make sure if a listener is attached using\n      // jQuery, it is also removed with jQuery, that's why\n      // we do the check for each directive instance and\n      // store that check result on itself. This also allows\n      // easier test coverage control by unsetting the global\n      // jQuery variable in tests.\n      this.hasjQuery = typeof jQuery === 'function';\n      if (this.hasjQuery) {\n        var method = jQuery.fn.on ? 'on' : 'bind';\n        jQuery(el)[method]('change', this.rawListener);\n        if (!lazy) {\n          jQuery(el)[method]('input', this.listener);\n        }\n      } else {\n        this.on('change', this.rawListener);\n        if (!lazy) {\n          this.on('input', this.listener);\n        }\n      }\n\n      // IE9 doesn't fire input event on backspace/del/cut\n      if (!lazy && isIE9) {\n        this.on('cut', function () {\n          nextTick(self.listener);\n        });\n        this.on('keyup', function (e) {\n          if (e.keyCode === 46 || e.keyCode === 8) {\n            self.listener();\n          }\n        });\n      }\n\n      // set initial value if present\n      if (el.hasAttribute('value') || el.tagName === 'TEXTAREA' && el.value.trim()) {\n        this.afterBind = this.listener;\n      }\n    },\n\n    update: function update(value) {\n      this.el.value = _toString(value);\n    },\n\n    unbind: function unbind() {\n      var el = this.el;\n      if (this.hasjQuery) {\n        var method = jQuery.fn.off ? 'off' : 'unbind';\n        jQuery(el)[method]('change', this.listener);\n        jQuery(el)[method]('input', this.listener);\n      }\n    }\n  };\n\n  var radio = {\n\n    bind: function bind() {\n      var self = this;\n      var el = this.el;\n\n      this.getValue = function () {\n        // value overwrite via v-bind:value\n        if (el.hasOwnProperty('_value')) {\n          return el._value;\n        }\n        var val = el.value;\n        if (self.params.number) {\n          val = toNumber(val);\n        }\n        return val;\n      };\n\n      this.listener = function () {\n        self.set(self.getValue());\n      };\n      this.on('change', this.listener);\n\n      if (el.hasAttribute('checked')) {\n        this.afterBind = this.listener;\n      }\n    },\n\n    update: function update(value) {\n      this.el.checked = looseEqual(value, this.getValue());\n    }\n  };\n\n  var select = {\n\n    bind: function bind() {\n      var self = this;\n      var el = this.el;\n\n      // method to force update DOM using latest value.\n      this.forceUpdate = function () {\n        if (self._watcher) {\n          self.update(self._watcher.get());\n        }\n      };\n\n      // check if this is a multiple select\n      var multiple = this.multiple = el.hasAttribute('multiple');\n\n      // attach listener\n      this.listener = function () {\n        var value = getValue(el, multiple);\n        value = self.params.number ? isArray(value) ? value.map(toNumber) : toNumber(value) : value;\n        self.set(value);\n      };\n      this.on('change', this.listener);\n\n      // if has initial value, set afterBind\n      var initValue = getValue(el, multiple, true);\n      if (multiple && initValue.length || !multiple && initValue !== null) {\n        this.afterBind = this.listener;\n      }\n\n      // All major browsers except Firefox resets\n      // selectedIndex with value -1 to 0 when the element\n      // is appended to a new parent, therefore we have to\n      // force a DOM update whenever that happens...\n      this.vm.$on('hook:attached', this.forceUpdate);\n    },\n\n    update: function update(value) {\n      var el = this.el;\n      el.selectedIndex = -1;\n      var multi = this.multiple && isArray(value);\n      var options = el.options;\n      var i = options.length;\n      var op, val;\n      while (i--) {\n        op = options[i];\n        val = op.hasOwnProperty('_value') ? op._value : op.value;\n        /* eslint-disable eqeqeq */\n        op.selected = multi ? indexOf$1(value, val) > -1 : looseEqual(value, val);\n        /* eslint-enable eqeqeq */\n      }\n    },\n\n    unbind: function unbind() {\n      /* istanbul ignore next */\n      this.vm.$off('hook:attached', this.forceUpdate);\n    }\n  };\n\n  /**\n   * Get select value\n   *\n   * @param {SelectElement} el\n   * @param {Boolean} multi\n   * @param {Boolean} init\n   * @return {Array|*}\n   */\n\n  function getValue(el, multi, init) {\n    var res = multi ? [] : null;\n    var op, val, selected;\n    for (var i = 0, l = el.options.length; i < l; i++) {\n      op = el.options[i];\n      selected = init ? op.hasAttribute('selected') : op.selected;\n      if (selected) {\n        val = op.hasOwnProperty('_value') ? op._value : op.value;\n        if (multi) {\n          res.push(val);\n        } else {\n          return val;\n        }\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Native Array.indexOf uses strict equal, but in this\n   * case we need to match string/numbers with custom equal.\n   *\n   * @param {Array} arr\n   * @param {*} val\n   */\n\n  function indexOf$1(arr, val) {\n    var i = arr.length;\n    while (i--) {\n      if (looseEqual(arr[i], val)) {\n        return i;\n      }\n    }\n    return -1;\n  }\n\n  var checkbox = {\n\n    bind: function bind() {\n      var self = this;\n      var el = this.el;\n\n      this.getValue = function () {\n        return el.hasOwnProperty('_value') ? el._value : self.params.number ? toNumber(el.value) : el.value;\n      };\n\n      function getBooleanValue() {\n        var val = el.checked;\n        if (val && el.hasOwnProperty('_trueValue')) {\n          return el._trueValue;\n        }\n        if (!val && el.hasOwnProperty('_falseValue')) {\n          return el._falseValue;\n        }\n        return val;\n      }\n\n      this.listener = function () {\n        var model = self._watcher.value;\n        if (isArray(model)) {\n          var val = self.getValue();\n          if (el.checked) {\n            if (indexOf(model, val) < 0) {\n              model.push(val);\n            }\n          } else {\n            model.$remove(val);\n          }\n        } else {\n          self.set(getBooleanValue());\n        }\n      };\n\n      this.on('change', this.listener);\n      if (el.hasAttribute('checked')) {\n        this.afterBind = this.listener;\n      }\n    },\n\n    update: function update(value) {\n      var el = this.el;\n      if (isArray(value)) {\n        el.checked = indexOf(value, this.getValue()) > -1;\n      } else {\n        if (el.hasOwnProperty('_trueValue')) {\n          el.checked = looseEqual(value, el._trueValue);\n        } else {\n          el.checked = !!value;\n        }\n      }\n    }\n  };\n\n  var handlers = {\n    text: text$2,\n    radio: radio,\n    select: select,\n    checkbox: checkbox\n  };\n\n  var model = {\n\n    priority: MODEL,\n    twoWay: true,\n    handlers: handlers,\n    params: ['lazy', 'number', 'debounce'],\n\n    /**\n     * Possible elements:\n     *   <select>\n     *   <textarea>\n     *   <input type=\"*\">\n     *     - text\n     *     - checkbox\n     *     - radio\n     *     - number\n     */\n\n    bind: function bind() {\n      // friendly warning...\n      this.checkFilters();\n      if (this.hasRead && !this.hasWrite) {\n        'development' !== 'production' && warn('It seems you are using a read-only filter with ' + 'v-model=\"' + this.descriptor.raw + '\". ' + 'You might want to use a two-way filter to ensure correct behavior.', this.vm);\n      }\n      var el = this.el;\n      var tag = el.tagName;\n      var handler;\n      if (tag === 'INPUT') {\n        handler = handlers[el.type] || handlers.text;\n      } else if (tag === 'SELECT') {\n        handler = handlers.select;\n      } else if (tag === 'TEXTAREA') {\n        handler = handlers.text;\n      } else {\n        'development' !== 'production' && warn('v-model does not support element type: ' + tag, this.vm);\n        return;\n      }\n      el.__v_model = this;\n      handler.bind.call(this);\n      this.update = handler.update;\n      this._unbind = handler.unbind;\n    },\n\n    /**\n     * Check read/write filter stats.\n     */\n\n    checkFilters: function checkFilters() {\n      var filters = this.filters;\n      if (!filters) return;\n      var i = filters.length;\n      while (i--) {\n        var filter = resolveAsset(this.vm.$options, 'filters', filters[i].name);\n        if (typeof filter === 'function' || filter.read) {\n          this.hasRead = true;\n        }\n        if (filter.write) {\n          this.hasWrite = true;\n        }\n      }\n    },\n\n    unbind: function unbind() {\n      this.el.__v_model = null;\n      this._unbind && this._unbind();\n    }\n  };\n\n  // keyCode aliases\n  var keyCodes = {\n    esc: 27,\n    tab: 9,\n    enter: 13,\n    space: 32,\n    'delete': [8, 46],\n    up: 38,\n    left: 37,\n    right: 39,\n    down: 40\n  };\n\n  function keyFilter(handler, keys) {\n    var codes = keys.map(function (key) {\n      var charCode = key.charCodeAt(0);\n      if (charCode > 47 && charCode < 58) {\n        return parseInt(key, 10);\n      }\n      if (key.length === 1) {\n        charCode = key.toUpperCase().charCodeAt(0);\n        if (charCode > 64 && charCode < 91) {\n          return charCode;\n        }\n      }\n      return keyCodes[key];\n    });\n    codes = [].concat.apply([], codes);\n    return function keyHandler(e) {\n      if (codes.indexOf(e.keyCode) > -1) {\n        return handler.call(this, e);\n      }\n    };\n  }\n\n  function stopFilter(handler) {\n    return function stopHandler(e) {\n      e.stopPropagation();\n      return handler.call(this, e);\n    };\n  }\n\n  function preventFilter(handler) {\n    return function preventHandler(e) {\n      e.preventDefault();\n      return handler.call(this, e);\n    };\n  }\n\n  function selfFilter(handler) {\n    return function selfHandler(e) {\n      if (e.target === e.currentTarget) {\n        return handler.call(this, e);\n      }\n    };\n  }\n\n  var on$1 = {\n\n    priority: ON,\n    acceptStatement: true,\n    keyCodes: keyCodes,\n\n    bind: function bind() {\n      // deal with iframes\n      if (this.el.tagName === 'IFRAME' && this.arg !== 'load') {\n        var self = this;\n        this.iframeBind = function () {\n          on(self.el.contentWindow, self.arg, self.handler, self.modifiers.capture);\n        };\n        this.on('load', this.iframeBind);\n      }\n    },\n\n    update: function update(handler) {\n      // stub a noop for v-on with no value,\n      // e.g. @mousedown.prevent\n      if (!this.descriptor.raw) {\n        handler = function () {};\n      }\n\n      if (typeof handler !== 'function') {\n        'development' !== 'production' && warn('v-on:' + this.arg + '=\"' + this.expression + '\" expects a function value, ' + 'got ' + handler, this.vm);\n        return;\n      }\n\n      // apply modifiers\n      if (this.modifiers.stop) {\n        handler = stopFilter(handler);\n      }\n      if (this.modifiers.prevent) {\n        handler = preventFilter(handler);\n      }\n      if (this.modifiers.self) {\n        handler = selfFilter(handler);\n      }\n      // key filter\n      var keys = Object.keys(this.modifiers).filter(function (key) {\n        return key !== 'stop' && key !== 'prevent' && key !== 'self';\n      });\n      if (keys.length) {\n        handler = keyFilter(handler, keys);\n      }\n\n      this.reset();\n      this.handler = handler;\n\n      if (this.iframeBind) {\n        this.iframeBind();\n      } else {\n        on(this.el, this.arg, this.handler, this.modifiers.capture);\n      }\n    },\n\n    reset: function reset() {\n      var el = this.iframeBind ? this.el.contentWindow : this.el;\n      if (this.handler) {\n        off(el, this.arg, this.handler);\n      }\n    },\n\n    unbind: function unbind() {\n      this.reset();\n    }\n  };\n\n  var prefixes = ['-webkit-', '-moz-', '-ms-'];\n  var camelPrefixes = ['Webkit', 'Moz', 'ms'];\n  var importantRE = /!important;?$/;\n  var propCache = Object.create(null);\n\n  var testEl = null;\n\n  var style = {\n\n    deep: true,\n\n    update: function update(value) {\n      if (typeof value === 'string') {\n        this.el.style.cssText = value;\n      } else if (isArray(value)) {\n        this.handleObject(value.reduce(extend, {}));\n      } else {\n        this.handleObject(value || {});\n      }\n    },\n\n    handleObject: function handleObject(value) {\n      // cache object styles so that only changed props\n      // are actually updated.\n      var cache = this.cache || (this.cache = {});\n      var name, val;\n      for (name in cache) {\n        if (!(name in value)) {\n          this.handleSingle(name, null);\n          delete cache[name];\n        }\n      }\n      for (name in value) {\n        val = value[name];\n        if (val !== cache[name]) {\n          cache[name] = val;\n          this.handleSingle(name, val);\n        }\n      }\n    },\n\n    handleSingle: function handleSingle(prop, value) {\n      prop = normalize(prop);\n      if (!prop) return; // unsupported prop\n      // cast possible numbers/booleans into strings\n      if (value != null) value += '';\n      if (value) {\n        var isImportant = importantRE.test(value) ? 'important' : '';\n        if (isImportant) {\n          /* istanbul ignore if */\n          if ('development' !== 'production') {\n            warn('It\\'s probably a bad idea to use !important with inline rules. ' + 'This feature will be deprecated in a future version of Vue.');\n          }\n          value = value.replace(importantRE, '').trim();\n          this.el.style.setProperty(prop.kebab, value, isImportant);\n        } else {\n          this.el.style[prop.camel] = value;\n        }\n      } else {\n        this.el.style[prop.camel] = '';\n      }\n    }\n\n  };\n\n  /**\n   * Normalize a CSS property name.\n   * - cache result\n   * - auto prefix\n   * - camelCase -> dash-case\n   *\n   * @param {String} prop\n   * @return {String}\n   */\n\n  function normalize(prop) {\n    if (propCache[prop]) {\n      return propCache[prop];\n    }\n    var res = prefix(prop);\n    propCache[prop] = propCache[res] = res;\n    return res;\n  }\n\n  /**\n   * Auto detect the appropriate prefix for a CSS property.\n   * https://gist.github.com/paulirish/523692\n   *\n   * @param {String} prop\n   * @return {String}\n   */\n\n  function prefix(prop) {\n    prop = hyphenate(prop);\n    var camel = camelize(prop);\n    var upper = camel.charAt(0).toUpperCase() + camel.slice(1);\n    if (!testEl) {\n      testEl = document.createElement('div');\n    }\n    var i = prefixes.length;\n    var prefixed;\n    while (i--) {\n      prefixed = camelPrefixes[i] + upper;\n      if (prefixed in testEl.style) {\n        return {\n          kebab: prefixes[i] + prop,\n          camel: prefixed\n        };\n      }\n    }\n    if (camel in testEl.style) {\n      return {\n        kebab: prop,\n        camel: camel\n      };\n    }\n  }\n\n  // xlink\n  var xlinkNS = 'http://www.w3.org/1999/xlink';\n  var xlinkRE = /^xlink:/;\n\n  // check for attributes that prohibit interpolations\n  var disallowedInterpAttrRE = /^v-|^:|^@|^(?:is|transition|transition-mode|debounce|track-by|stagger|enter-stagger|leave-stagger)$/;\n  // these attributes should also set their corresponding properties\n  // because they only affect the initial state of the element\n  var attrWithPropsRE = /^(?:value|checked|selected|muted)$/;\n  // these attributes expect enumrated values of \"true\" or \"false\"\n  // but are not boolean attributes\n  var enumeratedAttrRE = /^(?:draggable|contenteditable|spellcheck)$/;\n\n  // these attributes should set a hidden property for\n  // binding v-model to object values\n  var modelProps = {\n    value: '_value',\n    'true-value': '_trueValue',\n    'false-value': '_falseValue'\n  };\n\n  var bind$1 = {\n\n    priority: BIND,\n\n    bind: function bind() {\n      var attr = this.arg;\n      var tag = this.el.tagName;\n      // should be deep watch on object mode\n      if (!attr) {\n        this.deep = true;\n      }\n      // handle interpolation bindings\n      var descriptor = this.descriptor;\n      var tokens = descriptor.interp;\n      if (tokens) {\n        // handle interpolations with one-time tokens\n        if (descriptor.hasOneTime) {\n          this.expression = tokensToExp(tokens, this._scope || this.vm);\n        }\n\n        // only allow binding on native attributes\n        if (disallowedInterpAttrRE.test(attr) || attr === 'name' && (tag === 'PARTIAL' || tag === 'SLOT')) {\n          'development' !== 'production' && warn(attr + '=\"' + descriptor.raw + '\": ' + 'attribute interpolation is not allowed in Vue.js ' + 'directives and special attributes.', this.vm);\n          this.el.removeAttribute(attr);\n          this.invalid = true;\n        }\n\n        /* istanbul ignore if */\n        if ('development' !== 'production') {\n          var raw = attr + '=\"' + descriptor.raw + '\": ';\n          // warn src\n          if (attr === 'src') {\n            warn(raw + 'interpolation in \"src\" attribute will cause ' + 'a 404 request. Use v-bind:src instead.', this.vm);\n          }\n\n          // warn style\n          if (attr === 'style') {\n            warn(raw + 'interpolation in \"style\" attribute will cause ' + 'the attribute to be discarded in Internet Explorer. ' + 'Use v-bind:style instead.', this.vm);\n          }\n        }\n      }\n    },\n\n    update: function update(value) {\n      if (this.invalid) {\n        return;\n      }\n      var attr = this.arg;\n      if (this.arg) {\n        this.handleSingle(attr, value);\n      } else {\n        this.handleObject(value || {});\n      }\n    },\n\n    // share object handler with v-bind:class\n    handleObject: style.handleObject,\n\n    handleSingle: function handleSingle(attr, value) {\n      var el = this.el;\n      var interp = this.descriptor.interp;\n      if (this.modifiers.camel) {\n        attr = camelize(attr);\n      }\n      if (!interp && attrWithPropsRE.test(attr) && attr in el) {\n        el[attr] = attr === 'value' ? value == null // IE9 will set input.value to \"null\" for null...\n        ? '' : value : value;\n      }\n      // set model props\n      var modelProp = modelProps[attr];\n      if (!interp && modelProp) {\n        el[modelProp] = value;\n        // update v-model if present\n        var model = el.__v_model;\n        if (model) {\n          model.listener();\n        }\n      }\n      // do not set value attribute for textarea\n      if (attr === 'value' && el.tagName === 'TEXTAREA') {\n        el.removeAttribute(attr);\n        return;\n      }\n      // update attribute\n      if (enumeratedAttrRE.test(attr)) {\n        el.setAttribute(attr, value ? 'true' : 'false');\n      } else if (value != null && value !== false) {\n        if (attr === 'class') {\n          // handle edge case #1960:\n          // class interpolation should not overwrite Vue transition class\n          if (el.__v_trans) {\n            value += ' ' + el.__v_trans.id + '-transition';\n          }\n          setClass(el, value);\n        } else if (xlinkRE.test(attr)) {\n          el.setAttributeNS(xlinkNS, attr, value === true ? '' : value);\n        } else {\n          el.setAttribute(attr, value === true ? '' : value);\n        }\n      } else {\n        el.removeAttribute(attr);\n      }\n    }\n  };\n\n  var el = {\n\n    priority: EL,\n\n    bind: function bind() {\n      /* istanbul ignore if */\n      if (!this.arg) {\n        return;\n      }\n      var id = this.id = camelize(this.arg);\n      var refs = (this._scope || this.vm).$els;\n      if (hasOwn(refs, id)) {\n        refs[id] = this.el;\n      } else {\n        defineReactive(refs, id, this.el);\n      }\n    },\n\n    unbind: function unbind() {\n      var refs = (this._scope || this.vm).$els;\n      if (refs[this.id] === this.el) {\n        refs[this.id] = null;\n      }\n    }\n  };\n\n  var ref = {\n    bind: function bind() {\n      'development' !== 'production' && warn('v-ref:' + this.arg + ' must be used on a child ' + 'component. Found on <' + this.el.tagName.toLowerCase() + '>.', this.vm);\n    }\n  };\n\n  var cloak = {\n    bind: function bind() {\n      var el = this.el;\n      this.vm.$once('pre-hook:compiled', function () {\n        el.removeAttribute('v-cloak');\n      });\n    }\n  };\n\n  // must export plain object\n  var directives = {\n    text: text$1,\n    html: html,\n    'for': vFor,\n    'if': vIf,\n    show: show,\n    model: model,\n    on: on$1,\n    bind: bind$1,\n    el: el,\n    ref: ref,\n    cloak: cloak\n  };\n\n  var vClass = {\n\n    deep: true,\n\n    update: function update(value) {\n      if (value && typeof value === 'string') {\n        this.handleObject(stringToObject(value));\n      } else if (isPlainObject(value)) {\n        this.handleObject(value);\n      } else if (isArray(value)) {\n        this.handleArray(value);\n      } else {\n        this.cleanup();\n      }\n    },\n\n    handleObject: function handleObject(value) {\n      this.cleanup(value);\n      this.prevKeys = Object.keys(value);\n      setObjectClasses(this.el, value);\n    },\n\n    handleArray: function handleArray(value) {\n      this.cleanup(value);\n      for (var i = 0, l = value.length; i < l; i++) {\n        var val = value[i];\n        if (val && isPlainObject(val)) {\n          setObjectClasses(this.el, val);\n        } else if (val && typeof val === 'string') {\n          addClass(this.el, val);\n        }\n      }\n      this.prevKeys = value.slice();\n    },\n\n    cleanup: function cleanup(value) {\n      if (!this.prevKeys) return;\n\n      var i = this.prevKeys.length;\n      while (i--) {\n        var key = this.prevKeys[i];\n        if (!key) continue;\n\n        var keys = isPlainObject(key) ? Object.keys(key) : [key];\n        for (var j = 0, l = keys.length; j < l; j++) {\n          toggleClasses(this.el, keys[j], removeClass);\n        }\n      }\n    }\n  };\n\n  function setObjectClasses(el, obj) {\n    var keys = Object.keys(obj);\n    for (var i = 0, l = keys.length; i < l; i++) {\n      var key = keys[i];\n      if (!obj[key]) continue;\n      toggleClasses(el, key, addClass);\n    }\n  }\n\n  function stringToObject(value) {\n    var res = {};\n    var keys = value.trim().split(/\\s+/);\n    for (var i = 0, l = keys.length; i < l; i++) {\n      res[keys[i]] = true;\n    }\n    return res;\n  }\n\n  /**\n   * Add or remove a class/classes on an element\n   *\n   * @param {Element} el\n   * @param {String} key The class name. This may or may not\n   *                     contain a space character, in such a\n   *                     case we'll deal with multiple class\n   *                     names at once.\n   * @param {Function} fn\n   */\n\n  function toggleClasses(el, key, fn) {\n    key = key.trim();\n\n    if (key.indexOf(' ') === -1) {\n      fn(el, key);\n      return;\n    }\n\n    // The key contains one or more space characters.\n    // Since a class name doesn't accept such characters, we\n    // treat it as multiple classes.\n    var keys = key.split(/\\s+/);\n    for (var i = 0, l = keys.length; i < l; i++) {\n      fn(el, keys[i]);\n    }\n  }\n\n  var component = {\n\n    priority: COMPONENT,\n\n    params: ['keep-alive', 'transition-mode', 'inline-template'],\n\n    /**\n     * Setup. Two possible usages:\n     *\n     * - static:\n     *   <comp> or <div v-component=\"comp\">\n     *\n     * - dynamic:\n     *   <component :is=\"view\">\n     */\n\n    bind: function bind() {\n      if (!this.el.__vue__) {\n        // keep-alive cache\n        this.keepAlive = this.params.keepAlive;\n        if (this.keepAlive) {\n          this.cache = {};\n        }\n        // check inline-template\n        if (this.params.inlineTemplate) {\n          // extract inline template as a DocumentFragment\n          this.inlineTemplate = extractContent(this.el, true);\n        }\n        // component resolution related state\n        this.pendingComponentCb = this.Component = null;\n        // transition related state\n        this.pendingRemovals = 0;\n        this.pendingRemovalCb = null;\n        // create a ref anchor\n        this.anchor = createAnchor('v-component');\n        replace(this.el, this.anchor);\n        // remove is attribute.\n        // this is removed during compilation, but because compilation is\n        // cached, when the component is used elsewhere this attribute\n        // will remain at link time.\n        this.el.removeAttribute('is');\n        // remove ref, same as above\n        if (this.descriptor.ref) {\n          this.el.removeAttribute('v-ref:' + hyphenate(this.descriptor.ref));\n        }\n        // if static, build right now.\n        if (this.literal) {\n          this.setComponent(this.expression);\n        }\n      } else {\n        'development' !== 'production' && warn('cannot mount component \"' + this.expression + '\" ' + 'on already mounted element: ' + this.el);\n      }\n    },\n\n    /**\n     * Public update, called by the watcher in the dynamic\n     * literal scenario, e.g. <component :is=\"view\">\n     */\n\n    update: function update(value) {\n      if (!this.literal) {\n        this.setComponent(value);\n      }\n    },\n\n    /**\n     * Switch dynamic components. May resolve the component\n     * asynchronously, and perform transition based on\n     * specified transition mode. Accepts a few additional\n     * arguments specifically for vue-router.\n     *\n     * The callback is called when the full transition is\n     * finished.\n     *\n     * @param {String} value\n     * @param {Function} [cb]\n     */\n\n    setComponent: function setComponent(value, cb) {\n      this.invalidatePending();\n      if (!value) {\n        // just remove current\n        this.unbuild(true);\n        this.remove(this.childVM, cb);\n        this.childVM = null;\n      } else {\n        var self = this;\n        this.resolveComponent(value, function () {\n          self.mountComponent(cb);\n        });\n      }\n    },\n\n    /**\n     * Resolve the component constructor to use when creating\n     * the child vm.\n     *\n     * @param {String|Function} value\n     * @param {Function} cb\n     */\n\n    resolveComponent: function resolveComponent(value, cb) {\n      var self = this;\n      this.pendingComponentCb = cancellable(function (Component) {\n        self.ComponentName = Component.options.name || (typeof value === 'string' ? value : null);\n        self.Component = Component;\n        cb();\n      });\n      this.vm._resolveComponent(value, this.pendingComponentCb);\n    },\n\n    /**\n     * Create a new instance using the current constructor and\n     * replace the existing instance. This method doesn't care\n     * whether the new component and the old one are actually\n     * the same.\n     *\n     * @param {Function} [cb]\n     */\n\n    mountComponent: function mountComponent(cb) {\n      // actual mount\n      this.unbuild(true);\n      var self = this;\n      var activateHooks = this.Component.options.activate;\n      var cached = this.getCached();\n      var newComponent = this.build();\n      if (activateHooks && !cached) {\n        this.waitingFor = newComponent;\n        callActivateHooks(activateHooks, newComponent, function () {\n          if (self.waitingFor !== newComponent) {\n            return;\n          }\n          self.waitingFor = null;\n          self.transition(newComponent, cb);\n        });\n      } else {\n        // update ref for kept-alive component\n        if (cached) {\n          newComponent._updateRef();\n        }\n        this.transition(newComponent, cb);\n      }\n    },\n\n    /**\n     * When the component changes or unbinds before an async\n     * constructor is resolved, we need to invalidate its\n     * pending callback.\n     */\n\n    invalidatePending: function invalidatePending() {\n      if (this.pendingComponentCb) {\n        this.pendingComponentCb.cancel();\n        this.pendingComponentCb = null;\n      }\n    },\n\n    /**\n     * Instantiate/insert a new child vm.\n     * If keep alive and has cached instance, insert that\n     * instance; otherwise build a new one and cache it.\n     *\n     * @param {Object} [extraOptions]\n     * @return {Vue} - the created instance\n     */\n\n    build: function build(extraOptions) {\n      var cached = this.getCached();\n      if (cached) {\n        return cached;\n      }\n      if (this.Component) {\n        // default options\n        var options = {\n          name: this.ComponentName,\n          el: cloneNode(this.el),\n          template: this.inlineTemplate,\n          // make sure to add the child with correct parent\n          // if this is a transcluded component, its parent\n          // should be the transclusion host.\n          parent: this._host || this.vm,\n          // if no inline-template, then the compiled\n          // linker can be cached for better performance.\n          _linkerCachable: !this.inlineTemplate,\n          _ref: this.descriptor.ref,\n          _asComponent: true,\n          _isRouterView: this._isRouterView,\n          // if this is a transcluded component, context\n          // will be the common parent vm of this instance\n          // and its host.\n          _context: this.vm,\n          // if this is inside an inline v-for, the scope\n          // will be the intermediate scope created for this\n          // repeat fragment. this is used for linking props\n          // and container directives.\n          _scope: this._scope,\n          // pass in the owner fragment of this component.\n          // this is necessary so that the fragment can keep\n          // track of its contained components in order to\n          // call attach/detach hooks for them.\n          _frag: this._frag\n        };\n        // extra options\n        // in 1.0.0 this is used by vue-router only\n        /* istanbul ignore if */\n        if (extraOptions) {\n          extend(options, extraOptions);\n        }\n        var child = new this.Component(options);\n        if (this.keepAlive) {\n          this.cache[this.Component.cid] = child;\n        }\n        /* istanbul ignore if */\n        if ('development' !== 'production' && this.el.hasAttribute('transition') && child._isFragment) {\n          warn('Transitions will not work on a fragment instance. ' + 'Template: ' + child.$options.template, child);\n        }\n        return child;\n      }\n    },\n\n    /**\n     * Try to get a cached instance of the current component.\n     *\n     * @return {Vue|undefined}\n     */\n\n    getCached: function getCached() {\n      return this.keepAlive && this.cache[this.Component.cid];\n    },\n\n    /**\n     * Teardown the current child, but defers cleanup so\n     * that we can separate the destroy and removal steps.\n     *\n     * @param {Boolean} defer\n     */\n\n    unbuild: function unbuild(defer) {\n      if (this.waitingFor) {\n        if (!this.keepAlive) {\n          this.waitingFor.$destroy();\n        }\n        this.waitingFor = null;\n      }\n      var child = this.childVM;\n      if (!child || this.keepAlive) {\n        if (child) {\n          // remove ref\n          child._inactive = true;\n          child._updateRef(true);\n        }\n        return;\n      }\n      // the sole purpose of `deferCleanup` is so that we can\n      // \"deactivate\" the vm right now and perform DOM removal\n      // later.\n      child.$destroy(false, defer);\n    },\n\n    /**\n     * Remove current destroyed child and manually do\n     * the cleanup after removal.\n     *\n     * @param {Function} cb\n     */\n\n    remove: function remove(child, cb) {\n      var keepAlive = this.keepAlive;\n      if (child) {\n        // we may have a component switch when a previous\n        // component is still being transitioned out.\n        // we want to trigger only one lastest insertion cb\n        // when the existing transition finishes. (#1119)\n        this.pendingRemovals++;\n        this.pendingRemovalCb = cb;\n        var self = this;\n        child.$remove(function () {\n          self.pendingRemovals--;\n          if (!keepAlive) child._cleanup();\n          if (!self.pendingRemovals && self.pendingRemovalCb) {\n            self.pendingRemovalCb();\n            self.pendingRemovalCb = null;\n          }\n        });\n      } else if (cb) {\n        cb();\n      }\n    },\n\n    /**\n     * Actually swap the components, depending on the\n     * transition mode. Defaults to simultaneous.\n     *\n     * @param {Vue} target\n     * @param {Function} [cb]\n     */\n\n    transition: function transition(target, cb) {\n      var self = this;\n      var current = this.childVM;\n      // for devtool inspection\n      if (current) current._inactive = true;\n      target._inactive = false;\n      this.childVM = target;\n      switch (self.params.transitionMode) {\n        case 'in-out':\n          target.$before(self.anchor, function () {\n            self.remove(current, cb);\n          });\n          break;\n        case 'out-in':\n          self.remove(current, function () {\n            target.$before(self.anchor, cb);\n          });\n          break;\n        default:\n          self.remove(current);\n          target.$before(self.anchor, cb);\n      }\n    },\n\n    /**\n     * Unbind.\n     */\n\n    unbind: function unbind() {\n      this.invalidatePending();\n      // Do not defer cleanup when unbinding\n      this.unbuild();\n      // destroy all keep-alive cached instances\n      if (this.cache) {\n        for (var key in this.cache) {\n          this.cache[key].$destroy();\n        }\n        this.cache = null;\n      }\n    }\n  };\n\n  /**\n   * Call activate hooks in order (asynchronous)\n   *\n   * @param {Array} hooks\n   * @param {Vue} vm\n   * @param {Function} cb\n   */\n\n  function callActivateHooks(hooks, vm, cb) {\n    var total = hooks.length;\n    var called = 0;\n    hooks[0].call(vm, next);\n    function next() {\n      if (++called >= total) {\n        cb();\n      } else {\n        hooks[called].call(vm, next);\n      }\n    }\n  }\n\n  var propBindingModes = config._propBindingModes;\n  var empty = {};\n\n  // regexes\n  var identRE$1 = /^[$_a-zA-Z]+[\\w$]*$/;\n  var settablePathRE = /^[A-Za-z_$][\\w$]*(\\.[A-Za-z_$][\\w$]*|\\[[^\\[\\]]+\\])*$/;\n\n  /**\n   * Compile props on a root element and return\n   * a props link function.\n   *\n   * @param {Element|DocumentFragment} el\n   * @param {Array} propOptions\n   * @param {Vue} vm\n   * @return {Function} propsLinkFn\n   */\n\n  function compileProps(el, propOptions, vm) {\n    var props = [];\n    var names = Object.keys(propOptions);\n    var i = names.length;\n    var options, name, attr, value, path, parsed, prop;\n    while (i--) {\n      name = names[i];\n      options = propOptions[name] || empty;\n\n      if ('development' !== 'production' && name === '$data') {\n        warn('Do not use $data as prop.', vm);\n        continue;\n      }\n\n      // props could contain dashes, which will be\n      // interpreted as minus calculations by the parser\n      // so we need to camelize the path here\n      path = camelize(name);\n      if (!identRE$1.test(path)) {\n        'development' !== 'production' && warn('Invalid prop key: \"' + name + '\". Prop keys ' + 'must be valid identifiers.', vm);\n        continue;\n      }\n\n      prop = {\n        name: name,\n        path: path,\n        options: options,\n        mode: propBindingModes.ONE_WAY,\n        raw: null\n      };\n\n      attr = hyphenate(name);\n      // first check dynamic version\n      if ((value = getBindAttr(el, attr)) === null) {\n        if ((value = getBindAttr(el, attr + '.sync')) !== null) {\n          prop.mode = propBindingModes.TWO_WAY;\n        } else if ((value = getBindAttr(el, attr + '.once')) !== null) {\n          prop.mode = propBindingModes.ONE_TIME;\n        }\n      }\n      if (value !== null) {\n        // has dynamic binding!\n        prop.raw = value;\n        parsed = parseDirective(value);\n        value = parsed.expression;\n        prop.filters = parsed.filters;\n        // check binding type\n        if (isLiteral(value) && !parsed.filters) {\n          // for expressions containing literal numbers and\n          // booleans, there's no need to setup a prop binding,\n          // so we can optimize them as a one-time set.\n          prop.optimizedLiteral = true;\n        } else {\n          prop.dynamic = true;\n          // check non-settable path for two-way bindings\n          if ('development' !== 'production' && prop.mode === propBindingModes.TWO_WAY && !settablePathRE.test(value)) {\n            prop.mode = propBindingModes.ONE_WAY;\n            warn('Cannot bind two-way prop with non-settable ' + 'parent path: ' + value, vm);\n          }\n        }\n        prop.parentPath = value;\n\n        // warn required two-way\n        if ('development' !== 'production' && options.twoWay && prop.mode !== propBindingModes.TWO_WAY) {\n          warn('Prop \"' + name + '\" expects a two-way binding type.', vm);\n        }\n      } else if ((value = getAttr(el, attr)) !== null) {\n        // has literal binding!\n        prop.raw = value;\n      } else if ('development' !== 'production') {\n        // check possible camelCase prop usage\n        var lowerCaseName = path.toLowerCase();\n        value = /[A-Z\\-]/.test(name) && (el.getAttribute(lowerCaseName) || el.getAttribute(':' + lowerCaseName) || el.getAttribute('v-bind:' + lowerCaseName) || el.getAttribute(':' + lowerCaseName + '.once') || el.getAttribute('v-bind:' + lowerCaseName + '.once') || el.getAttribute(':' + lowerCaseName + '.sync') || el.getAttribute('v-bind:' + lowerCaseName + '.sync'));\n        if (value) {\n          warn('Possible usage error for prop `' + lowerCaseName + '` - ' + 'did you mean `' + attr + '`? HTML is case-insensitive, remember to use ' + 'kebab-case for props in templates.', vm);\n        } else if (options.required) {\n          // warn missing required\n          warn('Missing required prop: ' + name, vm);\n        }\n      }\n      // push prop\n      props.push(prop);\n    }\n    return makePropsLinkFn(props);\n  }\n\n  /**\n   * Build a function that applies props to a vm.\n   *\n   * @param {Array} props\n   * @return {Function} propsLinkFn\n   */\n\n  function makePropsLinkFn(props) {\n    return function propsLinkFn(vm, scope) {\n      // store resolved props info\n      vm._props = {};\n      var i = props.length;\n      var prop, path, options, value, raw;\n      while (i--) {\n        prop = props[i];\n        raw = prop.raw;\n        path = prop.path;\n        options = prop.options;\n        vm._props[path] = prop;\n        if (raw === null) {\n          // initialize absent prop\n          initProp(vm, prop, undefined);\n        } else if (prop.dynamic) {\n          // dynamic prop\n          if (prop.mode === propBindingModes.ONE_TIME) {\n            // one time binding\n            value = (scope || vm._context || vm).$get(prop.parentPath);\n            initProp(vm, prop, value);\n          } else {\n            if (vm._context) {\n              // dynamic binding\n              vm._bindDir({\n                name: 'prop',\n                def: propDef,\n                prop: prop\n              }, null, null, scope); // el, host, scope\n            } else {\n                // root instance\n                initProp(vm, prop, vm.$get(prop.parentPath));\n              }\n          }\n        } else if (prop.optimizedLiteral) {\n          // optimized literal, cast it and just set once\n          var stripped = stripQuotes(raw);\n          value = stripped === raw ? toBoolean(toNumber(raw)) : stripped;\n          initProp(vm, prop, value);\n        } else {\n          // string literal, but we need to cater for\n          // Boolean props with no value, or with same\n          // literal value (e.g. disabled=\"disabled\")\n          // see https://github.com/vuejs/vue-loader/issues/182\n          value = options.type === Boolean && (raw === '' || raw === hyphenate(prop.name)) ? true : raw;\n          initProp(vm, prop, value);\n        }\n      }\n    };\n  }\n\n  /**\n   * Process a prop with a rawValue, applying necessary coersions,\n   * default values & assertions and call the given callback with\n   * processed value.\n   *\n   * @param {Vue} vm\n   * @param {Object} prop\n   * @param {*} rawValue\n   * @param {Function} fn\n   */\n\n  function processPropValue(vm, prop, rawValue, fn) {\n    var isSimple = prop.dynamic && isSimplePath(prop.parentPath);\n    var value = rawValue;\n    if (value === undefined) {\n      value = getPropDefaultValue(vm, prop);\n    }\n    value = coerceProp(prop, value);\n    var coerced = value !== rawValue;\n    if (!assertProp(prop, value, vm)) {\n      value = undefined;\n    }\n    if (isSimple && !coerced) {\n      withoutConversion(function () {\n        fn(value);\n      });\n    } else {\n      fn(value);\n    }\n  }\n\n  /**\n   * Set a prop's initial value on a vm and its data object.\n   *\n   * @param {Vue} vm\n   * @param {Object} prop\n   * @param {*} value\n   */\n\n  function initProp(vm, prop, value) {\n    processPropValue(vm, prop, value, function (value) {\n      defineReactive(vm, prop.path, value);\n    });\n  }\n\n  /**\n   * Update a prop's value on a vm.\n   *\n   * @param {Vue} vm\n   * @param {Object} prop\n   * @param {*} value\n   */\n\n  function updateProp(vm, prop, value) {\n    processPropValue(vm, prop, value, function (value) {\n      vm[prop.path] = value;\n    });\n  }\n\n  /**\n   * Get the default value of a prop.\n   *\n   * @param {Vue} vm\n   * @param {Object} prop\n   * @return {*}\n   */\n\n  function getPropDefaultValue(vm, prop) {\n    // no default, return undefined\n    var options = prop.options;\n    if (!hasOwn(options, 'default')) {\n      // absent boolean value defaults to false\n      return options.type === Boolean ? false : undefined;\n    }\n    var def = options['default'];\n    // warn against non-factory defaults for Object & Array\n    if (isObject(def)) {\n      'development' !== 'production' && warn('Invalid default value for prop \"' + prop.name + '\": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm);\n    }\n    // call factory function for non-Function types\n    return typeof def === 'function' && options.type !== Function ? def.call(vm) : def;\n  }\n\n  /**\n   * Assert whether a prop is valid.\n   *\n   * @param {Object} prop\n   * @param {*} value\n   * @param {Vue} vm\n   */\n\n  function assertProp(prop, value, vm) {\n    if (!prop.options.required && ( // non-required\n    prop.raw === null || // abscent\n    value == null) // null or undefined\n    ) {\n        return true;\n      }\n    var options = prop.options;\n    var type = options.type;\n    var valid = !type;\n    var expectedTypes = [];\n    if (type) {\n      if (!isArray(type)) {\n        type = [type];\n      }\n      for (var i = 0; i < type.length && !valid; i++) {\n        var assertedType = assertType(value, type[i]);\n        expectedTypes.push(assertedType.expectedType);\n        valid = assertedType.valid;\n      }\n    }\n    if (!valid) {\n      if ('development' !== 'production') {\n        warn('Invalid prop: type check failed for prop \"' + prop.name + '\".' + ' Expected ' + expectedTypes.map(formatType).join(', ') + ', got ' + formatValue(value) + '.', vm);\n      }\n      return false;\n    }\n    var validator = options.validator;\n    if (validator) {\n      if (!validator(value)) {\n        'development' !== 'production' && warn('Invalid prop: custom validator check failed for prop \"' + prop.name + '\".', vm);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Force parsing value with coerce option.\n   *\n   * @param {*} value\n   * @param {Object} options\n   * @return {*}\n   */\n\n  function coerceProp(prop, value) {\n    var coerce = prop.options.coerce;\n    if (!coerce) {\n      return value;\n    }\n    // coerce is a function\n    return coerce(value);\n  }\n\n  /**\n   * Assert the type of a value\n   *\n   * @param {*} value\n   * @param {Function} type\n   * @return {Object}\n   */\n\n  function assertType(value, type) {\n    var valid;\n    var expectedType;\n    if (type === String) {\n      expectedType = 'string';\n      valid = typeof value === expectedType;\n    } else if (type === Number) {\n      expectedType = 'number';\n      valid = typeof value === expectedType;\n    } else if (type === Boolean) {\n      expectedType = 'boolean';\n      valid = typeof value === expectedType;\n    } else if (type === Function) {\n      expectedType = 'function';\n      valid = typeof value === expectedType;\n    } else if (type === Object) {\n      expectedType = 'object';\n      valid = isPlainObject(value);\n    } else if (type === Array) {\n      expectedType = 'array';\n      valid = isArray(value);\n    } else {\n      valid = value instanceof type;\n    }\n    return {\n      valid: valid,\n      expectedType: expectedType\n    };\n  }\n\n  /**\n   * Format type for output\n   *\n   * @param {String} type\n   * @return {String}\n   */\n\n  function formatType(type) {\n    return type ? type.charAt(0).toUpperCase() + type.slice(1) : 'custom type';\n  }\n\n  /**\n   * Format value\n   *\n   * @param {*} value\n   * @return {String}\n   */\n\n  function formatValue(val) {\n    return Object.prototype.toString.call(val).slice(8, -1);\n  }\n\n  var bindingModes = config._propBindingModes;\n\n  var propDef = {\n\n    bind: function bind() {\n      var child = this.vm;\n      var parent = child._context;\n      // passed in from compiler directly\n      var prop = this.descriptor.prop;\n      var childKey = prop.path;\n      var parentKey = prop.parentPath;\n      var twoWay = prop.mode === bindingModes.TWO_WAY;\n\n      var parentWatcher = this.parentWatcher = new Watcher(parent, parentKey, function (val) {\n        updateProp(child, prop, val);\n      }, {\n        twoWay: twoWay,\n        filters: prop.filters,\n        // important: props need to be observed on the\n        // v-for scope if present\n        scope: this._scope\n      });\n\n      // set the child initial value.\n      initProp(child, prop, parentWatcher.value);\n\n      // setup two-way binding\n      if (twoWay) {\n        // important: defer the child watcher creation until\n        // the created hook (after data observation)\n        var self = this;\n        child.$once('pre-hook:created', function () {\n          self.childWatcher = new Watcher(child, childKey, function (val) {\n            parentWatcher.set(val);\n          }, {\n            // ensure sync upward before parent sync down.\n            // this is necessary in cases e.g. the child\n            // mutates a prop array, then replaces it. (#1683)\n            sync: true\n          });\n        });\n      }\n    },\n\n    unbind: function unbind() {\n      this.parentWatcher.teardown();\n      if (this.childWatcher) {\n        this.childWatcher.teardown();\n      }\n    }\n  };\n\n  var queue$1 = [];\n  var queued = false;\n\n  /**\n   * Push a job into the queue.\n   *\n   * @param {Function} job\n   */\n\n  function pushJob(job) {\n    queue$1.push(job);\n    if (!queued) {\n      queued = true;\n      nextTick(flush);\n    }\n  }\n\n  /**\n   * Flush the queue, and do one forced reflow before\n   * triggering transitions.\n   */\n\n  function flush() {\n    // Force layout\n    var f = document.documentElement.offsetHeight;\n    for (var i = 0; i < queue$1.length; i++) {\n      queue$1[i]();\n    }\n    queue$1 = [];\n    queued = false;\n    // dummy return, so js linters don't complain about\n    // unused variable f\n    return f;\n  }\n\n  var TYPE_TRANSITION = 'transition';\n  var TYPE_ANIMATION = 'animation';\n  var transDurationProp = transitionProp + 'Duration';\n  var animDurationProp = animationProp + 'Duration';\n\n  /**\n   * If a just-entered element is applied the\n   * leave class while its enter transition hasn't started yet,\n   * and the transitioned property has the same value for both\n   * enter/leave, then the leave transition will be skipped and\n   * the transitionend event never fires. This function ensures\n   * its callback to be called after a transition has started\n   * by waiting for double raf.\n   *\n   * It falls back to setTimeout on devices that support CSS\n   * transitions but not raf (e.g. Android 4.2 browser) - since\n   * these environments are usually slow, we are giving it a\n   * relatively large timeout.\n   */\n\n  var raf = inBrowser && window.requestAnimationFrame;\n  var waitForTransitionStart = raf\n  /* istanbul ignore next */\n  ? function (fn) {\n    raf(function () {\n      raf(fn);\n    });\n  } : function (fn) {\n    setTimeout(fn, 50);\n  };\n\n  /**\n   * A Transition object that encapsulates the state and logic\n   * of the transition.\n   *\n   * @param {Element} el\n   * @param {String} id\n   * @param {Object} hooks\n   * @param {Vue} vm\n   */\n  function Transition(el, id, hooks, vm) {\n    this.id = id;\n    this.el = el;\n    this.enterClass = hooks && hooks.enterClass || id + '-enter';\n    this.leaveClass = hooks && hooks.leaveClass || id + '-leave';\n    this.hooks = hooks;\n    this.vm = vm;\n    // async state\n    this.pendingCssEvent = this.pendingCssCb = this.cancel = this.pendingJsCb = this.op = this.cb = null;\n    this.justEntered = false;\n    this.entered = this.left = false;\n    this.typeCache = {};\n    // check css transition type\n    this.type = hooks && hooks.type;\n    /* istanbul ignore if */\n    if ('development' !== 'production') {\n      if (this.type && this.type !== TYPE_TRANSITION && this.type !== TYPE_ANIMATION) {\n        warn('invalid CSS transition type for transition=\"' + this.id + '\": ' + this.type, vm);\n      }\n    }\n    // bind\n    var self = this;['enterNextTick', 'enterDone', 'leaveNextTick', 'leaveDone'].forEach(function (m) {\n      self[m] = bind(self[m], self);\n    });\n  }\n\n  var p$1 = Transition.prototype;\n\n  /**\n   * Start an entering transition.\n   *\n   * 1. enter transition triggered\n   * 2. call beforeEnter hook\n   * 3. add enter class\n   * 4. insert/show element\n   * 5. call enter hook (with possible explicit js callback)\n   * 6. reflow\n   * 7. based on transition type:\n   *    - transition:\n   *        remove class now, wait for transitionend,\n   *        then done if there's no explicit js callback.\n   *    - animation:\n   *        wait for animationend, remove class,\n   *        then done if there's no explicit js callback.\n   *    - no css transition:\n   *        done now if there's no explicit js callback.\n   * 8. wait for either done or js callback, then call\n   *    afterEnter hook.\n   *\n   * @param {Function} op - insert/show the element\n   * @param {Function} [cb]\n   */\n\n  p$1.enter = function (op, cb) {\n    this.cancelPending();\n    this.callHook('beforeEnter');\n    this.cb = cb;\n    addClass(this.el, this.enterClass);\n    op();\n    this.entered = false;\n    this.callHookWithCb('enter');\n    if (this.entered) {\n      return; // user called done synchronously.\n    }\n    this.cancel = this.hooks && this.hooks.enterCancelled;\n    pushJob(this.enterNextTick);\n  };\n\n  /**\n   * The \"nextTick\" phase of an entering transition, which is\n   * to be pushed into a queue and executed after a reflow so\n   * that removing the class can trigger a CSS transition.\n   */\n\n  p$1.enterNextTick = function () {\n    var _this = this;\n\n    // prevent transition skipping\n    this.justEntered = true;\n    waitForTransitionStart(function () {\n      _this.justEntered = false;\n    });\n    var enterDone = this.enterDone;\n    var type = this.getCssTransitionType(this.enterClass);\n    if (!this.pendingJsCb) {\n      if (type === TYPE_TRANSITION) {\n        // trigger transition by removing enter class now\n        removeClass(this.el, this.enterClass);\n        this.setupCssCb(transitionEndEvent, enterDone);\n      } else if (type === TYPE_ANIMATION) {\n        this.setupCssCb(animationEndEvent, enterDone);\n      } else {\n        enterDone();\n      }\n    } else if (type === TYPE_TRANSITION) {\n      removeClass(this.el, this.enterClass);\n    }\n  };\n\n  /**\n   * The \"cleanup\" phase of an entering transition.\n   */\n\n  p$1.enterDone = function () {\n    this.entered = true;\n    this.cancel = this.pendingJsCb = null;\n    removeClass(this.el, this.enterClass);\n    this.callHook('afterEnter');\n    if (this.cb) this.cb();\n  };\n\n  /**\n   * Start a leaving transition.\n   *\n   * 1. leave transition triggered.\n   * 2. call beforeLeave hook\n   * 3. add leave class (trigger css transition)\n   * 4. call leave hook (with possible explicit js callback)\n   * 5. reflow if no explicit js callback is provided\n   * 6. based on transition type:\n   *    - transition or animation:\n   *        wait for end event, remove class, then done if\n   *        there's no explicit js callback.\n   *    - no css transition:\n   *        done if there's no explicit js callback.\n   * 7. wait for either done or js callback, then call\n   *    afterLeave hook.\n   *\n   * @param {Function} op - remove/hide the element\n   * @param {Function} [cb]\n   */\n\n  p$1.leave = function (op, cb) {\n    this.cancelPending();\n    this.callHook('beforeLeave');\n    this.op = op;\n    this.cb = cb;\n    addClass(this.el, this.leaveClass);\n    this.left = false;\n    this.callHookWithCb('leave');\n    if (this.left) {\n      return; // user called done synchronously.\n    }\n    this.cancel = this.hooks && this.hooks.leaveCancelled;\n    // only need to handle leaveDone if\n    // 1. the transition is already done (synchronously called\n    //    by the user, which causes this.op set to null)\n    // 2. there's no explicit js callback\n    if (this.op && !this.pendingJsCb) {\n      // if a CSS transition leaves immediately after enter,\n      // the transitionend event never fires. therefore we\n      // detect such cases and end the leave immediately.\n      if (this.justEntered) {\n        this.leaveDone();\n      } else {\n        pushJob(this.leaveNextTick);\n      }\n    }\n  };\n\n  /**\n   * The \"nextTick\" phase of a leaving transition.\n   */\n\n  p$1.leaveNextTick = function () {\n    var type = this.getCssTransitionType(this.leaveClass);\n    if (type) {\n      var event = type === TYPE_TRANSITION ? transitionEndEvent : animationEndEvent;\n      this.setupCssCb(event, this.leaveDone);\n    } else {\n      this.leaveDone();\n    }\n  };\n\n  /**\n   * The \"cleanup\" phase of a leaving transition.\n   */\n\n  p$1.leaveDone = function () {\n    this.left = true;\n    this.cancel = this.pendingJsCb = null;\n    this.op();\n    removeClass(this.el, this.leaveClass);\n    this.callHook('afterLeave');\n    if (this.cb) this.cb();\n    this.op = null;\n  };\n\n  /**\n   * Cancel any pending callbacks from a previously running\n   * but not finished transition.\n   */\n\n  p$1.cancelPending = function () {\n    this.op = this.cb = null;\n    var hasPending = false;\n    if (this.pendingCssCb) {\n      hasPending = true;\n      off(this.el, this.pendingCssEvent, this.pendingCssCb);\n      this.pendingCssEvent = this.pendingCssCb = null;\n    }\n    if (this.pendingJsCb) {\n      hasPending = true;\n      this.pendingJsCb.cancel();\n      this.pendingJsCb = null;\n    }\n    if (hasPending) {\n      removeClass(this.el, this.enterClass);\n      removeClass(this.el, this.leaveClass);\n    }\n    if (this.cancel) {\n      this.cancel.call(this.vm, this.el);\n      this.cancel = null;\n    }\n  };\n\n  /**\n   * Call a user-provided synchronous hook function.\n   *\n   * @param {String} type\n   */\n\n  p$1.callHook = function (type) {\n    if (this.hooks && this.hooks[type]) {\n      this.hooks[type].call(this.vm, this.el);\n    }\n  };\n\n  /**\n   * Call a user-provided, potentially-async hook function.\n   * We check for the length of arguments to see if the hook\n   * expects a `done` callback. If true, the transition's end\n   * will be determined by when the user calls that callback;\n   * otherwise, the end is determined by the CSS transition or\n   * animation.\n   *\n   * @param {String} type\n   */\n\n  p$1.callHookWithCb = function (type) {\n    var hook = this.hooks && this.hooks[type];\n    if (hook) {\n      if (hook.length > 1) {\n        this.pendingJsCb = cancellable(this[type + 'Done']);\n      }\n      hook.call(this.vm, this.el, this.pendingJsCb);\n    }\n  };\n\n  /**\n   * Get an element's transition type based on the\n   * calculated styles.\n   *\n   * @param {String} className\n   * @return {Number}\n   */\n\n  p$1.getCssTransitionType = function (className) {\n    /* istanbul ignore if */\n    if (!transitionEndEvent ||\n    // skip CSS transitions if page is not visible -\n    // this solves the issue of transitionend events not\n    // firing until the page is visible again.\n    // pageVisibility API is supported in IE10+, same as\n    // CSS transitions.\n    document.hidden ||\n    // explicit js-only transition\n    this.hooks && this.hooks.css === false ||\n    // element is hidden\n    isHidden(this.el)) {\n      return;\n    }\n    var type = this.type || this.typeCache[className];\n    if (type) return type;\n    var inlineStyles = this.el.style;\n    var computedStyles = window.getComputedStyle(this.el);\n    var transDuration = inlineStyles[transDurationProp] || computedStyles[transDurationProp];\n    if (transDuration && transDuration !== '0s') {\n      type = TYPE_TRANSITION;\n    } else {\n      var animDuration = inlineStyles[animDurationProp] || computedStyles[animDurationProp];\n      if (animDuration && animDuration !== '0s') {\n        type = TYPE_ANIMATION;\n      }\n    }\n    if (type) {\n      this.typeCache[className] = type;\n    }\n    return type;\n  };\n\n  /**\n   * Setup a CSS transitionend/animationend callback.\n   *\n   * @param {String} event\n   * @param {Function} cb\n   */\n\n  p$1.setupCssCb = function (event, cb) {\n    this.pendingCssEvent = event;\n    var self = this;\n    var el = this.el;\n    var onEnd = this.pendingCssCb = function (e) {\n      if (e.target === el) {\n        off(el, event, onEnd);\n        self.pendingCssEvent = self.pendingCssCb = null;\n        if (!self.pendingJsCb && cb) {\n          cb();\n        }\n      }\n    };\n    on(el, event, onEnd);\n  };\n\n  /**\n   * Check if an element is hidden - in that case we can just\n   * skip the transition alltogether.\n   *\n   * @param {Element} el\n   * @return {Boolean}\n   */\n\n  function isHidden(el) {\n    if (/svg$/.test(el.namespaceURI)) {\n      // SVG elements do not have offset(Width|Height)\n      // so we need to check the client rect\n      var rect = el.getBoundingClientRect();\n      return !(rect.width || rect.height);\n    } else {\n      return !(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n    }\n  }\n\n  var transition$1 = {\n\n    priority: TRANSITION,\n\n    update: function update(id, oldId) {\n      var el = this.el;\n      // resolve on owner vm\n      var hooks = resolveAsset(this.vm.$options, 'transitions', id);\n      id = id || 'v';\n      el.__v_trans = new Transition(el, id, hooks, this.vm);\n      if (oldId) {\n        removeClass(el, oldId + '-transition');\n      }\n      addClass(el, id + '-transition');\n    }\n  };\n\n  var internalDirectives = {\n    style: style,\n    'class': vClass,\n    component: component,\n    prop: propDef,\n    transition: transition$1\n  };\n\n  // special binding prefixes\n  var bindRE = /^v-bind:|^:/;\n  var onRE = /^v-on:|^@/;\n  var dirAttrRE = /^v-([^:]+)(?:$|:(.*)$)/;\n  var modifierRE = /\\.[^\\.]+/g;\n  var transitionRE = /^(v-bind:|:)?transition$/;\n\n  // default directive priority\n  var DEFAULT_PRIORITY = 1000;\n  var DEFAULT_TERMINAL_PRIORITY = 2000;\n\n  /**\n   * Compile a template and return a reusable composite link\n   * function, which recursively contains more link functions\n   * inside. This top level compile function would normally\n   * be called on instance root nodes, but can also be used\n   * for partial compilation if the partial argument is true.\n   *\n   * The returned composite link function, when called, will\n   * return an unlink function that tearsdown all directives\n   * created during the linking phase.\n   *\n   * @param {Element|DocumentFragment} el\n   * @param {Object} options\n   * @param {Boolean} partial\n   * @return {Function}\n   */\n\n  function compile(el, options, partial) {\n    // link function for the node itself.\n    var nodeLinkFn = partial || !options._asComponent ? compileNode(el, options) : null;\n    // link function for the childNodes\n    var childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && el.tagName !== 'SCRIPT' && el.hasChildNodes() ? compileNodeList(el.childNodes, options) : null;\n\n    /**\n     * A composite linker function to be called on a already\n     * compiled piece of DOM, which instantiates all directive\n     * instances.\n     *\n     * @param {Vue} vm\n     * @param {Element|DocumentFragment} el\n     * @param {Vue} [host] - host vm of transcluded content\n     * @param {Object} [scope] - v-for scope\n     * @param {Fragment} [frag] - link context fragment\n     * @return {Function|undefined}\n     */\n\n    return function compositeLinkFn(vm, el, host, scope, frag) {\n      // cache childNodes before linking parent, fix #657\n      var childNodes = toArray(el.childNodes);\n      // link\n      var dirs = linkAndCapture(function compositeLinkCapturer() {\n        if (nodeLinkFn) nodeLinkFn(vm, el, host, scope, frag);\n        if (childLinkFn) childLinkFn(vm, childNodes, host, scope, frag);\n      }, vm);\n      return makeUnlinkFn(vm, dirs);\n    };\n  }\n\n  /**\n   * Apply a linker to a vm/element pair and capture the\n   * directives created during the process.\n   *\n   * @param {Function} linker\n   * @param {Vue} vm\n   */\n\n  function linkAndCapture(linker, vm) {\n    /* istanbul ignore if */\n    if ('development' === 'production') {}\n    var originalDirCount = vm._directives.length;\n    linker();\n    var dirs = vm._directives.slice(originalDirCount);\n    dirs.sort(directiveComparator);\n    for (var i = 0, l = dirs.length; i < l; i++) {\n      dirs[i]._bind();\n    }\n    return dirs;\n  }\n\n  /**\n   * Directive priority sort comparator\n   *\n   * @param {Object} a\n   * @param {Object} b\n   */\n\n  function directiveComparator(a, b) {\n    a = a.descriptor.def.priority || DEFAULT_PRIORITY;\n    b = b.descriptor.def.priority || DEFAULT_PRIORITY;\n    return a > b ? -1 : a === b ? 0 : 1;\n  }\n\n  /**\n   * Linker functions return an unlink function that\n   * tearsdown all directives instances generated during\n   * the process.\n   *\n   * We create unlink functions with only the necessary\n   * information to avoid retaining additional closures.\n   *\n   * @param {Vue} vm\n   * @param {Array} dirs\n   * @param {Vue} [context]\n   * @param {Array} [contextDirs]\n   * @return {Function}\n   */\n\n  function makeUnlinkFn(vm, dirs, context, contextDirs) {\n    function unlink(destroying) {\n      teardownDirs(vm, dirs, destroying);\n      if (context && contextDirs) {\n        teardownDirs(context, contextDirs);\n      }\n    }\n    // expose linked directives\n    unlink.dirs = dirs;\n    return unlink;\n  }\n\n  /**\n   * Teardown partial linked directives.\n   *\n   * @param {Vue} vm\n   * @param {Array} dirs\n   * @param {Boolean} destroying\n   */\n\n  function teardownDirs(vm, dirs, destroying) {\n    var i = dirs.length;\n    while (i--) {\n      dirs[i]._teardown();\n      if ('development' !== 'production' && !destroying) {\n        vm._directives.$remove(dirs[i]);\n      }\n    }\n  }\n\n  /**\n   * Compile link props on an instance.\n   *\n   * @param {Vue} vm\n   * @param {Element} el\n   * @param {Object} props\n   * @param {Object} [scope]\n   * @return {Function}\n   */\n\n  function compileAndLinkProps(vm, el, props, scope) {\n    var propsLinkFn = compileProps(el, props, vm);\n    var propDirs = linkAndCapture(function () {\n      propsLinkFn(vm, scope);\n    }, vm);\n    return makeUnlinkFn(vm, propDirs);\n  }\n\n  /**\n   * Compile the root element of an instance.\n   *\n   * 1. attrs on context container (context scope)\n   * 2. attrs on the component template root node, if\n   *    replace:true (child scope)\n   *\n   * If this is a fragment instance, we only need to compile 1.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @param {Object} contextOptions\n   * @return {Function}\n   */\n\n  function compileRoot(el, options, contextOptions) {\n    var containerAttrs = options._containerAttrs;\n    var replacerAttrs = options._replacerAttrs;\n    var contextLinkFn, replacerLinkFn;\n\n    // only need to compile other attributes for\n    // non-fragment instances\n    if (el.nodeType !== 11) {\n      // for components, container and replacer need to be\n      // compiled separately and linked in different scopes.\n      if (options._asComponent) {\n        // 2. container attributes\n        if (containerAttrs && contextOptions) {\n          contextLinkFn = compileDirectives(containerAttrs, contextOptions);\n        }\n        if (replacerAttrs) {\n          // 3. replacer attributes\n          replacerLinkFn = compileDirectives(replacerAttrs, options);\n        }\n      } else {\n        // non-component, just compile as a normal element.\n        replacerLinkFn = compileDirectives(el.attributes, options);\n      }\n    } else if ('development' !== 'production' && containerAttrs) {\n      // warn container directives for fragment instances\n      var names = containerAttrs.filter(function (attr) {\n        // allow vue-loader/vueify scoped css attributes\n        return attr.name.indexOf('_v-') < 0 &&\n        // allow event listeners\n        !onRE.test(attr.name) &&\n        // allow slots\n        attr.name !== 'slot';\n      }).map(function (attr) {\n        return '\"' + attr.name + '\"';\n      });\n      if (names.length) {\n        var plural = names.length > 1;\n        warn('Attribute' + (plural ? 's ' : ' ') + names.join(', ') + (plural ? ' are' : ' is') + ' ignored on component ' + '<' + options.el.tagName.toLowerCase() + '> because ' + 'the component is a fragment instance: ' + 'http://vuejs.org/guide/components.html#Fragment_Instance');\n      }\n    }\n\n    options._containerAttrs = options._replacerAttrs = null;\n    return function rootLinkFn(vm, el, scope) {\n      // link context scope dirs\n      var context = vm._context;\n      var contextDirs;\n      if (context && contextLinkFn) {\n        contextDirs = linkAndCapture(function () {\n          contextLinkFn(context, el, null, scope);\n        }, context);\n      }\n\n      // link self\n      var selfDirs = linkAndCapture(function () {\n        if (replacerLinkFn) replacerLinkFn(vm, el);\n      }, vm);\n\n      // return the unlink function that tearsdown context\n      // container directives.\n      return makeUnlinkFn(vm, selfDirs, context, contextDirs);\n    };\n  }\n\n  /**\n   * Compile a node and return a nodeLinkFn based on the\n   * node type.\n   *\n   * @param {Node} node\n   * @param {Object} options\n   * @return {Function|null}\n   */\n\n  function compileNode(node, options) {\n    var type = node.nodeType;\n    if (type === 1 && node.tagName !== 'SCRIPT') {\n      return compileElement(node, options);\n    } else if (type === 3 && node.data.trim()) {\n      return compileTextNode(node, options);\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Compile an element and return a nodeLinkFn.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @return {Function|null}\n   */\n\n  function compileElement(el, options) {\n    // preprocess textareas.\n    // textarea treats its text content as the initial value.\n    // just bind it as an attr directive for value.\n    if (el.tagName === 'TEXTAREA') {\n      var tokens = parseText(el.value);\n      if (tokens) {\n        el.setAttribute(':value', tokensToExp(tokens));\n        el.value = '';\n      }\n    }\n    var linkFn;\n    var hasAttrs = el.hasAttributes();\n    var attrs = hasAttrs && toArray(el.attributes);\n    // check terminal directives (for & if)\n    if (hasAttrs) {\n      linkFn = checkTerminalDirectives(el, attrs, options);\n    }\n    // check element directives\n    if (!linkFn) {\n      linkFn = checkElementDirectives(el, options);\n    }\n    // check component\n    if (!linkFn) {\n      linkFn = checkComponent(el, options);\n    }\n    // normal directives\n    if (!linkFn && hasAttrs) {\n      linkFn = compileDirectives(attrs, options);\n    }\n    return linkFn;\n  }\n\n  /**\n   * Compile a textNode and return a nodeLinkFn.\n   *\n   * @param {TextNode} node\n   * @param {Object} options\n   * @return {Function|null} textNodeLinkFn\n   */\n\n  function compileTextNode(node, options) {\n    // skip marked text nodes\n    if (node._skip) {\n      return removeText;\n    }\n\n    var tokens = parseText(node.wholeText);\n    if (!tokens) {\n      return null;\n    }\n\n    // mark adjacent text nodes as skipped,\n    // because we are using node.wholeText to compile\n    // all adjacent text nodes together. This fixes\n    // issues in IE where sometimes it splits up a single\n    // text node into multiple ones.\n    var next = node.nextSibling;\n    while (next && next.nodeType === 3) {\n      next._skip = true;\n      next = next.nextSibling;\n    }\n\n    var frag = document.createDocumentFragment();\n    var el, token;\n    for (var i = 0, l = tokens.length; i < l; i++) {\n      token = tokens[i];\n      el = token.tag ? processTextToken(token, options) : document.createTextNode(token.value);\n      frag.appendChild(el);\n    }\n    return makeTextNodeLinkFn(tokens, frag, options);\n  }\n\n  /**\n   * Linker for an skipped text node.\n   *\n   * @param {Vue} vm\n   * @param {Text} node\n   */\n\n  function removeText(vm, node) {\n    remove(node);\n  }\n\n  /**\n   * Process a single text token.\n   *\n   * @param {Object} token\n   * @param {Object} options\n   * @return {Node}\n   */\n\n  function processTextToken(token, options) {\n    var el;\n    if (token.oneTime) {\n      el = document.createTextNode(token.value);\n    } else {\n      if (token.html) {\n        el = document.createComment('v-html');\n        setTokenType('html');\n      } else {\n        // IE will clean up empty textNodes during\n        // frag.cloneNode(true), so we have to give it\n        // something here...\n        el = document.createTextNode(' ');\n        setTokenType('text');\n      }\n    }\n    function setTokenType(type) {\n      if (token.descriptor) return;\n      var parsed = parseDirective(token.value);\n      token.descriptor = {\n        name: type,\n        def: directives[type],\n        expression: parsed.expression,\n        filters: parsed.filters\n      };\n    }\n    return el;\n  }\n\n  /**\n   * Build a function that processes a textNode.\n   *\n   * @param {Array<Object>} tokens\n   * @param {DocumentFragment} frag\n   */\n\n  function makeTextNodeLinkFn(tokens, frag) {\n    return function textNodeLinkFn(vm, el, host, scope) {\n      var fragClone = frag.cloneNode(true);\n      var childNodes = toArray(fragClone.childNodes);\n      var token, value, node;\n      for (var i = 0, l = tokens.length; i < l; i++) {\n        token = tokens[i];\n        value = token.value;\n        if (token.tag) {\n          node = childNodes[i];\n          if (token.oneTime) {\n            value = (scope || vm).$eval(value);\n            if (token.html) {\n              replace(node, parseTemplate(value, true));\n            } else {\n              node.data = value;\n            }\n          } else {\n            vm._bindDir(token.descriptor, node, host, scope);\n          }\n        }\n      }\n      replace(el, fragClone);\n    };\n  }\n\n  /**\n   * Compile a node list and return a childLinkFn.\n   *\n   * @param {NodeList} nodeList\n   * @param {Object} options\n   * @return {Function|undefined}\n   */\n\n  function compileNodeList(nodeList, options) {\n    var linkFns = [];\n    var nodeLinkFn, childLinkFn, node;\n    for (var i = 0, l = nodeList.length; i < l; i++) {\n      node = nodeList[i];\n      nodeLinkFn = compileNode(node, options);\n      childLinkFn = !(nodeLinkFn && nodeLinkFn.terminal) && node.tagName !== 'SCRIPT' && node.hasChildNodes() ? compileNodeList(node.childNodes, options) : null;\n      linkFns.push(nodeLinkFn, childLinkFn);\n    }\n    return linkFns.length ? makeChildLinkFn(linkFns) : null;\n  }\n\n  /**\n   * Make a child link function for a node's childNodes.\n   *\n   * @param {Array<Function>} linkFns\n   * @return {Function} childLinkFn\n   */\n\n  function makeChildLinkFn(linkFns) {\n    return function childLinkFn(vm, nodes, host, scope, frag) {\n      var node, nodeLinkFn, childrenLinkFn;\n      for (var i = 0, n = 0, l = linkFns.length; i < l; n++) {\n        node = nodes[n];\n        nodeLinkFn = linkFns[i++];\n        childrenLinkFn = linkFns[i++];\n        // cache childNodes before linking parent, fix #657\n        var childNodes = toArray(node.childNodes);\n        if (nodeLinkFn) {\n          nodeLinkFn(vm, node, host, scope, frag);\n        }\n        if (childrenLinkFn) {\n          childrenLinkFn(vm, childNodes, host, scope, frag);\n        }\n      }\n    };\n  }\n\n  /**\n   * Check for element directives (custom elements that should\n   * be resovled as terminal directives).\n   *\n   * @param {Element} el\n   * @param {Object} options\n   */\n\n  function checkElementDirectives(el, options) {\n    var tag = el.tagName.toLowerCase();\n    if (commonTagRE.test(tag)) {\n      return;\n    }\n    var def = resolveAsset(options, 'elementDirectives', tag);\n    if (def) {\n      return makeTerminalNodeLinkFn(el, tag, '', options, def);\n    }\n  }\n\n  /**\n   * Check if an element is a component. If yes, return\n   * a component link function.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @return {Function|undefined}\n   */\n\n  function checkComponent(el, options) {\n    var component = checkComponentAttr(el, options);\n    if (component) {\n      var ref = findRef(el);\n      var descriptor = {\n        name: 'component',\n        ref: ref,\n        expression: component.id,\n        def: internalDirectives.component,\n        modifiers: {\n          literal: !component.dynamic\n        }\n      };\n      var componentLinkFn = function componentLinkFn(vm, el, host, scope, frag) {\n        if (ref) {\n          defineReactive((scope || vm).$refs, ref, null);\n        }\n        vm._bindDir(descriptor, el, host, scope, frag);\n      };\n      componentLinkFn.terminal = true;\n      return componentLinkFn;\n    }\n  }\n\n  /**\n   * Check an element for terminal directives in fixed order.\n   * If it finds one, return a terminal link function.\n   *\n   * @param {Element} el\n   * @param {Array} attrs\n   * @param {Object} options\n   * @return {Function} terminalLinkFn\n   */\n\n  function checkTerminalDirectives(el, attrs, options) {\n    // skip v-pre\n    if (getAttr(el, 'v-pre') !== null) {\n      return skip;\n    }\n    // skip v-else block, but only if following v-if\n    if (el.hasAttribute('v-else')) {\n      var prev = el.previousElementSibling;\n      if (prev && prev.hasAttribute('v-if')) {\n        return skip;\n      }\n    }\n\n    var attr, name, value, modifiers, matched, dirName, rawName, arg, def, termDef;\n    for (var i = 0, j = attrs.length; i < j; i++) {\n      attr = attrs[i];\n      modifiers = parseModifiers(attr.name);\n      name = attr.name.replace(modifierRE, '');\n      if (matched = name.match(dirAttrRE)) {\n        def = resolveAsset(options, 'directives', matched[1]);\n        if (def && def.terminal) {\n          if (!termDef || (def.priority || DEFAULT_TERMINAL_PRIORITY) > termDef.priority) {\n            termDef = def;\n            rawName = attr.name;\n            value = attr.value;\n            dirName = matched[1];\n            arg = matched[2];\n          }\n        }\n      }\n    }\n\n    if (termDef) {\n      return makeTerminalNodeLinkFn(el, dirName, value, options, termDef, rawName, arg, modifiers);\n    }\n  }\n\n  function skip() {}\n  skip.terminal = true;\n\n  /**\n   * Build a node link function for a terminal directive.\n   * A terminal link function terminates the current\n   * compilation recursion and handles compilation of the\n   * subtree in the directive.\n   *\n   * @param {Element} el\n   * @param {String} dirName\n   * @param {String} value\n   * @param {Object} options\n   * @param {Object} def\n   * @param {String} [rawName]\n   * @param {String} [arg]\n   * @param {Object} [modifiers]\n   * @return {Function} terminalLinkFn\n   */\n\n  function makeTerminalNodeLinkFn(el, dirName, value, options, def, rawName, arg, modifiers) {\n    var parsed = parseDirective(value);\n    var descriptor = {\n      name: dirName,\n      arg: arg,\n      expression: parsed.expression,\n      filters: parsed.filters,\n      raw: value,\n      attr: rawName,\n      modifiers: modifiers,\n      def: def\n    };\n    // check ref for v-for and router-view\n    if (dirName === 'for' || dirName === 'router-view') {\n      descriptor.ref = findRef(el);\n    }\n    var fn = function terminalNodeLinkFn(vm, el, host, scope, frag) {\n      if (descriptor.ref) {\n        defineReactive((scope || vm).$refs, descriptor.ref, null);\n      }\n      vm._bindDir(descriptor, el, host, scope, frag);\n    };\n    fn.terminal = true;\n    return fn;\n  }\n\n  /**\n   * Compile the directives on an element and return a linker.\n   *\n   * @param {Array|NamedNodeMap} attrs\n   * @param {Object} options\n   * @return {Function}\n   */\n\n  function compileDirectives(attrs, options) {\n    var i = attrs.length;\n    var dirs = [];\n    var attr, name, value, rawName, rawValue, dirName, arg, modifiers, dirDef, tokens, matched;\n    while (i--) {\n      attr = attrs[i];\n      name = rawName = attr.name;\n      value = rawValue = attr.value;\n      tokens = parseText(value);\n      // reset arg\n      arg = null;\n      // check modifiers\n      modifiers = parseModifiers(name);\n      name = name.replace(modifierRE, '');\n\n      // attribute interpolations\n      if (tokens) {\n        value = tokensToExp(tokens);\n        arg = name;\n        pushDir('bind', directives.bind, tokens);\n        // warn against mixing mustaches with v-bind\n        if ('development' !== 'production') {\n          if (name === 'class' && Array.prototype.some.call(attrs, function (attr) {\n            return attr.name === ':class' || attr.name === 'v-bind:class';\n          })) {\n            warn('class=\"' + rawValue + '\": Do not mix mustache interpolation ' + 'and v-bind for \"class\" on the same element. Use one or the other.', options);\n          }\n        }\n      } else\n\n        // special attribute: transition\n        if (transitionRE.test(name)) {\n          modifiers.literal = !bindRE.test(name);\n          pushDir('transition', internalDirectives.transition);\n        } else\n\n          // event handlers\n          if (onRE.test(name)) {\n            arg = name.replace(onRE, '');\n            pushDir('on', directives.on);\n          } else\n\n            // attribute bindings\n            if (bindRE.test(name)) {\n              dirName = name.replace(bindRE, '');\n              if (dirName === 'style' || dirName === 'class') {\n                pushDir(dirName, internalDirectives[dirName]);\n              } else {\n                arg = dirName;\n                pushDir('bind', directives.bind);\n              }\n            } else\n\n              // normal directives\n              if (matched = name.match(dirAttrRE)) {\n                dirName = matched[1];\n                arg = matched[2];\n\n                // skip v-else (when used with v-show)\n                if (dirName === 'else') {\n                  continue;\n                }\n\n                dirDef = resolveAsset(options, 'directives', dirName, true);\n                if (dirDef) {\n                  pushDir(dirName, dirDef);\n                }\n              }\n    }\n\n    /**\n     * Push a directive.\n     *\n     * @param {String} dirName\n     * @param {Object|Function} def\n     * @param {Array} [interpTokens]\n     */\n\n    function pushDir(dirName, def, interpTokens) {\n      var hasOneTimeToken = interpTokens && hasOneTime(interpTokens);\n      var parsed = !hasOneTimeToken && parseDirective(value);\n      dirs.push({\n        name: dirName,\n        attr: rawName,\n        raw: rawValue,\n        def: def,\n        arg: arg,\n        modifiers: modifiers,\n        // conversion from interpolation strings with one-time token\n        // to expression is differed until directive bind time so that we\n        // have access to the actual vm context for one-time bindings.\n        expression: parsed && parsed.expression,\n        filters: parsed && parsed.filters,\n        interp: interpTokens,\n        hasOneTime: hasOneTimeToken\n      });\n    }\n\n    if (dirs.length) {\n      return makeNodeLinkFn(dirs);\n    }\n  }\n\n  /**\n   * Parse modifiers from directive attribute name.\n   *\n   * @param {String} name\n   * @return {Object}\n   */\n\n  function parseModifiers(name) {\n    var res = Object.create(null);\n    var match = name.match(modifierRE);\n    if (match) {\n      var i = match.length;\n      while (i--) {\n        res[match[i].slice(1)] = true;\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Build a link function for all directives on a single node.\n   *\n   * @param {Array} directives\n   * @return {Function} directivesLinkFn\n   */\n\n  function makeNodeLinkFn(directives) {\n    return function nodeLinkFn(vm, el, host, scope, frag) {\n      // reverse apply because it's sorted low to high\n      var i = directives.length;\n      while (i--) {\n        vm._bindDir(directives[i], el, host, scope, frag);\n      }\n    };\n  }\n\n  /**\n   * Check if an interpolation string contains one-time tokens.\n   *\n   * @param {Array} tokens\n   * @return {Boolean}\n   */\n\n  function hasOneTime(tokens) {\n    var i = tokens.length;\n    while (i--) {\n      if (tokens[i].oneTime) return true;\n    }\n  }\n\n  var specialCharRE = /[^\\w\\-:\\.]/;\n\n  /**\n   * Process an element or a DocumentFragment based on a\n   * instance option object. This allows us to transclude\n   * a template node/fragment before the instance is created,\n   * so the processed fragment can then be cloned and reused\n   * in v-for.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @return {Element|DocumentFragment}\n   */\n\n  function transclude(el, options) {\n    // extract container attributes to pass them down\n    // to compiler, because they need to be compiled in\n    // parent scope. we are mutating the options object here\n    // assuming the same object will be used for compile\n    // right after this.\n    if (options) {\n      options._containerAttrs = extractAttrs(el);\n    }\n    // for template tags, what we want is its content as\n    // a documentFragment (for fragment instances)\n    if (isTemplate(el)) {\n      el = parseTemplate(el);\n    }\n    if (options) {\n      if (options._asComponent && !options.template) {\n        options.template = '<slot></slot>';\n      }\n      if (options.template) {\n        options._content = extractContent(el);\n        el = transcludeTemplate(el, options);\n      }\n    }\n    if (isFragment(el)) {\n      // anchors for fragment instance\n      // passing in `persist: true` to avoid them being\n      // discarded by IE during template cloning\n      prepend(createAnchor('v-start', true), el);\n      el.appendChild(createAnchor('v-end', true));\n    }\n    return el;\n  }\n\n  /**\n   * Process the template option.\n   * If the replace option is true this will swap the $el.\n   *\n   * @param {Element} el\n   * @param {Object} options\n   * @return {Element|DocumentFragment}\n   */\n\n  function transcludeTemplate(el, options) {\n    var template = options.template;\n    var frag = parseTemplate(template, true);\n    if (frag) {\n      var replacer = frag.firstChild;\n      var tag = replacer.tagName && replacer.tagName.toLowerCase();\n      if (options.replace) {\n        /* istanbul ignore if */\n        if (el === document.body) {\n          'development' !== 'production' && warn('You are mounting an instance with a template to ' + '<body>. This will replace <body> entirely. You ' + 'should probably use `replace: false` here.');\n        }\n        // there are many cases where the instance must\n        // become a fragment instance: basically anything that\n        // can create more than 1 root nodes.\n        if (\n        // multi-children template\n        frag.childNodes.length > 1 ||\n        // non-element template\n        replacer.nodeType !== 1 ||\n        // single nested component\n        tag === 'component' || resolveAsset(options, 'components', tag) || hasBindAttr(replacer, 'is') ||\n        // element directive\n        resolveAsset(options, 'elementDirectives', tag) ||\n        // for block\n        replacer.hasAttribute('v-for') ||\n        // if block\n        replacer.hasAttribute('v-if')) {\n          return frag;\n        } else {\n          options._replacerAttrs = extractAttrs(replacer);\n          mergeAttrs(el, replacer);\n          return replacer;\n        }\n      } else {\n        el.appendChild(frag);\n        return el;\n      }\n    } else {\n      'development' !== 'production' && warn('Invalid template option: ' + template);\n    }\n  }\n\n  /**\n   * Helper to extract a component container's attributes\n   * into a plain object array.\n   *\n   * @param {Element} el\n   * @return {Array}\n   */\n\n  function extractAttrs(el) {\n    if (el.nodeType === 1 && el.hasAttributes()) {\n      return toArray(el.attributes);\n    }\n  }\n\n  /**\n   * Merge the attributes of two elements, and make sure\n   * the class names are merged properly.\n   *\n   * @param {Element} from\n   * @param {Element} to\n   */\n\n  function mergeAttrs(from, to) {\n    var attrs = from.attributes;\n    var i = attrs.length;\n    var name, value;\n    while (i--) {\n      name = attrs[i].name;\n      value = attrs[i].value;\n      if (!to.hasAttribute(name) && !specialCharRE.test(name)) {\n        to.setAttribute(name, value);\n      } else if (name === 'class' && !parseText(value)) {\n        value.trim().split(/\\s+/).forEach(function (cls) {\n          addClass(to, cls);\n        });\n      }\n    }\n  }\n\n  /**\n   * Scan and determine slot content distribution.\n   * We do this during transclusion instead at compile time so that\n   * the distribution is decoupled from the compilation order of\n   * the slots.\n   *\n   * @param {Element|DocumentFragment} template\n   * @param {Element} content\n   * @param {Vue} vm\n   */\n\n  function resolveSlots(vm, content) {\n    if (!content) {\n      return;\n    }\n    var contents = vm._slotContents = Object.create(null);\n    var el, name;\n    for (var i = 0, l = content.children.length; i < l; i++) {\n      el = content.children[i];\n      /* eslint-disable no-cond-assign */\n      if (name = el.getAttribute('slot')) {\n        (contents[name] || (contents[name] = [])).push(el);\n      }\n      /* eslint-enable no-cond-assign */\n      if ('development' !== 'production' && getBindAttr(el, 'slot')) {\n        warn('The \"slot\" attribute must be static.', vm.$parent);\n      }\n    }\n    for (name in contents) {\n      contents[name] = extractFragment(contents[name], content);\n    }\n    if (content.hasChildNodes()) {\n      contents['default'] = extractFragment(content.childNodes, content);\n    }\n  }\n\n  /**\n   * Extract qualified content nodes from a node list.\n   *\n   * @param {NodeList} nodes\n   * @return {DocumentFragment}\n   */\n\n  function extractFragment(nodes, parent) {\n    var frag = document.createDocumentFragment();\n    nodes = toArray(nodes);\n    for (var i = 0, l = nodes.length; i < l; i++) {\n      var node = nodes[i];\n      if (isTemplate(node) && !node.hasAttribute('v-if') && !node.hasAttribute('v-for')) {\n        parent.removeChild(node);\n        node = parseTemplate(node);\n      }\n      frag.appendChild(node);\n    }\n    return frag;\n  }\n\n\n\n  var compiler = Object.freeze({\n  \tcompile: compile,\n  \tcompileAndLinkProps: compileAndLinkProps,\n  \tcompileRoot: compileRoot,\n  \ttransclude: transclude,\n  \tresolveSlots: resolveSlots\n  });\n\n  function stateMixin (Vue) {\n    /**\n     * Accessor for `$data` property, since setting $data\n     * requires observing the new object and updating\n     * proxied properties.\n     */\n\n    Object.defineProperty(Vue.prototype, '$data', {\n      get: function get() {\n        return this._data;\n      },\n      set: function set(newData) {\n        if (newData !== this._data) {\n          this._setData(newData);\n        }\n      }\n    });\n\n    /**\n     * Setup the scope of an instance, which contains:\n     * - observed data\n     * - computed properties\n     * - user methods\n     * - meta properties\n     */\n\n    Vue.prototype._initState = function () {\n      this._initProps();\n      this._initMeta();\n      this._initMethods();\n      this._initData();\n      this._initComputed();\n    };\n\n    /**\n     * Initialize props.\n     */\n\n    Vue.prototype._initProps = function () {\n      var options = this.$options;\n      var el = options.el;\n      var props = options.props;\n      if (props && !el) {\n        'development' !== 'production' && warn('Props will not be compiled if no `el` option is ' + 'provided at instantiation.', this);\n      }\n      // make sure to convert string selectors into element now\n      el = options.el = query(el);\n      this._propsUnlinkFn = el && el.nodeType === 1 && props\n      // props must be linked in proper scope if inside v-for\n      ? compileAndLinkProps(this, el, props, this._scope) : null;\n    };\n\n    /**\n     * Initialize the data.\n     */\n\n    Vue.prototype._initData = function () {\n      var dataFn = this.$options.data;\n      var data = this._data = dataFn ? dataFn() : {};\n      if (!isPlainObject(data)) {\n        data = {};\n        'development' !== 'production' && warn('data functions should return an object.', this);\n      }\n      var props = this._props;\n      var runtimeData = this._runtimeData ? typeof this._runtimeData === 'function' ? this._runtimeData() : this._runtimeData : null;\n      // proxy data on instance\n      var keys = Object.keys(data);\n      var i, key;\n      i = keys.length;\n      while (i--) {\n        key = keys[i];\n        // there are two scenarios where we can proxy a data key:\n        // 1. it's not already defined as a prop\n        // 2. it's provided via a instantiation option AND there are no\n        //    template prop present\n        if (!props || !hasOwn(props, key) || runtimeData && hasOwn(runtimeData, key) && props[key].raw === null) {\n          this._proxy(key);\n        } else if ('development' !== 'production') {\n          warn('Data field \"' + key + '\" is already defined ' + 'as a prop. Use prop default value instead.', this);\n        }\n      }\n      // observe data\n      observe(data, this);\n    };\n\n    /**\n     * Swap the instance's $data. Called in $data's setter.\n     *\n     * @param {Object} newData\n     */\n\n    Vue.prototype._setData = function (newData) {\n      newData = newData || {};\n      var oldData = this._data;\n      this._data = newData;\n      var keys, key, i;\n      // unproxy keys not present in new data\n      keys = Object.keys(oldData);\n      i = keys.length;\n      while (i--) {\n        key = keys[i];\n        if (!(key in newData)) {\n          this._unproxy(key);\n        }\n      }\n      // proxy keys not already proxied,\n      // and trigger change for changed values\n      keys = Object.keys(newData);\n      i = keys.length;\n      while (i--) {\n        key = keys[i];\n        if (!hasOwn(this, key)) {\n          // new property\n          this._proxy(key);\n        }\n      }\n      oldData.__ob__.removeVm(this);\n      observe(newData, this);\n      this._digest();\n    };\n\n    /**\n     * Proxy a property, so that\n     * vm.prop === vm._data.prop\n     *\n     * @param {String} key\n     */\n\n    Vue.prototype._proxy = function (key) {\n      if (!isReserved(key)) {\n        // need to store ref to self here\n        // because these getter/setters might\n        // be called by child scopes via\n        // prototype inheritance.\n        var self = this;\n        Object.defineProperty(self, key, {\n          configurable: true,\n          enumerable: true,\n          get: function proxyGetter() {\n            return self._data[key];\n          },\n          set: function proxySetter(val) {\n            self._data[key] = val;\n          }\n        });\n      }\n    };\n\n    /**\n     * Unproxy a property.\n     *\n     * @param {String} key\n     */\n\n    Vue.prototype._unproxy = function (key) {\n      if (!isReserved(key)) {\n        delete this[key];\n      }\n    };\n\n    /**\n     * Force update on every watcher in scope.\n     */\n\n    Vue.prototype._digest = function () {\n      for (var i = 0, l = this._watchers.length; i < l; i++) {\n        this._watchers[i].update(true); // shallow updates\n      }\n    };\n\n    /**\n     * Setup computed properties. They are essentially\n     * special getter/setters\n     */\n\n    function noop() {}\n    Vue.prototype._initComputed = function () {\n      var computed = this.$options.computed;\n      if (computed) {\n        for (var key in computed) {\n          var userDef = computed[key];\n          var def = {\n            enumerable: true,\n            configurable: true\n          };\n          if (typeof userDef === 'function') {\n            def.get = makeComputedGetter(userDef, this);\n            def.set = noop;\n          } else {\n            def.get = userDef.get ? userDef.cache !== false ? makeComputedGetter(userDef.get, this) : bind(userDef.get, this) : noop;\n            def.set = userDef.set ? bind(userDef.set, this) : noop;\n          }\n          Object.defineProperty(this, key, def);\n        }\n      }\n    };\n\n    function makeComputedGetter(getter, owner) {\n      var watcher = new Watcher(owner, getter, null, {\n        lazy: true\n      });\n      return function computedGetter() {\n        if (watcher.dirty) {\n          watcher.evaluate();\n        }\n        if (Dep.target) {\n          watcher.depend();\n        }\n        return watcher.value;\n      };\n    }\n\n    /**\n     * Setup instance methods. Methods must be bound to the\n     * instance since they might be passed down as a prop to\n     * child components.\n     */\n\n    Vue.prototype._initMethods = function () {\n      var methods = this.$options.methods;\n      if (methods) {\n        for (var key in methods) {\n          this[key] = bind(methods[key], this);\n        }\n      }\n    };\n\n    /**\n     * Initialize meta information like $index, $key & $value.\n     */\n\n    Vue.prototype._initMeta = function () {\n      var metas = this.$options._meta;\n      if (metas) {\n        for (var key in metas) {\n          defineReactive(this, key, metas[key]);\n        }\n      }\n    };\n  }\n\n  var eventRE = /^v-on:|^@/;\n\n  function eventsMixin (Vue) {\n    /**\n     * Setup the instance's option events & watchers.\n     * If the value is a string, we pull it from the\n     * instance's methods by name.\n     */\n\n    Vue.prototype._initEvents = function () {\n      var options = this.$options;\n      if (options._asComponent) {\n        registerComponentEvents(this, options.el);\n      }\n      registerCallbacks(this, '$on', options.events);\n      registerCallbacks(this, '$watch', options.watch);\n    };\n\n    /**\n     * Register v-on events on a child component\n     *\n     * @param {Vue} vm\n     * @param {Element} el\n     */\n\n    function registerComponentEvents(vm, el) {\n      var attrs = el.attributes;\n      var name, handler;\n      for (var i = 0, l = attrs.length; i < l; i++) {\n        name = attrs[i].name;\n        if (eventRE.test(name)) {\n          name = name.replace(eventRE, '');\n          handler = (vm._scope || vm._context).$eval(attrs[i].value, true);\n          if (typeof handler === 'function') {\n            handler._fromParent = true;\n            vm.$on(name.replace(eventRE), handler);\n          } else if ('development' !== 'production') {\n            warn('v-on:' + name + '=\"' + attrs[i].value + '\" ' + 'expects a function value, got ' + handler, vm);\n          }\n        }\n      }\n    }\n\n    /**\n     * Register callbacks for option events and watchers.\n     *\n     * @param {Vue} vm\n     * @param {String} action\n     * @param {Object} hash\n     */\n\n    function registerCallbacks(vm, action, hash) {\n      if (!hash) return;\n      var handlers, key, i, j;\n      for (key in hash) {\n        handlers = hash[key];\n        if (isArray(handlers)) {\n          for (i = 0, j = handlers.length; i < j; i++) {\n            register(vm, action, key, handlers[i]);\n          }\n        } else {\n          register(vm, action, key, handlers);\n        }\n      }\n    }\n\n    /**\n     * Helper to register an event/watch callback.\n     *\n     * @param {Vue} vm\n     * @param {String} action\n     * @param {String} key\n     * @param {Function|String|Object} handler\n     * @param {Object} [options]\n     */\n\n    function register(vm, action, key, handler, options) {\n      var type = typeof handler;\n      if (type === 'function') {\n        vm[action](key, handler, options);\n      } else if (type === 'string') {\n        var methods = vm.$options.methods;\n        var method = methods && methods[handler];\n        if (method) {\n          vm[action](key, method, options);\n        } else {\n          'development' !== 'production' && warn('Unknown method: \"' + handler + '\" when ' + 'registering callback for ' + action + ': \"' + key + '\".', vm);\n        }\n      } else if (handler && type === 'object') {\n        register(vm, action, key, handler.handler, handler);\n      }\n    }\n\n    /**\n     * Setup recursive attached/detached calls\n     */\n\n    Vue.prototype._initDOMHooks = function () {\n      this.$on('hook:attached', onAttached);\n      this.$on('hook:detached', onDetached);\n    };\n\n    /**\n     * Callback to recursively call attached hook on children\n     */\n\n    function onAttached() {\n      if (!this._isAttached) {\n        this._isAttached = true;\n        this.$children.forEach(callAttach);\n      }\n    }\n\n    /**\n     * Iterator to call attached hook\n     *\n     * @param {Vue} child\n     */\n\n    function callAttach(child) {\n      if (!child._isAttached && inDoc(child.$el)) {\n        child._callHook('attached');\n      }\n    }\n\n    /**\n     * Callback to recursively call detached hook on children\n     */\n\n    function onDetached() {\n      if (this._isAttached) {\n        this._isAttached = false;\n        this.$children.forEach(callDetach);\n      }\n    }\n\n    /**\n     * Iterator to call detached hook\n     *\n     * @param {Vue} child\n     */\n\n    function callDetach(child) {\n      if (child._isAttached && !inDoc(child.$el)) {\n        child._callHook('detached');\n      }\n    }\n\n    /**\n     * Trigger all handlers for a hook\n     *\n     * @param {String} hook\n     */\n\n    Vue.prototype._callHook = function (hook) {\n      this.$emit('pre-hook:' + hook);\n      var handlers = this.$options[hook];\n      if (handlers) {\n        for (var i = 0, j = handlers.length; i < j; i++) {\n          handlers[i].call(this);\n        }\n      }\n      this.$emit('hook:' + hook);\n    };\n  }\n\n  function noop() {}\n\n  /**\n   * A directive links a DOM element with a piece of data,\n   * which is the result of evaluating an expression.\n   * It registers a watcher with the expression and calls\n   * the DOM update function when a change is triggered.\n   *\n   * @param {Object} descriptor\n   *                 - {String} name\n   *                 - {Object} def\n   *                 - {String} expression\n   *                 - {Array<Object>} [filters]\n   *                 - {Object} [modifiers]\n   *                 - {Boolean} literal\n   *                 - {String} attr\n   *                 - {String} arg\n   *                 - {String} raw\n   *                 - {String} [ref]\n   *                 - {Array<Object>} [interp]\n   *                 - {Boolean} [hasOneTime]\n   * @param {Vue} vm\n   * @param {Node} el\n   * @param {Vue} [host] - transclusion host component\n   * @param {Object} [scope] - v-for scope\n   * @param {Fragment} [frag] - owner fragment\n   * @constructor\n   */\n  function Directive(descriptor, vm, el, host, scope, frag) {\n    this.vm = vm;\n    this.el = el;\n    // copy descriptor properties\n    this.descriptor = descriptor;\n    this.name = descriptor.name;\n    this.expression = descriptor.expression;\n    this.arg = descriptor.arg;\n    this.modifiers = descriptor.modifiers;\n    this.filters = descriptor.filters;\n    this.literal = this.modifiers && this.modifiers.literal;\n    // private\n    this._locked = false;\n    this._bound = false;\n    this._listeners = null;\n    // link context\n    this._host = host;\n    this._scope = scope;\n    this._frag = frag;\n    // store directives on node in dev mode\n    if ('development' !== 'production' && this.el) {\n      this.el._vue_directives = this.el._vue_directives || [];\n      this.el._vue_directives.push(this);\n    }\n  }\n\n  /**\n   * Initialize the directive, mixin definition properties,\n   * setup the watcher, call definition bind() and update()\n   * if present.\n   */\n\n  Directive.prototype._bind = function () {\n    var name = this.name;\n    var descriptor = this.descriptor;\n\n    // remove attribute\n    if ((name !== 'cloak' || this.vm._isCompiled) && this.el && this.el.removeAttribute) {\n      var attr = descriptor.attr || 'v-' + name;\n      this.el.removeAttribute(attr);\n    }\n\n    // copy def properties\n    var def = descriptor.def;\n    if (typeof def === 'function') {\n      this.update = def;\n    } else {\n      extend(this, def);\n    }\n\n    // setup directive params\n    this._setupParams();\n\n    // initial bind\n    if (this.bind) {\n      this.bind();\n    }\n    this._bound = true;\n\n    if (this.literal) {\n      this.update && this.update(descriptor.raw);\n    } else if ((this.expression || this.modifiers) && (this.update || this.twoWay) && !this._checkStatement()) {\n      // wrapped updater for context\n      var dir = this;\n      if (this.update) {\n        this._update = function (val, oldVal) {\n          if (!dir._locked) {\n            dir.update(val, oldVal);\n          }\n        };\n      } else {\n        this._update = noop;\n      }\n      var preProcess = this._preProcess ? bind(this._preProcess, this) : null;\n      var postProcess = this._postProcess ? bind(this._postProcess, this) : null;\n      var watcher = this._watcher = new Watcher(this.vm, this.expression, this._update, // callback\n      {\n        filters: this.filters,\n        twoWay: this.twoWay,\n        deep: this.deep,\n        preProcess: preProcess,\n        postProcess: postProcess,\n        scope: this._scope\n      });\n      // v-model with inital inline value need to sync back to\n      // model instead of update to DOM on init. They would\n      // set the afterBind hook to indicate that.\n      if (this.afterBind) {\n        this.afterBind();\n      } else if (this.update) {\n        this.update(watcher.value);\n      }\n    }\n  };\n\n  /**\n   * Setup all param attributes, e.g. track-by,\n   * transition-mode, etc...\n   */\n\n  Directive.prototype._setupParams = function () {\n    if (!this.params) {\n      return;\n    }\n    var params = this.params;\n    // swap the params array with a fresh object.\n    this.params = Object.create(null);\n    var i = params.length;\n    var key, val, mappedKey;\n    while (i--) {\n      key = hyphenate(params[i]);\n      mappedKey = camelize(key);\n      val = getBindAttr(this.el, key);\n      if (val != null) {\n        // dynamic\n        this._setupParamWatcher(mappedKey, val);\n      } else {\n        // static\n        val = getAttr(this.el, key);\n        if (val != null) {\n          this.params[mappedKey] = val === '' ? true : val;\n        }\n      }\n    }\n  };\n\n  /**\n   * Setup a watcher for a dynamic param.\n   *\n   * @param {String} key\n   * @param {String} expression\n   */\n\n  Directive.prototype._setupParamWatcher = function (key, expression) {\n    var self = this;\n    var called = false;\n    var unwatch = (this._scope || this.vm).$watch(expression, function (val, oldVal) {\n      self.params[key] = val;\n      // since we are in immediate mode,\n      // only call the param change callbacks if this is not the first update.\n      if (called) {\n        var cb = self.paramWatchers && self.paramWatchers[key];\n        if (cb) {\n          cb.call(self, val, oldVal);\n        }\n      } else {\n        called = true;\n      }\n    }, {\n      immediate: true,\n      user: false\n    });(this._paramUnwatchFns || (this._paramUnwatchFns = [])).push(unwatch);\n  };\n\n  /**\n   * Check if the directive is a function caller\n   * and if the expression is a callable one. If both true,\n   * we wrap up the expression and use it as the event\n   * handler.\n   *\n   * e.g. on-click=\"a++\"\n   *\n   * @return {Boolean}\n   */\n\n  Directive.prototype._checkStatement = function () {\n    var expression = this.expression;\n    if (expression && this.acceptStatement && !isSimplePath(expression)) {\n      var fn = parseExpression(expression).get;\n      var scope = this._scope || this.vm;\n      var handler = function handler(e) {\n        scope.$event = e;\n        fn.call(scope, scope);\n        scope.$event = null;\n      };\n      if (this.filters) {\n        handler = scope._applyFilters(handler, null, this.filters);\n      }\n      this.update(handler);\n      return true;\n    }\n  };\n\n  /**\n   * Set the corresponding value with the setter.\n   * This should only be used in two-way directives\n   * e.g. v-model.\n   *\n   * @param {*} value\n   * @public\n   */\n\n  Directive.prototype.set = function (value) {\n    /* istanbul ignore else */\n    if (this.twoWay) {\n      this._withLock(function () {\n        this._watcher.set(value);\n      });\n    } else if ('development' !== 'production') {\n      warn('Directive.set() can only be used inside twoWay' + 'directives.');\n    }\n  };\n\n  /**\n   * Execute a function while preventing that function from\n   * triggering updates on this directive instance.\n   *\n   * @param {Function} fn\n   */\n\n  Directive.prototype._withLock = function (fn) {\n    var self = this;\n    self._locked = true;\n    fn.call(self);\n    nextTick(function () {\n      self._locked = false;\n    });\n  };\n\n  /**\n   * Convenience method that attaches a DOM event listener\n   * to the directive element and autometically tears it down\n   * during unbind.\n   *\n   * @param {String} event\n   * @param {Function} handler\n   * @param {Boolean} [useCapture]\n   */\n\n  Directive.prototype.on = function (event, handler, useCapture) {\n    on(this.el, event, handler, useCapture);(this._listeners || (this._listeners = [])).push([event, handler]);\n  };\n\n  /**\n   * Teardown the watcher and call unbind.\n   */\n\n  Directive.prototype._teardown = function () {\n    if (this._bound) {\n      this._bound = false;\n      if (this.unbind) {\n        this.unbind();\n      }\n      if (this._watcher) {\n        this._watcher.teardown();\n      }\n      var listeners = this._listeners;\n      var i;\n      if (listeners) {\n        i = listeners.length;\n        while (i--) {\n          off(this.el, listeners[i][0], listeners[i][1]);\n        }\n      }\n      var unwatchFns = this._paramUnwatchFns;\n      if (unwatchFns) {\n        i = unwatchFns.length;\n        while (i--) {\n          unwatchFns[i]();\n        }\n      }\n      if ('development' !== 'production' && this.el) {\n        this.el._vue_directives.$remove(this);\n      }\n      this.vm = this.el = this._watcher = this._listeners = null;\n    }\n  };\n\n  function lifecycleMixin (Vue) {\n    /**\n     * Update v-ref for component.\n     *\n     * @param {Boolean} remove\n     */\n\n    Vue.prototype._updateRef = function (remove) {\n      var ref = this.$options._ref;\n      if (ref) {\n        var refs = (this._scope || this._context).$refs;\n        if (remove) {\n          if (refs[ref] === this) {\n            refs[ref] = null;\n          }\n        } else {\n          refs[ref] = this;\n        }\n      }\n    };\n\n    /**\n     * Transclude, compile and link element.\n     *\n     * If a pre-compiled linker is available, that means the\n     * passed in element will be pre-transcluded and compiled\n     * as well - all we need to do is to call the linker.\n     *\n     * Otherwise we need to call transclude/compile/link here.\n     *\n     * @param {Element} el\n     */\n\n    Vue.prototype._compile = function (el) {\n      var options = this.$options;\n\n      // transclude and init element\n      // transclude can potentially replace original\n      // so we need to keep reference; this step also injects\n      // the template and caches the original attributes\n      // on the container node and replacer node.\n      var original = el;\n      el = transclude(el, options);\n      this._initElement(el);\n\n      // handle v-pre on root node (#2026)\n      if (el.nodeType === 1 && getAttr(el, 'v-pre') !== null) {\n        return;\n      }\n\n      // root is always compiled per-instance, because\n      // container attrs and props can be different every time.\n      var contextOptions = this._context && this._context.$options;\n      var rootLinker = compileRoot(el, options, contextOptions);\n\n      // resolve slot distribution\n      resolveSlots(this, options._content);\n\n      // compile and link the rest\n      var contentLinkFn;\n      var ctor = this.constructor;\n      // component compilation can be cached\n      // as long as it's not using inline-template\n      if (options._linkerCachable) {\n        contentLinkFn = ctor.linker;\n        if (!contentLinkFn) {\n          contentLinkFn = ctor.linker = compile(el, options);\n        }\n      }\n\n      // link phase\n      // make sure to link root with prop scope!\n      var rootUnlinkFn = rootLinker(this, el, this._scope);\n      var contentUnlinkFn = contentLinkFn ? contentLinkFn(this, el) : compile(el, options)(this, el);\n\n      // register composite unlink function\n      // to be called during instance destruction\n      this._unlinkFn = function () {\n        rootUnlinkFn();\n        // passing destroying: true to avoid searching and\n        // splicing the directives\n        contentUnlinkFn(true);\n      };\n\n      // finally replace original\n      if (options.replace) {\n        replace(original, el);\n      }\n\n      this._isCompiled = true;\n      this._callHook('compiled');\n    };\n\n    /**\n     * Initialize instance element. Called in the public\n     * $mount() method.\n     *\n     * @param {Element} el\n     */\n\n    Vue.prototype._initElement = function (el) {\n      if (isFragment(el)) {\n        this._isFragment = true;\n        this.$el = this._fragmentStart = el.firstChild;\n        this._fragmentEnd = el.lastChild;\n        // set persisted text anchors to empty\n        if (this._fragmentStart.nodeType === 3) {\n          this._fragmentStart.data = this._fragmentEnd.data = '';\n        }\n        this._fragment = el;\n      } else {\n        this.$el = el;\n      }\n      this.$el.__vue__ = this;\n      this._callHook('beforeCompile');\n    };\n\n    /**\n     * Create and bind a directive to an element.\n     *\n     * @param {Object} descriptor - parsed directive descriptor\n     * @param {Node} node   - target node\n     * @param {Vue} [host] - transclusion host component\n     * @param {Object} [scope] - v-for scope\n     * @param {Fragment} [frag] - owner fragment\n     */\n\n    Vue.prototype._bindDir = function (descriptor, node, host, scope, frag) {\n      this._directives.push(new Directive(descriptor, this, node, host, scope, frag));\n    };\n\n    /**\n     * Teardown an instance, unobserves the data, unbind all the\n     * directives, turn off all the event listeners, etc.\n     *\n     * @param {Boolean} remove - whether to remove the DOM node.\n     * @param {Boolean} deferCleanup - if true, defer cleanup to\n     *                                 be called later\n     */\n\n    Vue.prototype._destroy = function (remove, deferCleanup) {\n      if (this._isBeingDestroyed) {\n        if (!deferCleanup) {\n          this._cleanup();\n        }\n        return;\n      }\n\n      var destroyReady;\n      var pendingRemoval;\n\n      var self = this;\n      // Cleanup should be called either synchronously or asynchronoysly as\n      // callback of this.$remove(), or if remove and deferCleanup are false.\n      // In any case it should be called after all other removing, unbinding and\n      // turning of is done\n      var cleanupIfPossible = function cleanupIfPossible() {\n        if (destroyReady && !pendingRemoval && !deferCleanup) {\n          self._cleanup();\n        }\n      };\n\n      // remove DOM element\n      if (remove && this.$el) {\n        pendingRemoval = true;\n        this.$remove(function () {\n          pendingRemoval = false;\n          cleanupIfPossible();\n        });\n      }\n\n      this._callHook('beforeDestroy');\n      this._isBeingDestroyed = true;\n      var i;\n      // remove self from parent. only necessary\n      // if parent is not being destroyed as well.\n      var parent = this.$parent;\n      if (parent && !parent._isBeingDestroyed) {\n        parent.$children.$remove(this);\n        // unregister ref (remove: true)\n        this._updateRef(true);\n      }\n      // destroy all children.\n      i = this.$children.length;\n      while (i--) {\n        this.$children[i].$destroy();\n      }\n      // teardown props\n      if (this._propsUnlinkFn) {\n        this._propsUnlinkFn();\n      }\n      // teardown all directives. this also tearsdown all\n      // directive-owned watchers.\n      if (this._unlinkFn) {\n        this._unlinkFn();\n      }\n      i = this._watchers.length;\n      while (i--) {\n        this._watchers[i].teardown();\n      }\n      // remove reference to self on $el\n      if (this.$el) {\n        this.$el.__vue__ = null;\n      }\n\n      destroyReady = true;\n      cleanupIfPossible();\n    };\n\n    /**\n     * Clean up to ensure garbage collection.\n     * This is called after the leave transition if there\n     * is any.\n     */\n\n    Vue.prototype._cleanup = function () {\n      if (this._isDestroyed) {\n        return;\n      }\n      // remove self from owner fragment\n      // do it in cleanup so that we can call $destroy with\n      // defer right when a fragment is about to be removed.\n      if (this._frag) {\n        this._frag.children.$remove(this);\n      }\n      // remove reference from data ob\n      // frozen object may not have observer.\n      if (this._data.__ob__) {\n        this._data.__ob__.removeVm(this);\n      }\n      // Clean up references to private properties and other\n      // instances. preserve reference to _data so that proxy\n      // accessors still work. The only potential side effect\n      // here is that mutating the instance after it's destroyed\n      // may affect the state of other components that are still\n      // observing the same object, but that seems to be a\n      // reasonable responsibility for the user rather than\n      // always throwing an error on them.\n      this.$el = this.$parent = this.$root = this.$children = this._watchers = this._context = this._scope = this._directives = null;\n      // call the last hook...\n      this._isDestroyed = true;\n      this._callHook('destroyed');\n      // turn off all instance listeners.\n      this.$off();\n    };\n  }\n\n  function miscMixin (Vue) {\n    /**\n     * Apply a list of filter (descriptors) to a value.\n     * Using plain for loops here because this will be called in\n     * the getter of any watcher with filters so it is very\n     * performance sensitive.\n     *\n     * @param {*} value\n     * @param {*} [oldValue]\n     * @param {Array} filters\n     * @param {Boolean} write\n     * @return {*}\n     */\n\n    Vue.prototype._applyFilters = function (value, oldValue, filters, write) {\n      var filter, fn, args, arg, offset, i, l, j, k;\n      for (i = 0, l = filters.length; i < l; i++) {\n        filter = filters[write ? l - i - 1 : i];\n        fn = resolveAsset(this.$options, 'filters', filter.name, true);\n        if (!fn) continue;\n        fn = write ? fn.write : fn.read || fn;\n        if (typeof fn !== 'function') continue;\n        args = write ? [value, oldValue] : [value];\n        offset = write ? 2 : 1;\n        if (filter.args) {\n          for (j = 0, k = filter.args.length; j < k; j++) {\n            arg = filter.args[j];\n            args[j + offset] = arg.dynamic ? this.$get(arg.value) : arg.value;\n          }\n        }\n        value = fn.apply(this, args);\n      }\n      return value;\n    };\n\n    /**\n     * Resolve a component, depending on whether the component\n     * is defined normally or using an async factory function.\n     * Resolves synchronously if already resolved, otherwise\n     * resolves asynchronously and caches the resolved\n     * constructor on the factory.\n     *\n     * @param {String|Function} value\n     * @param {Function} cb\n     */\n\n    Vue.prototype._resolveComponent = function (value, cb) {\n      var factory;\n      if (typeof value === 'function') {\n        factory = value;\n      } else {\n        factory = resolveAsset(this.$options, 'components', value, true);\n      }\n      if (!factory) {\n        return;\n      }\n      // async component factory\n      if (!factory.options) {\n        if (factory.resolved) {\n          // cached\n          cb(factory.resolved);\n        } else if (factory.requested) {\n          // pool callbacks\n          factory.pendingCallbacks.push(cb);\n        } else {\n          factory.requested = true;\n          var cbs = factory.pendingCallbacks = [cb];\n          factory.call(this, function resolve(res) {\n            if (isPlainObject(res)) {\n              res = Vue.extend(res);\n            }\n            // cache resolved\n            factory.resolved = res;\n            // invoke callbacks\n            for (var i = 0, l = cbs.length; i < l; i++) {\n              cbs[i](res);\n            }\n          }, function reject(reason) {\n            'development' !== 'production' && warn('Failed to resolve async component' + (typeof value === 'string' ? ': ' + value : '') + '. ' + (reason ? '\\nReason: ' + reason : ''));\n          });\n        }\n      } else {\n        // normal component\n        cb(factory);\n      }\n    };\n  }\n\n  var filterRE$1 = /[^|]\\|[^|]/;\n\n  function dataAPI (Vue) {\n    /**\n     * Get the value from an expression on this vm.\n     *\n     * @param {String} exp\n     * @param {Boolean} [asStatement]\n     * @return {*}\n     */\n\n    Vue.prototype.$get = function (exp, asStatement) {\n      var res = parseExpression(exp);\n      if (res) {\n        if (asStatement && !isSimplePath(exp)) {\n          var self = this;\n          return function statementHandler() {\n            self.$arguments = toArray(arguments);\n            var result = res.get.call(self, self);\n            self.$arguments = null;\n            return result;\n          };\n        } else {\n          try {\n            return res.get.call(this, this);\n          } catch (e) {}\n        }\n      }\n    };\n\n    /**\n     * Set the value from an expression on this vm.\n     * The expression must be a valid left-hand\n     * expression in an assignment.\n     *\n     * @param {String} exp\n     * @param {*} val\n     */\n\n    Vue.prototype.$set = function (exp, val) {\n      var res = parseExpression(exp, true);\n      if (res && res.set) {\n        res.set.call(this, this, val);\n      }\n    };\n\n    /**\n     * Delete a property on the VM\n     *\n     * @param {String} key\n     */\n\n    Vue.prototype.$delete = function (key) {\n      del(this._data, key);\n    };\n\n    /**\n     * Watch an expression, trigger callback when its\n     * value changes.\n     *\n     * @param {String|Function} expOrFn\n     * @param {Function} cb\n     * @param {Object} [options]\n     *                 - {Boolean} deep\n     *                 - {Boolean} immediate\n     * @return {Function} - unwatchFn\n     */\n\n    Vue.prototype.$watch = function (expOrFn, cb, options) {\n      var vm = this;\n      var parsed;\n      if (typeof expOrFn === 'string') {\n        parsed = parseDirective(expOrFn);\n        expOrFn = parsed.expression;\n      }\n      var watcher = new Watcher(vm, expOrFn, cb, {\n        deep: options && options.deep,\n        sync: options && options.sync,\n        filters: parsed && parsed.filters,\n        user: !options || options.user !== false\n      });\n      if (options && options.immediate) {\n        cb.call(vm, watcher.value);\n      }\n      return function unwatchFn() {\n        watcher.teardown();\n      };\n    };\n\n    /**\n     * Evaluate a text directive, including filters.\n     *\n     * @param {String} text\n     * @param {Boolean} [asStatement]\n     * @return {String}\n     */\n\n    Vue.prototype.$eval = function (text, asStatement) {\n      // check for filters.\n      if (filterRE$1.test(text)) {\n        var dir = parseDirective(text);\n        // the filter regex check might give false positive\n        // for pipes inside strings, so it's possible that\n        // we don't get any filters here\n        var val = this.$get(dir.expression, asStatement);\n        return dir.filters ? this._applyFilters(val, null, dir.filters) : val;\n      } else {\n        // no filter\n        return this.$get(text, asStatement);\n      }\n    };\n\n    /**\n     * Interpolate a piece of template text.\n     *\n     * @param {String} text\n     * @return {String}\n     */\n\n    Vue.prototype.$interpolate = function (text) {\n      var tokens = parseText(text);\n      var vm = this;\n      if (tokens) {\n        if (tokens.length === 1) {\n          return vm.$eval(tokens[0].value) + '';\n        } else {\n          return tokens.map(function (token) {\n            return token.tag ? vm.$eval(token.value) : token.value;\n          }).join('');\n        }\n      } else {\n        return text;\n      }\n    };\n\n    /**\n     * Log instance data as a plain JS object\n     * so that it is easier to inspect in console.\n     * This method assumes console is available.\n     *\n     * @param {String} [path]\n     */\n\n    Vue.prototype.$log = function (path) {\n      var data = path ? getPath(this._data, path) : this._data;\n      if (data) {\n        data = clean(data);\n      }\n      // include computed fields\n      if (!path) {\n        var key;\n        for (key in this.$options.computed) {\n          data[key] = clean(this[key]);\n        }\n        if (this._props) {\n          for (key in this._props) {\n            data[key] = clean(this[key]);\n          }\n        }\n      }\n      console.log(data);\n    };\n\n    /**\n     * \"clean\" a getter/setter converted object into a plain\n     * object copy.\n     *\n     * @param {Object} - obj\n     * @return {Object}\n     */\n\n    function clean(obj) {\n      return JSON.parse(JSON.stringify(obj));\n    }\n  }\n\n  function domAPI (Vue) {\n    /**\n     * Convenience on-instance nextTick. The callback is\n     * auto-bound to the instance, and this avoids component\n     * modules having to rely on the global Vue.\n     *\n     * @param {Function} fn\n     */\n\n    Vue.prototype.$nextTick = function (fn) {\n      nextTick(fn, this);\n    };\n\n    /**\n     * Append instance to target\n     *\n     * @param {Node} target\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition] - defaults to true\n     */\n\n    Vue.prototype.$appendTo = function (target, cb, withTransition) {\n      return insert(this, target, cb, withTransition, append, appendWithTransition);\n    };\n\n    /**\n     * Prepend instance to target\n     *\n     * @param {Node} target\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition] - defaults to true\n     */\n\n    Vue.prototype.$prependTo = function (target, cb, withTransition) {\n      target = query(target);\n      if (target.hasChildNodes()) {\n        this.$before(target.firstChild, cb, withTransition);\n      } else {\n        this.$appendTo(target, cb, withTransition);\n      }\n      return this;\n    };\n\n    /**\n     * Insert instance before target\n     *\n     * @param {Node} target\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition] - defaults to true\n     */\n\n    Vue.prototype.$before = function (target, cb, withTransition) {\n      return insert(this, target, cb, withTransition, beforeWithCb, beforeWithTransition);\n    };\n\n    /**\n     * Insert instance after target\n     *\n     * @param {Node} target\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition] - defaults to true\n     */\n\n    Vue.prototype.$after = function (target, cb, withTransition) {\n      target = query(target);\n      if (target.nextSibling) {\n        this.$before(target.nextSibling, cb, withTransition);\n      } else {\n        this.$appendTo(target.parentNode, cb, withTransition);\n      }\n      return this;\n    };\n\n    /**\n     * Remove instance from DOM\n     *\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition] - defaults to true\n     */\n\n    Vue.prototype.$remove = function (cb, withTransition) {\n      if (!this.$el.parentNode) {\n        return cb && cb();\n      }\n      var inDocument = this._isAttached && inDoc(this.$el);\n      // if we are not in document, no need to check\n      // for transitions\n      if (!inDocument) withTransition = false;\n      var self = this;\n      var realCb = function realCb() {\n        if (inDocument) self._callHook('detached');\n        if (cb) cb();\n      };\n      if (this._isFragment) {\n        removeNodeRange(this._fragmentStart, this._fragmentEnd, this, this._fragment, realCb);\n      } else {\n        var op = withTransition === false ? removeWithCb : removeWithTransition;\n        op(this.$el, this, realCb);\n      }\n      return this;\n    };\n\n    /**\n     * Shared DOM insertion function.\n     *\n     * @param {Vue} vm\n     * @param {Element} target\n     * @param {Function} [cb]\n     * @param {Boolean} [withTransition]\n     * @param {Function} op1 - op for non-transition insert\n     * @param {Function} op2 - op for transition insert\n     * @return vm\n     */\n\n    function insert(vm, target, cb, withTransition, op1, op2) {\n      target = query(target);\n      var targetIsDetached = !inDoc(target);\n      var op = withTransition === false || targetIsDetached ? op1 : op2;\n      var shouldCallHook = !targetIsDetached && !vm._isAttached && !inDoc(vm.$el);\n      if (vm._isFragment) {\n        mapNodeRange(vm._fragmentStart, vm._fragmentEnd, function (node) {\n          op(node, target, vm);\n        });\n        cb && cb();\n      } else {\n        op(vm.$el, target, vm, cb);\n      }\n      if (shouldCallHook) {\n        vm._callHook('attached');\n      }\n      return vm;\n    }\n\n    /**\n     * Check for selectors\n     *\n     * @param {String|Element} el\n     */\n\n    function query(el) {\n      return typeof el === 'string' ? document.querySelector(el) : el;\n    }\n\n    /**\n     * Append operation that takes a callback.\n     *\n     * @param {Node} el\n     * @param {Node} target\n     * @param {Vue} vm - unused\n     * @param {Function} [cb]\n     */\n\n    function append(el, target, vm, cb) {\n      target.appendChild(el);\n      if (cb) cb();\n    }\n\n    /**\n     * InsertBefore operation that takes a callback.\n     *\n     * @param {Node} el\n     * @param {Node} target\n     * @param {Vue} vm - unused\n     * @param {Function} [cb]\n     */\n\n    function beforeWithCb(el, target, vm, cb) {\n      before(el, target);\n      if (cb) cb();\n    }\n\n    /**\n     * Remove operation that takes a callback.\n     *\n     * @param {Node} el\n     * @param {Vue} vm - unused\n     * @param {Function} [cb]\n     */\n\n    function removeWithCb(el, vm, cb) {\n      remove(el);\n      if (cb) cb();\n    }\n  }\n\n  function eventsAPI (Vue) {\n    /**\n     * Listen on the given `event` with `fn`.\n     *\n     * @param {String} event\n     * @param {Function} fn\n     */\n\n    Vue.prototype.$on = function (event, fn) {\n      (this._events[event] || (this._events[event] = [])).push(fn);\n      modifyListenerCount(this, event, 1);\n      return this;\n    };\n\n    /**\n     * Adds an `event` listener that will be invoked a single\n     * time then automatically removed.\n     *\n     * @param {String} event\n     * @param {Function} fn\n     */\n\n    Vue.prototype.$once = function (event, fn) {\n      var self = this;\n      function on() {\n        self.$off(event, on);\n        fn.apply(this, arguments);\n      }\n      on.fn = fn;\n      this.$on(event, on);\n      return this;\n    };\n\n    /**\n     * Remove the given callback for `event` or all\n     * registered callbacks.\n     *\n     * @param {String} event\n     * @param {Function} fn\n     */\n\n    Vue.prototype.$off = function (event, fn) {\n      var cbs;\n      // all\n      if (!arguments.length) {\n        if (this.$parent) {\n          for (event in this._events) {\n            cbs = this._events[event];\n            if (cbs) {\n              modifyListenerCount(this, event, -cbs.length);\n            }\n          }\n        }\n        this._events = {};\n        return this;\n      }\n      // specific event\n      cbs = this._events[event];\n      if (!cbs) {\n        return this;\n      }\n      if (arguments.length === 1) {\n        modifyListenerCount(this, event, -cbs.length);\n        this._events[event] = null;\n        return this;\n      }\n      // specific handler\n      var cb;\n      var i = cbs.length;\n      while (i--) {\n        cb = cbs[i];\n        if (cb === fn || cb.fn === fn) {\n          modifyListenerCount(this, event, -1);\n          cbs.splice(i, 1);\n          break;\n        }\n      }\n      return this;\n    };\n\n    /**\n     * Trigger an event on self.\n     *\n     * @param {String|Object} event\n     * @return {Boolean} shouldPropagate\n     */\n\n    Vue.prototype.$emit = function (event) {\n      var isSource = typeof event === 'string';\n      event = isSource ? event : event.name;\n      var cbs = this._events[event];\n      var shouldPropagate = isSource || !cbs;\n      if (cbs) {\n        cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n        // this is a somewhat hacky solution to the question raised\n        // in #2102: for an inline component listener like <comp @test=\"doThis\">,\n        // the propagation handling is somewhat broken. Therefore we\n        // need to treat these inline callbacks differently.\n        var hasParentCbs = isSource && cbs.some(function (cb) {\n          return cb._fromParent;\n        });\n        if (hasParentCbs) {\n          shouldPropagate = false;\n        }\n        var args = toArray(arguments, 1);\n        for (var i = 0, l = cbs.length; i < l; i++) {\n          var cb = cbs[i];\n          var res = cb.apply(this, args);\n          if (res === true && (!hasParentCbs || cb._fromParent)) {\n            shouldPropagate = true;\n          }\n        }\n      }\n      return shouldPropagate;\n    };\n\n    /**\n     * Recursively broadcast an event to all children instances.\n     *\n     * @param {String|Object} event\n     * @param {...*} additional arguments\n     */\n\n    Vue.prototype.$broadcast = function (event) {\n      var isSource = typeof event === 'string';\n      event = isSource ? event : event.name;\n      // if no child has registered for this event,\n      // then there's no need to broadcast.\n      if (!this._eventsCount[event]) return;\n      var children = this.$children;\n      var args = toArray(arguments);\n      if (isSource) {\n        // use object event to indicate non-source emit\n        // on children\n        args[0] = { name: event, source: this };\n      }\n      for (var i = 0, l = children.length; i < l; i++) {\n        var child = children[i];\n        var shouldPropagate = child.$emit.apply(child, args);\n        if (shouldPropagate) {\n          child.$broadcast.apply(child, args);\n        }\n      }\n      return this;\n    };\n\n    /**\n     * Recursively propagate an event up the parent chain.\n     *\n     * @param {String} event\n     * @param {...*} additional arguments\n     */\n\n    Vue.prototype.$dispatch = function (event) {\n      var shouldPropagate = this.$emit.apply(this, arguments);\n      if (!shouldPropagate) return;\n      var parent = this.$parent;\n      var args = toArray(arguments);\n      // use object event to indicate non-source emit\n      // on parents\n      args[0] = { name: event, source: this };\n      while (parent) {\n        shouldPropagate = parent.$emit.apply(parent, args);\n        parent = shouldPropagate ? parent.$parent : null;\n      }\n      return this;\n    };\n\n    /**\n     * Modify the listener counts on all parents.\n     * This bookkeeping allows $broadcast to return early when\n     * no child has listened to a certain event.\n     *\n     * @param {Vue} vm\n     * @param {String} event\n     * @param {Number} count\n     */\n\n    var hookRE = /^hook:/;\n    function modifyListenerCount(vm, event, count) {\n      var parent = vm.$parent;\n      // hooks do not get broadcasted so no need\n      // to do bookkeeping for them\n      if (!parent || !count || hookRE.test(event)) return;\n      while (parent) {\n        parent._eventsCount[event] = (parent._eventsCount[event] || 0) + count;\n        parent = parent.$parent;\n      }\n    }\n  }\n\n  function lifecycleAPI (Vue) {\n    /**\n     * Set instance target element and kick off the compilation\n     * process. The passed in `el` can be a selector string, an\n     * existing Element, or a DocumentFragment (for block\n     * instances).\n     *\n     * @param {Element|DocumentFragment|string} el\n     * @public\n     */\n\n    Vue.prototype.$mount = function (el) {\n      if (this._isCompiled) {\n        'development' !== 'production' && warn('$mount() should be called only once.', this);\n        return;\n      }\n      el = query(el);\n      if (!el) {\n        el = document.createElement('div');\n      }\n      this._compile(el);\n      this._initDOMHooks();\n      if (inDoc(this.$el)) {\n        this._callHook('attached');\n        ready.call(this);\n      } else {\n        this.$once('hook:attached', ready);\n      }\n      return this;\n    };\n\n    /**\n     * Mark an instance as ready.\n     */\n\n    function ready() {\n      this._isAttached = true;\n      this._isReady = true;\n      this._callHook('ready');\n    }\n\n    /**\n     * Teardown the instance, simply delegate to the internal\n     * _destroy.\n     *\n     * @param {Boolean} remove\n     * @param {Boolean} deferCleanup\n     */\n\n    Vue.prototype.$destroy = function (remove, deferCleanup) {\n      this._destroy(remove, deferCleanup);\n    };\n\n    /**\n     * Partially compile a piece of DOM and return a\n     * decompile function.\n     *\n     * @param {Element|DocumentFragment} el\n     * @param {Vue} [host]\n     * @param {Object} [scope]\n     * @param {Fragment} [frag]\n     * @return {Function}\n     */\n\n    Vue.prototype.$compile = function (el, host, scope, frag) {\n      return compile(el, this.$options, true)(this, el, host, scope, frag);\n    };\n  }\n\n  /**\n   * The exposed Vue constructor.\n   *\n   * API conventions:\n   * - public API methods/properties are prefixed with `$`\n   * - internal methods/properties are prefixed with `_`\n   * - non-prefixed properties are assumed to be proxied user\n   *   data.\n   *\n   * @constructor\n   * @param {Object} [options]\n   * @public\n   */\n\n  function Vue(options) {\n    this._init(options);\n  }\n\n  // install internals\n  initMixin(Vue);\n  stateMixin(Vue);\n  eventsMixin(Vue);\n  lifecycleMixin(Vue);\n  miscMixin(Vue);\n\n  // install instance APIs\n  dataAPI(Vue);\n  domAPI(Vue);\n  eventsAPI(Vue);\n  lifecycleAPI(Vue);\n\n  var slot = {\n\n    priority: SLOT,\n    params: ['name'],\n\n    bind: function bind() {\n      // this was resolved during component transclusion\n      var name = this.params.name || 'default';\n      var content = this.vm._slotContents && this.vm._slotContents[name];\n      if (!content || !content.hasChildNodes()) {\n        this.fallback();\n      } else {\n        this.compile(content.cloneNode(true), this.vm._context, this.vm);\n      }\n    },\n\n    compile: function compile(content, context, host) {\n      if (content && context) {\n        if (this.el.hasChildNodes() && content.childNodes.length === 1 && content.childNodes[0].nodeType === 1 && content.childNodes[0].hasAttribute('v-if')) {\n          // if the inserted slot has v-if\n          // inject fallback content as the v-else\n          var elseBlock = document.createElement('template');\n          elseBlock.setAttribute('v-else', '');\n          elseBlock.innerHTML = this.el.innerHTML;\n          // the else block should be compiled in child scope\n          elseBlock._context = this.vm;\n          content.appendChild(elseBlock);\n        }\n        var scope = host ? host._scope : this._scope;\n        this.unlink = context.$compile(content, host, scope, this._frag);\n      }\n      if (content) {\n        replace(this.el, content);\n      } else {\n        remove(this.el);\n      }\n    },\n\n    fallback: function fallback() {\n      this.compile(extractContent(this.el, true), this.vm);\n    },\n\n    unbind: function unbind() {\n      if (this.unlink) {\n        this.unlink();\n      }\n    }\n  };\n\n  var partial = {\n\n    priority: PARTIAL,\n\n    params: ['name'],\n\n    // watch changes to name for dynamic partials\n    paramWatchers: {\n      name: function name(value) {\n        vIf.remove.call(this);\n        if (value) {\n          this.insert(value);\n        }\n      }\n    },\n\n    bind: function bind() {\n      this.anchor = createAnchor('v-partial');\n      replace(this.el, this.anchor);\n      this.insert(this.params.name);\n    },\n\n    insert: function insert(id) {\n      var partial = resolveAsset(this.vm.$options, 'partials', id, true);\n      if (partial) {\n        this.factory = new FragmentFactory(this.vm, partial);\n        vIf.insert.call(this);\n      }\n    },\n\n    unbind: function unbind() {\n      if (this.frag) {\n        this.frag.destroy();\n      }\n    }\n  };\n\n  var elementDirectives = {\n    slot: slot,\n    partial: partial\n  };\n\n  var convertArray = vFor._postProcess;\n\n  /**\n   * Limit filter for arrays\n   *\n   * @param {Number} n\n   * @param {Number} offset (Decimal expected)\n   */\n\n  function limitBy(arr, n, offset) {\n    offset = offset ? parseInt(offset, 10) : 0;\n    n = toNumber(n);\n    return typeof n === 'number' ? arr.slice(offset, offset + n) : arr;\n  }\n\n  /**\n   * Filter filter for arrays\n   *\n   * @param {String} search\n   * @param {String} [delimiter]\n   * @param {String} ...dataKeys\n   */\n\n  function filterBy(arr, search, delimiter) {\n    arr = convertArray(arr);\n    if (search == null) {\n      return arr;\n    }\n    if (typeof search === 'function') {\n      return arr.filter(search);\n    }\n    // cast to lowercase string\n    search = ('' + search).toLowerCase();\n    // allow optional `in` delimiter\n    // because why not\n    var n = delimiter === 'in' ? 3 : 2;\n    // extract and flatten keys\n    var keys = Array.prototype.concat.apply([], toArray(arguments, n));\n    var res = [];\n    var item, key, val, j;\n    for (var i = 0, l = arr.length; i < l; i++) {\n      item = arr[i];\n      val = item && item.$value || item;\n      j = keys.length;\n      if (j) {\n        while (j--) {\n          key = keys[j];\n          if (key === '$key' && contains(item.$key, search) || contains(getPath(val, key), search)) {\n            res.push(item);\n            break;\n          }\n        }\n      } else if (contains(item, search)) {\n        res.push(item);\n      }\n    }\n    return res;\n  }\n\n  /**\n   * Filter filter for arrays\n   *\n   * @param {String|Array<String>|Function} ...sortKeys\n   * @param {Number} [order]\n   */\n\n  function orderBy(arr) {\n    var comparator = null;\n    var sortKeys = undefined;\n    arr = convertArray(arr);\n\n    // determine order (last argument)\n    var args = toArray(arguments, 1);\n    var order = args[args.length - 1];\n    if (typeof order === 'number') {\n      order = order < 0 ? -1 : 1;\n      args = args.length > 1 ? args.slice(0, -1) : args;\n    } else {\n      order = 1;\n    }\n\n    // determine sortKeys & comparator\n    var firstArg = args[0];\n    if (!firstArg) {\n      return arr;\n    } else if (typeof firstArg === 'function') {\n      // custom comparator\n      comparator = function (a, b) {\n        return firstArg(a, b) * order;\n      };\n    } else {\n      // string keys. flatten first\n      sortKeys = Array.prototype.concat.apply([], args);\n      comparator = function (a, b, i) {\n        i = i || 0;\n        return i >= sortKeys.length - 1 ? baseCompare(a, b, i) : baseCompare(a, b, i) || comparator(a, b, i + 1);\n      };\n    }\n\n    function baseCompare(a, b, sortKeyIndex) {\n      var sortKey = sortKeys[sortKeyIndex];\n      if (sortKey) {\n        if (sortKey !== '$key') {\n          if (isObject(a) && '$value' in a) a = a.$value;\n          if (isObject(b) && '$value' in b) b = b.$value;\n        }\n        a = isObject(a) ? getPath(a, sortKey) : a;\n        b = isObject(b) ? getPath(b, sortKey) : b;\n      }\n      return a === b ? 0 : a > b ? order : -order;\n    }\n\n    // sort on a copy to avoid mutating original array\n    return arr.slice().sort(comparator);\n  }\n\n  /**\n   * String contain helper\n   *\n   * @param {*} val\n   * @param {String} search\n   */\n\n  function contains(val, search) {\n    var i;\n    if (isPlainObject(val)) {\n      var keys = Object.keys(val);\n      i = keys.length;\n      while (i--) {\n        if (contains(val[keys[i]], search)) {\n          return true;\n        }\n      }\n    } else if (isArray(val)) {\n      i = val.length;\n      while (i--) {\n        if (contains(val[i], search)) {\n          return true;\n        }\n      }\n    } else if (val != null) {\n      return val.toString().toLowerCase().indexOf(search) > -1;\n    }\n  }\n\n  var digitsRE = /(\\d{3})(?=\\d)/g;\n\n  // asset collections must be a plain object.\n  var filters = {\n\n    orderBy: orderBy,\n    filterBy: filterBy,\n    limitBy: limitBy,\n\n    /**\n     * Stringify value.\n     *\n     * @param {Number} indent\n     */\n\n    json: {\n      read: function read(value, indent) {\n        return typeof value === 'string' ? value : JSON.stringify(value, null, Number(indent) || 2);\n      },\n      write: function write(value) {\n        try {\n          return JSON.parse(value);\n        } catch (e) {\n          return value;\n        }\n      }\n    },\n\n    /**\n     * 'abc' => 'Abc'\n     */\n\n    capitalize: function capitalize(value) {\n      if (!value && value !== 0) return '';\n      value = value.toString();\n      return value.charAt(0).toUpperCase() + value.slice(1);\n    },\n\n    /**\n     * 'abc' => 'ABC'\n     */\n\n    uppercase: function uppercase(value) {\n      return value || value === 0 ? value.toString().toUpperCase() : '';\n    },\n\n    /**\n     * 'AbC' => 'abc'\n     */\n\n    lowercase: function lowercase(value) {\n      return value || value === 0 ? value.toString().toLowerCase() : '';\n    },\n\n    /**\n     * 12345 => $12,345.00\n     *\n     * @param {String} sign\n     */\n\n    currency: function currency(value, _currency) {\n      value = parseFloat(value);\n      if (!isFinite(value) || !value && value !== 0) return '';\n      _currency = _currency != null ? _currency : '$';\n      var stringified = Math.abs(value).toFixed(2);\n      var _int = stringified.slice(0, -3);\n      var i = _int.length % 3;\n      var head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : '';\n      var _float = stringified.slice(-3);\n      var sign = value < 0 ? '-' : '';\n      return sign + _currency + head + _int.slice(i).replace(digitsRE, '$1,') + _float;\n    },\n\n    /**\n     * 'item' => 'items'\n     *\n     * @params\n     *  an array of strings corresponding to\n     *  the single, double, triple ... forms of the word to\n     *  be pluralized. When the number to be pluralized\n     *  exceeds the length of the args, it will use the last\n     *  entry in the array.\n     *\n     *  e.g. ['single', 'double', 'triple', 'multiple']\n     */\n\n    pluralize: function pluralize(value) {\n      var args = toArray(arguments, 1);\n      return args.length > 1 ? args[value % 10 - 1] || args[args.length - 1] : args[0] + (value === 1 ? '' : 's');\n    },\n\n    /**\n     * Debounce a handler function.\n     *\n     * @param {Function} handler\n     * @param {Number} delay = 300\n     * @return {Function}\n     */\n\n    debounce: function debounce(handler, delay) {\n      if (!handler) return;\n      if (!delay) {\n        delay = 300;\n      }\n      return _debounce(handler, delay);\n    }\n  };\n\n  function installGlobalAPI (Vue) {\n    /**\n     * Vue and every constructor that extends Vue has an\n     * associated options object, which can be accessed during\n     * compilation steps as `this.constructor.options`.\n     *\n     * These can be seen as the default options of every\n     * Vue instance.\n     */\n\n    Vue.options = {\n      directives: directives,\n      elementDirectives: elementDirectives,\n      filters: filters,\n      transitions: {},\n      components: {},\n      partials: {},\n      replace: true\n    };\n\n    /**\n     * Expose useful internals\n     */\n\n    Vue.util = util;\n    Vue.config = config;\n    Vue.set = set;\n    Vue['delete'] = del;\n    Vue.nextTick = nextTick;\n\n    /**\n     * The following are exposed for advanced usage / plugins\n     */\n\n    Vue.compiler = compiler;\n    Vue.FragmentFactory = FragmentFactory;\n    Vue.internalDirectives = internalDirectives;\n    Vue.parsers = {\n      path: path,\n      text: text,\n      template: template,\n      directive: directive,\n      expression: expression\n    };\n\n    /**\n     * Each instance constructor, including Vue, has a unique\n     * cid. This enables us to create wrapped \"child\n     * constructors\" for prototypal inheritance and cache them.\n     */\n\n    Vue.cid = 0;\n    var cid = 1;\n\n    /**\n     * Class inheritance\n     *\n     * @param {Object} extendOptions\n     */\n\n    Vue.extend = function (extendOptions) {\n      extendOptions = extendOptions || {};\n      var Super = this;\n      var isFirstExtend = Super.cid === 0;\n      if (isFirstExtend && extendOptions._Ctor) {\n        return extendOptions._Ctor;\n      }\n      var name = extendOptions.name || Super.options.name;\n      if ('development' !== 'production') {\n        if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n          warn('Invalid component name: \"' + name + '\". Component names ' + 'can only contain alphanumeric characaters and the hyphen.');\n          name = null;\n        }\n      }\n      var Sub = createClass(name || 'VueComponent');\n      Sub.prototype = Object.create(Super.prototype);\n      Sub.prototype.constructor = Sub;\n      Sub.cid = cid++;\n      Sub.options = mergeOptions(Super.options, extendOptions);\n      Sub['super'] = Super;\n      // allow further extension\n      Sub.extend = Super.extend;\n      // create asset registers, so extended classes\n      // can have their private assets too.\n      config._assetTypes.forEach(function (type) {\n        Sub[type] = Super[type];\n      });\n      // enable recursive self-lookup\n      if (name) {\n        Sub.options.components[name] = Sub;\n      }\n      // cache constructor\n      if (isFirstExtend) {\n        extendOptions._Ctor = Sub;\n      }\n      return Sub;\n    };\n\n    /**\n     * A function that returns a sub-class constructor with the\n     * given name. This gives us much nicer output when\n     * logging instances in the console.\n     *\n     * @param {String} name\n     * @return {Function}\n     */\n\n    function createClass(name) {\n      /* eslint-disable no-new-func */\n      return new Function('return function ' + classify(name) + ' (options) { this._init(options) }')();\n      /* eslint-enable no-new-func */\n    }\n\n    /**\n     * Plugin system\n     *\n     * @param {Object} plugin\n     */\n\n    Vue.use = function (plugin) {\n      /* istanbul ignore if */\n      if (plugin.installed) {\n        return;\n      }\n      // additional parameters\n      var args = toArray(arguments, 1);\n      args.unshift(this);\n      if (typeof plugin.install === 'function') {\n        plugin.install.apply(plugin, args);\n      } else {\n        plugin.apply(null, args);\n      }\n      plugin.installed = true;\n      return this;\n    };\n\n    /**\n     * Apply a global mixin by merging it into the default\n     * options.\n     */\n\n    Vue.mixin = function (mixin) {\n      Vue.options = mergeOptions(Vue.options, mixin);\n    };\n\n    /**\n     * Create asset registration methods with the following\n     * signature:\n     *\n     * @param {String} id\n     * @param {*} definition\n     */\n\n    config._assetTypes.forEach(function (type) {\n      Vue[type] = function (id, definition) {\n        if (!definition) {\n          return this.options[type + 's'][id];\n        } else {\n          /* istanbul ignore if */\n          if ('development' !== 'production') {\n            if (type === 'component' && (commonTagRE.test(id) || reservedTagRE.test(id))) {\n              warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);\n            }\n          }\n          if (type === 'component' && isPlainObject(definition)) {\n            definition.name = id;\n            definition = Vue.extend(definition);\n          }\n          this.options[type + 's'][id] = definition;\n          return definition;\n        }\n      };\n    });\n\n    // expose internal transition API\n    extend(Vue.transition, transition);\n  }\n\n  installGlobalAPI(Vue);\n\n  Vue.version = '1.0.21';\n\n  // devtools global hook\n  /* istanbul ignore next */\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if ('development' !== 'production' && inBrowser && /Chrome\\/\\d+/.test(window.navigator.userAgent)) {\n        console.log('Download the Vue Devtools for a better development experience:\\n' + 'https://github.com/vuejs/vue-devtools');\n      }\n    }\n  }, 0);\n\n  return Vue;\n\n}));"
  },
  {
    "path": "amd/src/lib/vuex.js",
    "content": "/*!\n * Vuex v0.6.2\n * (c) 2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Vuex = factory());\n}(this, function () { 'use strict';\n\n  var babelHelpers = {};\n  babelHelpers.typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n  };\n\n  babelHelpers.classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  babelHelpers.createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  babelHelpers.toConsumableArray = function (arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    } else {\n      return Array.from(arr);\n    }\n  };\n\n  babelHelpers;\n\n  /**\n   * Merge an array of objects into one.\n   *\n   * @param {Array<Object>} arr\n   * @return {Object}\n   */\n\n  function mergeObjects(arr) {\n    return arr.reduce(function (prev, obj) {\n      Object.keys(obj).forEach(function (key) {\n        var existing = prev[key];\n        if (existing) {\n          // allow multiple mutation objects to contain duplicate\n          // handlers for the same mutation type\n          if (Array.isArray(existing)) {\n            existing.push(obj[key]);\n          } else {\n            prev[key] = [prev[key], obj[key]];\n          }\n        } else {\n          prev[key] = obj[key];\n        }\n      });\n      return prev;\n    }, {});\n  }\n\n  /**\n   * Deep clone an object. Faster than JSON.parse(JSON.stringify()).\n   *\n   * @param {*} obj\n   * @return {*}\n   */\n\n  function deepClone(obj) {\n    if (Array.isArray(obj)) {\n      return obj.map(deepClone);\n    } else if (obj && (typeof obj === 'undefined' ? 'undefined' : babelHelpers.typeof(obj)) === 'object') {\n      var cloned = {};\n      var keys = Object.keys(obj);\n      for (var i = 0, l = keys.length; i < l; i++) {\n        var key = keys[i];\n        cloned[key] = deepClone(obj[key]);\n      }\n      return cloned;\n    } else {\n      return obj;\n    }\n  }\n\n  /**\n   * Hacks to get access to Vue internals.\n   * Maybe we should expose these...\n   */\n\n  var Watcher = void 0;\n  function getWatcher(vm) {\n    if (!Watcher) {\n      var unwatch = vm.$watch('__vuex__', function (a) {\n        return a;\n      });\n      Watcher = vm._watchers[0].constructor;\n      unwatch();\n    }\n    return Watcher;\n  }\n\n  var Dep = void 0;\n  function getDep(vm) {\n    if (!Dep) {\n      Dep = vm._data.__ob__.dep.constructor;\n    }\n    return Dep;\n  }\n\n  var hook = typeof window !== 'undefined' && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n  var devtoolMiddleware = {\n    onInit: function onInit(state, store) {\n      if (!hook) return;\n      hook.emit('vuex:init', store);\n      hook.on('vuex:travel-to-state', function (targetState) {\n        var currentState = store._vm._data;\n        store._dispatching = true;\n        Object.keys(targetState).forEach(function (key) {\n          currentState[key] = targetState[key];\n        });\n        store._dispatching = false;\n      });\n    },\n    onMutation: function onMutation(mutation, state) {\n      if (!hook) return;\n      hook.emit('vuex:mutation', mutation, state);\n    }\n  };\n\n  function override (Vue) {\n    // override init and inject vuex init procedure\n    var _init = Vue.prototype._init;\n    Vue.prototype._init = function () {\n      var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      options.init = options.init ? [vuexInit].concat(options.init) : vuexInit;\n      _init.call(this, options);\n    };\n\n    function vuexInit() {\n      var options = this.$options;\n      var store = options.store;\n      var vuex = options.vuex;\n      // store injection\n\n      if (store) {\n        this.$store = store;\n      } else if (options.parent && options.parent.$store) {\n        this.$store = options.parent.$store;\n      }\n      // vuex option handling\n      if (vuex) {\n        if (!this.$store) {\n          console.warn('[vuex] store not injected. make sure to ' + 'provide the store option in your root component.');\n        }\n        var state = vuex.state;\n        var getters = vuex.getters;\n        var actions = vuex.actions;\n        // handle deprecated state option\n\n        if (state && !getters) {\n          console.warn('[vuex] vuex.state option will been deprecated in 1.0. ' + 'Use vuex.getters instead.');\n          getters = state;\n        }\n        // getters\n        if (getters) {\n          options.computed = options.computed || {};\n          for (var key in getters) {\n            defineVuexGetter(this, key, getters[key]);\n          }\n        }\n        // actions\n        if (actions) {\n          options.methods = options.methods || {};\n          for (var _key in actions) {\n            options.methods[_key] = makeBoundAction(actions[_key], this.$store);\n          }\n        }\n      }\n    }\n\n    function setter() {\n      throw new Error('vuex getter properties are read-only.');\n    }\n\n    function defineVuexGetter(vm, key, getter) {\n      Object.defineProperty(vm, key, {\n        enumerable: true,\n        configurable: true,\n        get: makeComputedGetter(vm.$store, getter),\n        set: setter\n      });\n    }\n\n    function makeComputedGetter(store, getter) {\n      var id = store._getterCacheId;\n      // cached\n      if (getter[id]) {\n        return getter[id];\n      }\n      var vm = store._vm;\n      var Watcher = getWatcher(vm);\n      var Dep = getDep(vm);\n      var watcher = new Watcher(vm, function (state) {\n        return getter(state);\n      }, null, { lazy: true });\n      var computedGetter = function computedGetter() {\n        if (watcher.dirty) {\n          watcher.evaluate();\n        }\n        if (Dep.target) {\n          watcher.depend();\n        }\n        return watcher.value;\n      };\n      getter[id] = computedGetter;\n      return computedGetter;\n    }\n\n    function makeBoundAction(action, store) {\n      return function vuexBoundAction() {\n        for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        return action.call.apply(action, [this, store].concat(args));\n      };\n    }\n\n    // option merging\n    var merge = Vue.config.optionMergeStrategies.computed;\n    Vue.config.optionMergeStrategies.vuex = function (toVal, fromVal) {\n      if (!toVal) return fromVal;\n      if (!fromVal) return toVal;\n      return {\n        getters: merge(toVal.getters, fromVal.getters),\n        state: merge(toVal.state, fromVal.state),\n        actions: merge(toVal.actions, fromVal.actions)\n      };\n    };\n  }\n\n  var Vue = void 0;\n  var uid = 0;\n\n  var Store = function () {\n\n    /**\n     * @param {Object} options\n     *        - {Object} state\n     *        - {Object} actions\n     *        - {Object} mutations\n     *        - {Array} middlewares\n     *        - {Boolean} strict\n     */\n\n    function Store() {\n      var _this = this;\n\n      var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var _ref$state = _ref.state;\n      var state = _ref$state === undefined ? {} : _ref$state;\n      var _ref$mutations = _ref.mutations;\n      var mutations = _ref$mutations === undefined ? {} : _ref$mutations;\n      var _ref$modules = _ref.modules;\n      var modules = _ref$modules === undefined ? {} : _ref$modules;\n      var _ref$middlewares = _ref.middlewares;\n      var middlewares = _ref$middlewares === undefined ? [] : _ref$middlewares;\n      var _ref$strict = _ref.strict;\n      var strict = _ref$strict === undefined ? false : _ref$strict;\n      babelHelpers.classCallCheck(this, Store);\n\n      this._getterCacheId = 'vuex_store_' + uid++;\n      this._dispatching = false;\n      this._rootMutations = this._mutations = mutations;\n      this._modules = modules;\n      // bind dispatch to self\n      var dispatch = this.dispatch;\n      this.dispatch = function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        dispatch.apply(_this, args);\n      };\n      // use a Vue instance to store the state tree\n      // suppress warnings just in case the user has added\n      // some funky global mixins\n      if (!Vue) {\n        throw new Error('[vuex] must call Vue.use(Vuex) before creating a store instance.');\n      }\n      var silent = Vue.config.silent;\n      Vue.config.silent = true;\n      this._vm = new Vue({\n        data: state\n      });\n      Vue.config.silent = silent;\n      this._setupModuleState(state, modules);\n      this._setupModuleMutations(modules);\n      this._setupMiddlewares(middlewares, state);\n      // add extra warnings in strict mode\n      if (strict) {\n        this._setupMutationCheck();\n      }\n    }\n\n    /**\n     * Getter for the entire state tree.\n     * Read only.\n     *\n     * @return {Object}\n     */\n\n    babelHelpers.createClass(Store, [{\n      key: 'dispatch',\n\n\n      /**\n       * Dispatch an action.\n       *\n       * @param {String} type\n       */\n\n      value: function dispatch(type) {\n        var _this2 = this;\n\n        for (var _len2 = arguments.length, payload = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          payload[_key2 - 1] = arguments[_key2];\n        }\n\n        // compatibility for object actions, e.g. FSA\n        if ((typeof type === 'undefined' ? 'undefined' : babelHelpers.typeof(type)) === 'object' && type.type && arguments.length === 1) {\n          payload = [type];\n          type = type.type;\n        }\n        var mutation = this._mutations[type];\n        var prevSnapshot = this._prevSnapshot;\n        var state = this.state;\n        var snapshot = void 0,\n            clonedPayload = void 0;\n        if (mutation) {\n          this._dispatching = true;\n          // apply the mutation\n          if (Array.isArray(mutation)) {\n            mutation.forEach(function (m) {\n              return m.apply(undefined, [state].concat(babelHelpers.toConsumableArray(payload)));\n            });\n          } else {\n            mutation.apply(undefined, [state].concat(babelHelpers.toConsumableArray(payload)));\n          }\n          this._dispatching = false;\n          // invoke middlewares\n          if (this._needSnapshots) {\n            snapshot = this._prevSnapshot = deepClone(state);\n            clonedPayload = deepClone(payload);\n          }\n          this._middlewares.forEach(function (m) {\n            if (m.onMutation) {\n              if (m.snapshot) {\n                m.onMutation({ type: type, payload: clonedPayload }, snapshot, prevSnapshot, _this2);\n              } else {\n                m.onMutation({ type: type, payload: payload }, state, _this2);\n              }\n            }\n          });\n        } else {\n          console.warn('[vuex] Unknown mutation: ' + type);\n        }\n      }\n\n      /**\n       * Watch state changes on the store.\n       * Same API as Vue's $watch, except when watching a function,\n       * the function gets the state as the first argument.\n       *\n       * @param {String|Function} expOrFn\n       * @param {Function} cb\n       * @param {Object} [options]\n       */\n\n    }, {\n      key: 'watch',\n      value: function watch(expOrFn, cb, options) {\n        var _this3 = this;\n\n        return this._vm.$watch(function () {\n          return typeof expOrFn === 'function' ? expOrFn(_this3.state) : _this3._vm.$get(expOrFn);\n        }, cb, options);\n      }\n\n      /**\n       * Hot update mutations & modules.\n       *\n       * @param {Object} options\n       *        - {Object} [mutations]\n       *        - {Object} [modules]\n       */\n\n    }, {\n      key: 'hotUpdate',\n      value: function hotUpdate() {\n        var _ref2 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        var mutations = _ref2.mutations;\n        var modules = _ref2.modules;\n\n        this._rootMutations = this._mutations = mutations || this._rootMutations;\n        this._setupModuleMutations(modules || this._modules);\n      }\n\n      /**\n       * Attach sub state tree of each module to the root tree.\n       *\n       * @param {Object} state\n       * @param {Object} modules\n       */\n\n    }, {\n      key: '_setupModuleState',\n      value: function _setupModuleState(state, modules) {\n        var setPath = Vue.parsers.path.setPath;\n\n        Object.keys(modules).forEach(function (key) {\n          setPath(state, key, modules[key].state || {});\n        });\n      }\n\n      /**\n       * Bind mutations for each module to its sub tree and\n       * merge them all into one final mutations map.\n       *\n       * @param {Object} updatedModules\n       */\n\n    }, {\n      key: '_setupModuleMutations',\n      value: function _setupModuleMutations(updatedModules) {\n        var modules = this._modules;\n        var getPath = Vue.parsers.path.getPath;\n\n        var allMutations = [this._rootMutations];\n        Object.keys(updatedModules).forEach(function (key) {\n          modules[key] = updatedModules[key];\n        });\n        Object.keys(modules).forEach(function (key) {\n          var module = modules[key];\n          if (!module || !module.mutations) return;\n          // bind mutations to sub state tree\n          var mutations = {};\n          Object.keys(module.mutations).forEach(function (name) {\n            var original = module.mutations[name];\n            mutations[name] = function (state) {\n              for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n                args[_key3 - 1] = arguments[_key3];\n              }\n\n              original.apply(undefined, [getPath(state, key)].concat(args));\n            };\n          });\n          allMutations.push(mutations);\n        });\n        this._mutations = mergeObjects(allMutations);\n      }\n\n      /**\n       * Setup mutation check: if the vuex instance's state is mutated\n       * outside of a mutation handler, we throw en error. This effectively\n       * enforces all mutations to the state to be trackable and hot-reloadble.\n       * However, this comes at a run time cost since we are doing a deep\n       * watch on the entire state tree, so it is only enalbed with the\n       * strict option is set to true.\n       */\n\n    }, {\n      key: '_setupMutationCheck',\n      value: function _setupMutationCheck() {\n        var _this4 = this;\n\n        var Watcher = getWatcher(this._vm);\n        /* eslint-disable no-new */\n        new Watcher(this._vm, '$data', function () {\n          if (!_this4._dispatching) {\n            throw new Error('[vuex] Do not mutate vuex store state outside mutation handlers.');\n          }\n        }, { deep: true, sync: true });\n        /* eslint-enable no-new */\n      }\n\n      /**\n       * Setup the middlewares. The devtools middleware is always\n       * included, since it does nothing if no devtool is detected.\n       *\n       * A middleware can demand the state it receives to be\n       * \"snapshots\", i.e. deep clones of the actual state tree.\n       *\n       * @param {Array} middlewares\n       * @param {Object} state\n       */\n\n    }, {\n      key: '_setupMiddlewares',\n      value: function _setupMiddlewares(middlewares, state) {\n        var _this5 = this;\n\n        this._middlewares = [devtoolMiddleware].concat(middlewares);\n        this._needSnapshots = middlewares.some(function (m) {\n          return m.snapshot;\n        });\n        if (this._needSnapshots) {\n          console.log('[vuex] One or more of your middlewares are taking state snapshots ' + 'for each mutation. Make sure to use them only during development.');\n        }\n        var initialSnapshot = this._prevSnapshot = this._needSnapshots ? deepClone(state) : null;\n        // call init hooks\n        this._middlewares.forEach(function (m) {\n          if (m.onInit) {\n            m.onInit(m.snapshot ? initialSnapshot : state, _this5);\n          }\n        });\n      }\n    }, {\n      key: 'state',\n      get: function get() {\n        return this._vm._data;\n      },\n      set: function set(v) {\n        throw new Error('[vuex] Vuex root state is read only.');\n      }\n    }]);\n    return Store;\n  }();\n\n  function install(_Vue) {\n    Vue = _Vue;\n    override(Vue);\n  }\n\n  // auto install in dist mode\n  if (typeof window !== 'undefined' && window.Vue) {\n    install(window.Vue);\n  }\n\n  function createLogger() {\n    console.warn('[vuex] Vuex.createLogger has been deprecated.' + 'Use `import createLogger from \\'vuex/logger\\' instead.');\n  }\n\n  var index = {\n    Store: Store,\n    install: install,\n    createLogger: createLogger\n  };\n\n  return index;\n\n}));"
  },
  {
    "path": "amd/src/main.js",
    "content": "/**\n * Created by  on 2016/3/25.\n */\ndefine(function(require){\n    var Vue = require(\"vue\");\n    var store = require(\"vuex/store\")\n    var app =  require(\"component/App\")\n    var $ = require(\"jquery\");\n    require(\"bootstrap\")\n    require(\"ripples\")\n    require(\"material\")\n    \n    Vue.config.debug = true;\n    Vue.config.devtools = true;\n\n    new Vue({\n        el : \"body\",\n        store: store,\n        ready: function(){\n            $.material.init();\n        },\n        components:{\n            App: app\n        }\n    });\n});\n\n\n"
  },
  {
    "path": "amd/src/require.js",
    "content": "/*\n RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.\n Available via the MIT or new BSD license.\n see: http://github.com/jrburke/requirejs for details\n*/\nvar requirejs,require,define;\n(function(ca){function G(b){return\"[object Function]\"===M.call(b)}function H(b){return\"[object Array]\"===M.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&\"object\"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof\nRegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split(\".\"),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+\"\\nhttp://requirejs.org/docs/errors.html#\"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split(\"/\");n=I;var m=l.map,k=m&&m[\"*\"];if(a&&\".\"===a.charAt(0))if(e){n=\nI.slice(0,I.length-1);a=a.split(\"/\");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,\"\"));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],\".\"===c)n.splice(e,1),e-=1;else if(\"..\"===c)if(1===e&&(\"..\"===n[2]||\"..\"===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join(\"/\")}else 0===a.indexOf(\"./\")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split(\"/\");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join(\"/\");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join(\"/\")))if(b=j(b,d)){f=b;\ng=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join(\"/\"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName(\"script\"),function(e){if(e.getAttribute(\"data-requiremodule\")===a&&e.getAttribute(\"data-requirecontext\")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf(\"!\"):-1;-1<b&&(e=a.substring(0,\nb),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k=\"\";a||(m=!1,a=\"_@r\"+(M+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?\"_unnormalized\"+(Q+=1):\"\";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+\"!\"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));\nreturn b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))\"defined\"===e&&b(p[f]);else if(n=q(a),n.error&&\"error\"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit(\"error\",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit(\"error\",a.error):(e[f]=\n!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C(\"timeout\",\"Load timeout for modules: \"+\nf,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent(\"onreadystatechange\",e):a.removeEventListener(\"load\",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener(\"error\",e,!1);return{node:a,id:a&&a.getAttribute(\"data-requiremodule\")}}function L(){var a;\nfor(x();A.length;){a=A.shift();if(null===a[0])return w(C(\"mismatch\",\"Mismatched anonymous define() module: \"+a[a.length-1]));E(a)}}var X,$,i,N,Y,l={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},M=1,Q=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?p[a.map.id]=a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?\na.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on(\"error\",b);else this.events.error&&(b=t(this,function(a){this.emit(\"error\",a)}));this.depMaps=a&&a.slice(0);this.errback=\nb;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=\nthis.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit(\"error\",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&\n(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?\"define\":\"require\",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=\nthis.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,\"defined\",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||\"\"),f=m(a.prefix+\"!\"+J,this.map.parentMap),r(f,\"defined\",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);\nif(this.events.error)g.on(\"error\",t(this,function(a){this.emit(\"error\",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+\"_unnormalized\")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C(\"fromtexteval\",\n\"fromText eval for \"+b+\" failed: \"+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if(\"string\"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,\"defined\",t(this,function(a){this.defineDep(b,\na);this.check()}));this.errback&&r(a,\"error\",t(this,this.errback))}c=a.id;f=k[c];!s(N,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});\"error\"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,\nnextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&\"/\"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+=\"/\");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,\na=\"string\"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+\"/\"+(a.main||\"main\").replace(ja,\"\").replace(R,\"\")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=\n!0);if(\"string\"===typeof f){if(G(c))return w(C(\"requireargs\",\"Invalid require call\"),d);if(a&&s(N,f))return N[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C(\"notloaded\",'Module name \"'+j+'\" has not been loaded yet for context: '+b+(a?\"\":\". Use require([])\"))):p[j]}L();i.nextTick(function(){L();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf(\".\"),g=b.split(\"/\")[0];if(-1!==\nd&&(!(\".\"===g||\"..\"===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,\nc,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C(\"nodefine\",\"No define call for \"+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||\"\");else{f=l.paths;a=a.split(\"/\");for(d=a.length;0<d;d-=1)if(g=a.slice(0,\nd).join(\"/\"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join(\"/\");f+=b||(/^data\\:|\\?/.test(f)||c?\"\":\".js\");f=(\"/\"===f.charAt(0)||f.match(/^[\\w\\+\\.\\-]+:/)?\"\":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf(\"?\")?\"?\":\"&\")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if(\"load\"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=K(a),i.completeLoad(a.id)},onScriptError:function(a){var b=K(a);if(!g(b.id))return w(C(\"scripterror\",\n\"Script error for: \"+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,K,E,P,L,q,Q,la=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,ma=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,R=/\\.js$/,ja=/^\\.\\//;x=Object.prototype;var M=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!(\"undefined\"!==typeof window&&\"undefined\"!==typeof navigator&&window.document),fa=!z&&\"undefined\"!==typeof importScripts,ka=z&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,\nZ=\"undefined\"!==typeof opera&&\"[object Opera]\"===opera.toString(),F={},r={},S=[],O=!1;if(\"undefined\"===typeof define){if(\"undefined\"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}\"undefined\"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m=\"_\";!H(b)&&\"string\"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};\nh.nextTick=\"undefined\"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version=\"2.1.11\";h.jsExtRegExp=/^\\/|:|\\?|\\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName(\"head\")[0],D=document.getElementsByTagName(\"base\")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=\nb.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");c.type=b.scriptType||\"text/javascript\";c.charset=\"utf-8\";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute(\"data-requirecontext\",b.contextName),g.setAttribute(\"data-requiremodule\",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf(\"[native code\"))&&!Z?(O=!0,g.attachEvent(\"onreadystatechange\",b.onScriptLoad)):\n(g.addEventListener(\"load\",b.onScriptLoad,!1),g.addEventListener(\"error\",b.onScriptError,!1)),g.src=d,L=g,D?y.insertBefore(g,D):y.appendChild(g),L=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C(\"importscripts\",\"importScripts failed for \"+c+\" at \"+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName(\"script\"),function(b){y||(y=b.parentNode);if(K=b.getAttribute(\"data-main\"))return q=K,r.baseUrl||(E=q.split(\"/\"),q=E.pop(),Q=E.length?E.join(\"/\")+\"/\":\"./\",r.baseUrl=\nQ),q=q.replace(R,\"\"),h.jsExtRegExp.test(q)&&(q=K),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;\"string\"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,\"\").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(c)));if(O){if(!(g=L))P&&\"interactive\"===P.readyState||U(document.getElementsByTagName(\"script\"),function(b){if(\"interactive\"===b.readyState)return P=b}),g=P;g&&(b||\n(b=g.getAttribute(\"data-requiremodule\")),h=F[g.getAttribute(\"data-requirecontext\")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);\n"
  },
  {
    "path": "amd/src/vuex/actions.js",
    "content": "define(function(require){\n    var api = require(\"api\");\n    var types = require(\"vuex/mutation-types\")\n    var actions = {\n        // 设置查询分组\n        setSearchGroup : function(store,group,key){\n            store.dispatch(types.SET_SEARCH_GROUP_VAL, group);\n            // 查询结果\n            actions.searchParamList(store,group,key);\n        },\n        // clear 查询项\n        clearSearchKey : function(store){\n            store.dispatch(types.CLEAR_SEARCH_VAL)\n        },\n        // 更新查询项\n        updateSearchKey : function(store , key){\n            store.dispatch(types.UPDATE_SEARCH_VAL,key);\n        },\n        // 查询结果集合\n        searchParamList : function(store , group ,key){\n            var result = api.searchParamList({\n                type:group,\n                key:key\n            });\n            if(result.data){\n                store.dispatch(types.SET_SEARCH_LIST,result.data);\n            }\n        }\n\n    }\n    return actions;\n})\n"
  },
  {
    "path": "amd/src/vuex/getters.js",
    "content": "define(function(){\n\n    return {\n        isEmptySearchKey : function(store){\n            return store.search.searchKey !== \"\"\n        }\n    }\n\n});"
  },
  {
    "path": "amd/src/vuex/modules/search.js",
    "content": "/**\n * Created by  on 2016/4/1.\n */\ndefine(function(require){\n    var types = require(\"vuex/mutation-types\");\n    var state = {\n        // 查询条件\n        searchKey : \"\",\n        // 查询结果\n        searchResultList : []\n    }\n    // mutations\n    var mutations = {}\n\n    mutations[types.SET_SEARCH_LIST] = function(state,list) {\n        state.searchResultList = list;\n    }\n    mutations[types.UPDATE_SEARCH_VAL] = function(state , key) {\n        state.searchKey = key ;\n    }\n    mutations[types.CLEAR_SEARCH_VAL] = function(state ) {\n        state.searchKey = \"\";\n        state.searchResultList = [];\n    }\n\n    return {\n        state : state,\n        mutations : mutations\n    }\n});\n\n\n"
  },
  {
    "path": "amd/src/vuex/modules/searchGroup.js",
    "content": "/**\n * Created by  on 2016/4/27.\n */\n/**\n * Created by  on 2016/4/1.\n */\ndefine(function(require){\n    var types = require(\"vuex/mutation-types\");\n    var state = {\n        // 分组值\n        searchGroup : 0,\n        // 查询分组项\n        searchGroupItem : [\n            {\n                name: \"全部\",\n                value: 0\n            },\n            {\n                name: \"分类1\",\n                value: 1\n            }, {\n                name: \"分类2\",\n                value: 2\n            },{\n                name: \"分类3\",\n                value: 3\n            }\n        ]\n    }\n    // mutations\n    var mutations = {}\n    mutations[types.SET_SEARCH_GROUP_VAL] = function(state, searchGroup) {\n        state.searchGroup = searchGroup;\n    }\n\n    return {\n        state : state,\n        mutations : mutations\n    }\n});"
  },
  {
    "path": "amd/src/vuex/mutation-types.js",
    "content": "define(function(){\n    return {\n        // 查询组件types\n        // 查询组件中的 查询信息\n        SEARCH_PARAM_LIST : 'SEARCH_PARAM_LIST',\n        SET_SEARCH_LIST : \"SET_SEARCH_LIST\",\n        GET_SEARCH_LIST : \"GET_SEARCH_LIST\",\n        GET_SEARCH_GROUP_DATA : \"GET_SEARCH_GROUP_DATA\",\n        // 设置查询分组值到state\n        SET_SEARCH_GROUP_VAL : 'SET_SEARCH_GROUP_VAL',\n        CLEAR_SEARCH_VAL : \"CLEAR_SEARCH_VAL\",\n        UPDATE_SEARCH_VAL : \"UPDATE_SEARCH_VAL\"\n    }\n});\n"
  },
  {
    "path": "amd/src/vuex/store.js",
    "content": "\ndefine(function(require){\n    \n  var Vue = require(\"vue\");\n  var Vuex = require(\"vueX\");\n  var search = require(\"vuex/modules/search\");\n  var searchGroup = require(\"vuex/modules/searchGroup\");\n  Vue.use(Vuex)\n  Vue.config.debug = true;\n\n  return new Vuex.Store({\n    modules: {\n      search : search,\n      searchGroup :searchGroup\n    },\n    strict: true,\n    middlewares: [Vuex.createLogger]\n  })\n})\n\n"
  },
  {
    "path": "gulpfile.babel.js",
    "content": "import path from 'path'\nimport gulp from 'gulp'\nimport gutil from 'gulp-util'\nimport WebpackDevServer from \"webpack-dev-server\"\nimport webpack from \"webpack\"\nimport del from 'del'\nimport env from 'gulp-env'\nimport gulpSequence from 'gulp-sequence'\nimport nodemon from 'gulp-nodemon'\nimport open from 'open'\n\nconst DEV_PORT = 5100,PROD_PORT = 8400\ngulp.task('serve', cb =>{\n  let webpackConfig = require('./webpack.config')\n  let myConfig = Object.create(webpackConfig)\n  myConfig.entry.unshift('webpack-dev-server/client?http://localhost:' + DEV_PORT)\n  new WebpackDevServer(webpack(myConfig), {\n      noInfo: false,\n      hot: true,\n      inline: true,\n      historyApiFallback: true,\n      publicPath: myConfig.output.publicPath,\n      stats: {\n        colors: true\n      }\n  }).listen(DEV_PORT, \"localhost\", err => {\n      if(err) throw new gutil.PluginError(\"webpack-dev-server\", err)\n      gutil.log(\"[webpack-dev-server]\", \"==> 🌎  http://localhost:\" + DEV_PORT)\n      open('http://localhost:' + DEV_PORT)\n  });\n})\n\ngulp.task('clean', cb => del([path.join(__dirname, '/dist/*')]))\n\ngulp.task('set-env-prod', ()=>{\n  env({\n    vars: {\n      'NODE_ENV':'production'\n    }\n  })\n})\n\ngulp.task('webpack', cb => {\n  let webpackConfig = require('./webpack.config')\n  let myConfig = Object.create(webpackConfig)\n  webpack(myConfig, function(err, stats) {\n      if(err) throw new gutil.PluginError(\"webpack\", err)\n      gutil.log(\"[webpack]\", stats.toString({\n          // output options\n      }))\n      cb()\n  })\n})\n\ngulp.task('webpack:dist',gulpSequence('set-env-prod','webpack'))\n\ngulp.task('build', gulpSequence('clean','webpack:dist'))\n\ngulp.task('nodemon', ()=> {\n  nodemon({\n    script: path.join(__dirname,'/server.js'), \n    ext: 'js',\n    watch: [\n      path.join(__dirname,'/dist')\n    ],\n    env: { 'NODE_ENV': 'production','PORT':PROD_PORT }\n  })\n})\n\ngulp.task('serve:dist',gulpSequence('build','nodemon'))"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title></title>\n  </head>\n  <body>\n    <App></App>\n    <script src=\"dist/main.bundle.js\"></script>\n    <script src=\"dist/vendor.bundle.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"vuex-tutorial\",\n  \"version\": \"1.0.0\",\n  \"description\": \"vuex-tutorial\",\n  \"main\": \"index.js\",\n  \"author\": \"yelingfeng\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"dev\": \"gulp serve\",\n    \"build\": \"gulp build\"\n  },\n  \"dependencies\": {\n    \"babel-runtime\": \"^5.8.0\"\n  },\n  \"devDependencies\": {\n    \"babel-core\": \"^6.0.0\",\n    \"babel-loader\": \"^6.0.0\",\n    \"babel-plugin-add-module-exports\": \"^0.1.2\",\n    \"babel-plugin-transform-runtime\": \"^6.0.0\",\n    \"babel-preset-es2015\": \"^6.0.0\",\n    \"babel-preset-stage-2\": \"^6.0.0\",\n    \"babel-register\": \"^6.7.2\",\n    \"bootstrap\": \"^3.3.6\",\n    \"cors\": \"^2.7.1\",\n    \"cross-env\": \"^1.0.6\",\n    \"css-loader\": \"^0.23.0\",\n    \"del\": \"^2.2.0\",\n    \"eslint\": \"^2.4.0\",\n    \"express\": \"^4.13.4\",\n    \"extract-text-webpack-plugin\": \"^1.0.1\",\n    \"file-loader\": \"^0.8.4\",\n    \"gulp\": \"^3.9.1\",\n    \"gulp-env\": \"^0.4.0\",\n    \"gulp-nodemon\": \"^2.0.6\",\n    \"gulp-sequence\": \"^0.4.5\",\n    \"gulp-util\": \"^3.0.7\",\n    \"html-webpack-plugin\": \"^2.15.0\",\n    \"image-webpack-loader\": \"^1.6.3\",\n    \"jquery\": \"^3.0\",\n    \"json-loader\": \"^0.5.4\",\n    \"lodash\": \"^4.6.1\",\n    \"moment\": \"^2.13.0\",\n    \"open\": \"0.0.5\",\n    \"style-loader\": \"^0.13.1\",\n    \"url-loader\": \"^0.5.7\",\n    \"vue\": \"^1.0.20\",\n    \"vue-hot-reload-api\": \"^1.2.0\",\n    \"vue-html-loader\": \"^1.0.0\",\n    \"vue-loader\": \"^8.2.1\",\n    \"vue-resource\": \"^0.7.0\",\n    \"vue-style-loader\": \"^1.0.0\",\n    \"vue-toastr\": \"^1.0.3\",\n    \"vue-validator\": \"^2.0.0\",\n    \"vuex\": \"^0.6.2\",\n    \"webpack\": \"^1.12.2\",\n    \"webpack-dev-server\": \"^1.12.0\"\n  }\n\n}\n"
  },
  {
    "path": "server.js",
    "content": "var path = require('path');\nvar express = require('express');\nvar cors = require(\"cors\");\n\nvar app = new express();\nvar port = process.env.PORT || 8400;\napp.use(express.static(path.join(__dirname, 'dist')));\napp.use(cors());\n\napp.get(\"/\", function(req, res) {\n  return res.sendFile(__dirname + '/dist/index.html')\n})\n\n\napp.post(\"/api/search\" , function(req, res){\n\t res.send({\n\t    result :[\n\t      {\n\t        \"name\" : \"张三\",\n\t        \"address\"  : \"朝阳区/汇鑫大厦\",\n\t        \n\t      },\n\t      {\n\t        \"name\" : \"李四\",\n\t        \"address\" : \"昌平区天通苑龙德广场\",\n\t      },\n\t      {\n\t        \"name\" : \"王五\",\n\t        \"address\" : \"通州区富丽华大厦\",\n\t      }\n\t    ]\n\t  });\n})\n\n\n\napp.listen(port, function(err) {\n  if (err) {\n    console.error(err)\n  } else {\n    console.info(\"==> 🌎  Listening on port %s. Open up http://localhost:%s/ in your browser.\", port, port)\n  }\n})\n"
  },
  {
    "path": "src/api/index.js",
    "content": "/**\n * Created by  on 2016/4/1.\n */\nimport {searchParamList} from \"./resource\";\n\nexport default {\n    getSearchParamList:searchParamList\n}"
  },
  {
    "path": "src/api/resource.js",
    "content": "/**\n * Created by  on 2016/4/1.\n */\nimport Vue from 'vue'\nimport VueResource from 'vue-resource'\nimport {API_ROOT} from '../config'\n\nVue.use(VueResource);\n// HTTP相关\n// Vue.http.options.crossOrigin = true \nexport const  searchParamList = (options) => Vue.http.post(API_ROOT + '/search',options);"
  },
  {
    "path": "src/assets/css/md-facefont.css",
    "content": "\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 300;\n    src: local('Roboto Light'), local('Roboto-Light'), url(\"./../font/roboto/Roboto-Light.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 400;\n    src: local('Roboto'), local('Roboto-Regular'), url(\"./../font/roboto/Roboto-Regular.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 500;\n    src: local('Roboto Medium'), local('Roboto-Medium'), url(\"./../font/roboto/Roboto-Medium.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;\n}\n/* cyrillic */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;\n}\n/* latin-ext */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n    font-family: 'Roboto';\n    font-style: normal;\n    font-weight: 700;\n    src: local('Roboto Bold'), local('Roboto-Bold'), url(\"./../font/roboto/Roboto-Bold.woff2\") format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n}\n\n@font-face {\n    font-family: 'Material Icons';\n    font-style: normal;\n    font-weight: 400;\n    src: url(\"./../font/iconfont/MaterialIcons-Regular.eot\"); /* For IE6-8 */\n    src: local('Material Icons'),\n    local('MaterialIcons-Regular'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.woff2\") format('woff2'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.woff\") format('woff'),\n    url(\"./../font/iconfont/MaterialIcons-Regular.ttf\") format('truetype');\n}\n.material-icons {\n    font-family: 'Material Icons';\n    font-weight: normal;\n    font-style: normal;\n    font-size: 24px; /* Preferred icon size */\n    display: inline-block;\n    width: 1em;\n    height: 1em;\n    line-height: 1;\n    text-transform: none;\n    /* Support for all WebKit browsers. */\n    -webkit-font-smoothing: antialiased;\n    /* Support for Safari and Chrome. */\n    text-rendering: optimizeLegibility;\n    /* Support for Firefox. */\n    -moz-osx-font-smoothing: grayscale;\n    /* Support for IE. */\n    font-feature-settings: 'liga';\n}"
  },
  {
    "path": "src/assets/font/iconfont/MaterialIcons-Regular.ijmap",
    "content": "{\"icons\":{\"e84d\":{\"name\":\"3d Rotation\"},\"e190\":{\"name\":\"Access Alarm\"},\"e191\":{\"name\":\"Access Alarms\"},\"e192\":{\"name\":\"Access Time\"},\"e84e\":{\"name\":\"Accessibility\"},\"e84f\":{\"name\":\"Account Balance\"},\"e850\":{\"name\":\"Account Balance Wallet\"},\"e851\":{\"name\":\"Account Box\"},\"e853\":{\"name\":\"Account Circle\"},\"e60e\":{\"name\":\"Adb\"},\"e145\":{\"name\":\"Add\"},\"e193\":{\"name\":\"Add Alarm\"},\"e003\":{\"name\":\"Add Alert\"},\"e146\":{\"name\":\"Add Box\"},\"e147\":{\"name\":\"Add Circle\"},\"e148\":{\"name\":\"Add Circle Outline\"},\"e854\":{\"name\":\"Add Shopping Cart\"},\"e39d\":{\"name\":\"Add To Photos\"},\"e39e\":{\"name\":\"Adjust\"},\"e630\":{\"name\":\"Airline Seat Flat\"},\"e631\":{\"name\":\"Airline Seat Flat Angled\"},\"e632\":{\"name\":\"Airline Seat Individual Suite\"},\"e633\":{\"name\":\"Airline Seat Legroom Extra\"},\"e634\":{\"name\":\"Airline Seat Legroom Normal\"},\"e635\":{\"name\":\"Airline Seat Legroom Reduced\"},\"e636\":{\"name\":\"Airline Seat Recline Extra\"},\"e637\":{\"name\":\"Airline Seat Recline Normal\"},\"e195\":{\"name\":\"Airplanemode Active\"},\"e194\":{\"name\":\"Airplanemode Inactive\"},\"e055\":{\"name\":\"Airplay\"},\"e855\":{\"name\":\"Alarm\"},\"e856\":{\"name\":\"Alarm Add\"},\"e857\":{\"name\":\"Alarm Off\"},\"e858\":{\"name\":\"Alarm On\"},\"e019\":{\"name\":\"Album\"},\"e859\":{\"name\":\"Android\"},\"e85a\":{\"name\":\"Announcement\"},\"e5c3\":{\"name\":\"Apps\"},\"e149\":{\"name\":\"Archive\"},\"e5c4\":{\"name\":\"Arrow Back\"},\"e5c5\":{\"name\":\"Arrow Drop Down\"},\"e5c6\":{\"name\":\"Arrow Drop Down Circle\"},\"e5c7\":{\"name\":\"Arrow Drop Up\"},\"e5c8\":{\"name\":\"Arrow Forward\"},\"e85b\":{\"name\":\"Aspect Ratio\"},\"e85c\":{\"name\":\"Assessment\"},\"e85d\":{\"name\":\"Assignment\"},\"e85e\":{\"name\":\"Assignment Ind\"},\"e85f\":{\"name\":\"Assignment Late\"},\"e860\":{\"name\":\"Assignment Return\"},\"e861\":{\"name\":\"Assignment Returned\"},\"e862\":{\"name\":\"Assignment Turned In\"},\"e39f\":{\"name\":\"Assistant\"},\"e3a0\":{\"name\":\"Assistant Photo\"},\"e226\":{\"name\":\"Attach File\"},\"e227\":{\"name\":\"Attach Money\"},\"e2bc\":{\"name\":\"Attachment\"},\"e3a1\":{\"name\":\"Audiotrack\"},\"e863\":{\"name\":\"Autorenew\"},\"e01b\":{\"name\":\"Av Timer\"},\"e14a\":{\"name\":\"Backspace\"},\"e864\":{\"name\":\"Backup\"},\"e19c\":{\"name\":\"Battery Alert\"},\"e1a3\":{\"name\":\"Battery Charging Full\"},\"e1a4\":{\"name\":\"Battery Full\"},\"e1a5\":{\"name\":\"Battery Std\"},\"e1a6\":{\"name\":\"Battery Unknown\"},\"e52d\":{\"name\":\"Beenhere\"},\"e14b\":{\"name\":\"Block\"},\"e1a7\":{\"name\":\"Bluetooth\"},\"e60f\":{\"name\":\"Bluetooth Audio\"},\"e1a8\":{\"name\":\"Bluetooth Connected\"},\"e1a9\":{\"name\":\"Bluetooth Disabled\"},\"e1aa\":{\"name\":\"Bluetooth Searching\"},\"e3a2\":{\"name\":\"Blur Circular\"},\"e3a3\":{\"name\":\"Blur Linear\"},\"e3a4\":{\"name\":\"Blur Off\"},\"e3a5\":{\"name\":\"Blur On\"},\"e865\":{\"name\":\"Book\"},\"e866\":{\"name\":\"Bookmark\"},\"e867\":{\"name\":\"Bookmark Border\"},\"e228\":{\"name\":\"Border All\"},\"e229\":{\"name\":\"Border Bottom\"},\"e22a\":{\"name\":\"Border Clear\"},\"e22b\":{\"name\":\"Border Color\"},\"e22c\":{\"name\":\"Border Horizontal\"},\"e22d\":{\"name\":\"Border Inner\"},\"e22e\":{\"name\":\"Border Left\"},\"e22f\":{\"name\":\"Border Outer\"},\"e230\":{\"name\":\"Border Right\"},\"e231\":{\"name\":\"Border Style\"},\"e232\":{\"name\":\"Border Top\"},\"e233\":{\"name\":\"Border Vertical\"},\"e3a6\":{\"name\":\"Brightness 1\"},\"e3a7\":{\"name\":\"Brightness 2\"},\"e3a8\":{\"name\":\"Brightness 3\"},\"e3a9\":{\"name\":\"Brightness 4\"},\"e3aa\":{\"name\":\"Brightness 5\"},\"e3ab\":{\"name\":\"Brightness 6\"},\"e3ac\":{\"name\":\"Brightness 7\"},\"e1ab\":{\"name\":\"Brightness Auto\"},\"e1ac\":{\"name\":\"Brightness High\"},\"e1ad\":{\"name\":\"Brightness Low\"},\"e1ae\":{\"name\":\"Brightness Medium\"},\"e3ad\":{\"name\":\"Broken Image\"},\"e3ae\":{\"name\":\"Brush\"},\"e868\":{\"name\":\"Bug Report\"},\"e869\":{\"name\":\"Build\"},\"e0af\":{\"name\":\"Business\"},\"e86a\":{\"name\":\"Cached\"},\"e7e9\":{\"name\":\"Cake\"},\"e0b0\":{\"name\":\"Call\"},\"e0b1\":{\"name\":\"Call End\"},\"e0b2\":{\"name\":\"Call Made\"},\"e0b3\":{\"name\":\"Call Merge\"},\"e0b4\":{\"name\":\"Call Missed\"},\"e0b5\":{\"name\":\"Call Received\"},\"e0b6\":{\"name\":\"Call Split\"},\"e3af\":{\"name\":\"Camera\"},\"e3b0\":{\"name\":\"Camera Alt\"},\"e8fc\":{\"name\":\"Camera Enhance\"},\"e3b1\":{\"name\":\"Camera Front\"},\"e3b2\":{\"name\":\"Camera Rear\"},\"e3b3\":{\"name\":\"Camera Roll\"},\"e5c9\":{\"name\":\"Cancel\"},\"e8f6\":{\"name\":\"Card Giftcard\"},\"e8f7\":{\"name\":\"Card Membership\"},\"e8f8\":{\"name\":\"Card Travel\"},\"e307\":{\"name\":\"Cast\"},\"e308\":{\"name\":\"Cast Connected\"},\"e3b4\":{\"name\":\"Center Focus Strong\"},\"e3b5\":{\"name\":\"Center Focus Weak\"},\"e86b\":{\"name\":\"Change History\"},\"e0b7\":{\"name\":\"Chat\"},\"e0ca\":{\"name\":\"Chat Bubble\"},\"e0cb\":{\"name\":\"Chat Bubble Outline\"},\"e5ca\":{\"name\":\"Check\"},\"e834\":{\"name\":\"Check Box\"},\"e835\":{\"name\":\"Check Box Outline Blank\"},\"e86c\":{\"name\":\"Check Circle\"},\"e5cb\":{\"name\":\"Chevron Left\"},\"e5cc\":{\"name\":\"Chevron Right\"},\"e86d\":{\"name\":\"Chrome Reader Mode\"},\"e86e\":{\"name\":\"Class\"},\"e14c\":{\"name\":\"Clear\"},\"e0b8\":{\"name\":\"Clear All\"},\"e5cd\":{\"name\":\"Close\"},\"e01c\":{\"name\":\"Closed Caption\"},\"e2bd\":{\"name\":\"Cloud\"},\"e2be\":{\"name\":\"Cloud Circle\"},\"e2bf\":{\"name\":\"Cloud Done\"},\"e2c0\":{\"name\":\"Cloud Download\"},\"e2c1\":{\"name\":\"Cloud Off\"},\"e2c2\":{\"name\":\"Cloud Queue\"},\"e2c3\":{\"name\":\"Cloud Upload\"},\"e86f\":{\"name\":\"Code\"},\"e3b6\":{\"name\":\"Collections\"},\"e431\":{\"name\":\"Collections Bookmark\"},\"e3b7\":{\"name\":\"Color Lens\"},\"e3b8\":{\"name\":\"Colorize\"},\"e0b9\":{\"name\":\"Comment\"},\"e3b9\":{\"name\":\"Compare\"},\"e30a\":{\"name\":\"Computer\"},\"e638\":{\"name\":\"Confirmation Number\"},\"e0cf\":{\"name\":\"Contact Phone\"},\"e0ba\":{\"name\":\"Contacts\"},\"e14d\":{\"name\":\"Content Copy\"},\"e14e\":{\"name\":\"Content Cut\"},\"e14f\":{\"name\":\"Content Paste\"},\"e3ba\":{\"name\":\"Control Point\"},\"e3bb\":{\"name\":\"Control Point Duplicate\"},\"e150\":{\"name\":\"Create\"},\"e870\":{\"name\":\"Credit Card\"},\"e3be\":{\"name\":\"Crop\"},\"e3bc\":{\"name\":\"Crop 16 9\"},\"e3bd\":{\"name\":\"Crop 3 2\"},\"e3bf\":{\"name\":\"Crop 5 4\"},\"e3c0\":{\"name\":\"Crop 7 5\"},\"e3c1\":{\"name\":\"Crop Din\"},\"e3c2\":{\"name\":\"Crop Free\"},\"e3c3\":{\"name\":\"Crop Landscape\"},\"e3c4\":{\"name\":\"Crop Original\"},\"e3c5\":{\"name\":\"Crop Portrait\"},\"e3c6\":{\"name\":\"Crop Square\"},\"e871\":{\"name\":\"Dashboard\"},\"e1af\":{\"name\":\"Data Usage\"},\"e3c7\":{\"name\":\"Dehaze\"},\"e872\":{\"name\":\"Delete\"},\"e873\":{\"name\":\"Description\"},\"e30b\":{\"name\":\"Desktop Mac\"},\"e30c\":{\"name\":\"Desktop Windows\"},\"e3c8\":{\"name\":\"Details\"},\"e30d\":{\"name\":\"Developer Board\"},\"e1b0\":{\"name\":\"Developer Mode\"},\"e335\":{\"name\":\"Device Hub\"},\"e1b1\":{\"name\":\"Devices\"},\"e0bb\":{\"name\":\"Dialer Sip\"},\"e0bc\":{\"name\":\"Dialpad\"},\"e52e\":{\"name\":\"Directions\"},\"e52f\":{\"name\":\"Directions Bike\"},\"e532\":{\"name\":\"Directions Boat\"},\"e530\":{\"name\":\"Directions Bus\"},\"e531\":{\"name\":\"Directions Car\"},\"e534\":{\"name\":\"Directions Railway\"},\"e566\":{\"name\":\"Directions Run\"},\"e533\":{\"name\":\"Directions Subway\"},\"e535\":{\"name\":\"Directions Transit\"},\"e536\":{\"name\":\"Directions Walk\"},\"e610\":{\"name\":\"Disc Full\"},\"e875\":{\"name\":\"Dns\"},\"e612\":{\"name\":\"Do Not Disturb\"},\"e611\":{\"name\":\"Do Not Disturb Alt\"},\"e30e\":{\"name\":\"Dock\"},\"e7ee\":{\"name\":\"Domain\"},\"e876\":{\"name\":\"Done\"},\"e877\":{\"name\":\"Done All\"},\"e151\":{\"name\":\"Drafts\"},\"e613\":{\"name\":\"Drive Eta\"},\"e1b2\":{\"name\":\"Dvr\"},\"e3c9\":{\"name\":\"Edit\"},\"e8fb\":{\"name\":\"Eject\"},\"e0be\":{\"name\":\"Email\"},\"e01d\":{\"name\":\"Equalizer\"},\"e000\":{\"name\":\"Error\"},\"e001\":{\"name\":\"Error Outline\"},\"e878\":{\"name\":\"Event\"},\"e614\":{\"name\":\"Event Available\"},\"e615\":{\"name\":\"Event Busy\"},\"e616\":{\"name\":\"Event Note\"},\"e903\":{\"name\":\"Event Seat\"},\"e879\":{\"name\":\"Exit To App\"},\"e5ce\":{\"name\":\"Expand Less\"},\"e5cf\":{\"name\":\"Expand More\"},\"e01e\":{\"name\":\"Explicit\"},\"e87a\":{\"name\":\"Explore\"},\"e3ca\":{\"name\":\"Exposure\"},\"e3cb\":{\"name\":\"Exposure Neg 1\"},\"e3cc\":{\"name\":\"Exposure Neg 2\"},\"e3cd\":{\"name\":\"Exposure Plus 1\"},\"e3ce\":{\"name\":\"Exposure Plus 2\"},\"e3cf\":{\"name\":\"Exposure Zero\"},\"e87b\":{\"name\":\"Extension\"},\"e87c\":{\"name\":\"Face\"},\"e01f\":{\"name\":\"Fast Forward\"},\"e020\":{\"name\":\"Fast Rewind\"},\"e87d\":{\"name\":\"Favorite\"},\"e87e\":{\"name\":\"Favorite Border\"},\"e87f\":{\"name\":\"Feedback\"},\"e2c4\":{\"name\":\"File Download\"},\"e2c6\":{\"name\":\"File Upload\"},\"e3d3\":{\"name\":\"Filter\"},\"e3d0\":{\"name\":\"Filter 1\"},\"e3d1\":{\"name\":\"Filter 2\"},\"e3d2\":{\"name\":\"Filter 3\"},\"e3d4\":{\"name\":\"Filter 4\"},\"e3d5\":{\"name\":\"Filter 5\"},\"e3d6\":{\"name\":\"Filter 6\"},\"e3d7\":{\"name\":\"Filter 7\"},\"e3d8\":{\"name\":\"Filter 8\"},\"e3d9\":{\"name\":\"Filter 9\"},\"e3da\":{\"name\":\"Filter 9 Plus\"},\"e3db\":{\"name\":\"Filter B And W\"},\"e3dc\":{\"name\":\"Filter Center Focus\"},\"e3dd\":{\"name\":\"Filter Drama\"},\"e3de\":{\"name\":\"Filter Frames\"},\"e3df\":{\"name\":\"Filter Hdr\"},\"e152\":{\"name\":\"Filter List\"},\"e3e0\":{\"name\":\"Filter None\"},\"e3e2\":{\"name\":\"Filter Tilt Shift\"},\"e3e3\":{\"name\":\"Filter Vintage\"},\"e880\":{\"name\":\"Find In Page\"},\"e881\":{\"name\":\"Find Replace\"},\"e153\":{\"name\":\"Flag\"},\"e3e4\":{\"name\":\"Flare\"},\"e3e5\":{\"name\":\"Flash Auto\"},\"e3e6\":{\"name\":\"Flash Off\"},\"e3e7\":{\"name\":\"Flash On\"},\"e539\":{\"name\":\"Flight\"},\"e904\":{\"name\":\"Flight Land\"},\"e905\":{\"name\":\"Flight Takeoff\"},\"e3e8\":{\"name\":\"Flip\"},\"e882\":{\"name\":\"Flip To Back\"},\"e883\":{\"name\":\"Flip To Front\"},\"e2c7\":{\"name\":\"Folder\"},\"e2c8\":{\"name\":\"Folder Open\"},\"e2c9\":{\"name\":\"Folder Shared\"},\"e617\":{\"name\":\"Folder Special\"},\"e167\":{\"name\":\"Font Download\"},\"e234\":{\"name\":\"Format Align Center\"},\"e235\":{\"name\":\"Format Align Justify\"},\"e236\":{\"name\":\"Format Align Left\"},\"e237\":{\"name\":\"Format Align Right\"},\"e238\":{\"name\":\"Format Bold\"},\"e239\":{\"name\":\"Format Clear\"},\"e23a\":{\"name\":\"Format Color Fill\"},\"e23b\":{\"name\":\"Format Color Reset\"},\"e23c\":{\"name\":\"Format Color Text\"},\"e23d\":{\"name\":\"Format Indent Decrease\"},\"e23e\":{\"name\":\"Format Indent Increase\"},\"e23f\":{\"name\":\"Format Italic\"},\"e240\":{\"name\":\"Format Line Spacing\"},\"e241\":{\"name\":\"Format List Bulleted\"},\"e242\":{\"name\":\"Format List Numbered\"},\"e243\":{\"name\":\"Format Paint\"},\"e244\":{\"name\":\"Format Quote\"},\"e245\":{\"name\":\"Format Size\"},\"e246\":{\"name\":\"Format Strikethrough\"},\"e247\":{\"name\":\"Format Textdirection L To R\"},\"e248\":{\"name\":\"Format Textdirection R To L\"},\"e249\":{\"name\":\"Format Underlined\"},\"e0bf\":{\"name\":\"Forum\"},\"e154\":{\"name\":\"Forward\"},\"e056\":{\"name\":\"Forward 10\"},\"e057\":{\"name\":\"Forward 30\"},\"e058\":{\"name\":\"Forward 5\"},\"e5d0\":{\"name\":\"Fullscreen\"},\"e5d1\":{\"name\":\"Fullscreen Exit\"},\"e24a\":{\"name\":\"Functions\"},\"e30f\":{\"name\":\"Gamepad\"},\"e021\":{\"name\":\"Games\"},\"e155\":{\"name\":\"Gesture\"},\"e884\":{\"name\":\"Get App\"},\"e908\":{\"name\":\"Gif\"},\"e1b3\":{\"name\":\"Gps Fixed\"},\"e1b4\":{\"name\":\"Gps Not Fixed\"},\"e1b5\":{\"name\":\"Gps Off\"},\"e885\":{\"name\":\"Grade\"},\"e3e9\":{\"name\":\"Gradient\"},\"e3ea\":{\"name\":\"Grain\"},\"e1b8\":{\"name\":\"Graphic Eq\"},\"e3eb\":{\"name\":\"Grid Off\"},\"e3ec\":{\"name\":\"Grid On\"},\"e7ef\":{\"name\":\"Group\"},\"e7f0\":{\"name\":\"Group Add\"},\"e886\":{\"name\":\"Group Work\"},\"e052\":{\"name\":\"Hd\"},\"e3ed\":{\"name\":\"Hdr Off\"},\"e3ee\":{\"name\":\"Hdr On\"},\"e3f1\":{\"name\":\"Hdr Strong\"},\"e3f2\":{\"name\":\"Hdr Weak\"},\"e310\":{\"name\":\"Headset\"},\"e311\":{\"name\":\"Headset Mic\"},\"e3f3\":{\"name\":\"Healing\"},\"e023\":{\"name\":\"Hearing\"},\"e887\":{\"name\":\"Help\"},\"e8fd\":{\"name\":\"Help Outline\"},\"e024\":{\"name\":\"High Quality\"},\"e888\":{\"name\":\"Highlight Off\"},\"e889\":{\"name\":\"History\"},\"e88a\":{\"name\":\"Home\"},\"e53a\":{\"name\":\"Hotel\"},\"e88b\":{\"name\":\"Hourglass Empty\"},\"e88c\":{\"name\":\"Hourglass Full\"},\"e902\":{\"name\":\"Http\"},\"e88d\":{\"name\":\"Https\"},\"e3f4\":{\"name\":\"Image\"},\"e3f5\":{\"name\":\"Image Aspect Ratio\"},\"e0c3\":{\"name\":\"Import Export\"},\"e156\":{\"name\":\"Inbox\"},\"e909\":{\"name\":\"Indeterminate Check Box\"},\"e88e\":{\"name\":\"Info\"},\"e88f\":{\"name\":\"Info Outline\"},\"e890\":{\"name\":\"Input\"},\"e24b\":{\"name\":\"Insert Chart\"},\"e24c\":{\"name\":\"Insert Comment\"},\"e24d\":{\"name\":\"Insert Drive File\"},\"e24e\":{\"name\":\"Insert Emoticon\"},\"e24f\":{\"name\":\"Insert Invitation\"},\"e250\":{\"name\":\"Insert Link\"},\"e251\":{\"name\":\"Insert Photo\"},\"e891\":{\"name\":\"Invert Colors\"},\"e0c4\":{\"name\":\"Invert Colors Off\"},\"e3f6\":{\"name\":\"Iso\"},\"e312\":{\"name\":\"Keyboard\"},\"e313\":{\"name\":\"Keyboard Arrow Down\"},\"e314\":{\"name\":\"Keyboard Arrow Left\"},\"e315\":{\"name\":\"Keyboard Arrow Right\"},\"e316\":{\"name\":\"Keyboard Arrow Up\"},\"e317\":{\"name\":\"Keyboard Backspace\"},\"e318\":{\"name\":\"Keyboard Capslock\"},\"e31a\":{\"name\":\"Keyboard Hide\"},\"e31b\":{\"name\":\"Keyboard Return\"},\"e31c\":{\"name\":\"Keyboard Tab\"},\"e31d\":{\"name\":\"Keyboard Voice\"},\"e892\":{\"name\":\"Label\"},\"e893\":{\"name\":\"Label Outline\"},\"e3f7\":{\"name\":\"Landscape\"},\"e894\":{\"name\":\"Language\"},\"e31e\":{\"name\":\"Laptop\"},\"e31f\":{\"name\":\"Laptop Chromebook\"},\"e320\":{\"name\":\"Laptop Mac\"},\"e321\":{\"name\":\"Laptop Windows\"},\"e895\":{\"name\":\"Launch\"},\"e53b\":{\"name\":\"Layers\"},\"e53c\":{\"name\":\"Layers Clear\"},\"e3f8\":{\"name\":\"Leak Add\"},\"e3f9\":{\"name\":\"Leak Remove\"},\"e3fa\":{\"name\":\"Lens\"},\"e02e\":{\"name\":\"Library Add\"},\"e02f\":{\"name\":\"Library Books\"},\"e030\":{\"name\":\"Library Music\"},\"e157\":{\"name\":\"Link\"},\"e896\":{\"name\":\"List\"},\"e0c6\":{\"name\":\"Live Help\"},\"e639\":{\"name\":\"Live Tv\"},\"e53f\":{\"name\":\"Local Activity\"},\"e53d\":{\"name\":\"Local Airport\"},\"e53e\":{\"name\":\"Local Atm\"},\"e540\":{\"name\":\"Local Bar\"},\"e541\":{\"name\":\"Local Cafe\"},\"e542\":{\"name\":\"Local Car Wash\"},\"e543\":{\"name\":\"Local Convenience Store\"},\"e556\":{\"name\":\"Local Dining\"},\"e544\":{\"name\":\"Local Drink\"},\"e545\":{\"name\":\"Local Florist\"},\"e546\":{\"name\":\"Local Gas Station\"},\"e547\":{\"name\":\"Local Grocery Store\"},\"e548\":{\"name\":\"Local Hospital\"},\"e549\":{\"name\":\"Local Hotel\"},\"e54a\":{\"name\":\"Local Laundry Service\"},\"e54b\":{\"name\":\"Local Library\"},\"e54c\":{\"name\":\"Local Mall\"},\"e54d\":{\"name\":\"Local Movies\"},\"e54e\":{\"name\":\"Local Offer\"},\"e54f\":{\"name\":\"Local Parking\"},\"e550\":{\"name\":\"Local Pharmacy\"},\"e551\":{\"name\":\"Local Phone\"},\"e552\":{\"name\":\"Local Pizza\"},\"e553\":{\"name\":\"Local Play\"},\"e554\":{\"name\":\"Local Post Office\"},\"e555\":{\"name\":\"Local Printshop\"},\"e557\":{\"name\":\"Local See\"},\"e558\":{\"name\":\"Local Shipping\"},\"e559\":{\"name\":\"Local Taxi\"},\"e7f1\":{\"name\":\"Location City\"},\"e1b6\":{\"name\":\"Location Disabled\"},\"e0c7\":{\"name\":\"Location Off\"},\"e0c8\":{\"name\":\"Location On\"},\"e1b7\":{\"name\":\"Location Searching\"},\"e897\":{\"name\":\"Lock\"},\"e898\":{\"name\":\"Lock Open\"},\"e899\":{\"name\":\"Lock Outline\"},\"e3fc\":{\"name\":\"Looks\"},\"e3fb\":{\"name\":\"Looks 3\"},\"e3fd\":{\"name\":\"Looks 4\"},\"e3fe\":{\"name\":\"Looks 5\"},\"e3ff\":{\"name\":\"Looks 6\"},\"e400\":{\"name\":\"Looks One\"},\"e401\":{\"name\":\"Looks Two\"},\"e028\":{\"name\":\"Loop\"},\"e402\":{\"name\":\"Loupe\"},\"e89a\":{\"name\":\"Loyalty\"},\"e158\":{\"name\":\"Mail\"},\"e55b\":{\"name\":\"Map\"},\"e159\":{\"name\":\"Markunread\"},\"e89b\":{\"name\":\"Markunread Mailbox\"},\"e322\":{\"name\":\"Memory\"},\"e5d2\":{\"name\":\"Menu\"},\"e252\":{\"name\":\"Merge Type\"},\"e0c9\":{\"name\":\"Message\"},\"e029\":{\"name\":\"Mic\"},\"e02a\":{\"name\":\"Mic None\"},\"e02b\":{\"name\":\"Mic Off\"},\"e618\":{\"name\":\"Mms\"},\"e253\":{\"name\":\"Mode Comment\"},\"e254\":{\"name\":\"Mode Edit\"},\"e25c\":{\"name\":\"Money Off\"},\"e403\":{\"name\":\"Monochrome Photos\"},\"e7f2\":{\"name\":\"Mood\"},\"e7f3\":{\"name\":\"Mood Bad\"},\"e619\":{\"name\":\"More\"},\"e5d3\":{\"name\":\"More Horiz\"},\"e5d4\":{\"name\":\"More Vert\"},\"e323\":{\"name\":\"Mouse\"},\"e02c\":{\"name\":\"Movie\"},\"e404\":{\"name\":\"Movie Creation\"},\"e405\":{\"name\":\"Music Note\"},\"e55c\":{\"name\":\"My Location\"},\"e406\":{\"name\":\"Nature\"},\"e407\":{\"name\":\"Nature People\"},\"e408\":{\"name\":\"Navigate Before\"},\"e409\":{\"name\":\"Navigate Next\"},\"e55d\":{\"name\":\"Navigation\"},\"e1b9\":{\"name\":\"Network Cell\"},\"e61a\":{\"name\":\"Network Locked\"},\"e1ba\":{\"name\":\"Network Wifi\"},\"e031\":{\"name\":\"New Releases\"},\"e1bb\":{\"name\":\"Nfc\"},\"e0cc\":{\"name\":\"No Sim\"},\"e033\":{\"name\":\"Not Interested\"},\"e89c\":{\"name\":\"Note Add\"},\"e7f4\":{\"name\":\"Notifications\"},\"e7f7\":{\"name\":\"Notifications Active\"},\"e7f5\":{\"name\":\"Notifications None\"},\"e7f6\":{\"name\":\"Notifications Off\"},\"e7f8\":{\"name\":\"Notifications Paused\"},\"e90a\":{\"name\":\"Offline Pin\"},\"e63a\":{\"name\":\"Ondemand Video\"},\"e89d\":{\"name\":\"Open In Browser\"},\"e89e\":{\"name\":\"Open In New\"},\"e89f\":{\"name\":\"Open With\"},\"e7f9\":{\"name\":\"Pages\"},\"e8a0\":{\"name\":\"Pageview\"},\"e40a\":{\"name\":\"Palette\"},\"e40b\":{\"name\":\"Panorama\"},\"e40c\":{\"name\":\"Panorama Fish Eye\"},\"e40d\":{\"name\":\"Panorama Horizontal\"},\"e40e\":{\"name\":\"Panorama Vertical\"},\"e40f\":{\"name\":\"Panorama Wide Angle\"},\"e7fa\":{\"name\":\"Party Mode\"},\"e034\":{\"name\":\"Pause\"},\"e035\":{\"name\":\"Pause Circle Filled\"},\"e036\":{\"name\":\"Pause Circle Outline\"},\"e8a1\":{\"name\":\"Payment\"},\"e7fb\":{\"name\":\"People\"},\"e7fc\":{\"name\":\"People Outline\"},\"e8a2\":{\"name\":\"Perm Camera Mic\"},\"e8a3\":{\"name\":\"Perm Contact Calendar\"},\"e8a4\":{\"name\":\"Perm Data Setting\"},\"e8a5\":{\"name\":\"Perm Device Information\"},\"e8a6\":{\"name\":\"Perm Identity\"},\"e8a7\":{\"name\":\"Perm Media\"},\"e8a8\":{\"name\":\"Perm Phone Msg\"},\"e8a9\":{\"name\":\"Perm Scan Wifi\"},\"e7fd\":{\"name\":\"Person\"},\"e7fe\":{\"name\":\"Person Add\"},\"e7ff\":{\"name\":\"Person Outline\"},\"e55a\":{\"name\":\"Person Pin\"},\"e63b\":{\"name\":\"Personal Video\"},\"e0cd\":{\"name\":\"Phone\"},\"e324\":{\"name\":\"Phone Android\"},\"e61b\":{\"name\":\"Phone Bluetooth Speaker\"},\"e61c\":{\"name\":\"Phone Forwarded\"},\"e61d\":{\"name\":\"Phone In Talk\"},\"e325\":{\"name\":\"Phone Iphone\"},\"e61e\":{\"name\":\"Phone Locked\"},\"e61f\":{\"name\":\"Phone Missed\"},\"e620\":{\"name\":\"Phone Paused\"},\"e326\":{\"name\":\"Phonelink\"},\"e0db\":{\"name\":\"Phonelink Erase\"},\"e0dc\":{\"name\":\"Phonelink Lock\"},\"e327\":{\"name\":\"Phonelink Off\"},\"e0dd\":{\"name\":\"Phonelink Ring\"},\"e0de\":{\"name\":\"Phonelink Setup\"},\"e410\":{\"name\":\"Photo\"},\"e411\":{\"name\":\"Photo Album\"},\"e412\":{\"name\":\"Photo Camera\"},\"e413\":{\"name\":\"Photo Library\"},\"e432\":{\"name\":\"Photo Size Select Actual\"},\"e433\":{\"name\":\"Photo Size Select Large\"},\"e434\":{\"name\":\"Photo Size Select Small\"},\"e415\":{\"name\":\"Picture As Pdf\"},\"e8aa\":{\"name\":\"Picture In Picture\"},\"e55e\":{\"name\":\"Pin Drop\"},\"e55f\":{\"name\":\"Place\"},\"e037\":{\"name\":\"Play Arrow\"},\"e038\":{\"name\":\"Play Circle Filled\"},\"e039\":{\"name\":\"Play Circle Outline\"},\"e906\":{\"name\":\"Play For Work\"},\"e03b\":{\"name\":\"Playlist Add\"},\"e800\":{\"name\":\"Plus One\"},\"e801\":{\"name\":\"Poll\"},\"e8ab\":{\"name\":\"Polymer\"},\"e0ce\":{\"name\":\"Portable Wifi Off\"},\"e416\":{\"name\":\"Portrait\"},\"e63c\":{\"name\":\"Power\"},\"e336\":{\"name\":\"Power Input\"},\"e8ac\":{\"name\":\"Power Settings New\"},\"e0df\":{\"name\":\"Present To All\"},\"e8ad\":{\"name\":\"Print\"},\"e80b\":{\"name\":\"Public\"},\"e255\":{\"name\":\"Publish\"},\"e8ae\":{\"name\":\"Query Builder\"},\"e8af\":{\"name\":\"Question Answer\"},\"e03c\":{\"name\":\"Queue\"},\"e03d\":{\"name\":\"Queue Music\"},\"e03e\":{\"name\":\"Radio\"},\"e837\":{\"name\":\"Radio Button Checked\"},\"e836\":{\"name\":\"Radio Button Unchecked\"},\"e560\":{\"name\":\"Rate Review\"},\"e8b0\":{\"name\":\"Receipt\"},\"e03f\":{\"name\":\"Recent Actors\"},\"e8b1\":{\"name\":\"Redeem\"},\"e15a\":{\"name\":\"Redo\"},\"e5d5\":{\"name\":\"Refresh\"},\"e15b\":{\"name\":\"Remove\"},\"e15c\":{\"name\":\"Remove Circle\"},\"e15d\":{\"name\":\"Remove Circle Outline\"},\"e417\":{\"name\":\"Remove Red Eye\"},\"e8fe\":{\"name\":\"Reorder\"},\"e040\":{\"name\":\"Repeat\"},\"e041\":{\"name\":\"Repeat One\"},\"e042\":{\"name\":\"Replay\"},\"e059\":{\"name\":\"Replay 10\"},\"e05a\":{\"name\":\"Replay 30\"},\"e05b\":{\"name\":\"Replay 5\"},\"e15e\":{\"name\":\"Reply\"},\"e15f\":{\"name\":\"Reply All\"},\"e160\":{\"name\":\"Report\"},\"e8b2\":{\"name\":\"Report Problem\"},\"e561\":{\"name\":\"Restaurant Menu\"},\"e8b3\":{\"name\":\"Restore\"},\"e0d1\":{\"name\":\"Ring Volume\"},\"e8b4\":{\"name\":\"Room\"},\"e418\":{\"name\":\"Rotate 90 Degrees Ccw\"},\"e419\":{\"name\":\"Rotate Left\"},\"e41a\":{\"name\":\"Rotate Right\"},\"e328\":{\"name\":\"Router\"},\"e562\":{\"name\":\"Satellite\"},\"e161\":{\"name\":\"Save\"},\"e329\":{\"name\":\"Scanner\"},\"e8b5\":{\"name\":\"Schedule\"},\"e80c\":{\"name\":\"School\"},\"e1be\":{\"name\":\"Screen Lock Landscape\"},\"e1bf\":{\"name\":\"Screen Lock Portrait\"},\"e1c0\":{\"name\":\"Screen Lock Rotation\"},\"e1c1\":{\"name\":\"Screen Rotation\"},\"e623\":{\"name\":\"Sd Card\"},\"e1c2\":{\"name\":\"Sd Storage\"},\"e8b6\":{\"name\":\"Search\"},\"e32a\":{\"name\":\"Security\"},\"e162\":{\"name\":\"Select All\"},\"e163\":{\"name\":\"Send\"},\"e8b8\":{\"name\":\"Settings\"},\"e8b9\":{\"name\":\"Settings Applications\"},\"e8ba\":{\"name\":\"Settings Backup Restore\"},\"e8bb\":{\"name\":\"Settings Bluetooth\"},\"e8bd\":{\"name\":\"Settings Brightness\"},\"e8bc\":{\"name\":\"Settings Cell\"},\"e8be\":{\"name\":\"Settings Ethernet\"},\"e8bf\":{\"name\":\"Settings Input Antenna\"},\"e8c0\":{\"name\":\"Settings Input Component\"},\"e8c1\":{\"name\":\"Settings Input Composite\"},\"e8c2\":{\"name\":\"Settings Input Hdmi\"},\"e8c3\":{\"name\":\"Settings Input Svideo\"},\"e8c4\":{\"name\":\"Settings Overscan\"},\"e8c5\":{\"name\":\"Settings Phone\"},\"e8c6\":{\"name\":\"Settings Power\"},\"e8c7\":{\"name\":\"Settings Remote\"},\"e1c3\":{\"name\":\"Settings System Daydream\"},\"e8c8\":{\"name\":\"Settings Voice\"},\"e80d\":{\"name\":\"Share\"},\"e8c9\":{\"name\":\"Shop\"},\"e8ca\":{\"name\":\"Shop Two\"},\"e8cb\":{\"name\":\"Shopping Basket\"},\"e8cc\":{\"name\":\"Shopping Cart\"},\"e043\":{\"name\":\"Shuffle\"},\"e1c8\":{\"name\":\"Signal Cellular 4 Bar\"},\"e1cd\":{\"name\":\"Signal Cellular Connected No Internet 4 Bar\"},\"e1ce\":{\"name\":\"Signal Cellular No Sim\"},\"e1cf\":{\"name\":\"Signal Cellular Null\"},\"e1d0\":{\"name\":\"Signal Cellular Off\"},\"e1d8\":{\"name\":\"Signal Wifi 4 Bar\"},\"e1d9\":{\"name\":\"Signal Wifi 4 Bar Lock\"},\"e1da\":{\"name\":\"Signal Wifi Off\"},\"e32b\":{\"name\":\"Sim Card\"},\"e624\":{\"name\":\"Sim Card Alert\"},\"e044\":{\"name\":\"Skip Next\"},\"e045\":{\"name\":\"Skip Previous\"},\"e41b\":{\"name\":\"Slideshow\"},\"e32c\":{\"name\":\"Smartphone\"},\"e625\":{\"name\":\"Sms\"},\"e626\":{\"name\":\"Sms Failed\"},\"e046\":{\"name\":\"Snooze\"},\"e164\":{\"name\":\"Sort\"},\"e053\":{\"name\":\"Sort By Alpha\"},\"e256\":{\"name\":\"Space Bar\"},\"e32d\":{\"name\":\"Speaker\"},\"e32e\":{\"name\":\"Speaker Group\"},\"e8cd\":{\"name\":\"Speaker Notes\"},\"e0d2\":{\"name\":\"Speaker Phone\"},\"e8ce\":{\"name\":\"Spellcheck\"},\"e838\":{\"name\":\"Star\"},\"e83a\":{\"name\":\"Star Border\"},\"e839\":{\"name\":\"Star Half\"},\"e8d0\":{\"name\":\"Stars\"},\"e0d3\":{\"name\":\"Stay Current Landscape\"},\"e0d4\":{\"name\":\"Stay Current Portrait\"},\"e0d5\":{\"name\":\"Stay Primary Landscape\"},\"e0d6\":{\"name\":\"Stay Primary Portrait\"},\"e047\":{\"name\":\"Stop\"},\"e1db\":{\"name\":\"Storage\"},\"e8d1\":{\"name\":\"Store\"},\"e563\":{\"name\":\"Store Mall Directory\"},\"e41c\":{\"name\":\"Straighten\"},\"e257\":{\"name\":\"Strikethrough S\"},\"e41d\":{\"name\":\"Style\"},\"e8d2\":{\"name\":\"Subject\"},\"e048\":{\"name\":\"Subtitles\"},\"e8d3\":{\"name\":\"Supervisor Account\"},\"e049\":{\"name\":\"Surround Sound\"},\"e0d7\":{\"name\":\"Swap Calls\"},\"e8d4\":{\"name\":\"Swap Horiz\"},\"e8d5\":{\"name\":\"Swap Vert\"},\"e8d6\":{\"name\":\"Swap Vertical Circle\"},\"e41e\":{\"name\":\"Switch Camera\"},\"e41f\":{\"name\":\"Switch Video\"},\"e627\":{\"name\":\"Sync\"},\"e628\":{\"name\":\"Sync Disabled\"},\"e629\":{\"name\":\"Sync Problem\"},\"e62a\":{\"name\":\"System Update\"},\"e8d7\":{\"name\":\"System Update Alt\"},\"e8d8\":{\"name\":\"Tab\"},\"e8d9\":{\"name\":\"Tab Unselected\"},\"e32f\":{\"name\":\"Tablet\"},\"e330\":{\"name\":\"Tablet Android\"},\"e331\":{\"name\":\"Tablet Mac\"},\"e420\":{\"name\":\"Tag Faces\"},\"e62b\":{\"name\":\"Tap And Play\"},\"e564\":{\"name\":\"Terrain\"},\"e165\":{\"name\":\"Text Format\"},\"e0d8\":{\"name\":\"Textsms\"},\"e421\":{\"name\":\"Texture\"},\"e8da\":{\"name\":\"Theaters\"},\"e8db\":{\"name\":\"Thumb Down\"},\"e8dc\":{\"name\":\"Thumb Up\"},\"e8dd\":{\"name\":\"Thumbs Up Down\"},\"e62c\":{\"name\":\"Time To Leave\"},\"e422\":{\"name\":\"Timelapse\"},\"e425\":{\"name\":\"Timer\"},\"e423\":{\"name\":\"Timer 10\"},\"e424\":{\"name\":\"Timer 3\"},\"e426\":{\"name\":\"Timer Off\"},\"e8de\":{\"name\":\"Toc\"},\"e8df\":{\"name\":\"Today\"},\"e8e0\":{\"name\":\"Toll\"},\"e427\":{\"name\":\"Tonality\"},\"e332\":{\"name\":\"Toys\"},\"e8e1\":{\"name\":\"Track Changes\"},\"e565\":{\"name\":\"Traffic\"},\"e428\":{\"name\":\"Transform\"},\"e8e2\":{\"name\":\"Translate\"},\"e8e3\":{\"name\":\"Trending Down\"},\"e8e4\":{\"name\":\"Trending Flat\"},\"e8e5\":{\"name\":\"Trending Up\"},\"e429\":{\"name\":\"Tune\"},\"e8e6\":{\"name\":\"Turned In\"},\"e8e7\":{\"name\":\"Turned In Not\"},\"e333\":{\"name\":\"Tv\"},\"e166\":{\"name\":\"Undo\"},\"e5d6\":{\"name\":\"Unfold Less\"},\"e5d7\":{\"name\":\"Unfold More\"},\"e1e0\":{\"name\":\"Usb\"},\"e8e8\":{\"name\":\"Verified User\"},\"e258\":{\"name\":\"Vertical Align Bottom\"},\"e259\":{\"name\":\"Vertical Align Center\"},\"e25a\":{\"name\":\"Vertical Align Top\"},\"e62d\":{\"name\":\"Vibration\"},\"e04a\":{\"name\":\"Video Library\"},\"e04b\":{\"name\":\"Videocam\"},\"e04c\":{\"name\":\"Videocam Off\"},\"e8e9\":{\"name\":\"View Agenda\"},\"e8ea\":{\"name\":\"View Array\"},\"e8eb\":{\"name\":\"View Carousel\"},\"e8ec\":{\"name\":\"View Column\"},\"e42a\":{\"name\":\"View Comfy\"},\"e42b\":{\"name\":\"View Compact\"},\"e8ed\":{\"name\":\"View Day\"},\"e8ee\":{\"name\":\"View Headline\"},\"e8ef\":{\"name\":\"View List\"},\"e8f0\":{\"name\":\"View Module\"},\"e8f1\":{\"name\":\"View Quilt\"},\"e8f2\":{\"name\":\"View Stream\"},\"e8f3\":{\"name\":\"View Week\"},\"e435\":{\"name\":\"Vignette\"},\"e8f4\":{\"name\":\"Visibility\"},\"e8f5\":{\"name\":\"Visibility Off\"},\"e62e\":{\"name\":\"Voice Chat\"},\"e0d9\":{\"name\":\"Voicemail\"},\"e04d\":{\"name\":\"Volume Down\"},\"e04e\":{\"name\":\"Volume Mute\"},\"e04f\":{\"name\":\"Volume Off\"},\"e050\":{\"name\":\"Volume Up\"},\"e0da\":{\"name\":\"Vpn Key\"},\"e62f\":{\"name\":\"Vpn Lock\"},\"e1bc\":{\"name\":\"Wallpaper\"},\"e002\":{\"name\":\"Warning\"},\"e334\":{\"name\":\"Watch\"},\"e42c\":{\"name\":\"Wb Auto\"},\"e42d\":{\"name\":\"Wb Cloudy\"},\"e42e\":{\"name\":\"Wb Incandescent\"},\"e436\":{\"name\":\"Wb Iridescent\"},\"e430\":{\"name\":\"Wb Sunny\"},\"e63d\":{\"name\":\"Wc\"},\"e051\":{\"name\":\"Web\"},\"e80e\":{\"name\":\"Whatshot\"},\"e1bd\":{\"name\":\"Widgets\"},\"e63e\":{\"name\":\"Wifi\"},\"e1e1\":{\"name\":\"Wifi Lock\"},\"e1e2\":{\"name\":\"Wifi Tethering\"},\"e8f9\":{\"name\":\"Work\"},\"e25b\":{\"name\":\"Wrap Text\"},\"e8fa\":{\"name\":\"Youtube Searched For\"},\"e8ff\":{\"name\":\"Zoom In\"},\"e900\":{\"name\":\"Zoom Out\"}}}"
  },
  {
    "path": "src/assets/font/iconfont/README.md",
    "content": "The recommended way to use the Material Icons font is hosted by Google Fonts,\navailable here:\n\n```\n<link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n      rel=\"stylesheet\">\n```\n\nRead more in our full usage guide:\nhttp://google.github.io/material-design-icons/#icon-font-for-the-web\n\n"
  },
  {
    "path": "src/assets/font/iconfont/codepoints",
    "content": "3d_rotation e84d\naccess_alarm e190\naccess_alarms e191\naccess_time e192\naccessibility e84e\naccount_balance e84f\naccount_balance_wallet e850\naccount_box e851\naccount_circle e853\nadb e60e\nadd e145\nadd_alarm e193\nadd_alert e003\nadd_box e146\nadd_circle e147\nadd_circle_outline e148\nadd_shopping_cart e854\nadd_to_photos e39d\nadjust e39e\nairline_seat_flat e630\nairline_seat_flat_angled e631\nairline_seat_individual_suite e632\nairline_seat_legroom_extra e633\nairline_seat_legroom_normal e634\nairline_seat_legroom_reduced e635\nairline_seat_recline_extra e636\nairline_seat_recline_normal e637\nairplanemode_active e195\nairplanemode_inactive e194\nairplay e055\nalarm e855\nalarm_add e856\nalarm_off e857\nalarm_on e858\nalbum e019\nandroid e859\nannouncement e85a\napps e5c3\narchive e149\narrow_back e5c4\narrow_drop_down e5c5\narrow_drop_down_circle e5c6\narrow_drop_up e5c7\narrow_forward e5c8\naspect_ratio e85b\nassessment e85c\nassignment e85d\nassignment_ind e85e\nassignment_late e85f\nassignment_return e860\nassignment_returned e861\nassignment_turned_in e862\nassistant e39f\nassistant_photo e3a0\nattach_file e226\nattach_money e227\nattachment e2bc\naudiotrack e3a1\nautorenew e863\nav_timer e01b\nbackspace e14a\nbackup e864\nbattery_alert e19c\nbattery_charging_full e1a3\nbattery_full e1a4\nbattery_std e1a5\nbattery_unknown e1a6\nbeenhere e52d\nblock e14b\nbluetooth e1a7\nbluetooth_audio e60f\nbluetooth_connected e1a8\nbluetooth_disabled e1a9\nbluetooth_searching e1aa\nblur_circular e3a2\nblur_linear e3a3\nblur_off e3a4\nblur_on e3a5\nbook e865\nbookmark e866\nbookmark_border e867\nborder_all e228\nborder_bottom e229\nborder_clear e22a\nborder_color e22b\nborder_horizontal e22c\nborder_inner e22d\nborder_left e22e\nborder_outer e22f\nborder_right e230\nborder_style e231\nborder_top e232\nborder_vertical e233\nbrightness_1 e3a6\nbrightness_2 e3a7\nbrightness_3 e3a8\nbrightness_4 e3a9\nbrightness_5 e3aa\nbrightness_6 e3ab\nbrightness_7 e3ac\nbrightness_auto e1ab\nbrightness_high e1ac\nbrightness_low e1ad\nbrightness_medium e1ae\nbroken_image e3ad\nbrush e3ae\nbug_report e868\nbuild e869\nbusiness e0af\ncached e86a\ncake e7e9\ncall e0b0\ncall_end e0b1\ncall_made e0b2\ncall_merge e0b3\ncall_missed e0b4\ncall_received e0b5\ncall_split e0b6\ncamera e3af\ncamera_alt e3b0\ncamera_enhance e8fc\ncamera_front e3b1\ncamera_rear e3b2\ncamera_roll e3b3\ncancel e5c9\ncard_giftcard e8f6\ncard_membership e8f7\ncard_travel e8f8\ncast e307\ncast_connected e308\ncenter_focus_strong e3b4\ncenter_focus_weak e3b5\nchange_history e86b\nchat e0b7\nchat_bubble e0ca\nchat_bubble_outline e0cb\ncheck e5ca\ncheck_box e834\ncheck_box_outline_blank e835\ncheck_circle e86c\nchevron_left e5cb\nchevron_right e5cc\nchrome_reader_mode e86d\nclass e86e\nclear e14c\nclear_all e0b8\nclose e5cd\nclosed_caption e01c\ncloud e2bd\ncloud_circle e2be\ncloud_done e2bf\ncloud_download e2c0\ncloud_off e2c1\ncloud_queue e2c2\ncloud_upload e2c3\ncode e86f\ncollections e3b6\ncollections_bookmark e431\ncolor_lens e3b7\ncolorize e3b8\ncomment e0b9\ncompare e3b9\ncomputer e30a\nconfirmation_number e638\ncontact_phone e0cf\ncontacts e0ba\ncontent_copy e14d\ncontent_cut e14e\ncontent_paste e14f\ncontrol_point e3ba\ncontrol_point_duplicate e3bb\ncreate e150\ncredit_card e870\ncrop e3be\ncrop_16_9 e3bc\ncrop_3_2 e3bd\ncrop_5_4 e3bf\ncrop_7_5 e3c0\ncrop_din e3c1\ncrop_free e3c2\ncrop_landscape e3c3\ncrop_original e3c4\ncrop_portrait e3c5\ncrop_square e3c6\ndashboard e871\ndata_usage e1af\ndehaze e3c7\ndelete e872\ndescription e873\ndesktop_mac e30b\ndesktop_windows e30c\ndetails e3c8\ndeveloper_board e30d\ndeveloper_mode e1b0\ndevice_hub e335\ndevices e1b1\ndialer_sip e0bb\ndialpad e0bc\ndirections e52e\ndirections_bike e52f\ndirections_boat e532\ndirections_bus e530\ndirections_car e531\ndirections_railway e534\ndirections_run e566\ndirections_subway e533\ndirections_transit e535\ndirections_walk e536\ndisc_full e610\ndns e875\ndo_not_disturb e612\ndo_not_disturb_alt e611\ndock e30e\ndomain e7ee\ndone e876\ndone_all e877\ndrafts e151\ndrive_eta e613\ndvr e1b2\nedit e3c9\neject e8fb\nemail e0be\nequalizer e01d\nerror e000\nerror_outline e001\nevent e878\nevent_available e614\nevent_busy e615\nevent_note e616\nevent_seat e903\nexit_to_app e879\nexpand_less e5ce\nexpand_more e5cf\nexplicit e01e\nexplore e87a\nexposure e3ca\nexposure_neg_1 e3cb\nexposure_neg_2 e3cc\nexposure_plus_1 e3cd\nexposure_plus_2 e3ce\nexposure_zero e3cf\nextension e87b\nface e87c\nfast_forward e01f\nfast_rewind e020\nfavorite e87d\nfavorite_border e87e\nfeedback e87f\nfile_download e2c4\nfile_upload e2c6\nfilter e3d3\nfilter_1 e3d0\nfilter_2 e3d1\nfilter_3 e3d2\nfilter_4 e3d4\nfilter_5 e3d5\nfilter_6 e3d6\nfilter_7 e3d7\nfilter_8 e3d8\nfilter_9 e3d9\nfilter_9_plus e3da\nfilter_b_and_w e3db\nfilter_center_focus e3dc\nfilter_drama e3dd\nfilter_frames e3de\nfilter_hdr e3df\nfilter_list e152\nfilter_none e3e0\nfilter_tilt_shift e3e2\nfilter_vintage e3e3\nfind_in_page e880\nfind_replace e881\nflag e153\nflare e3e4\nflash_auto e3e5\nflash_off e3e6\nflash_on e3e7\nflight e539\nflight_land e904\nflight_takeoff e905\nflip e3e8\nflip_to_back e882\nflip_to_front e883\nfolder e2c7\nfolder_open e2c8\nfolder_shared e2c9\nfolder_special e617\nfont_download e167\nformat_align_center e234\nformat_align_justify e235\nformat_align_left e236\nformat_align_right e237\nformat_bold e238\nformat_clear e239\nformat_color_fill e23a\nformat_color_reset e23b\nformat_color_text e23c\nformat_indent_decrease e23d\nformat_indent_increase e23e\nformat_italic e23f\nformat_line_spacing e240\nformat_list_bulleted e241\nformat_list_numbered e242\nformat_paint e243\nformat_quote e244\nformat_size e245\nformat_strikethrough e246\nformat_textdirection_l_to_r e247\nformat_textdirection_r_to_l e248\nformat_underlined e249\nforum e0bf\nforward e154\nforward_10 e056\nforward_30 e057\nforward_5 e058\nfullscreen e5d0\nfullscreen_exit e5d1\nfunctions e24a\ngamepad e30f\ngames e021\ngesture e155\nget_app e884\ngif e908\ngps_fixed e1b3\ngps_not_fixed e1b4\ngps_off e1b5\ngrade e885\ngradient e3e9\ngrain e3ea\ngraphic_eq e1b8\ngrid_off e3eb\ngrid_on e3ec\ngroup e7ef\ngroup_add e7f0\ngroup_work e886\nhd e052\nhdr_off e3ed\nhdr_on e3ee\nhdr_strong e3f1\nhdr_weak e3f2\nheadset e310\nheadset_mic e311\nhealing e3f3\nhearing e023\nhelp e887\nhelp_outline e8fd\nhigh_quality e024\nhighlight_off e888\nhistory e889\nhome e88a\nhotel e53a\nhourglass_empty e88b\nhourglass_full e88c\nhttp e902\nhttps e88d\nimage e3f4\nimage_aspect_ratio e3f5\nimport_export e0c3\ninbox e156\nindeterminate_check_box e909\ninfo e88e\ninfo_outline e88f\ninput e890\ninsert_chart e24b\ninsert_comment e24c\ninsert_drive_file e24d\ninsert_emoticon e24e\ninsert_invitation e24f\ninsert_link e250\ninsert_photo e251\ninvert_colors e891\ninvert_colors_off e0c4\niso e3f6\nkeyboard e312\nkeyboard_arrow_down e313\nkeyboard_arrow_left e314\nkeyboard_arrow_right e315\nkeyboard_arrow_up e316\nkeyboard_backspace e317\nkeyboard_capslock e318\nkeyboard_hide e31a\nkeyboard_return e31b\nkeyboard_tab e31c\nkeyboard_voice e31d\nlabel e892\nlabel_outline e893\nlandscape e3f7\nlanguage e894\nlaptop e31e\nlaptop_chromebook e31f\nlaptop_mac e320\nlaptop_windows e321\nlaunch e895\nlayers e53b\nlayers_clear e53c\nleak_add e3f8\nleak_remove e3f9\nlens e3fa\nlibrary_add e02e\nlibrary_books e02f\nlibrary_music e030\nlink e157\nlist e896\nlive_help e0c6\nlive_tv e639\nlocal_activity e53f\nlocal_airport e53d\nlocal_atm e53e\nlocal_bar e540\nlocal_cafe e541\nlocal_car_wash e542\nlocal_convenience_store e543\nlocal_dining e556\nlocal_drink e544\nlocal_florist e545\nlocal_gas_station e546\nlocal_grocery_store e547\nlocal_hospital e548\nlocal_hotel e549\nlocal_laundry_service e54a\nlocal_library e54b\nlocal_mall e54c\nlocal_movies e54d\nlocal_offer e54e\nlocal_parking e54f\nlocal_pharmacy e550\nlocal_phone e551\nlocal_pizza e552\nlocal_play e553\nlocal_post_office e554\nlocal_printshop e555\nlocal_see e557\nlocal_shipping e558\nlocal_taxi e559\nlocation_city e7f1\nlocation_disabled e1b6\nlocation_off e0c7\nlocation_on e0c8\nlocation_searching e1b7\nlock e897\nlock_open e898\nlock_outline e899\nlooks e3fc\nlooks_3 e3fb\nlooks_4 e3fd\nlooks_5 e3fe\nlooks_6 e3ff\nlooks_one e400\nlooks_two e401\nloop e028\nloupe e402\nloyalty e89a\nmail e158\nmap e55b\nmarkunread e159\nmarkunread_mailbox e89b\nmemory e322\nmenu e5d2\nmerge_type e252\nmessage e0c9\nmic e029\nmic_none e02a\nmic_off e02b\nmms e618\nmode_comment e253\nmode_edit e254\nmoney_off e25c\nmonochrome_photos e403\nmood e7f2\nmood_bad e7f3\nmore e619\nmore_horiz e5d3\nmore_vert e5d4\nmouse e323\nmovie e02c\nmovie_creation e404\nmusic_note e405\nmy_location e55c\nnature e406\nnature_people e407\nnavigate_before e408\nnavigate_next e409\nnavigation e55d\nnetwork_cell e1b9\nnetwork_locked e61a\nnetwork_wifi e1ba\nnew_releases e031\nnfc e1bb\nno_sim e0cc\nnot_interested e033\nnote_add e89c\nnotifications e7f4\nnotifications_active e7f7\nnotifications_none e7f5\nnotifications_off e7f6\nnotifications_paused e7f8\noffline_pin e90a\nondemand_video e63a\nopen_in_browser e89d\nopen_in_new e89e\nopen_with e89f\npages e7f9\npageview e8a0\npalette e40a\npanorama e40b\npanorama_fish_eye e40c\npanorama_horizontal e40d\npanorama_vertical e40e\npanorama_wide_angle e40f\nparty_mode e7fa\npause e034\npause_circle_filled e035\npause_circle_outline e036\npayment e8a1\npeople e7fb\npeople_outline e7fc\nperm_camera_mic e8a2\nperm_contact_calendar e8a3\nperm_data_setting e8a4\nperm_device_information e8a5\nperm_identity e8a6\nperm_media e8a7\nperm_phone_msg e8a8\nperm_scan_wifi e8a9\nperson e7fd\nperson_add e7fe\nperson_outline e7ff\nperson_pin e55a\npersonal_video e63b\nphone e0cd\nphone_android e324\nphone_bluetooth_speaker e61b\nphone_forwarded e61c\nphone_in_talk e61d\nphone_iphone e325\nphone_locked e61e\nphone_missed e61f\nphone_paused e620\nphonelink e326\nphonelink_erase e0db\nphonelink_lock e0dc\nphonelink_off e327\nphonelink_ring e0dd\nphonelink_setup e0de\nphoto e410\nphoto_album e411\nphoto_camera e412\nphoto_library e413\nphoto_size_select_actual e432\nphoto_size_select_large e433\nphoto_size_select_small e434\npicture_as_pdf e415\npicture_in_picture e8aa\npin_drop e55e\nplace e55f\nplay_arrow e037\nplay_circle_filled e038\nplay_circle_outline e039\nplay_for_work e906\nplaylist_add e03b\nplus_one e800\npoll e801\npolymer e8ab\nportable_wifi_off e0ce\nportrait e416\npower e63c\npower_input e336\npower_settings_new e8ac\npresent_to_all e0df\nprint e8ad\npublic e80b\npublish e255\nquery_builder e8ae\nquestion_answer e8af\nqueue e03c\nqueue_music e03d\nradio e03e\nradio_button_checked e837\nradio_button_unchecked e836\nrate_review e560\nreceipt e8b0\nrecent_actors e03f\nredeem e8b1\nredo e15a\nrefresh e5d5\nremove e15b\nremove_circle e15c\nremove_circle_outline e15d\nremove_red_eye e417\nreorder e8fe\nrepeat e040\nrepeat_one e041\nreplay e042\nreplay_10 e059\nreplay_30 e05a\nreplay_5 e05b\nreply e15e\nreply_all e15f\nreport e160\nreport_problem e8b2\nrestaurant_menu e561\nrestore e8b3\nring_volume e0d1\nroom e8b4\nrotate_90_degrees_ccw e418\nrotate_left e419\nrotate_right e41a\nrouter e328\nsatellite e562\nsave e161\nscanner e329\nschedule e8b5\nschool e80c\nscreen_lock_landscape e1be\nscreen_lock_portrait e1bf\nscreen_lock_rotation e1c0\nscreen_rotation e1c1\nsd_card e623\nsd_storage e1c2\nsearch e8b6\nsecurity e32a\nselect_all e162\nsend e163\nsettings e8b8\nsettings_applications e8b9\nsettings_backup_restore e8ba\nsettings_bluetooth e8bb\nsettings_brightness e8bd\nsettings_cell e8bc\nsettings_ethernet e8be\nsettings_input_antenna e8bf\nsettings_input_component e8c0\nsettings_input_composite e8c1\nsettings_input_hdmi e8c2\nsettings_input_svideo e8c3\nsettings_overscan e8c4\nsettings_phone e8c5\nsettings_power e8c6\nsettings_remote e8c7\nsettings_system_daydream e1c3\nsettings_voice e8c8\nshare e80d\nshop e8c9\nshop_two e8ca\nshopping_basket e8cb\nshopping_cart e8cc\nshuffle e043\nsignal_cellular_4_bar e1c8\nsignal_cellular_connected_no_internet_4_bar e1cd\nsignal_cellular_no_sim e1ce\nsignal_cellular_null e1cf\nsignal_cellular_off e1d0\nsignal_wifi_4_bar e1d8\nsignal_wifi_4_bar_lock e1d9\nsignal_wifi_off e1da\nsim_card e32b\nsim_card_alert e624\nskip_next e044\nskip_previous e045\nslideshow e41b\nsmartphone e32c\nsms e625\nsms_failed e626\nsnooze e046\nsort e164\nsort_by_alpha e053\nspace_bar e256\nspeaker e32d\nspeaker_group e32e\nspeaker_notes e8cd\nspeaker_phone e0d2\nspellcheck e8ce\nstar e838\nstar_border e83a\nstar_half e839\nstars e8d0\nstay_current_landscape e0d3\nstay_current_portrait e0d4\nstay_primary_landscape e0d5\nstay_primary_portrait e0d6\nstop e047\nstorage e1db\nstore e8d1\nstore_mall_directory e563\nstraighten e41c\nstrikethrough_s e257\nstyle e41d\nsubject e8d2\nsubtitles e048\nsupervisor_account e8d3\nsurround_sound e049\nswap_calls e0d7\nswap_horiz e8d4\nswap_vert e8d5\nswap_vertical_circle e8d6\nswitch_camera e41e\nswitch_video e41f\nsync e627\nsync_disabled e628\nsync_problem e629\nsystem_update e62a\nsystem_update_alt e8d7\ntab e8d8\ntab_unselected e8d9\ntablet e32f\ntablet_android e330\ntablet_mac e331\ntag_faces e420\ntap_and_play e62b\nterrain e564\ntext_format e165\ntextsms e0d8\ntexture e421\ntheaters e8da\nthumb_down e8db\nthumb_up e8dc\nthumbs_up_down e8dd\ntime_to_leave e62c\ntimelapse e422\ntimer e425\ntimer_10 e423\ntimer_3 e424\ntimer_off e426\ntoc e8de\ntoday e8df\ntoll e8e0\ntonality e427\ntoys e332\ntrack_changes e8e1\ntraffic e565\ntransform e428\ntranslate e8e2\ntrending_down e8e3\ntrending_flat e8e4\ntrending_up e8e5\ntune e429\nturned_in e8e6\nturned_in_not e8e7\ntv e333\nundo e166\nunfold_less e5d6\nunfold_more e5d7\nusb e1e0\nverified_user e8e8\nvertical_align_bottom e258\nvertical_align_center e259\nvertical_align_top e25a\nvibration e62d\nvideo_library e04a\nvideocam e04b\nvideocam_off e04c\nview_agenda e8e9\nview_array e8ea\nview_carousel e8eb\nview_column e8ec\nview_comfy e42a\nview_compact e42b\nview_day e8ed\nview_headline e8ee\nview_list e8ef\nview_module e8f0\nview_quilt e8f1\nview_stream e8f2\nview_week e8f3\nvignette e435\nvisibility e8f4\nvisibility_off e8f5\nvoice_chat e62e\nvoicemail e0d9\nvolume_down e04d\nvolume_mute e04e\nvolume_off e04f\nvolume_up e050\nvpn_key e0da\nvpn_lock e62f\nwallpaper e1bc\nwarning e002\nwatch e334\nwb_auto e42c\nwb_cloudy e42d\nwb_incandescent e42e\nwb_iridescent e436\nwb_sunny e430\nwc e63d\nweb e051\nwhatshot e80e\nwidgets e1bd\nwifi e63e\nwifi_lock e1e1\nwifi_tethering e1e2\nwork e8f9\nwrap_text e25b\nyoutube_searched_for e8fa\nzoom_in e8ff\nzoom_out e900\n"
  },
  {
    "path": "src/assets/font/material-design-icons/LICENSE.txt",
    "content": "https://github.com/google/material-design-icons/blob/master/LICENSE\nhttps://github.com/FezVrasta/bootstrap-material-design/blob/master/fonts/LICENSE.txt\n\nAttribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n    wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public:\n    wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n\n     including for purposes of Section 3(b); and\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the \"Licensor.\" Except for the limited purpose of indicating\nthat material is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "src/assets/js/bootstrap-material-design/css/bootstrap-material-design.css",
    "content": "/*\n\nTo get this list of colors inject jQuery at http://www.google.com/design/spec/style/color.html#color-color-palette\n\nThen, run this script to get the list.\n\n\n(function() {\n  var colors = {}, main = {};\n  $(\".color-group\").each(function() {\n    var color = $(this).find(\".name\").text().trim().toLowerCase().replace(\" \", \"-\");\n    colors[color] = {};\n\n    $(this).find(\".color\").not(\".main-color\").each(function() {\n      var shade = $(this).find(\".shade\").text().trim(),\n          hex   = $(this).find(\".hex\").text().trim();\n\n      colors[color][shade] = hex;\n    });\n    main[color] = color + \"-\" + $(this).find(\".main-color .shade\").text().trim();\n\n  });\n  var LESS = \"\";\n  $.each(colors, function(name, shades) {\n    LESS += \"\\n\\n\";\n    $.each(shades, function(shade, hex) {\n      LESS += \"@\" + name + \"-\" + shade + \": \" + hex + \";\\n\";\n    });\n    if (main[name]) {\n      LESS += \"@\" + name + \": \" + main[name] + \";\\n\";\n    }\n  });\n  console.log(LESS);\n})();\n\n\n*/\n/* ANIMATION */\n/* SHADOWS */\n/* Shadows (from mdl http://www.getmdl.io/) */\nbody {\n  background-color: #EEEEEE;\n}\nbody.inverse {\n  background: #333333;\n}\nbody.inverse,\nbody.inverse .form-control {\n  color: rgba(255,255,255, 0.84);\n}\nbody.inverse .modal,\nbody.inverse .panel-default,\nbody.inverse .card,\nbody.inverse .modal .form-control,\nbody.inverse .panel-default .form-control,\nbody.inverse .card .form-control {\n  background-color: initial;\n  color: initial;\n}\nbody,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4 {\n  font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif;\n  font-weight: 300;\n}\nh5,\nh6 {\n  font-weight: 400;\n}\na,\na:hover,\na:focus {\n  color: #009688;\n}\na .material-icons,\na:hover .material-icons,\na:focus .material-icons {\n  vertical-align: middle;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 0;\n}\n.form-horizontal .radio {\n  margin-bottom: 10px;\n}\n.form-horizontal label {\n  text-align: right;\n}\n.form-horizontal label.control-label {\n  margin: 0;\n}\nbody .container .well.well-sm,\nbody .container-fluid .well.well-sm {\n  padding: 10px;\n}\nbody .container .well.well-lg,\nbody .container-fluid .well.well-lg {\n  padding: 26px;\n}\nbody .container .well,\nbody .container-fluid .well,\nbody .container .jumbotron,\nbody .container-fluid .jumbotron {\n  background-color: #fff;\n  padding: 19px;\n  margin-bottom: 20px;\n  -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n          box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n  border-radius: 2px;\n  border: 0;\n}\nbody .container .well p,\nbody .container-fluid .well p,\nbody .container .jumbotron p,\nbody .container-fluid .jumbotron p {\n  font-weight: 300;\n}\nbody .container .well,\nbody .container-fluid .well,\nbody .container .jumbotron,\nbody .container-fluid .jumbotron,\nbody .container .well-default,\nbody .container-fluid .well-default,\nbody .container .jumbotron-default,\nbody .container-fluid .jumbotron-default {\n  background-color: #ffffff;\n}\nbody .container .well-inverse,\nbody .container-fluid .well-inverse,\nbody .container .jumbotron-inverse,\nbody .container-fluid .jumbotron-inverse {\n  background-color: #3f51b5;\n}\nbody .container .well-primary,\nbody .container-fluid .well-primary,\nbody .container .jumbotron-primary,\nbody .container-fluid .jumbotron-primary {\n  background-color: #009688;\n}\nbody .container .well-success,\nbody .container-fluid .well-success,\nbody .container .jumbotron-success,\nbody .container-fluid .jumbotron-success {\n  background-color: #4caf50;\n}\nbody .container .well-info,\nbody .container-fluid .well-info,\nbody .container .jumbotron-info,\nbody .container-fluid .jumbotron-info {\n  background-color: #03a9f4;\n}\nbody .container .well-warning,\nbody .container-fluid .well-warning,\nbody .container .jumbotron-warning,\nbody .container-fluid .jumbotron-warning {\n  background-color: #ff5722;\n}\nbody .container .well-danger,\nbody .container-fluid .well-danger,\nbody .container .jumbotron-danger,\nbody .container-fluid .jumbotron-danger {\n  background-color: #f44336;\n}\n.btn,\n.input-group-btn .btn {\n  border: none;\n  border-radius: 2px;\n  position: relative;\n  padding: 8px 30px;\n  margin: 10px 1px;\n  font-size: 14px;\n  font-weight: 500;\n  text-transform: uppercase;\n  letter-spacing: 0;\n  will-change: box-shadow, transform;\n  -webkit-transition: -webkit-box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n       -o-transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n          transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n  outline: 0;\n  cursor: pointer;\n  text-decoration: none;\n  background: transparent;\n}\n.btn::-moz-focus-inner,\n.input-group-btn .btn::-moz-focus-inner {\n  border: 0;\n}\n.btn:not(.btn-raised),\n.input-group-btn .btn:not(.btn-raised) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn:not(.btn-raised),\n.input-group-btn .btn:not(.btn-raised),\n.btn:not(.btn-raised).btn-default,\n.input-group-btn .btn:not(.btn-raised).btn-default {\n  color: rgba(0,0,0, 0.87);\n}\n.btn:not(.btn-raised).btn-inverse,\n.input-group-btn .btn:not(.btn-raised).btn-inverse {\n  color: #3f51b5;\n}\n.btn:not(.btn-raised).btn-primary,\n.input-group-btn .btn:not(.btn-raised).btn-primary {\n  color: #009688;\n}\n.btn:not(.btn-raised).btn-success,\n.input-group-btn .btn:not(.btn-raised).btn-success {\n  color: #4caf50;\n}\n.btn:not(.btn-raised).btn-info,\n.input-group-btn .btn:not(.btn-raised).btn-info {\n  color: #03a9f4;\n}\n.btn:not(.btn-raised).btn-warning,\n.input-group-btn .btn:not(.btn-raised).btn-warning {\n  color: #ff5722;\n}\n.btn:not(.btn-raised).btn-danger,\n.input-group-btn .btn:not(.btn-raised).btn-danger {\n  color: #f44336;\n}\n.btn:not(.btn-raised):not(.btn-link):hover,\n.input-group-btn .btn:not(.btn-raised):not(.btn-link):hover,\n.btn:not(.btn-raised):not(.btn-link):focus,\n.input-group-btn .btn:not(.btn-raised):not(.btn-link):focus {\n  background-color: rgba(153, 153, 153, 0.2);\n}\n.theme-dark .btn:not(.btn-raised):not(.btn-link):hover,\n.theme-dark .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover,\n.theme-dark .btn:not(.btn-raised):not(.btn-link):focus,\n.theme-dark .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus {\n  background-color: rgba(204, 204, 204, 0.15);\n}\n.btn.btn-raised,\n.input-group-btn .btn.btn-raised,\n.btn.btn-fab,\n.input-group-btn .btn.btn-fab,\n.btn-group-raised .btn,\n.btn-group-raised .input-group-btn .btn,\n.btn.btn-raised.btn-default,\n.input-group-btn .btn.btn-raised.btn-default,\n.btn.btn-fab.btn-default,\n.input-group-btn .btn.btn-fab.btn-default,\n.btn-group-raised .btn.btn-default,\n.btn-group-raised .input-group-btn .btn.btn-default {\n  background-color: #EEEEEE;\n  color: rgba(0,0,0, 0.87);\n}\n.btn.btn-raised.btn-inverse,\n.input-group-btn .btn.btn-raised.btn-inverse,\n.btn.btn-fab.btn-inverse,\n.input-group-btn .btn.btn-fab.btn-inverse,\n.btn-group-raised .btn.btn-inverse,\n.btn-group-raised .input-group-btn .btn.btn-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.btn.btn-raised.btn-primary,\n.input-group-btn .btn.btn-raised.btn-primary,\n.btn.btn-fab.btn-primary,\n.input-group-btn .btn.btn-fab.btn-primary,\n.btn-group-raised .btn.btn-primary,\n.btn-group-raised .input-group-btn .btn.btn-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-success,\n.input-group-btn .btn.btn-raised.btn-success,\n.btn.btn-fab.btn-success,\n.input-group-btn .btn.btn-fab.btn-success,\n.btn-group-raised .btn.btn-success,\n.btn-group-raised .input-group-btn .btn.btn-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-info,\n.input-group-btn .btn.btn-raised.btn-info,\n.btn.btn-fab.btn-info,\n.input-group-btn .btn.btn-fab.btn-info,\n.btn-group-raised .btn.btn-info,\n.btn-group-raised .input-group-btn .btn.btn-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-warning,\n.input-group-btn .btn.btn-raised.btn-warning,\n.btn.btn-fab.btn-warning,\n.input-group-btn .btn.btn-fab.btn-warning,\n.btn-group-raised .btn.btn-warning,\n.btn-group-raised .input-group-btn .btn.btn-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised.btn-danger,\n.input-group-btn .btn.btn-raised.btn-danger,\n.btn.btn-fab.btn-danger,\n.input-group-btn .btn.btn-fab.btn-danger,\n.btn-group-raised .btn.btn-danger,\n.btn-group-raised .input-group-btn .btn.btn-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.btn.btn-raised:not(.btn-link),\n.input-group-btn .btn.btn-raised:not(.btn-link),\n.btn-group-raised .btn:not(.btn-link),\n.btn-group-raised .input-group-btn .btn:not(.btn-link) {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.btn.btn-raised:not(.btn-link):hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover,\n.btn-group-raised .btn:not(.btn-link):hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover,\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active {\n  outline: 0;\n}\n.btn.btn-raised:not(.btn-link):hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover,\n.btn-group-raised .btn:not(.btn-link):hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover,\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active,\n.btn.btn-raised:not(.btn-link):hover.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-default,\n.btn-group-raised .btn:not(.btn-link):hover.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-default,\n.btn.btn-raised:not(.btn-link):focus.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-default,\n.btn-group-raised .btn:not(.btn-link):focus.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-default,\n.btn.btn-raised:not(.btn-link).active.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-default,\n.btn-group-raised .btn:not(.btn-link).active.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-default,\n.btn.btn-raised:not(.btn-link):active.btn-default,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-default,\n.btn-group-raised .btn:not(.btn-link):active.btn-default,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-default {\n  background-color: #e4e4e4;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):hover.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-inverse,\n.btn.btn-raised:not(.btn-link):focus.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):focus.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-inverse,\n.btn.btn-raised:not(.btn-link).active.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-inverse,\n.btn-group-raised .btn:not(.btn-link).active.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-inverse,\n.btn.btn-raised:not(.btn-link):active.btn-inverse,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-inverse,\n.btn-group-raised .btn:not(.btn-link):active.btn-inverse,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-inverse {\n  background-color: #495bc0;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-primary,\n.btn-group-raised .btn:not(.btn-link):hover.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-primary,\n.btn.btn-raised:not(.btn-link):focus.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-primary,\n.btn-group-raised .btn:not(.btn-link):focus.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-primary,\n.btn.btn-raised:not(.btn-link).active.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-primary,\n.btn-group-raised .btn:not(.btn-link).active.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-primary,\n.btn.btn-raised:not(.btn-link):active.btn-primary,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-primary,\n.btn-group-raised .btn:not(.btn-link):active.btn-primary,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-primary {\n  background-color: #00aa9a;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-success,\n.btn-group-raised .btn:not(.btn-link):hover.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-success,\n.btn.btn-raised:not(.btn-link):focus.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-success,\n.btn-group-raised .btn:not(.btn-link):focus.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-success,\n.btn.btn-raised:not(.btn-link).active.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-success,\n.btn-group-raised .btn:not(.btn-link).active.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-success,\n.btn.btn-raised:not(.btn-link):active.btn-success,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-success,\n.btn-group-raised .btn:not(.btn-link):active.btn-success,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-success {\n  background-color: #59b75c;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-info,\n.btn-group-raised .btn:not(.btn-link):hover.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-info,\n.btn.btn-raised:not(.btn-link):focus.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-info,\n.btn-group-raised .btn:not(.btn-link):focus.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-info,\n.btn.btn-raised:not(.btn-link).active.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-info,\n.btn-group-raised .btn:not(.btn-link).active.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-info,\n.btn.btn-raised:not(.btn-link):active.btn-info,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-info,\n.btn-group-raised .btn:not(.btn-link):active.btn-info,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-info {\n  background-color: #0fb2fc;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-warning,\n.btn-group-raised .btn:not(.btn-link):hover.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-warning,\n.btn.btn-raised:not(.btn-link):focus.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-warning,\n.btn-group-raised .btn:not(.btn-link):focus.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-warning,\n.btn.btn-raised:not(.btn-link).active.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-warning,\n.btn-group-raised .btn:not(.btn-link).active.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-warning,\n.btn.btn-raised:not(.btn-link):active.btn-warning,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-warning,\n.btn-group-raised .btn:not(.btn-link):active.btn-warning,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-warning {\n  background-color: #ff6736;\n}\n.btn.btn-raised:not(.btn-link):hover.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):hover.btn-danger,\n.btn-group-raised .btn:not(.btn-link):hover.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):hover.btn-danger,\n.btn.btn-raised:not(.btn-link):focus.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.btn-danger,\n.btn-group-raised .btn:not(.btn-link):focus.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.btn-danger,\n.btn.btn-raised:not(.btn-link).active.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link).active.btn-danger,\n.btn-group-raised .btn:not(.btn-link).active.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active.btn-danger,\n.btn.btn-raised:not(.btn-link):active.btn-danger,\n.input-group-btn .btn.btn-raised:not(.btn-link):active.btn-danger,\n.btn-group-raised .btn:not(.btn-link):active.btn-danger,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active.btn-danger {\n  background-color: #f55549;\n}\n.btn.btn-raised:not(.btn-link).active,\n.input-group-btn .btn.btn-raised:not(.btn-link).active,\n.btn-group-raised .btn:not(.btn-link).active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active,\n.btn.btn-raised:not(.btn-link):active,\n.input-group-btn .btn.btn-raised:not(.btn-link):active,\n.btn-group-raised .btn:not(.btn-link):active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active,\n.btn.btn-raised:not(.btn-link).active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link).active:hover,\n.btn-group-raised .btn:not(.btn-link).active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link).active:hover,\n.btn.btn-raised:not(.btn-link):active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):active:hover,\n.btn-group-raised .btn:not(.btn-link):active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):active:hover {\n  -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2);\n}\n.btn.btn-raised:not(.btn-link):focus,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus,\n.btn-group-raised .btn:not(.btn-link):focus,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus,\n.btn.btn-raised:not(.btn-link):focus.active,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.active,\n.btn-group-raised .btn:not(.btn-link):focus.active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.active,\n.btn.btn-raised:not(.btn-link):focus:active,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:active,\n.btn-group-raised .btn:not(.btn-link):focus:active,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:active,\n.btn.btn-raised:not(.btn-link):focus:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:hover,\n.btn-group-raised .btn:not(.btn-link):focus:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:hover,\n.btn.btn-raised:not(.btn-link):focus.active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus.active:hover,\n.btn-group-raised .btn:not(.btn-link):focus.active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus.active:hover,\n.btn.btn-raised:not(.btn-link):focus:active:hover,\n.input-group-btn .btn.btn-raised:not(.btn-link):focus:active:hover,\n.btn-group-raised .btn:not(.btn-link):focus:active:hover,\n.btn-group-raised .input-group-btn .btn:not(.btn-link):focus:active:hover {\n  -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n          box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36);\n}\n.btn.btn-fab,\n.input-group-btn .btn.btn-fab {\n  border-radius: 50%;\n  font-size: 24px;\n  height: 56px;\n  margin: auto;\n  min-width: 56px;\n  width: 56px;\n  padding: 0;\n  overflow: hidden;\n  -webkit-box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);\n          box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);\n  position: relative;\n  line-height: normal;\n}\n.btn.btn-fab .ripple-container,\n.input-group-btn .btn.btn-fab .ripple-container {\n  border-radius: 50%;\n}\n.btn.btn-fab.btn-fab-mini,\n.input-group-btn .btn.btn-fab.btn-fab-mini,\n.btn-group-sm .btn.btn-fab,\n.btn-group-sm .input-group-btn .btn.btn-fab {\n  height: 40px;\n  min-width: 40px;\n  width: 40px;\n}\n.btn.btn-fab.btn-fab-mini.material-icons,\n.input-group-btn .btn.btn-fab.btn-fab-mini.material-icons,\n.btn-group-sm .btn.btn-fab.material-icons,\n.btn-group-sm .input-group-btn .btn.btn-fab.material-icons {\n  top: 0px;\n  left: 0px;\n}\n.btn.btn-fab i.material-icons,\n.input-group-btn .btn.btn-fab i.material-icons {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translate(-12px, -12px);\n      -ms-transform: translate(-12px, -12px);\n       -o-transform: translate(-12px, -12px);\n          transform: translate(-12px, -12px);\n  line-height: 24px;\n  width: 24px;\n}\n.btn i.material-icons,\n.input-group-btn .btn i.material-icons {\n  vertical-align: middle;\n}\n.btn.btn-lg,\n.input-group-btn .btn.btn-lg,\n.btn-group-lg .btn,\n.btn-group-lg .input-group-btn .btn {\n  font-size: 16px;\n}\n.btn.btn-sm,\n.input-group-btn .btn.btn-sm,\n.btn-group-sm .btn,\n.btn-group-sm .input-group-btn .btn {\n  padding: 5px 20px;\n  font-size: 12px;\n}\n.btn.btn-xs,\n.input-group-btn .btn.btn-xs,\n.btn-group-xs .btn,\n.btn-group-xs .input-group-btn .btn {\n  padding: 4px 15px;\n  font-size: 10px;\n}\nfieldset[disabled][disabled] .btn,\nfieldset[disabled][disabled] .input-group-btn .btn,\nfieldset[disabled][disabled] .btn-group,\nfieldset[disabled][disabled] .btn-group-vertical,\n.btn.disabled,\n.input-group-btn .btn.disabled,\n.btn-group.disabled,\n.btn-group-vertical.disabled,\n.btn:disabled,\n.input-group-btn .btn:disabled,\n.btn-group:disabled,\n.btn-group-vertical:disabled,\n.btn[disabled][disabled],\n.input-group-btn .btn[disabled][disabled],\n.btn-group[disabled][disabled],\n.btn-group-vertical[disabled][disabled] {\n  color: rgba(0, 0, 0, 0.26);\n  background: transparent;\n}\n.theme-dark fieldset[disabled][disabled] .btn,\n.theme-dark fieldset[disabled][disabled] .input-group-btn .btn,\n.theme-dark fieldset[disabled][disabled] .btn-group,\n.theme-dark fieldset[disabled][disabled] .btn-group-vertical,\n.theme-dark .btn.disabled,\n.theme-dark .input-group-btn .btn.disabled,\n.theme-dark .btn-group.disabled,\n.theme-dark .btn-group-vertical.disabled,\n.theme-dark .btn:disabled,\n.theme-dark .input-group-btn .btn:disabled,\n.theme-dark .btn-group:disabled,\n.theme-dark .btn-group-vertical:disabled,\n.theme-dark .btn[disabled][disabled],\n.theme-dark .input-group-btn .btn[disabled][disabled],\n.theme-dark .btn-group[disabled][disabled],\n.theme-dark .btn-group-vertical[disabled][disabled] {\n  color: rgba(255, 255, 255, 0.3);\n}\nfieldset[disabled][disabled] .btn.btn-raised,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised,\nfieldset[disabled][disabled] .btn-group.btn-raised,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised,\n.btn.disabled.btn-raised,\n.input-group-btn .btn.disabled.btn-raised,\n.btn-group.disabled.btn-raised,\n.btn-group-vertical.disabled.btn-raised,\n.btn:disabled.btn-raised,\n.input-group-btn .btn:disabled.btn-raised,\n.btn-group:disabled.btn-raised,\n.btn-group-vertical:disabled.btn-raised,\n.btn[disabled][disabled].btn-raised,\n.input-group-btn .btn[disabled][disabled].btn-raised,\n.btn-group[disabled][disabled].btn-raised,\n.btn-group-vertical[disabled][disabled].btn-raised,\nfieldset[disabled][disabled] .btn.btn-group-raised,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised,\nfieldset[disabled][disabled] .btn-group.btn-group-raised,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised,\n.btn.disabled.btn-group-raised,\n.input-group-btn .btn.disabled.btn-group-raised,\n.btn-group.disabled.btn-group-raised,\n.btn-group-vertical.disabled.btn-group-raised,\n.btn:disabled.btn-group-raised,\n.input-group-btn .btn:disabled.btn-group-raised,\n.btn-group:disabled.btn-group-raised,\n.btn-group-vertical:disabled.btn-group-raised,\n.btn[disabled][disabled].btn-group-raised,\n.input-group-btn .btn[disabled][disabled].btn-group-raised,\n.btn-group[disabled][disabled].btn-group-raised,\n.btn-group-vertical[disabled][disabled].btn-group-raised,\nfieldset[disabled][disabled] .btn.btn-raised.active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised.active,\nfieldset[disabled][disabled] .btn-group.btn-raised.active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised.active,\n.btn.disabled.btn-raised.active,\n.input-group-btn .btn.disabled.btn-raised.active,\n.btn-group.disabled.btn-raised.active,\n.btn-group-vertical.disabled.btn-raised.active,\n.btn:disabled.btn-raised.active,\n.input-group-btn .btn:disabled.btn-raised.active,\n.btn-group:disabled.btn-raised.active,\n.btn-group-vertical:disabled.btn-raised.active,\n.btn[disabled][disabled].btn-raised.active,\n.input-group-btn .btn[disabled][disabled].btn-raised.active,\n.btn-group[disabled][disabled].btn-raised.active,\n.btn-group-vertical[disabled][disabled].btn-raised.active,\nfieldset[disabled][disabled] .btn.btn-group-raised.active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised.active,\nfieldset[disabled][disabled] .btn-group.btn-group-raised.active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised.active,\n.btn.disabled.btn-group-raised.active,\n.input-group-btn .btn.disabled.btn-group-raised.active,\n.btn-group.disabled.btn-group-raised.active,\n.btn-group-vertical.disabled.btn-group-raised.active,\n.btn:disabled.btn-group-raised.active,\n.input-group-btn .btn:disabled.btn-group-raised.active,\n.btn-group:disabled.btn-group-raised.active,\n.btn-group-vertical:disabled.btn-group-raised.active,\n.btn[disabled][disabled].btn-group-raised.active,\n.input-group-btn .btn[disabled][disabled].btn-group-raised.active,\n.btn-group[disabled][disabled].btn-group-raised.active,\n.btn-group-vertical[disabled][disabled].btn-group-raised.active,\nfieldset[disabled][disabled] .btn.btn-raised:active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised:active,\nfieldset[disabled][disabled] .btn-group.btn-raised:active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised:active,\n.btn.disabled.btn-raised:active,\n.input-group-btn .btn.disabled.btn-raised:active,\n.btn-group.disabled.btn-raised:active,\n.btn-group-vertical.disabled.btn-raised:active,\n.btn:disabled.btn-raised:active,\n.input-group-btn .btn:disabled.btn-raised:active,\n.btn-group:disabled.btn-raised:active,\n.btn-group-vertical:disabled.btn-raised:active,\n.btn[disabled][disabled].btn-raised:active,\n.input-group-btn .btn[disabled][disabled].btn-raised:active,\n.btn-group[disabled][disabled].btn-raised:active,\n.btn-group-vertical[disabled][disabled].btn-raised:active,\nfieldset[disabled][disabled] .btn.btn-group-raised:active,\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised:active,\nfieldset[disabled][disabled] .btn-group.btn-group-raised:active,\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised:active,\n.btn.disabled.btn-group-raised:active,\n.input-group-btn .btn.disabled.btn-group-raised:active,\n.btn-group.disabled.btn-group-raised:active,\n.btn-group-vertical.disabled.btn-group-raised:active,\n.btn:disabled.btn-group-raised:active,\n.input-group-btn .btn:disabled.btn-group-raised:active,\n.btn-group:disabled.btn-group-raised:active,\n.btn-group-vertical:disabled.btn-group-raised:active,\n.btn[disabled][disabled].btn-group-raised:active,\n.input-group-btn .btn[disabled][disabled].btn-group-raised:active,\n.btn-group[disabled][disabled].btn-group-raised:active,\n.btn-group-vertical[disabled][disabled].btn-group-raised:active,\nfieldset[disabled][disabled] .btn.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .input-group-btn .btn.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group.btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group-vertical.btn-raised:focus:not(:active),\n.btn.disabled.btn-raised:focus:not(:active),\n.input-group-btn .btn.disabled.btn-raised:focus:not(:active),\n.btn-group.disabled.btn-raised:focus:not(:active),\n.btn-group-vertical.disabled.btn-raised:focus:not(:active),\n.btn:disabled.btn-raised:focus:not(:active),\n.input-group-btn .btn:disabled.btn-raised:focus:not(:active),\n.btn-group:disabled.btn-raised:focus:not(:active),\n.btn-group-vertical:disabled.btn-raised:focus:not(:active),\n.btn[disabled][disabled].btn-raised:focus:not(:active),\n.input-group-btn .btn[disabled][disabled].btn-raised:focus:not(:active),\n.btn-group[disabled][disabled].btn-raised:focus:not(:active),\n.btn-group-vertical[disabled][disabled].btn-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .input-group-btn .btn.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group.btn-group-raised:focus:not(:active),\nfieldset[disabled][disabled] .btn-group-vertical.btn-group-raised:focus:not(:active),\n.btn.disabled.btn-group-raised:focus:not(:active),\n.input-group-btn .btn.disabled.btn-group-raised:focus:not(:active),\n.btn-group.disabled.btn-group-raised:focus:not(:active),\n.btn-group-vertical.disabled.btn-group-raised:focus:not(:active),\n.btn:disabled.btn-group-raised:focus:not(:active),\n.input-group-btn .btn:disabled.btn-group-raised:focus:not(:active),\n.btn-group:disabled.btn-group-raised:focus:not(:active),\n.btn-group-vertical:disabled.btn-group-raised:focus:not(:active),\n.btn[disabled][disabled].btn-group-raised:focus:not(:active),\n.input-group-btn .btn[disabled][disabled].btn-group-raised:focus:not(:active),\n.btn-group[disabled][disabled].btn-group-raised:focus:not(:active),\n.btn-group-vertical[disabled][disabled].btn-group-raised:focus:not(:active) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  margin: 10px 1px;\n}\n.btn-group.open > .dropdown-toggle.btn,\n.btn-group-vertical.open > .dropdown-toggle.btn,\n.btn-group.open > .dropdown-toggle.btn.btn-default,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-default {\n  background-color: #EEEEEE;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-inverse,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-inverse {\n  background-color: #3f51b5;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-primary,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-primary {\n  background-color: #009688;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-success,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-success {\n  background-color: #4caf50;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-info,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-info {\n  background-color: #03a9f4;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-warning,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-warning {\n  background-color: #ff5722;\n}\n.btn-group.open > .dropdown-toggle.btn.btn-danger,\n.btn-group-vertical.open > .dropdown-toggle.btn.btn-danger {\n  background-color: #f44336;\n}\n.btn-group .dropdown-menu,\n.btn-group-vertical .dropdown-menu {\n  border-radius: 0 0 2px 2px;\n}\n.btn-group.btn-group-raised,\n.btn-group-vertical.btn-group-raised {\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n.btn-group .btn + .btn,\n.btn-group-vertical .btn + .btn,\n.btn-group .btn,\n.btn-group-vertical .btn,\n.btn-group .btn:active,\n.btn-group-vertical .btn:active,\n.btn-group .btn-group,\n.btn-group-vertical .btn-group {\n  margin: 0;\n}\n.checkbox label {\n  cursor: pointer;\n  padding-left: 0;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .checkbox label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .checkbox label:hover,\n.form-group.is-focused .checkbox label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .checkbox label {\n  color: rgba(0,0,0, 0.26);\n}\n.checkbox input[type=checkbox] {\n  opacity: 0;\n  position: absolute;\n  margin: 0;\n  z-index: -1;\n  width: 0;\n  height: 0;\n  overflow: hidden;\n  left: 0;\n  pointer-events: none;\n}\n.checkbox .checkbox-material {\n  vertical-align: middle;\n  position: relative;\n  top: 3px;\n}\n.checkbox .checkbox-material:before {\n  display: block;\n  position: absolute;\n  left: 0;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0.84);\n  height: 20px;\n  width: 20px;\n  border-radius: 100%;\n  z-index: 1;\n  opacity: 0;\n  margin: 0;\n  -webkit-transform: scale3d(2.3, 2.3, 1);\n          transform: scale3d(2.3, 2.3, 1);\n}\n.checkbox .checkbox-material .check {\n  position: relative;\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  border: 2px solid rgba(0,0,0, .54);\n  border-radius: 2px;\n  overflow: hidden;\n  z-index: 1;\n}\n.checkbox .checkbox-material .check:before {\n  position: absolute;\n  content: \"\";\n  -webkit-transform: rotate(45deg);\n      -ms-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  display: block;\n  margin-top: -4px;\n  margin-left: 6px;\n  width: 0;\n  height: 0;\n  -webkit-box-shadow: 0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0 inset;\n          box-shadow: 0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0,\n        0 0 0 0 inset;\n  -webkit-animation: checkbox-off;\n       -o-animation: checkbox-off;\n          animation: checkbox-off;\n}\n.checkbox input[type=checkbox]:focus + .checkbox-material .check:after {\n  opacity: 0.2;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check {\n  color: #009688;\n  border-color: #009688;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check:before {\n  color: #009688;\n  -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n          box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  -webkit-animation: checkbox-on 0.3s forwards;\n       -o-animation: checkbox-on 0.3s forwards;\n          animation: checkbox-on 0.3s forwards;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material:before {\n  -webkit-animation: rippleOn;\n       -o-animation: rippleOn;\n          animation: rippleOn;\n}\n.checkbox input[type=checkbox]:checked + .checkbox-material .check:after {\n  -webkit-animation: rippleOn 500ms forwards;\n       -o-animation: rippleOn 500ms forwards;\n          animation: rippleOn 500ms forwards;\n}\n.checkbox input[type=checkbox]:not(:checked) + .checkbox-material:before {\n  -webkit-animation: rippleOff;\n       -o-animation: rippleOff;\n          animation: rippleOff;\n}\n.checkbox input[type=checkbox]:not(:checked) + .checkbox-material .check:after {\n  -webkit-animation: rippleOff 500ms forwards;\n       -o-animation: rippleOff 500ms forwards;\n          animation: rippleOff 500ms forwards;\n}\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox input[type=checkbox],\n.checkbox input[type=checkbox][disabled]:not(:checked) ~ .checkbox-material .check:before,\n.checkbox input[type=checkbox][disabled]:not(:checked) ~ .checkbox-material .check,\n.checkbox input[type=checkbox][disabled] + .circle {\n  opacity: 0.5;\n}\n.checkbox input[type=checkbox][disabled] + .checkbox-material .check:after {\n  background-color: rgba(0,0,0, 0.87);\n  -webkit-transform: rotate(-45deg);\n      -ms-transform: rotate(-45deg);\n       -o-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n}\n.is-focused .checkbox .checkbox-material .check:before {\n  -webkit-animation: checkbox-off 0.3s forwards;\n       -o-animation: checkbox-off 0.3s forwards;\n          animation: checkbox-off 0.3s forwards;\n}\n.is-focused .checkbox input[type=checkbox]:checked + .checkbox-material:before {\n  -webkit-animation: rippleOn 500ms;\n       -o-animation: rippleOn 500ms;\n          animation: rippleOn 500ms;\n}\n.is-focused .checkbox input[type=checkbox]:not(:checked) + .checkbox-material:before {\n  -webkit-animation: rippleOff 500ms;\n       -o-animation: rippleOff 500ms;\n          animation: rippleOff 500ms;\n}\n@-webkit-keyframes checkbox-on {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@-o-keyframes checkbox-on {\n  0% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@keyframes checkbox-on {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px;\n  }\n  50% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px;\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;\n  }\n}\n@-webkit-keyframes checkbox-off {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -webkit-transform: rotate(45deg);\n            transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@-o-keyframes checkbox-off {\n  0% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -o-transform: rotate(45deg);\n       transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -o-transform: rotate(0deg);\n       transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -o-transform: rotate(0deg);\n       transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@keyframes checkbox-off {\n  0% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  25% {\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, 0 0 0 0 inset;\n  }\n  50% {\n    -webkit-transform: rotate(45deg);\n         -o-transform: rotate(45deg);\n            transform: rotate(45deg);\n    margin-top: -4px;\n    margin-left: 6px;\n    width: 0;\n    height: 0;\n    -webkit-box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n            box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0px 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, 0 0 0 0 inset;\n  }\n  51% {\n    -webkit-transform: rotate(0deg);\n         -o-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 10px inset;\n  }\n  100% {\n    -webkit-transform: rotate(0deg);\n         -o-transform: rotate(0deg);\n            transform: rotate(0deg);\n    margin-top: -2px;\n    margin-left: -2px;\n    width: 20px;\n    height: 20px;\n    -webkit-box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n            box-shadow: 0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0 0 0 0,\n      0px 0 0 0 inset;\n  }\n}\n@-webkit-keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-o-keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-webkit-keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-o-keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n.togglebutton {\n  vertical-align: middle;\n}\n.togglebutton,\n.togglebutton label,\n.togglebutton input,\n.togglebutton .toggle {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.togglebutton label {\n  cursor: pointer;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .togglebutton label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .togglebutton label:hover,\n.form-group.is-focused .togglebutton label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .togglebutton label {\n  color: rgba(0,0,0, 0.26);\n}\n.togglebutton label input[type=checkbox] {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n.togglebutton label .toggle {\n  text-align: left;\n}\n.togglebutton label .toggle,\n.togglebutton label input[type=checkbox][disabled] + .toggle {\n  content: \"\";\n  display: inline-block;\n  width: 30px;\n  height: 15px;\n  background-color: rgba(80, 80, 80, 0.7);\n  border-radius: 15px;\n  margin-right: 15px;\n  -webkit-transition: background 0.3s ease;\n       -o-transition: background 0.3s ease;\n          transition: background 0.3s ease;\n  vertical-align: middle;\n}\n.togglebutton label .toggle:after {\n  content: \"\";\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background-color: #F1F1F1;\n  border-radius: 20px;\n  position: relative;\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);\n  left: -5px;\n  top: -2px;\n  -webkit-transition: left 0.3s ease, background 0.3s ease, -webkit-box-shadow 0.1s ease;\n       -o-transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;\n          transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;\n}\n.togglebutton label input[type=checkbox][disabled] + .toggle:after,\n.togglebutton label input[type=checkbox][disabled]:checked + .toggle:after {\n  background-color: #BDBDBD;\n}\n.togglebutton label input[type=checkbox] + .toggle:active:after,\n.togglebutton label input[type=checkbox][disabled] + .toggle:active:after {\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:after {\n  left: 15px;\n}\n.togglebutton label input[type=checkbox]:checked + .toggle {\n  background-color: rgba(0, 150, 136, 0.5);\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:after {\n  background-color: #009688;\n}\n.togglebutton label input[type=checkbox]:checked + .toggle:active:after {\n  -webkit-box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 150, 136, 0.1);\n          box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 150, 136, 0.1);\n}\n.radio label {\n  cursor: pointer;\n  padding-left: 45px;\n  position: relative;\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .radio label {\n  color: rgba(0,0,0, 0.26);\n}\n.form-group.is-focused .radio label:hover,\n.form-group.is-focused .radio label:focus {\n  color: rgba(0,0,0, .54);\n}\nfieldset[disabled] .form-group.is-focused .radio label {\n  color: rgba(0,0,0, 0.26);\n}\n.radio label span {\n  display: block;\n  position: absolute;\n  left: 10px;\n  top: 2px;\n  -webkit-transition-duration: 0.2s;\n       -o-transition-duration: 0.2s;\n          transition-duration: 0.2s;\n}\n.radio label .circle {\n  border: 2px solid rgba(0,0,0, .54);\n  height: 15px;\n  width: 15px;\n  border-radius: 100%;\n}\n.radio label .check {\n  height: 15px;\n  width: 15px;\n  border-radius: 100%;\n  background-color: #009688;\n  -webkit-transform: scale3d(0, 0, 0);\n          transform: scale3d(0, 0, 0);\n}\n.radio label .check:after {\n  display: block;\n  position: absolute;\n  content: \"\";\n  background-color: rgba(0,0,0, 0.87);\n  left: -18px;\n  top: -18px;\n  height: 50px;\n  width: 50px;\n  border-radius: 100%;\n  z-index: 1;\n  opacity: 0;\n  margin: 0;\n  -webkit-transform: scale3d(1.5, 1.5, 1);\n          transform: scale3d(1.5, 1.5, 1);\n}\n.radio label input[type=radio]:not(:checked) ~ .check:after {\n  -webkit-animation: rippleOff 500ms;\n       -o-animation: rippleOff 500ms;\n          animation: rippleOff 500ms;\n}\n.radio label input[type=radio]:checked ~ .check:after {\n  -webkit-animation: rippleOn;\n       -o-animation: rippleOn;\n          animation: rippleOn;\n}\n.radio input[type=radio] {\n  opacity: 0;\n  height: 0;\n  width: 0;\n  overflow: hidden;\n}\n.radio input[type=radio]:checked ~ .check,\n.radio input[type=radio]:checked ~ .circle {\n  opacity: 1;\n}\n.radio input[type=radio]:checked ~ .check {\n  background-color: #009688;\n}\n.radio input[type=radio]:checked ~ .circle {\n  border-color: #009688;\n}\n.radio input[type=radio]:checked ~ .check {\n  -webkit-transform: scale3d(0.55, 0.55, 1);\n          transform: scale3d(0.55, 0.55, 1);\n}\n.radio input[type=radio][disabled] ~ .check,\n.radio input[type=radio][disabled] ~ .circle {\n  opacity: 0.26;\n}\n.radio input[type=radio][disabled] ~ .check {\n  background-color: #000000;\n}\n.radio input[type=radio][disabled] ~ .circle {\n  border-color: #000000;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .check,\n.theme-dark .radio input[type=radio][disabled] ~ .circle {\n  opacity: 0.3;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .check {\n  background-color: #ffffff;\n}\n.theme-dark .radio input[type=radio][disabled] ~ .circle {\n  border-color: #ffffff;\n}\n.is-focused .radio input[type=radio]:checked ~ .check:after {\n  -webkit-animation: rippleOn 500ms;\n       -o-animation: rippleOn 500ms;\n          animation: rippleOn 500ms;\n}\n@keyframes rippleOn {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes rippleOff {\n  0% {\n    opacity: 0;\n  }\n  50% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 0;\n  }\n}\nlegend {\n  margin-bottom: 22px;\n  font-size: 24px;\n}\noutput {\n  padding-top: 8px;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n.form-control {\n  height: 38px;\n  padding: 7px 0;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 38px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 24px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 44px;\n  }\n}\n.radio label,\n.checkbox label {\n  min-height: 22px;\n}\n.form-control-static {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  min-height: 38px;\n}\n.input-sm .input-sm {\n  height: 24px;\n  padding: 3px 0;\n  font-size: 11px;\n  line-height: 1.5;\n  border-radius: 0;\n}\n.input-sm select.input-sm {\n  height: 24px;\n  line-height: 24px;\n}\n.input-sm textarea.input-sm,\n.input-sm select[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 24px;\n  padding: 3px 0;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.form-group-sm select.form-control {\n  height: 24px;\n  line-height: 24px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 24px;\n  min-height: 33px;\n  padding: 4px 0;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.input-lg .input-lg {\n  height: 44px;\n  padding: 9px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 0;\n}\n.input-lg select.input-lg {\n  height: 44px;\n  line-height: 44px;\n}\n.input-lg textarea.input-lg,\n.input-lg select[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 44px;\n  padding: 9px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-group-lg select.form-control {\n  height: 44px;\n  line-height: 44px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 44px;\n  min-height: 40px;\n  padding: 10px 0;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 8px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 30px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 8px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 12.9999997px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 4px;\n    font-size: 11px;\n  }\n}\n.label {\n  border-radius: 1px;\n  padding: .3em .6em;\n}\n.label,\n.label.label-default {\n  background-color: #9e9e9e;\n}\n.label.label-inverse {\n  background-color: #3f51b5;\n}\n.label.label-primary {\n  background-color: #009688;\n}\n.label.label-success {\n  background-color: #4caf50;\n}\n.label.label-info {\n  background-color: #03a9f4;\n}\n.label.label-warning {\n  background-color: #ff5722;\n}\n.label.label-danger {\n  background-color: #f44336;\n}\n.form-control,\n.form-group .form-control {\n  border: 0;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#009688), to(#009688)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#009688, #009688), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#009688, #009688), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);\n  -webkit-background-size: 0 2px, 100% 1px;\n          background-size: 0 2px, 100% 1px;\n  background-repeat: no-repeat;\n  background-position: center bottom, center -webkit-calc(100% - 1px);\n  background-position: center bottom, center calc(100% - 1px);\n  background-color: rgba(0, 0, 0, 0);\n  -webkit-transition: background 0s ease-out;\n       -o-transition: background 0s ease-out;\n          transition: background 0s ease-out;\n  float: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0;\n}\n.form-control::-moz-placeholder,\n.form-group .form-control::-moz-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control:-ms-input-placeholder,\n.form-group .form-control:-ms-input-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control::-webkit-input-placeholder,\n.form-group .form-control::-webkit-input-placeholder {\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control[readonly],\n.form-group .form-control[readonly],\n.form-control[disabled],\n.form-group .form-control[disabled],\nfieldset[disabled] .form-control,\nfieldset[disabled] .form-group .form-control {\n  background-color: rgba(0, 0, 0, 0);\n}\n.form-control[disabled],\n.form-group .form-control[disabled],\nfieldset[disabled] .form-control,\nfieldset[disabled] .form-group .form-control {\n  background-image: none;\n  border-bottom: 1px dotted #D2D2D2;\n}\n.form-group {\n  position: relative;\n}\n.form-group.label-static label.control-label,\n.form-group.label-placeholder label.control-label,\n.form-group.label-floating label.control-label {\n  position: absolute;\n  pointer-events: none;\n  -webkit-transition: 0.3s ease all;\n       -o-transition: 0.3s ease all;\n          transition: 0.3s ease all;\n}\n.form-group.label-floating label.control-label {\n  will-change: left, top, contents;\n}\n.form-group.label-placeholder:not(.is-empty) label.control-label {\n  display: none;\n}\n.form-group .help-block {\n  position: absolute;\n  display: none;\n}\n.form-group.is-focused .form-control {\n  outline: none;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#009688), to(#009688)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#009688, #009688), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#009688, #009688), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#009688, #009688), linear-gradient(#D2D2D2, #D2D2D2);\n  -webkit-background-size: 100% 2px, 100% 1px;\n          background-size: 100% 2px, 100% 1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition-duration: 0.3s;\n       -o-transition-duration: 0.3s;\n          transition-duration: 0.3s;\n}\n.form-group.is-focused .form-control .material-input:after {\n  background-color: #009688;\n}\n.form-group.is-focused label,\n.form-group.is-focused label.control-label {\n  color: #009688;\n}\n.form-group.is-focused.label-placeholder label,\n.form-group.is-focused.label-placeholder label.control-label {\n  color: #BDBDBD;\n}\n.form-group.is-focused .help-block {\n  display: block;\n}\n.form-group.has-warning .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-warning.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ff5722), to(#ff5722)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#ff5722, #ff5722), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#ff5722, #ff5722), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#ff5722, #ff5722), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-warning label.control-label,\n.form-group.has-warning .help-block {\n  color: #ff5722;\n}\n.form-group.has-error .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-error.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f44336), to(#f44336)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#f44336, #f44336), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#f44336, #f44336), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#f44336, #f44336), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-error label.control-label,\n.form-group.has-error .help-block {\n  color: #f44336;\n}\n.form-group.has-success .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-success.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#4caf50), to(#4caf50)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#4caf50, #4caf50), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#4caf50, #4caf50), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#4caf50, #4caf50), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-success label.control-label,\n.form-group.has-success .help-block {\n  color: #4caf50;\n}\n.form-group.has-info .form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.form-group.has-info.is-focused .form-control {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#03a9f4), to(#03a9f4)), -webkit-gradient(linear, left top, left bottom, from(#D2D2D2), to(#D2D2D2));\n  background-image: -webkit-linear-gradient(#03a9f4, #03a9f4), -webkit-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: -o-linear-gradient(#03a9f4, #03a9f4), -o-linear-gradient(#D2D2D2, #D2D2D2);\n  background-image: linear-gradient(#03a9f4, #03a9f4), linear-gradient(#D2D2D2, #D2D2D2);\n}\n.form-group.has-info label.control-label,\n.form-group.has-info .help-block {\n  color: #03a9f4;\n}\n.form-group textarea {\n  resize: none;\n}\n.form-group textarea ~ .form-control-highlight {\n  margin-top: -11px;\n}\n.form-group select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n}\n.form-group select ~ .material-input:after {\n  display: none;\n}\n.form-control {\n  margin-bottom: 7px;\n}\n.form-control::-moz-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control:-ms-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-control::-webkit-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.checkbox label,\n.radio label,\nlabel {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\nlabel.control-label {\n  font-size: 12px;\n  line-height: 1.07142857;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.help-block {\n  margin-top: 0;\n  font-size: 12px;\n}\n.form-group {\n  padding-bottom: 7px;\n  margin: 28px 0 0 0;\n}\n.form-group .form-control {\n  margin-bottom: 7px;\n}\n.form-group .form-control::-moz-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .form-control:-ms-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .form-control::-webkit-input-placeholder {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group .checkbox label,\n.form-group .radio label,\n.form-group label {\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group label.control-label {\n  font-size: 12px;\n  line-height: 1.07142857;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group .help-block {\n  margin-top: 0;\n  font-size: 12px;\n}\n.form-group.label-floating label.control-label,\n.form-group.label-placeholder label.control-label {\n  top: -7px;\n  font-size: 16px;\n  line-height: 1.42857143;\n}\n.form-group.label-static label.control-label,\n.form-group.label-floating.is-focused label.control-label,\n.form-group.label-floating:not(.is-empty) label.control-label {\n  top: -30px;\n  left: 0;\n  font-size: 12px;\n  line-height: 1.07142857;\n}\n.form-group.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -30px;\n  left: 0;\n  font-size: 12px;\n  line-height: 1.07142857;\n}\n.form-group.form-group-sm {\n  padding-bottom: 3px;\n  margin: 21px 0 0 0;\n}\n.form-group.form-group-sm .form-control {\n  margin-bottom: 3px;\n}\n.form-group.form-group-sm .form-control::-moz-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .form-control:-ms-input-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .form-control::-webkit-input-placeholder {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm .checkbox label,\n.form-group.form-group-sm .radio label,\n.form-group.form-group-sm label {\n  font-size: 11px;\n  line-height: 1.5;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-sm label.control-label {\n  font-size: 9px;\n  line-height: 1.125;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group.form-group-sm .help-block {\n  margin-top: 0;\n  font-size: 9px;\n}\n.form-group.form-group-sm.label-floating label.control-label,\n.form-group.form-group-sm.label-placeholder label.control-label {\n  top: -11px;\n  font-size: 11px;\n  line-height: 1.5;\n}\n.form-group.form-group-sm.label-static label.control-label,\n.form-group.form-group-sm.label-floating.is-focused label.control-label,\n.form-group.form-group-sm.label-floating:not(.is-empty) label.control-label {\n  top: -25px;\n  left: 0;\n  font-size: 9px;\n  line-height: 1.125;\n}\n.form-group.form-group-sm.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -25px;\n  left: 0;\n  font-size: 9px;\n  line-height: 1.125;\n}\n.form-group.form-group-lg {\n  padding-bottom: 9px;\n  margin: 30px 0 0 0;\n}\n.form-group.form-group-lg .form-control {\n  margin-bottom: 9px;\n}\n.form-group.form-group-lg .form-control::-moz-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .form-control:-ms-input-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .form-control::-webkit-input-placeholder {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg .checkbox label,\n.form-group.form-group-lg .radio label,\n.form-group.form-group-lg label {\n  font-size: 18px;\n  line-height: 1.3333333;\n  color: #BDBDBD;\n  font-weight: 400;\n}\n.form-group.form-group-lg label.control-label {\n  font-size: 14px;\n  line-height: 0.99999998;\n  font-weight: 400;\n  margin: 16px 0 0 0;\n}\n.form-group.form-group-lg .help-block {\n  margin-top: 0;\n  font-size: 14px;\n}\n.form-group.form-group-lg.label-floating label.control-label,\n.form-group.form-group-lg.label-placeholder label.control-label {\n  top: -5px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.form-group.form-group-lg.label-static label.control-label,\n.form-group.form-group-lg.label-floating.is-focused label.control-label,\n.form-group.form-group-lg.label-floating:not(.is-empty) label.control-label {\n  top: -32px;\n  left: 0;\n  font-size: 14px;\n  line-height: 0.99999998;\n}\n.form-group.form-group-lg.label-floating input.form-control:-webkit-autofill ~ label.control-label label.control-label {\n  top: -32px;\n  left: 0;\n  font-size: 14px;\n  line-height: 0.99999998;\n}\nselect.form-control {\n  border: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0;\n}\n.form-group.is-focused select.form-control {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: #D2D2D2;\n}\nselect.form-control[multiple],\n.form-group.is-focused select.form-control[multiple] {\n  height: 85px;\n}\n.input-group-btn .btn {\n  margin: 0 0 7px 0;\n}\n.form-group.form-group-sm .input-group-btn .btn {\n  margin: 0 0 3px 0;\n}\n.form-group.form-group-lg .input-group-btn .btn {\n  margin: 0 0 9px 0;\n}\n.input-group .input-group-btn {\n  padding: 0 12px;\n}\n.input-group .input-group-addon {\n  border: 0;\n  background: transparent;\n}\n.form-group input[type=file] {\n  opacity: 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\nlegend {\n  border-bottom: 0;\n}\n.list-group {\n  border-radius: 0;\n}\n.list-group .list-group-item {\n  background-color: transparent;\n  overflow: hidden;\n  border: 0;\n  border-radius: 0;\n  padding: 0 16px;\n}\n.list-group .list-group-item.baseline {\n  border-bottom: 1px solid #cecece;\n}\n.list-group .list-group-item.baseline:last-child {\n  border-bottom: none;\n}\n.list-group .list-group-item .row-picture,\n.list-group .list-group-item .row-action-primary {\n  display: inline-block;\n  padding-right: 16px;\n}\n.list-group .list-group-item .row-picture img,\n.list-group .list-group-item .row-action-primary img,\n.list-group .list-group-item .row-picture i,\n.list-group .list-group-item .row-action-primary i,\n.list-group .list-group-item .row-picture label,\n.list-group .list-group-item .row-action-primary label {\n  display: block;\n  width: 56px;\n  height: 56px;\n}\n.list-group .list-group-item .row-picture img,\n.list-group .list-group-item .row-action-primary img {\n  background: rgba(0, 0, 0, 0.1);\n  padding: 1px;\n}\n.list-group .list-group-item .row-picture img.circle,\n.list-group .list-group-item .row-action-primary img.circle {\n  border-radius: 100%;\n}\n.list-group .list-group-item .row-picture i,\n.list-group .list-group-item .row-action-primary i {\n  background: rgba(0, 0, 0, 0.25);\n  border-radius: 100%;\n  text-align: center;\n  line-height: 56px;\n  font-size: 20px;\n  color: white;\n}\n.list-group .list-group-item .row-picture label,\n.list-group .list-group-item .row-action-primary label {\n  margin-left: 7px;\n  margin-right: -7px;\n  margin-top: 5px;\n  margin-bottom: -5px;\n}\n.list-group .list-group-item .row-picture label .checkbox-material,\n.list-group .list-group-item .row-action-primary label .checkbox-material {\n  left: -10px;\n}\n.list-group .list-group-item .row-content {\n  display: inline-block;\n  width: -webkit-calc(100% - 92px);\n  width: calc(100% - 92px);\n  min-height: 66px;\n}\n.list-group .list-group-item .row-content .action-secondary {\n  position: absolute;\n  right: 16px;\n  top: 16px;\n}\n.list-group .list-group-item .row-content .action-secondary i {\n  font-size: 20px;\n  color: rgba(0, 0, 0, 0.25);\n  cursor: pointer;\n}\n.list-group .list-group-item .row-content .action-secondary ~ * {\n  max-width: -webkit-calc(100% - 30px);\n  max-width: calc(100% - 30px);\n}\n.list-group .list-group-item .row-content .least-content {\n  position: absolute;\n  right: 16px;\n  top: 0;\n  color: rgba(0, 0, 0, 0.54);\n  font-size: 14px;\n}\n.list-group .list-group-item .list-group-item-heading {\n  color: rgba(0, 0, 0, 0.77);\n  font-size: 20px;\n  line-height: 29px;\n}\n.list-group .list-group-item.active:hover,\n.list-group .list-group-item.active:focus {\n  background: rgba(0, 0, 0, 0.15);\n  outline: 10px solid rgba(0, 0, 0, 0.15);\n}\n.list-group .list-group-item.active .list-group-item-heading,\n.list-group .list-group-item.active .list-group-item-text {\n  color: rgba(0,0,0, 0.87);\n}\n.list-group .list-group-separator {\n  clear: both;\n  overflow: hidden;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.list-group .list-group-separator:before {\n  content: \"\";\n  width: -webkit-calc(100% - 90px);\n  width: calc(100% - 90px);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  float: right;\n}\n.navbar {\n  background-color: #009688;\n  border: 0;\n  border-radius: 0;\n}\n.navbar .navbar-brand {\n  position: relative;\n  height: 60px;\n  line-height: 30px;\n  color: inherit;\n}\n.navbar .navbar-brand:hover,\n.navbar .navbar-brand:focus {\n  color: inherit;\n  background-color: transparent;\n}\n.navbar .navbar-text {\n  color: inherit;\n  margin-top: 20px;\n  margin-bottom: 20px;\n}\n.navbar .navbar-nav > li > a {\n  color: inherit;\n  padding-top: 20px;\n  padding-bottom: 20px;\n}\n.navbar .navbar-nav > li > a:hover,\n.navbar .navbar-nav > li > a:focus {\n  color: inherit;\n  background-color: transparent;\n}\n.navbar .navbar-nav > .active > a,\n.navbar .navbar-nav > .active > a:hover,\n.navbar .navbar-nav > .active > a:focus {\n  color: inherit;\n  background-color: rgba(255, 255, 255, 0.1);\n}\n.navbar .navbar-nav > .disabled > a,\n.navbar .navbar-nav > .disabled > a:hover,\n.navbar .navbar-nav > .disabled > a:focus {\n  color: inherit;\n  background-color: transparent;\n  opacity: 0.9;\n}\n.navbar .navbar-toggle {\n  border: 0;\n}\n.navbar .navbar-toggle:hover,\n.navbar .navbar-toggle:focus {\n  background-color: transparent;\n}\n.navbar .navbar-toggle .icon-bar {\n  background-color: inherit;\n  border: 1px solid;\n}\n.navbar .navbar-default .navbar-toggle,\n.navbar .navbar-inverse .navbar-toggle {\n  border-color: transparent;\n}\n.navbar .navbar-collapse,\n.navbar .navbar-form {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar .navbar-nav > .open > a,\n.navbar .navbar-nav > .open > a:hover,\n.navbar .navbar-nav > .open > a:focus {\n  background-color: transparent;\n  color: inherit;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .navbar-text {\n    color: inherit;\n    margin-top: 15px;\n    margin-bottom: 15px;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border: 0;\n    color: inherit;\n  }\n  .navbar .navbar-nav .open .dropdown-menu .divider {\n    border-bottom: 1px solid;\n    opacity: 0.08;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > li > a {\n    color: inherit;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: inherit;\n    background-color: transparent;\n  }\n}\n.navbar .navbar-link {\n  color: inherit;\n}\n.navbar .navbar-link:hover {\n  color: inherit;\n}\n.navbar .btn-link {\n  color: inherit;\n}\n.navbar .btn-link:hover,\n.navbar .btn-link:focus {\n  color: inherit;\n}\n.navbar .btn-link[disabled]:hover,\nfieldset[disabled] .navbar .btn-link:hover,\n.navbar .btn-link[disabled]:focus,\nfieldset[disabled] .navbar .btn-link:focus {\n  color: inherit;\n}\n.navbar .navbar-form {\n  margin-top: 16px;\n}\n.navbar .navbar-form .form-group {\n  margin: 0;\n  padding: 0;\n}\n.navbar .navbar-form .form-group .material-input:before,\n.navbar .navbar-form .form-group.is-focused .material-input:after {\n  background-color: inherit;\n}\n.navbar .navbar-form .form-group .form-control,\n.navbar .navbar-form .form-control {\n  border-color: inherit;\n  color: inherit;\n  padding: 0;\n  margin: 0;\n  height: 28px;\n  font-size: 14px;\n  line-height: 1.42857143;\n}\n.navbar,\n.navbar.navbar-default {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar .navbar-form input.form-control::-moz-placeholder,\n.navbar.navbar-default .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar .navbar-form input.form-control:-ms-input-placeholder,\n.navbar.navbar-default .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-default .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar .navbar-form input.form-control::-webkit-input-placeholder,\n.navbar.navbar-default .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .dropdown-menu,\n.navbar.navbar-default .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar .dropdown-menu li > a,\n.navbar.navbar-default .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar .dropdown-menu li > a:hover,\n.navbar.navbar-default .dropdown-menu li > a:hover,\n.navbar .dropdown-menu li > a:focus,\n.navbar.navbar-default .dropdown-menu li > a:focus {\n  color: #009688;\n  background-color: #eeeeee;\n}\n.navbar .dropdown-menu .active > a,\n.navbar.navbar-default .dropdown-menu .active > a {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar .dropdown-menu .active > a:hover,\n.navbar.navbar-default .dropdown-menu .active > a:hover,\n.navbar .dropdown-menu .active > a:focus,\n.navbar.navbar-default .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control::-moz-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control:-ms-input-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-inverse .navbar-form input.form-control::-webkit-input-placeholder {\n  color: #ffffff;\n}\n.navbar.navbar-inverse .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-inverse .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-inverse .dropdown-menu li > a:hover,\n.navbar.navbar-inverse .dropdown-menu li > a:focus {\n  color: #3f51b5;\n  background-color: #eeeeee;\n}\n.navbar.navbar-inverse .dropdown-menu .active > a {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.navbar.navbar-inverse .dropdown-menu .active > a:hover,\n.navbar.navbar-inverse .dropdown-menu .active > a:focus {\n  color: #ffffff;\n}\n.navbar.navbar-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-primary .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-primary .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-primary .dropdown-menu li > a:hover,\n.navbar.navbar-primary .dropdown-menu li > a:focus {\n  color: #009688;\n  background-color: #eeeeee;\n}\n.navbar.navbar-primary .dropdown-menu .active > a {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-primary .dropdown-menu .active > a:hover,\n.navbar.navbar-primary .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-success .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-success .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-success .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-success .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-success .dropdown-menu li > a:hover,\n.navbar.navbar-success .dropdown-menu li > a:focus {\n  color: #4caf50;\n  background-color: #eeeeee;\n}\n.navbar.navbar-success .dropdown-menu .active > a {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-success .dropdown-menu .active > a:hover,\n.navbar.navbar-success .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-info .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-info .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-info .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-info .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-info .dropdown-menu li > a:hover,\n.navbar.navbar-info .dropdown-menu li > a:focus {\n  color: #03a9f4;\n  background-color: #eeeeee;\n}\n.navbar.navbar-info .dropdown-menu .active > a {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-info .dropdown-menu .active > a:hover,\n.navbar.navbar-info .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-warning .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-warning .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-warning .dropdown-menu li > a:hover,\n.navbar.navbar-warning .dropdown-menu li > a:focus {\n  color: #ff5722;\n  background-color: #eeeeee;\n}\n.navbar.navbar-warning .dropdown-menu .active > a {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-warning .dropdown-menu .active > a:hover,\n.navbar.navbar-warning .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control::-moz-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control::-moz-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control:-ms-input-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control:-ms-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .navbar-form .form-group input.form-control::-webkit-input-placeholder,\n.navbar.navbar-danger .navbar-form input.form-control::-webkit-input-placeholder {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .dropdown-menu {\n  border-radius: 2px;\n}\n.navbar.navbar-danger .dropdown-menu li > a {\n  font-size: 16px;\n  padding: 13px 16px;\n}\n.navbar.navbar-danger .dropdown-menu li > a:hover,\n.navbar.navbar-danger .dropdown-menu li > a:focus {\n  color: #f44336;\n  background-color: #eeeeee;\n}\n.navbar.navbar-danger .dropdown-menu .active > a {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.navbar.navbar-danger .dropdown-menu .active > a:hover,\n.navbar.navbar-danger .dropdown-menu .active > a:focus {\n  color: rgba(255,255,255, 0.84);\n}\n.navbar-inverse {\n  background-color: #3f51b5;\n}\n@media (max-width: 1199px) {\n  .navbar .navbar-brand {\n    height: 50px;\n    padding: 10px 15px;\n  }\n  .navbar .navbar-form {\n    margin-top: 10px;\n  }\n  .navbar .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.dropdown-menu {\n  border: 0;\n  -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n          box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n}\n.dropdown-menu .divider {\n  background-color: rgba(0, 0, 0, 0.12);\n}\n.dropdown-menu li {\n  overflow: hidden;\n  position: relative;\n}\n.dropdown-menu li a:hover {\n  background-color: transparent;\n  color: #009688;\n}\n.alert {\n  border: 0;\n  border-radius: 0;\n}\n.alert,\n.alert.alert-default {\n  background-color: rgba(255,255,255, 0.84);\n  color: rgba(255,255,255, 0.84);\n}\n.alert a,\n.alert.alert-default a,\n.alert .alert-link,\n.alert.alert-default .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-inverse {\n  background-color: #3f51b5;\n  color: #ffffff;\n}\n.alert.alert-inverse a,\n.alert.alert-inverse .alert-link {\n  color: #ffffff;\n}\n.alert.alert-primary {\n  background-color: #009688;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-primary a,\n.alert.alert-primary .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-success {\n  background-color: #4caf50;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-success a,\n.alert.alert-success .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-info {\n  background-color: #03a9f4;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-info a,\n.alert.alert-info .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-warning {\n  background-color: #ff5722;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-warning a,\n.alert.alert-warning .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-danger {\n  background-color: #f44336;\n  color: rgba(255,255,255, 0.84);\n}\n.alert.alert-danger a,\n.alert.alert-danger .alert-link {\n  color: rgba(255,255,255, 0.84);\n}\n.alert-info,\n.alert-danger,\n.alert-warning,\n.alert-success {\n  color: rgba(255,255,255, 0.84);\n}\n.alert-default a,\n.alert-default .alert-link {\n  color: rgba(0,0,0, 0.87);\n}\n.progress {\n  height: 4px;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: #c8c8c8;\n}\n.progress .progress-bar {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.progress .progress-bar,\n.progress .progress-bar.progress-bar-default {\n  background-color: #009688;\n}\n.progress .progress-bar.progress-bar-inverse {\n  background-color: #3f51b5;\n}\n.progress .progress-bar.progress-bar-primary {\n  background-color: #009688;\n}\n.progress .progress-bar.progress-bar-success {\n  background-color: #4caf50;\n}\n.progress .progress-bar.progress-bar-info {\n  background-color: #03a9f4;\n}\n.progress .progress-bar.progress-bar-warning {\n  background-color: #ff5722;\n}\n.progress .progress-bar.progress-bar-danger {\n  background-color: #f44336;\n}\n.text-warning {\n  color: #ff5722;\n}\n.text-primary {\n  color: #009688;\n}\n.text-danger {\n  color: #f44336;\n}\n.text-success {\n  color: #4caf50;\n}\n.text-info {\n  color: #03a9f4;\n}\n.nav-tabs {\n  background: #009688;\n}\n.nav-tabs > li > a {\n  color: #FFFFFF;\n  border: 0;\n  margin: 0;\n}\n.nav-tabs > li > a:hover {\n  background-color: transparent;\n  border: 0;\n}\n.nav-tabs > li > a,\n.nav-tabs > li > a:hover,\n.nav-tabs > li > a:focus {\n  background-color: transparent !important;\n  border: 0 !important;\n  color: #FFFFFF !important;\n  font-weight: 500;\n}\n.nav-tabs > li.disabled > a,\n.nav-tabs > li.disabled > a:hover {\n  color: rgba(255, 255, 255, 0.5);\n}\n.popover,\n.tooltip-inner {\n  color: #ececec;\n  line-height: 1em;\n  background: rgba(101, 101, 101, 0.9);\n  border: none;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n}\n.tooltip,\n.tooltip.in {\n  opacity: 1;\n}\n.popover .arrow,\n.tooltip .arrow,\n.popover .tooltip-arrow,\n.tooltip .tooltip-arrow {\n  display: none;\n}\n.card {\n  /***** Make height equal to width (http://stackoverflow.com/a/6615994) ****/\n  display: inline-block;\n  position: relative;\n  width: 100%;\n  /**************************************************************************/\n  border-radius: 2px;\n  color: rgba(0,0,0, 0.87);\n  background: #fff;\n  -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n          box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n.card .card-height-indicator {\n  margin-top: 100%;\n}\n.card .card-content {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.card .card-image {\n  height: 60%;\n  position: relative;\n  overflow: hidden;\n}\n.card .card-image img {\n  width: 100%;\n  height: 100%;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px;\n  pointer-events: none;\n}\n.card .card-image .card-image-headline {\n  position: absolute;\n  bottom: 16px;\n  left: 18px;\n  color: #fff;\n  font-size: 2em;\n}\n.card .card-body {\n  height: 30%;\n  padding: 18px;\n}\n.card .card-footer {\n  height: 10%;\n  padding: 18px;\n}\n.card .card-footer button,\n.card .card-footer a {\n  margin: 0 !important;\n  position: relative;\n  bottom: 25px;\n  width: auto;\n}\n.card .card-footer button:first-child,\n.card .card-footer a:first-child {\n  left: -15px;\n}\n.modal-content {\n  -webkit-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);\n          box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);\n  border-radius: 2px;\n  border: none;\n}\n.modal-content .modal-header {\n  border-bottom: none;\n  padding-top: 24px;\n  padding-right: 24px;\n  padding-bottom: 0;\n  padding-left: 24px;\n}\n.modal-content .modal-body {\n  padding-top: 24px;\n  padding-right: 24px;\n  padding-bottom: 16px;\n  padding-left: 24px;\n}\n.modal-content .modal-footer {\n  border-top: none;\n  padding: 7px;\n}\n.modal-content .modal-footer button {\n  margin: 0;\n  padding-left: 16px;\n  padding-right: 16px;\n  width: auto;\n}\n.modal-content .modal-footer button.pull-left {\n  padding-left: 5px;\n  padding-right: 5px;\n  position: relative;\n  left: -5px;\n}\n.modal-content .modal-footer button + button {\n  margin-bottom: 16px;\n}\n.modal-content .modal-body + .modal-footer {\n  padding-top: 0;\n}\n.modal-backdrop {\n  background: rgba(0, 0, 0, 0.3);\n}\n.panel {\n  border-radius: 2px;\n  border: 0;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n}\n.panel > .panel-heading,\n.panel.panel-default > .panel-heading {\n  background-color: #eeeeee;\n}\n.panel.panel-inverse > .panel-heading {\n  background-color: #3f51b5;\n}\n.panel.panel-primary > .panel-heading {\n  background-color: #009688;\n}\n.panel.panel-success > .panel-heading {\n  background-color: #4caf50;\n}\n.panel.panel-info > .panel-heading {\n  background-color: #03a9f4;\n}\n.panel.panel-warning > .panel-heading {\n  background-color: #ff5722;\n}\n.panel.panel-danger > .panel-heading {\n  background-color: #f44336;\n}\n[class*=\"panel-\"] > .panel-heading {\n  color: rgba(255,255,255, 0.84);\n  border: 0;\n}\n.panel-default > .panel-heading,\n.panel:not([class*=\"panel-\"]) > .panel-heading {\n  color: rgba(0,0,0, 0.87);\n}\n.panel-footer {\n  background-color: #eeeeee;\n}\nhr.on-dark {\n  color: #1a1a1a;\n}\nhr.on-light {\n  color: #ffffff;\n}\n@media (-webkit-min-device-pixel-ratio: 0.75), (min--moz-device-pixel-ratio: 0.75), (-o-device-pixel-ratio: 3/4), (min-device-pixel-ratio: 0.75), (-o-min-device-pixel-ratio: 3/4), (min-resolution: 0.75dppx), (-webkit-min-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 120dpi) {\n  hr {\n    height: 0.75px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1), (min--moz-device-pixel-ratio: 1), (-o-device-pixel-ratio: 1), (min-device-pixel-ratio: 1), (-o-min-device-pixel-ratio: 1/1), (min-resolution: 1dppx), (-webkit-min-device-pixel-ratio: 1.6666666666666667), (-o-min-device-pixel-ratio: 5/3), (min-resolution: 160dpi) {\n  hr {\n    height: 1px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1.33), (min--moz-device-pixel-ratio: 1.33), (-o-device-pixel-ratio: 133/100), (min-device-pixel-ratio: 1.33), (-o-min-device-pixel-ratio: 133/100), (min-resolution: 1.33dppx), (-webkit-min-device-pixel-ratio: 2.21875), (-o-min-device-pixel-ratio: 71/32), (min-resolution: 213dpi) {\n  hr {\n    height: 1.333px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx), (-webkit-min-device-pixel-ratio: 2.5), (-o-min-device-pixel-ratio: 5/2), (min-resolution: 240dpi) {\n  hr {\n    height: 1.5px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-device-pixel-ratio: 2/1), (min-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 3.9583333333333335), (-o-min-device-pixel-ratio: 95/24), (min-resolution: 380dpi) {\n  hr {\n    height: 2px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 3), (min--moz-device-pixel-ratio: 3), (-o-device-pixel-ratio: 3/1), (min-device-pixel-ratio: 3), (-o-min-device-pixel-ratio: 3/1), (min-resolution: 3dppx), (-webkit-min-device-pixel-ratio: 5), (-o-min-device-pixel-ratio: 5/1), (min-resolution: 480dpi) {\n  hr {\n    height: 3px;\n  }\n}\n@media (-webkit-min-device-pixel-ratio: 4), (min--moz-device-pixel-ratio: 4), (-o-device-pixel-ratio: 4/1), (min-device-pixel-ratio: 3), (-o-min-device-pixel-ratio: 4/1), (min-resolution: 4dppx), (-webkit-min-device-pixel-ratio: 6.666666666666667), (-o-min-device-pixel-ratio: 20/3), (min-resolution: 640dpi) {\n  hr {\n    height: 4px;\n  }\n}\n* {\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  -webkit-tap-highlight-color: transparent;\n}\n*:focus {\n  outline: 0;\n}\n.snackbar {\n  background-color: #323232;\n  color: rgba(255,255,255, 0.84);\n  font-size: 14px;\n  border-radius: 2px;\n  -webkit-box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);\n  height: 0;\n  -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n       -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n          transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, padding 0s linear 0.2s, height 0s linear 0.2s;\n  -webkit-transform: translateY(200%);\n      -ms-transform: translateY(200%);\n       -o-transform: translateY(200%);\n          transform: translateY(200%);\n}\n.snackbar.snackbar-opened {\n  padding: 14px 15px;\n  margin-bottom: 20px;\n  height: auto;\n  -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n       -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n          transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0s linear 0.2s, height 0s linear 0.2s;\n  -webkit-transform: none;\n      -ms-transform: none;\n       -o-transform: none;\n          transform: none;\n}\n.snackbar.toast {\n  border-radius: 200px;\n}\n.noUi-target,\n.noUi-target * {\n  -webkit-touch-callout: none;\n  -ms-touch-action: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.noUi-base {\n  width: 100%;\n  height: 100%;\n  position: relative;\n}\n.noUi-origin {\n  position: absolute;\n  right: 0;\n  top: 0;\n  left: 0;\n  bottom: 0;\n}\n.noUi-handle {\n  position: relative;\n  z-index: 1;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.noUi-stacking .noUi-handle {\n  z-index: 10;\n}\n.noUi-state-tap .noUi-origin {\n  -webkit-transition: left 0.3s, top 0.3s;\n       -o-transition: left 0.3s, top 0.3s;\n          transition: left 0.3s, top 0.3s;\n}\n.noUi-state-drag * {\n  cursor: inherit !important;\n}\n.noUi-horizontal {\n  height: 10px;\n}\n.noUi-handle {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  width: 12px;\n  height: 12px;\n  left: -10px;\n  top: -5px;\n  cursor: ew-resize;\n  border-radius: 100%;\n  -webkit-transition: all 0.2s ease-out;\n       -o-transition: all 0.2s ease-out;\n          transition: all 0.2s ease-out;\n  border: 1px solid;\n}\n.noUi-vertical .noUi-handle {\n  margin-left: 5px;\n  cursor: ns-resize;\n}\n.noUi-horizontal.noUi-extended {\n  padding: 0 15px;\n}\n.noUi-horizontal.noUi-extended .noUi-origin {\n  right: -15px;\n}\n.noUi-background {\n  height: 2px;\n  margin: 20px 0;\n}\n.noUi-origin {\n  margin: 0;\n  border-radius: 0;\n  height: 2px;\n  background: #c8c8c8;\n}\n.noUi-origin[style^=\"left: 0\"] .noUi-handle {\n  background-color: #fff;\n  border: 2px solid #c8c8c8;\n}\n.noUi-origin[style^=\"left: 0\"] .noUi-handle.noUi-active {\n  border-width: 1px;\n}\n.noUi-target {\n  border-radius: 2px;\n}\n.noUi-horizontal {\n  height: 2px;\n  margin: 15px 0;\n}\n.noUi-vertical {\n  height: 100%;\n  width: 2px;\n  margin: 0 15px;\n  display: inline-block;\n}\n.noUi-handle.noUi-active {\n  -webkit-transform: scale3d(2.5, 2.5, 1);\n          transform: scale3d(2.5, 2.5, 1);\n}\n[disabled].noUi-slider {\n  opacity: 0.5;\n}\n[disabled] .noUi-handle {\n  cursor: not-allowed;\n}\n.slider {\n  background: #c8c8c8;\n}\n.slider.noUi-connect,\n.slider.slider-default.noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-inverse.noUi-connect {\n  background-color: #3f51b5;\n}\n.slider.slider-primary.noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-success.noUi-connect {\n  background-color: #4caf50;\n}\n.slider.slider-info.noUi-connect {\n  background-color: #03a9f4;\n}\n.slider.slider-warning.noUi-connect {\n  background-color: #ff5722;\n}\n.slider.slider-danger.noUi-connect {\n  background-color: #f44336;\n}\n.slider .noUi-connect,\n.slider.slider-default .noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-inverse .noUi-connect {\n  background-color: #3f51b5;\n}\n.slider.slider-primary .noUi-connect {\n  background-color: #009688;\n}\n.slider.slider-success .noUi-connect {\n  background-color: #4caf50;\n}\n.slider.slider-info .noUi-connect {\n  background-color: #03a9f4;\n}\n.slider.slider-warning .noUi-connect {\n  background-color: #ff5722;\n}\n.slider.slider-danger .noUi-connect {\n  background-color: #f44336;\n}\n.slider .noUi-handle,\n.slider.slider-default .noUi-handle {\n  background-color: #009688;\n}\n.slider.slider-inverse .noUi-handle {\n  background-color: #3f51b5;\n}\n.slider.slider-primary .noUi-handle {\n  background-color: #009688;\n}\n.slider.slider-success .noUi-handle {\n  background-color: #4caf50;\n}\n.slider.slider-info .noUi-handle {\n  background-color: #03a9f4;\n}\n.slider.slider-warning .noUi-handle {\n  background-color: #ff5722;\n}\n.slider.slider-danger .noUi-handle {\n  background-color: #f44336;\n}\n.slider .noUi-handle,\n.slider.slider-default .noUi-handle {\n  border-color: #009688;\n}\n.slider.slider-inverse .noUi-handle {\n  border-color: #3f51b5;\n}\n.slider.slider-primary .noUi-handle {\n  border-color: #009688;\n}\n.slider.slider-success .noUi-handle {\n  border-color: #4caf50;\n}\n.slider.slider-info .noUi-handle {\n  border-color: #03a9f4;\n}\n.slider.slider-warning .noUi-handle {\n  border-color: #ff5722;\n}\n.slider.slider-danger .noUi-handle {\n  border-color: #f44336;\n}\n.selectize-control.single,\n.selectize-control.multi {\n  padding: 0;\n}\n.selectize-control.single .selectize-input,\n.selectize-control.multi .selectize-input,\n.selectize-control.single .selectize-input.input-active,\n.selectize-control.multi .selectize-input.input-active {\n  cursor: text;\n  background: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 0;\n  padding: 0;\n  height: 100%;\n  font-size: 14px;\n  line-height: 30px;\n}\n.selectize-control.single .selectize-input .has-items,\n.selectize-control.multi .selectize-input .has-items,\n.selectize-control.single .selectize-input.input-active .has-items,\n.selectize-control.multi .selectize-input.input-active .has-items {\n  padding: 0;\n}\n.selectize-control.single .selectize-input:after,\n.selectize-control.multi .selectize-input:after,\n.selectize-control.single .selectize-input.input-active:after,\n.selectize-control.multi .selectize-input.input-active:after {\n  right: 5px;\n  position: absolute;\n  font-size: 25px;\n  content: \"\\e5c5\";\n  font-family: 'Material Icons';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.selectize-control.single .selectize-input input,\n.selectize-control.multi .selectize-input input,\n.selectize-control.single .selectize-input.input-active input,\n.selectize-control.multi .selectize-input.input-active input {\n  font-size: 14px;\n  outline: 0;\n  border: 0;\n  background: transparent;\n}\n.selectize-control.single .selectize-input.label-floating-fix input,\n.selectize-control.multi .selectize-input.label-floating-fix input,\n.selectize-control.single .selectize-input.input-active.label-floating-fix input,\n.selectize-control.multi .selectize-input.input-active.label-floating-fix input {\n  opacity: 0;\n}\n.selectize-control.single .selectize-input > div,\n.selectize-control.multi .selectize-input > div,\n.selectize-control.single .selectize-input.input-active > div,\n.selectize-control.multi .selectize-input.input-active > div,\n.selectize-control.single .selectize-input > .item,\n.selectize-control.multi .selectize-input > .item,\n.selectize-control.single .selectize-input.input-active > .item,\n.selectize-control.multi .selectize-input.input-active > .item {\n  display: inline-block;\n  margin: 0 8px 3px 0;\n  padding: 0;\n  background: transparent;\n  border: 0;\n}\n.selectize-control.single .selectize-input > div:after,\n.selectize-control.multi .selectize-input > div:after,\n.selectize-control.single .selectize-input.input-active > div:after,\n.selectize-control.multi .selectize-input.input-active > div:after,\n.selectize-control.single .selectize-input > .item:after,\n.selectize-control.multi .selectize-input > .item:after,\n.selectize-control.single .selectize-input.input-active > .item:after,\n.selectize-control.multi .selectize-input.input-active > .item:after {\n  content: \",\";\n}\n.selectize-control.single .selectize-input > div:last-of-type:after,\n.selectize-control.multi .selectize-input > div:last-of-type:after,\n.selectize-control.single .selectize-input.input-active > div:last-of-type:after,\n.selectize-control.multi .selectize-input.input-active > div:last-of-type:after,\n.selectize-control.single .selectize-input > .item:last-of-type:after,\n.selectize-control.multi .selectize-input > .item:last-of-type:after,\n.selectize-control.single .selectize-input.input-active > .item:last-of-type:after,\n.selectize-control.multi .selectize-input.input-active > .item:last-of-type:after {\n  content: \"\";\n}\n.selectize-control.single .selectize-input > div.active,\n.selectize-control.multi .selectize-input > div.active,\n.selectize-control.single .selectize-input.input-active > div.active,\n.selectize-control.multi .selectize-input.input-active > div.active,\n.selectize-control.single .selectize-input > .item.active,\n.selectize-control.multi .selectize-input > .item.active,\n.selectize-control.single .selectize-input.input-active > .item.active,\n.selectize-control.multi .selectize-input.input-active > .item.active {\n  font-weight: bold;\n  background: transparent;\n  border: 0;\n}\n.selectize-control.single .selectize-dropdown,\n.selectize-control.multi .selectize-dropdown {\n  position: absolute;\n  z-index: 1000;\n  border: 0;\n  width: 100% !important;\n  left: 0 !important;\n  height: auto;\n  background-color: #FFF;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n  border-radius: 2px;\n  padding: 0;\n  margin-top: 3px;\n}\n.selectize-control.single .selectize-dropdown .active,\n.selectize-control.multi .selectize-dropdown .active {\n  background-color: inherit;\n}\n.selectize-control.single .selectize-dropdown .highlight,\n.selectize-control.multi .selectize-dropdown .highlight {\n  background-color: #d5d8ff;\n}\n.selectize-control.single .selectize-dropdown .selected,\n.selectize-control.multi .selectize-dropdown .selected,\n.selectize-control.single .selectize-dropdown .selected.active,\n.selectize-control.multi .selectize-dropdown .selected.active {\n  background-color: #EEEEEE;\n}\n.selectize-control.single .selectize-dropdown [data-selectable],\n.selectize-control.multi .selectize-dropdown [data-selectable],\n.selectize-control.single .selectize-dropdown .optgroup-header,\n.selectize-control.multi .selectize-dropdown .optgroup-header {\n  padding: 10px 20px;\n  cursor: pointer;\n}\n.selectize-control.single .dropdown-active ~ .selectize-dropdown,\n.selectize-control.multi .dropdown-active ~ .selectize-dropdown {\n  display: block;\n}\n.dropdownjs::after {\n  right: 5px;\n  top: 3px;\n  font-size: 25px;\n  position: absolute;\n  font-family: 'Material Icons';\n  font-style: normal;\n  font-weight: 400;\n  content: \"\\e5c5\";\n  pointer-events: none;\n  color: #757575;\n}\n/*# sourceMappingURL=bootstrap-material-design.css.map */"
  },
  {
    "path": "src/assets/js/bootstrap-material-design/css/ripples.css",
    "content": ".withripple {\n  position: relative;\n}\n.ripple-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  border-radius: inherit;\n  pointer-events: none;\n}\n.ripple {\n  position: absolute;\n  width: 20px;\n  height: 20px;\n  margin-left: -10px;\n  margin-top: -10px;\n  border-radius: 100%;\n  background-color: #000;\n  background-color: rgba(0, 0, 0, 0.05);\n  -webkit-transform: scale(1);\n      -ms-transform: scale(1);\n       -o-transform: scale(1);\n          transform: scale(1);\n  -webkit-transform-origin: 50%;\n      -ms-transform-origin: 50%;\n       -o-transform-origin: 50%;\n          transform-origin: 50%;\n  opacity: 0;\n  pointer-events: none;\n}\n.ripple.ripple-on {\n  -webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n       -o-transition: opacity 0.15s ease-in 0s, -o-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n          transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;\n  opacity: 0.1;\n}\n.ripple.ripple-out {\n  -webkit-transition: opacity 0.1s linear 0s !important;\n       -o-transition: opacity 0.1s linear 0s !important;\n          transition: opacity 0.1s linear 0s !important;\n  opacity: 0;\n}\n/*# sourceMappingURL=ripples.css.map */"
  },
  {
    "path": "src/assets/js/bootstrap-material-design/js/material.js",
    "content": "/* globals jQuery */\n\n(function ($) {\n  // Selector to select only not already processed elements\n  $.expr[\":\"].notmdproc = function (obj) {\n    if ($(obj).data(\"mdproc\")) {\n      return false;\n    } else {\n      return true;\n    }\n  };\n\n  function _isChar(evt) {\n    if (typeof evt.which == \"undefined\") {\n      return true;\n    } else if (typeof evt.which == \"number\" && evt.which > 0) {\n      return (\n        !evt.ctrlKey\n        && !evt.metaKey\n        && !evt.altKey\n        && evt.which != 8  // backspace\n        && evt.which != 9  // tab\n        && evt.which != 13 // enter\n        && evt.which != 16 // shift\n        && evt.which != 17 // ctrl\n        && evt.which != 20 // caps lock\n        && evt.which != 27 // escape\n      );\n    }\n    return false;\n  }\n\n  function _addFormGroupFocus(element) {\n    var $element = $(element);\n    if (!$element.prop('disabled')) {  // this is showing as undefined on chrome but works fine on firefox??\n      $element.closest(\".form-group\").addClass(\"is-focused\");\n    }\n  }\n\n  function _toggleTypeFocus($input) {\n    $input.closest('label').hover(function () {\n      var $i = $(this).find('input');\n      if (!$i.prop('disabled')) { // hack because the _addFormGroupFocus() wasn't identifying the property on chrome\n        _addFormGroupFocus($i);     // need to find the input so we can check disablement\n      }\n    }, function () {\n      _removeFormGroupFocus($(this).find('input'));\n    });\n  }\n\n  function _removeFormGroupFocus(element) {\n    $(element).closest(\".form-group\").removeClass(\"is-focused\"); // remove class from form-group\n  }\n\n  $.material = {\n    \"options\": {\n      // These options set what will be started by $.material.init()\n      \"validate\": true,\n      \"input\": true,\n      \"ripples\": true,\n      \"checkbox\": true,\n      \"togglebutton\": true,\n      \"radio\": true,\n      \"arrive\": true,\n      \"autofill\": false,\n\n      \"withRipples\": [\n        \".btn:not(.btn-link)\",\n        \".card-image\",\n        \".navbar a:not(.withoutripple)\",\n        \".dropdown-menu a\",\n        \".nav-tabs a:not(.withoutripple)\",\n        \".withripple\",\n        \".pagination li:not(.active):not(.disabled) a:not(.withoutripple)\"\n      ].join(\",\"),\n      \"inputElements\": \"input.form-control, textarea.form-control, select.form-control\",\n      \"checkboxElements\": \".checkbox > label > input[type=checkbox]\",\n      \"togglebuttonElements\": \".togglebutton > label > input[type=checkbox]\",\n      \"radioElements\": \".radio > label > input[type=radio]\"\n    },\n    \"checkbox\": function (selector) {\n      // Add fake-checkbox to material checkboxes\n      var $input = $((selector) ? selector : this.options.checkboxElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='checkbox-material'><span class='check'></span></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"togglebutton\": function (selector) {\n      // Add fake-checkbox to material checkboxes\n      var $input = $((selector) ? selector : this.options.togglebuttonElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='toggle'></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"radio\": function (selector) {\n      // Add fake-radio to material radios\n      var $input = $((selector) ? selector : this.options.radioElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .after(\"<span class='circle'></span><span class='check'></span>\");\n\n      _toggleTypeFocus($input);\n    },\n    \"input\": function (selector) {\n      $((selector) ? selector : this.options.inputElements)\n        .filter(\":notmdproc\")\n        .data(\"mdproc\", true)\n        .each(function () {\n          var $input = $(this);\n\n          // Requires form-group standard markup (will add it if necessary)\n          var $formGroup = $input.closest(\".form-group\"); // note that form-group may be grandparent in the case of an input-group\n          if ($formGroup.length === 0 && $input.attr('type') !== \"hidden\" && !$input.attr('hidden')) {\n            $input.wrap(\"<div class='form-group'></div>\");\n            $formGroup = $input.closest(\".form-group\"); // find node after attached (otherwise additional attachments don't work)\n          }\n\n          // Legacy - Add hint label if using the old shorthand data-hint attribute on the input\n          if ($input.attr(\"data-hint\")) {\n            $input.after(\"<p class='help-block'>\" + $input.attr(\"data-hint\") + \"</p>\");\n            $input.removeAttr(\"data-hint\");\n          }\n\n          // Legacy - Change input-sm/lg to form-group-sm/lg instead (preferred standard and simpler css/less variants)\n          var legacySizes = {\n            \"input-lg\": \"form-group-lg\",\n            \"input-sm\": \"form-group-sm\"\n          };\n          $.each(legacySizes, function (legacySize, standardSize) {\n            if ($input.hasClass(legacySize)) {\n              $input.removeClass(legacySize);\n              $formGroup.addClass(standardSize);\n            }\n          });\n\n          // Legacy - Add label-floating if using old shorthand <input class=\"floating-label\" placeholder=\"foo\">\n          if ($input.hasClass(\"floating-label\")) {\n            var placeholder = $input.attr(\"placeholder\");\n            $input.attr(\"placeholder\", null).removeClass(\"floating-label\");\n            var id = $input.attr(\"id\");\n            var forAttribute = \"\";\n            if (id) {\n              forAttribute = \"for='\" + id + \"'\";\n            }\n            $formGroup.addClass(\"label-floating\");\n            $input.after(\"<label \" + forAttribute + \"class='control-label'>\" + placeholder + \"</label>\");\n          }\n\n          // Set as empty if is empty (damn I must improve this...)\n          if ($input.val() === null || $input.val() == \"undefined\" || $input.val() === \"\") {\n            $formGroup.addClass(\"is-empty\");\n          }\n\n          // Add at the end of the form-group\n          $formGroup.append(\"<span class='material-input'></span>\");\n\n          // Support for file input\n          if ($formGroup.find(\"input[type=file]\").length > 0) {\n            $formGroup.addClass(\"is-fileinput\");\n          }\n        });\n    },\n    \"attachInputEventHandlers\": function () {\n      var validate = this.options.validate;\n\n      $(document)\n        .on(\"change\", \".checkbox input[type=checkbox]\", function () {\n          $(this).blur();\n        })\n        .on(\"keydown paste\", \".form-control\", function (e) {\n          if (_isChar(e)) {\n            $(this).closest(\".form-group\").removeClass(\"is-empty\");\n          }\n        })\n        .on(\"keyup change\", \".form-control\", function () {\n          var $input = $(this);\n          var $formGroup = $input.closest(\".form-group\");\n          var isValid = (typeof $input[0].checkValidity === \"undefined\" || $input[0].checkValidity());\n\n          if ($input.val() === \"\") {\n            $formGroup.addClass(\"is-empty\");\n          }\n          else {\n            $formGroup.removeClass(\"is-empty\");\n          }\n\n          // Validation events do not bubble, so they must be attached directly to the input: http://jsfiddle.net/PEpRM/1/\n          //  Further, even the bind method is being caught, but since we are already calling #checkValidity here, just alter\n          //  the form-group on change.\n          //\n          // NOTE: I'm not sure we should be intervening regarding validation, this seems better as a README and snippet of code.\n          //        BUT, I've left it here for backwards compatibility.\n          if (validate) {\n            if (isValid) {\n              $formGroup.removeClass(\"has-error\");\n            }\n            else {\n              $formGroup.addClass(\"has-error\");\n            }\n          }\n        })\n        .on(\"focus\", \".form-control, .form-group.is-fileinput\", function () {\n          _addFormGroupFocus(this);\n        })\n        .on(\"blur\", \".form-control, .form-group.is-fileinput\", function () {\n          _removeFormGroupFocus(this);\n        })\n        // make sure empty is added back when there is a programmatic value change.\n        //  NOTE: programmatic changing of value using $.val() must trigger the change event i.e. $.val('x').trigger('change')\n        .on(\"change\", \".form-group input\", function () {\n          var $input = $(this);\n          if ($input.attr(\"type\") == \"file\") {\n            return;\n          }\n\n          var $formGroup = $input.closest(\".form-group\");\n          var value = $input.val();\n          if (value) {\n            $formGroup.removeClass(\"is-empty\");\n          } else {\n            $formGroup.addClass(\"is-empty\");\n          }\n        })\n        // set the fileinput readonly field with the name of the file\n        .on(\"change\", \".form-group.is-fileinput input[type='file']\", function () {\n          var $input = $(this);\n          var $formGroup = $input.closest(\".form-group\");\n          var value = \"\";\n          $.each(this.files, function (i, file) {\n            value += file.name + \", \";\n          });\n          value = value.substring(0, value.length - 2);\n          if (value) {\n            $formGroup.removeClass(\"is-empty\");\n          } else {\n            $formGroup.addClass(\"is-empty\");\n          }\n          $formGroup.find(\"input.form-control[readonly]\").val(value);\n        });\n    },\n    \"ripples\": function (selector) {\n      $((selector) ? selector : this.options.withRipples).ripples();\n    },\n    \"autofill\": function () {\n      // This part of code will detect autofill when the page is loading (username and password inputs for example)\n      var loading = setInterval(function () {\n        $(\"input[type!=checkbox]\").each(function () {\n          var $this = $(this);\n          if ($this.val() && $this.val() !== $this.attr(\"value\")) {\n            $this.trigger(\"change\");\n          }\n        });\n      }, 100);\n\n      // After 10 seconds we are quite sure all the needed inputs are autofilled then we can stop checking them\n      setTimeout(function () {\n        clearInterval(loading);\n      }, 10000);\n    },\n    \"attachAutofillEventHandlers\": function () {\n      // Listen on inputs of the focused form (because user can select from the autofill dropdown only when the input has focus)\n      var focused;\n      $(document)\n        .on(\"focus\", \"input\", function () {\n          var $inputs = $(this).parents(\"form\").find(\"input\").not(\"[type=file]\");\n          focused = setInterval(function () {\n            $inputs.each(function () {\n              var $this = $(this);\n              if ($this.val() !== $this.attr(\"value\")) {\n                $this.trigger(\"change\");\n              }\n            });\n          }, 100);\n        })\n        .on(\"blur\", \".form-group input\", function () {\n          clearInterval(focused);\n        });\n    },\n    \"init\": function (options) {\n      this.options = $.extend({}, this.options, options);\n      var $document = $(document);\n\n      if ($.fn.ripples && this.options.ripples) {\n        this.ripples();\n      }\n      if (this.options.input) {\n        this.input();\n        this.attachInputEventHandlers();\n      }\n      if (this.options.checkbox) {\n        this.checkbox();\n      }\n      if (this.options.togglebutton) {\n        this.togglebutton();\n      }\n      if (this.options.radio) {\n        this.radio();\n      }\n      if (this.options.autofill) {\n        this.autofill();\n        this.attachAutofillEventHandlers();\n      }\n\n      if (document.arrive && this.options.arrive) {\n        if ($.fn.ripples && this.options.ripples) {\n          $document.arrive(this.options.withRipples, function () {\n            $.material.ripples($(this));\n          });\n        }\n        if (this.options.input) {\n          $document.arrive(this.options.inputElements, function () {\n            $.material.input($(this));\n          });\n        }\n        if (this.options.checkbox) {\n          $document.arrive(this.options.checkboxElements, function () {\n            $.material.checkbox($(this));\n          });\n        }\n        if (this.options.radio) {\n          $document.arrive(this.options.radioElements, function () {\n            $.material.radio($(this));\n          });\n        }\n        if (this.options.togglebutton) {\n          $document.arrive(this.options.togglebuttonElements, function () {\n            $.material.togglebutton($(this));\n          });\n        }\n\n      }\n    }\n  };\n\n})(jQuery);\n"
  },
  {
    "path": "src/assets/js/bootstrap-material-design/js/ripples.js",
    "content": "/* Copyright 2014+, Federico Zivolo, LICENSE at https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE.md */\n/* globals jQuery, navigator */\n\n(function($, window, document, undefined) {\n\n  \"use strict\";\n\n  /**\n   * Define the name of the plugin\n   */\n  var ripples = \"ripples\";\n\n\n  /**\n   * Get an instance of the plugin\n   */\n  var self = null;\n\n\n  /**\n   * Define the defaults of the plugin\n   */\n  var defaults = {};\n\n\n  /**\n   * Create the main plugin function\n   */\n  function Ripples(element, options) {\n    self = this;\n\n    this.element = $(element);\n\n    this.options = $.extend({}, defaults, options);\n\n    this._defaults = defaults;\n    this._name = ripples;\n\n    this.init();\n  }\n\n\n  /**\n   * Initialize the plugin\n   */\n  Ripples.prototype.init = function() {\n    var $element  = this.element;\n\n    $element.on(\"mousedown touchstart\", function(event) {\n      /**\n       * Verify if the user is just touching on a device and return if so\n       */\n      if(self.isTouch() && event.type === \"mousedown\") {\n        return;\n      }\n\n\n      /**\n       * Verify if the current element already has a ripple wrapper element and\n       * creates if it doesn't\n       */\n      if(!($element.find(\".ripple-container\").length)) {\n        $element.append(\"<div class=\\\"ripple-container\\\"></div>\");\n      }\n\n\n      /**\n       * Find the ripple wrapper\n       */\n      var $wrapper = $element.children(\".ripple-container\");\n\n\n      /**\n       * Get relY and relX positions\n       */\n      var relY = self.getRelY($wrapper, event);\n      var relX = self.getRelX($wrapper, event);\n\n\n      /**\n       * If relY and/or relX are false, return the event\n       */\n      if(!relY && !relX) {\n        return;\n      }\n\n\n      /**\n       * Get the ripple color\n       */\n      var rippleColor = self.getRipplesColor($element);\n\n\n      /**\n       * Create the ripple element\n       */\n      var $ripple = $(\"<div></div>\");\n\n      $ripple\n      .addClass(\"ripple\")\n      .css({\n        \"left\": relX,\n        \"top\": relY,\n        \"background-color\": rippleColor\n      });\n\n\n      /**\n       * Append the ripple to the wrapper\n       */\n      $wrapper.append($ripple);\n\n\n      /**\n       * Make sure the ripple has the styles applied (ugly hack but it works)\n       */\n      (function() { return window.getComputedStyle($ripple[0]).opacity; })();\n\n\n      /**\n       * Turn on the ripple animation\n       */\n      self.rippleOn($element, $ripple);\n\n\n      /**\n       * Call the rippleEnd function when the transition \"on\" ends\n       */\n      setTimeout(function() {\n        self.rippleEnd($ripple);\n      }, 500);\n\n\n      /**\n       * Detect when the user leaves the element\n       */\n      $element.on(\"mouseup mouseleave touchend\", function() {\n        $ripple.data(\"mousedown\", \"off\");\n\n        if($ripple.data(\"animating\") === \"off\") {\n          self.rippleOut($ripple);\n        }\n      });\n\n    });\n  };\n\n\n  /**\n   * Get the new size based on the element height/width and the ripple width\n   */\n  Ripples.prototype.getNewSize = function($element, $ripple) {\n\n    return (Math.max($element.outerWidth(), $element.outerHeight()) / $ripple.outerWidth()) * 2.5;\n  };\n\n\n  /**\n   * Get the relX\n   */\n  Ripples.prototype.getRelX = function($wrapper,  event) {\n    var wrapperOffset = $wrapper.offset();\n\n    if(!self.isTouch()) {\n      /**\n       * Get the mouse position relative to the ripple wrapper\n       */\n      return event.pageX - wrapperOffset.left;\n    } else {\n      /**\n       * Make sure the user is using only one finger and then get the touch\n       * position relative to the ripple wrapper\n       */\n      event = event.originalEvent;\n\n      if(event.touches.length === 1) {\n        return event.touches[0].pageX - wrapperOffset.left;\n      }\n\n      return false;\n    }\n  };\n\n\n  /**\n   * Get the relY\n   */\n  Ripples.prototype.getRelY = function($wrapper, event) {\n    var wrapperOffset = $wrapper.offset();\n\n    if(!self.isTouch()) {\n      /**\n       * Get the mouse position relative to the ripple wrapper\n       */\n      return event.pageY - wrapperOffset.top;\n    } else {\n      /**\n       * Make sure the user is using only one finger and then get the touch\n       * position relative to the ripple wrapper\n       */\n      event = event.originalEvent;\n\n      if(event.touches.length === 1) {\n        return event.touches[0].pageY - wrapperOffset.top;\n      }\n\n      return false;\n    }\n  };\n\n\n  /**\n   * Get the ripple color\n   */\n  Ripples.prototype.getRipplesColor = function($element) {\n\n    var color = $element.data(\"ripple-color\") ? $element.data(\"ripple-color\") : window.getComputedStyle($element[0]).color;\n\n    return color;\n  };\n\n\n  /**\n   * Verify if the client browser has transistion support\n   */\n  Ripples.prototype.hasTransitionSupport = function() {\n    var thisBody  = document.body || document.documentElement;\n    var thisStyle = thisBody.style;\n\n    var support = (\n      thisStyle.transition !== undefined ||\n      thisStyle.WebkitTransition !== undefined ||\n      thisStyle.MozTransition !== undefined ||\n      thisStyle.MsTransition !== undefined ||\n      thisStyle.OTransition !== undefined\n    );\n\n    return support;\n  };\n\n\n  /**\n   * Verify if the client is using a mobile device\n   */\n  Ripples.prototype.isTouch = function() {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n  };\n\n\n  /**\n   * End the animation of the ripple\n   */\n  Ripples.prototype.rippleEnd = function($ripple) {\n    $ripple.data(\"animating\", \"off\");\n\n    if($ripple.data(\"mousedown\") === \"off\") {\n      self.rippleOut($ripple);\n    }\n  };\n\n\n  /**\n   * Turn off the ripple effect\n   */\n  Ripples.prototype.rippleOut = function($ripple) {\n    $ripple.off();\n\n    if(self.hasTransitionSupport()) {\n      $ripple.addClass(\"ripple-out\");\n    } else {\n      $ripple.animate({\"opacity\": 0}, 100, function() {\n        $ripple.trigger(\"transitionend\");\n      });\n    }\n\n    $ripple.on(\"transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd\", function() {\n      $ripple.remove();\n    });\n  };\n\n\n  /**\n   * Turn on the ripple effect\n   */\n  Ripples.prototype.rippleOn = function($element, $ripple) {\n    var size = self.getNewSize($element, $ripple);\n\n    if(self.hasTransitionSupport()) {\n      $ripple\n      .css({\n        \"-ms-transform\": \"scale(\" + size + \")\",\n        \"-moz-transform\": \"scale(\" + size + \")\",\n        \"-webkit-transform\": \"scale(\" + size + \")\",\n        \"transform\": \"scale(\" + size + \")\"\n      })\n      .addClass(\"ripple-on\")\n      .data(\"animating\", \"on\")\n      .data(\"mousedown\", \"on\");\n    } else {\n      $ripple.animate({\n        \"width\": Math.max($element.outerWidth(), $element.outerHeight()) * 2,\n        \"height\": Math.max($element.outerWidth(), $element.outerHeight()) * 2,\n        \"margin-left\": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),\n        \"margin-top\": Math.max($element.outerWidth(), $element.outerHeight()) * (-1),\n        \"opacity\": 0.2\n      }, 500, function() {\n        $ripple.trigger(\"transitionend\");\n      });\n    }\n  };\n\n\n  /**\n   * Create the jquery plugin function\n   */\n  $.fn.ripples = function(options) {\n    return this.each(function() {\n      if(!$.data(this, \"plugin_\" + ripples)) {\n        $.data(this, \"plugin_\" + ripples, new Ripples(this, options));\n      }\n    });\n  };\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "src/components/App.vue",
    "content": "<template>\n    <div id=\"app\">\n        <div class=\".container-fluid\" >\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <search-component></search-component>\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <div class=\"bs-component \">\n                       <list-component :data=\"searchResultList\"></list-component>\n                    </div>   \n                </div>\n            </div>\n           \n        </div>\n    </div>\n\n</template>\n\n<script>\n    import searchComponent from \"./Search\"\n    import listComponent from \"./List\"\n    export default {\n        vuex :{\n            getters : {\n                searchResultList: ({ search }) => search.searchResultList \n            }\n        },\n        components:{\n            searchComponent,listComponent\n        }\n    }\n</script>\n\n<style >\n\n</style>\n"
  },
  {
    "path": "src/components/List.vue",
    "content": "<template>\n    <div class=\"list-group\">\n        <div class=\"list-group-item\" v-for=\"item in data\">\n            <div class=\"row-picture\">\n                <i class=\"material-icons\">location_on</i>\n            </div>\n            <div class=\"row-content\">\n                <h4 class=\"list-group-item-heading\">{{item.name}}</h4>\n                <p class=\"list-group-item-text\">{{item.address}}</p>\n            </div>\n            <div class=\"list-group-separator\"></div>\n        </div>\n    </div>\n</template>\n\n<script>\n    export default{\n        props:['data']\n    }\n</script>"
  },
  {
    "path": "src/components/Search.vue",
    "content": "<template>\n    <div class=\"form-group\">\n        <div class=\"input-group\">\n            <search-group  :items=\"searchGroupItem\"></search-group>\n            <input type=\"text\" class=\"form-control\"  :value=\"searchKey\" @input=\"update\" @keyup.enter=\"searchAction\" placeholder=\"搜索关键字...\" >\n            <span class=\"material-input\"></span>\n            <i class=\"material-icons i-clear\" v-show=\"isEmptySearchKey\" v-on:click.stop=\"clearAction\">clear</i>\n            <i class=\"material-icons i-search\" v-on:click.stop=\"searchAction\">search</i>\n        </div>\n    </div>\n</template>\n<style>\n    .i-search {\n        position: absolute;\n        right: 0;\n        top : 10px;\n        cursor: pointer;\n        z-index: 10;\n    }\n    .i-clear{\n        position: absolute;\n        right: 30px;\n        top : 13px;\n        cursor: pointer;\n        z-index: 10; \n        font-size : 16px;\n        color :#777;\n    }\n    .i-search:hover,.i-clear:hover{\n        color :#00aa9a;\n    }\n</style>\n<script>\n    import searchGroup from \"./SearchGroup\"\n    import { searchParamList,clearSearchKey,updateSearchKey } from '../vuex/actions'\n    import {isEmptySearchKey} from \"../vuex/getters\"\n    export default{\n         vuex: {\n            getters: {\n               searchGroupItem: ({ searchGroup }) => searchGroup.searchGroupItem ,\n               searchGroup:({searchGroup}) => searchGroup.searchGroup,\n               searchKey : ({search}) => search.searchKey ,\n               isEmptySearchKey\n            },\n            actions: {\n              searchParamList,clearSearchKey,updateSearchKey\n            }\n         },\n        methods : {\n            clearAction(){\n               this.clearSearchKey()\n            },\n            searchAction(e){\n                if(this.searchKey.length){\n                    this.searchParamList(this.searchGroup,this.searchKey)\n                }\n            },\n            update(e){\n                this.updateSearchKey(e.target.value)\n            }\n        },\n        components:{\n            searchGroup\n        }\n    }\n</script>"
  },
  {
    "path": "src/components/SearchGroup.vue",
    "content": "<template>\n    <span class=\"input-group-btn\">\n        <a href=\"javascript:void(0)\" data-target=\"#\" class=\"btn btn-raised btn-primary dropdown-toggle\" data-toggle=\"dropdown\" aria-expanded=\"false\">\n            {{curName}}\n            <span class=\"caret\"></span>\n            <div class=\"ripple-container\"></div>\n        </a>\n        <ul class=\"dropdown-menu\" >\n            <li v-for=\"item in items\"><a href=\"javascript:void(0)\" @click=\"menuClick(item)\">{{item.name}}</a></li>\n        </ul>\n    </span>\n</template>\n<style>\n    .dropdown-menu{\n        min-width:100%;\n    }\n</style>\n<script>\n    import { setSearchGroup } from '../vuex/actions'\n    export default{\n        vuex : {\n            getters : {\n                searchKey : ({search}) => search.searchKey ,\n                 searchGroup : ({searchGroup}) => searchGroup.searchGroup\n            },\n            actions : {\n                setSearchGroup\n            }\n        },\n        computed : {\n          curName : function(){\n              let cname ;\n              this.items.forEach((it) =>{\n                  if(it.value == this.searchGroup) cname = it.name\n              })\n              return cname\n          }\n        },\n        methods : {\n            menuClick : function(it){\n                this.setSearchGroup(it.value,this.searchKey)\n            }\n        },\n        components:{\n        },\n        props : ['items']\n    }\n</script>"
  },
  {
    "path": "src/config.js",
    "content": "/**\n * Created by  on 2016/4/1.\n */\nexport const API_ROOT = (process.env.NODE_ENV === 'production')\n    ?'http://localhost:8400/api'\n    :'http://localhost:8400/api'\n"
  },
  {
    "path": "src/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title><%= htmlWebpackPlugin.options.title %></title>\n  </head>\n  <body >\n    <App></App>\n  </body>\n</html>\n"
  },
  {
    "path": "src/main.js",
    "content": "import Vue from 'vue'\nimport App from './components/App'\nimport $ from \"jquery\"\nimport store from './vuex/store'\nimport 'font-awesome/css/font-awesome.css'\nimport 'bootstrap/dist/css/bootstrap.css'\nimport './assets/css/md-facefont.css'\nimport \"./assets/js/bootstrap-material-design/css/bootstrap-material-design.css\"\nimport \"./assets/js/bootstrap-material-design/css/ripples.min.css\"\nimport \"bootstrap/dist/js/bootstrap.min\"\nimport \"./assets/js/bootstrap-material-design/js/ripples.min.js\"\nimport \"./assets/js/bootstrap-material-design/js/material.min.js\"\nnew Vue({\n   el : \"body\",\n   store,\n   components:{\n     App\n   },\n    ready(){\n      $.material.init()\n    }\n})\n\n"
  },
  {
    "path": "src/vuex/actions.js",
    "content": "import api from \"./../api\"\nimport * as types from './mutation-types'\n\n// 设置查询分组\nexport const setSearchGroup = ({ dispatch }, group,key) => {\n    // 设置searchGroup 值\n    dispatch(types.SET_SEARCH_GROUP_VAL, group)\n    // 查询结果\n    searchParamList({dispatch},group,key)\n}\n\n// clear 查询项\nexport const clearSearchKey = ({dispatch} ) =>{\n    dispatch(types.CLEAR_SEARCH_VAL)\n}\n\n// 更新查询项\nexport const updateSearchKey = ({dispatch},key) =>{\n    dispatch(types.UPDATE_SEARCH_VAL,key);\n}\n\n// 查询结果集合\nexport const searchParamList = ({dispatch},group,key) =>{\n    // 根据group和key 查询\n    api.getSearchParamList({type:group,key:key}).then(reply => {\n         if(reply.data.result){\n             dispatch(types.SET_SEARCH_LIST,reply.data.result);\n         }\n    });\n}"
  },
  {
    "path": "src/vuex/getters.js",
    "content": "export const isEmptySearchKey = (store) => {\n    return store.search.searchKey !== \"\"\n}"
  },
  {
    "path": "src/vuex/middlewares.js",
    "content": "import createLogger from 'vuex/logger'\n\nexport default process.env.NODE_ENV !== 'production'\n  ? [createLogger()]\n  : []"
  },
  {
    "path": "src/vuex/modules/search.js",
    "content": "/**\n * Created by  on 2016/4/1.\n */\nimport {\n    SET_SEARCH_LIST,\n    CLEAR_SEARCH_VAL,\n    UPDATE_SEARCH_VAL\n}  from '../mutation-types'\n\nconst state  = {\n    // 查询条件\n    searchKey : \"\",\n    // 查询结果\n    searchResultList : []\n}\n\n// mutations\nconst mutations = {\n    [SET_SEARCH_LIST] (state,list) {\n        state.searchResultList = list;\n    },\n    [UPDATE_SEARCH_VAL](state , key){\n        state.searchKey = key ;\n    },\n    [CLEAR_SEARCH_VAL](state){\n        state.searchKey = \"\";\n        state.searchResultList = [];\n    }\n}\n\nexport  default {\n    state,\n    mutations\n}\n\n\n"
  },
  {
    "path": "src/vuex/modules/searchGroup.js",
    "content": "/**\n * Created by  on 2016/4/27.\n */\nimport {\n    SET_SEARCH_GROUP_VAL\n} from '../mutation-types'\nconst state = {\n    // 分组值\n    searchGroup : \"1\",\n    // 查询分组项\n    searchGroupItem : [\n        {\n            name: \"个人\",\n            value: 1\n        }, {\n            name: \"公司\",\n            value: 2\n        },{\n            name: \"国家\",\n            value: 3\n        }\n    ]\n}\n\n// mutations\nconst mutations = {\n    // 设置查询分组值\n    [SET_SEARCH_GROUP_VAL] (state, searchGroup) {\n        state.searchGroup = searchGroup;\n    },\n\n}\nexport default {\n    state,mutations\n}"
  },
  {
    "path": "src/vuex/mutation-types.js",
    "content": "\n// 查询组件types\n// 查询组件中的 查询信息\nexport const SEARCH_PARAM_LIST = 'SEARCH_PARAM_LIST'\nexport const SET_SEARCH_LIST = \"SET_SEARCH_LIST\"\nexport const GET_SEARCH_LIST = \"GET_SEARCH_LIST\"\nexport const GET_SEARCH_GROUP_DATA = \"GET_SEARCH_GROUP_DATA\"\n\n// 设置查询分组值到state\nexport const SET_SEARCH_GROUP_VAL = 'SET_SEARCH_GROUP_VAL'\nexport const CLEAR_SEARCH_VAL = \"CLEAR_SEARCH_VAL\"\nexport const UPDATE_SEARCH_VAL = \"UPDATE_SEARCH_VAL\"\n"
  },
  {
    "path": "src/vuex/store.js",
    "content": "import Vue from 'vue'\nimport Vuex from 'vuex'\nimport search from \"./modules/search\"\nimport searchGroup from \"./modules/searchGroup\"\nimport middlewares from './middlewares'\n\nconst debug = process.env.NODE_ENV !== 'production'\nVue.use(Vuex)\nVue.config.debug = debug\n\nexport default new Vuex.Store({\n  modules: {\n    search,\n    searchGroup\n  },\n  strict: debug,\n  middlewares\n})\n"
  },
  {
    "path": "tutorial/01.md",
    "content": "# vuex的常用目录结构\n```\n |--modules\n |-----saerch.js\n |-----searchGrouop.js\n |--actions.js\n |--getters.js\n |--middlewares.js\n |--mutation-types.js\n |--store.js\n```\n# 各文件使用说明\n## modules \nmodule 也就是`vuex`概念里的`store`,这里模块拆分了\n存放我们实际项目中要使用的`vuex`模块, 一般可以针对组件级别定义.\n例如这里我们定义了`search.js`和`searchGroup.js` 然而module最后会在`store.js`中统一使用\n```js\nimport search from \"./modules/search\"\nimport searchGroup from \"./modules/searchGroup\"\n\nexport default new Vuex.Store({\n  modules: {\n    search,\n    searchGroup\n  }\n})\n```\n\n1. module如果编写\n\n    module里定义`store`和`mutations`。`store`是我们正常要维护的状态数据,`mutatinons`是操作和维护store的处理\n\n```js\nconst state  = {\n   // 查询条件\n   searchKey : \"\",\n   // 查询结果\n   searchResultList : []\n}\nconst mutations = {\n    [SET_SEARCH_LIST] (state,list) {\n        state.searchResultList = list;\n    },\n    [UPDATE_SEARCH_VAL](state , key){\n        state.searchKey = key ;\n    },\n    [CLEAR_SEARCH_VAL](state){\n        state.searchKey = \"\";\n        state.searchResultList = [];\n    }\n}\n```\n\n## actions\n这里定义我们vue组件要操作的动作事件, 比如请求一个异步操作,获取其他组件的状态等\n\n```js\n// actions.js\n// 查询结果集合 \nexport const searchParamList = ({dispatch},group,key) =>{\n    // 根据group和key 查询\n    api.getSearchParamList({type:group,key:key}).then(reply => {\n         if(reply.data.result){\n             dispatch(types.SET_SEARCH_LIST,reply.data.result);\n         }\n    });\n}\n```\n\n## getters\n `getters` 定义公用的getters处理 ,例如正常组件里想`computed`一个状态但在vuex里面不知道怎么处理，就可以在这里处理。\n> Getters Must Be Pure 这东西必须是个纯函数\n\n这里判断了一下查询框的值有没有, 用于X图标显示\n\n```js\n// getters.js\nexport const isEmptySearchKey = (store) => {\n    return store.search.searchKey !== \"\"\n}\n// Search.vue\nimport {isEmptySearchKey} from \"../vuex/getters\"\nexport default{\n     vuex: {\n        getters: {\n           isEmptySearchKey\n        },\n        actions: {\n          \n        }\n     } \n}\n\n```\n\n## middlewares\n`middlewares`中间件处理的东西，这里主要开发时候在控制台查看一些处理日志， `vuex`本身自带,其他没有研究过。\n\n## mutation-types\n 定义`mutation`里用到的方法常量值，统一处理在这里，一般都是业务字符串常量。\n \n```js\n// 设置查询分组值\nexport const SET_SEARCH_GROUP_VAL = 'SET_SEARCH_GROUP_VAL'\n// 清除查询值\nexport const CLEAR_SEARCH_VAL = \"CLEAR_SEARCH_VAL\"\n// 修改查询值\nexport const UPDATE_SEARCH_VAL = \"UPDATE_SEARCH_VAL\"\n```\n\n## store\n`store.js`核心文件，这里就是vuex基本的写法了，先引用vue和vuex 然后user(Vuex),把定义好的`modules`,`middlewares`引入进来然后返回一个Vuex.store\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport search from \"./modules/search\"\nimport searchGroup from \"./modules/searchGroup\"\nimport middlewares from './middlewares'\n\nconst debug = process.env.NODE_ENV !== 'production'\nVue.use(Vuex)\nVue.config.debug = debug\n\nexport default new Vuex.Store({\n  modules: {\n    search,\n    searchGroup\n  },\n  strict: debug,\n  middlewares\n})\n\n```\n\n* strict : 这个属性如果设置true 一旦非mutation地方修改store里的值 就会提示error,意思就别随便动我的状态\n"
  },
  {
    "path": "tutorial/02.md",
    "content": "# vuex快速使用指南2 \n\n这章节我准备以requirejs模块化，讲解下如何快速上手vuex\n\n [源码地址](https://github.com/yelingfeng/vuex-tutorial/tree/master/amd) \n\n工程代码结构如下\n```\n |--src\n |----api\n |----assets\n |----component\n |----lib\n |----vuex\n |----config.js\n |----main.js\n |----require.js\n |--index.html\n```\n\n| 目录文件  | 说明  |  \n| --------:   | :-----  |\n| src  |  存放所有源码  |\n| api  |   数据处理接口    |\n| assets |   一些资源文件css, images ,js等      |\n| components |   存放vue组件     |\n| lib |   依赖包 `vuex` `vuex-resource` `lodash`等     |\n| vuex |    vuex文件详细看上一节[点我](/tutorial/01.md)   |\n| config.js | requirejs配置文件|\n| main.js |  主入口文件|\n\n###  1. index.html 引入`requirejs`并加载依赖css\n```html\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap/css/bootstrap.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/css/md-facefont.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap-material-design/css/bootstrap-material-design.css\">\n    <link rel=\"stylesheet\" href=\"src/assets/js/bootstrap-material-design/css/ripples.min.css\">\n    \n    <script src=\"src/require.js\" data-main=\"src/config.js\" ></script>\n```\n\n### 2. config.js 配置环境依赖 \n   \n   这里加入`jquery`,`vue` ,`vue-resource`,`vuex` , `lodash`,`bootstrap-material-design`\n   `bootstrap-material-design` \n   \n   本身依赖`jquery`和`bootstrap`配置好`shim`,之后`require`我们的`main.js`\n``` javascript\nrequire.config({\n    baseUrl : \"./src\",\n    paths :{\n        jquery:\"./lib/jquery.min\",\n        vue:\"./lib/vue\",\n        vueResource:\"./lib/vue-resource.min\",\n        vueX:\"./lib/vuex\",\n        api :\"./api/index\",\n        lodash : \"./lib/lodash.min\",\n        bootstrap : \"./assets/js/bootstrap/js/bootstrap.min\",\n        ripples : \"./assets/js/bootstrap-material-design/js/ripples.min\",\n        material:\"./assets/js/bootstrap-material-design/js/material.min\"\n    },\n    shim : {\n        bootstrap : ['jquery'],\n        ripples:['jquery'],\n        material:['jquery'],\n    },\n    packages: [\n        {\n            name: 'components',\n            location: 'component',\n            main: 'components'\n        },\n        {\n            name : \"vuex\",\n            location :\"vuex\",\n            main : \"vuex\"\n        }\n    ]\n})\nrequire([\"./main\"])\n\n```\n### 3. main.js 创建我们的应用\n\n 引入依赖包,我们写的App.js 和vuex的`store`对象.\n \n 创建vue对象 并 加载vuex的`store` 挂到body上  ready后初始化我们的`bootstrap-material-design`\n\n``` javascript\ndefine(function(require){\n    var Vue = require(\"vue\");\n    var store = require(\"vuex/store\")\n    var app =  require(\"component/App\")\n    var $ = require(\"jquery\");\n    require(\"bootstrap\")\n    require(\"ripples\")\n    require(\"material\")\n    \n    Vue.config.debug = true;\n    Vue.config.devtools = true;\n\n    new Vue({\n        el : \"body\",\n        store: store,\n        ready: function(){\n            $.material.init();\n        },\n        components:{\n            App: app\n        }\n    });\n});\n```\n\n### 4. 创建我们应用的状态管理\n\n  **vuex/store.js** 这里同时加载我们的多个业务`state` (search,searchGroup),\n  \n  `vuex`在实例化的时候会合并我们定义的modules 进而完成模块化的需求\n  \n```javascript\ndefine(function(require){\n      var Vue = require(\"vue\");\n      var Vuex = require(\"vueX\");\n      var search = require(\"vuex/modules/search\");\n      var searchGroup = require(\"vuex/modules/searchGroup\");\n      Vue.use(Vuex)\n      Vue.config.debug = true;\n    \n      return new Vuex.Store({\n        modules: {\n          search : search,\n          searchGroup :searchGroup\n        },\n        strict: true,\n        middlewares: [Vuex.createLogger]\n      })\n});\n```\n\n### 5. 创建操作类型types\n\n**vuex/mutation-types.js** 以search组件为说明 我们需要3个动作操作分别是如下\n\n**设置需要显示的结果数组**    \n> **SET_SEARCH_LIST**\n![](/tutorial/img/setSearchList.gif)\n\n**更新查询值**     \n>  **UPDATE_SEARCH_VAL**\n![](/tutorial/img/updateSearchKey.gif)\n\n**清空我们的查询值**  \n>  **CLEAR_SEARCH_VAL**\n![](/tutorial/img/clearSearchVal.gif)\n\n定义好类型后 在`mutations`和`actions`里使用\n\n``` javascript\n  {\n    SET_SEARCH_LIST : \"SET_SEARCH_LIST\",\n    UPDATE_SEARCH_VAL : \"UPDATE_SEARCH_VAL\",\n    CLEAR_SEARCH_VAL : \"CLEAR_SEARCH_VAL\",\n   }\n```\n\n\n\n### 6.创建业务模块modules \n\n这里以**vuex/modules/search.js**为例\n\n我们定义个`state` 包括2个属性`searchKey`和`searchResultList` \n\n分别配置 操作类型变化的`state`处理。\n\n最后返回我们的`state`和`mutations`\n\n以官网API中表示，`mutation` 必须是同步函数 所以异步操作尽量在`actions`里处理\n\n```javascript\ndefine(function(require){\n    var types = require(\"vuex/mutation-types\");\n    var state = {\n        // 查询条件\n        searchKey : \"\",\n        // 查询结果\n        searchResultList : []\n    }\n    // mutations\n    var mutations = {}\n\n    mutations[types.SET_SEARCH_LIST] = function(state,list) {\n        state.searchResultList = list;\n    }\n    mutations[types.UPDATE_SEARCH_VAL] = function(state , key) {\n        state.searchKey = key ;\n    }\n    mutations[types.CLEAR_SEARCH_VAL] = function(state ) {\n        state.searchKey = \"\";\n        state.searchResultList = [];\n    }\n\n    return {\n        state : state,\n        mutations : mutations\n    }\n});\n```\n\n### 6.创建动作actions \n\n这里定义也是对应3个操作 \n> 清空查询项 \n> 更新查询项\n> 获取查询结果集合\n\n`clearSearchKey` 方法中\n\n> 1. 获取store \n> 2. 使用store.dispatch(对应types) 触发变化mutation\n    (如果参数可以在第二个参数后面加 最新版本也可以直接对象形式传参数)\n\n```javascript\ndefine(function(require){\n    var api = require(\"api\");\n    var types = require(\"vuex/mutation-types\")\n    var actions = {\n        // clear 查询项\n        clearSearchKey : function(store){\n            store.dispatch(types.CLEAR_SEARCH_VAL)\n        },\n        // 更新查询项\n        updateSearchKey : function(store , key){\n            store.dispatch(types.UPDATE_SEARCH_VAL,key);\n        },\n        // 查询结果集合\n        searchParamList : function(store , group ,key){\n            var result = api.searchParamList({\n                type:group,\n                key:key\n            });\n            if(result.data){\n                store.dispatch(types.SET_SEARCH_LIST,result.data);\n            }\n        }\n\n    }\n    return actions;\n})\n\n```\n\n### 7. 创建业务组件\n 折腾了这么多 终于可以写组件了 - -！以`component/Search.js`为说明\n \n 我们引用`searchGroup`组件 ,`vuex`的`actions` 再组件中创建`vuex`对象\n \n 在组件中配置getters来接收store的state \n \n> 例如`searchKey`我们引用了`vuex/modules/search`中的`state`对象中的`searchKey` 这里我们只是只读不去修改\n \n 配置methods来接受`vuex/actions`里的操作方法\n 最后编写我们其他代码 完成search.js的创建\n \n``` javascript\n var Vue = require(\"vue\");\n     var SearchGroup = require(\"component/SearchGroup\");\n     var actions = require(\"vuex/actions\")\n     var getters = require(\"vuex/getters\");\n     return Vue.extend({\n         vuex :{\n            getters : {\n                searchGroupItem: function(store){\n                    return store.searchGroup.searchGroupItem\n                },\n                searchGroup:function(store){\n                    return store.searchGroup.searchGroup\n                },\n                searchKey : function(store){\n                    return store.search.searchKey\n                },\n                isEmptySearchKey : getters.isEmptySearchKey\n            },\n            actions: {\n                searchParamList:actions.searchParamList ,\n                clearSearchKey:actions.clearSearchKey,\n                updateSearchKey:actions.updateSearchKey\n            }\n         },\n         methods : {\n             clearAction:function(){\n                 this.clearSearchKey()\n             },\n             searchAction:function(e){\n                 if(this.searchKey.length){\n                     this.searchParamList(this.searchGroup,this.searchKey)\n                 }\n             },\n             update:function(e){\n                 this.updateSearchKey(e.target.value)\n             }\n         },\n         template : \"#search-template\",\n         components:{\n             searchGroup:SearchGroup\n         }\n     });\n```\n\n## 最终效果\n\n经过以上步骤完成一个`search`组件在`vuex`的框架体系中的创建流程,当然步骤其实挺麻烦的 还有很多细节和方法没点到 还请见谅。\n\n个人水平有限 只能BB到这里 结合本文可以去看es6的版本。\n\n说下vuex下组件的一个整体流程\n\nsearch.js中触发一个`methodA` \n  -->   `methodA`触发(getter --> Actions `methodA`)\n      --> `methodA` 通过**vuex.actions**里actions  **store.dispatch(types.METHODA)**\n           --> **vuex.modules.search**配置的mutations[types.METHODA] 进行state的操作\n                --> state改变某个状态A 响应到search.js中属性a (getter --> a = search.A) \n                \n![](/tutorial/img/final.gif)\n\n------\n作者 \n[yelingfeng](https://github.com/yelingfeng) \n\n相关链接 \n\n[vuejs](https://github.com/vuejs/vue)\n[vuex](https://github.com/vuejs/vuex)\n[requirejs](https://github.com/requirejs/requirejs)\n\n特别感谢jackblog-vue\n\n[jackblog-vue](https://github.com/jackhutu/jackblog-vue)\n    \n| 专业技术群分享|\n| :-----  |\n|Vuejs 364912432| \n|Angularjs 238251402|\n|React 530415177|\n|Nodejs 422910907|\n|PHP高级开发 132984819|\n|JAVA高级开发 145381037|\n|移动微信前端开发 148257606|\n"
  },
  {
    "path": "tutorial/03/INFO.md",
    "content": "# vuex入门实例(3/3)\n\n最后一篇 想写下vuex 2.0以后的变化, 其实严格意义不算入门了 大家随便看看就好 算这个系列的完结吧 ：）\n\nvuex为了迎合vue2.0的变化 进行了大量的调整和优化\n\n先看下尤大2.0的设计 [传送门](https://github.com/vuejs/vuex/issues/236)\n\n总结下大概有几点变化\n\n\n## 1. 更加语义化\n\n原文 Terms naming change for better semantics这个语义化说的是触发`action`和`mutation`的API上\n\n在使用`action`的时候 我们一般是从vue组件本身`dispatch`派发一个action 这个其实只是一个命令 并没有实际\n改变什么， 而`dispatch`一个`mutation` 其实是改变了vuex本身的数据 所以一般从数据角度理解 这种应该属于事物提交。那么变化之后的命名就是`commit`这样更加语义化 也更好的理解职责\n\n### 新的写法\n### dispatch --> Action\n``` javascript\nmethods:{\n    Add : function(){\n      this.$store.dispatch('ADD',2).then(function(resp){\n          console.log(resp)\n      })\n    }\n}\n\n```\n### commit --> Mutation\n``` javascript\nactions:{\n    \"ADD\" : function(store , param){\n        return new Promise(function(resolve, reject) {\n            store.commit('ADD',param)\n            resolve(\"ok\");\n        })\n    }\n}\n```\n\n1.x 写法就是触发`action`和`mutation`都叫`dispatch`\n\n``` javascript\nADD: function(store, param ){\n    store.dispatch('COMMIT',param)\n}\n```\n\n## 2. 更灵活\n\n1.x之前的版本action是不定义在vuex里的,  而2.x actions可以直接在store中定义了 也就是可以在store实例中直接dispatch\n\n```javascript\nvar store =  new Vuex.Store({\n    state: {\n        messages: 0\n    },\n    mutations:{\n        \"ADD\": function(state, msg) {\n            state.messages += msg;\n        }\n    },\n    // action不用再去外面定义 可以直接写在构建参数里\n    actions:{\n        \"ADD\" : function(store , param){\n            store.commit('ADD',param)\n        },\n    }\n})\nstore.dispatch('ADD',2)\n```\n\n而getter也是如此 在vue中直接取getters\n\n```javascript\ncomputed:{\n   msg : function(){\n      return this.$store.getters.getMessage\n   }\n}\n```\n\n\n## 3. Promise Action\n\n原文 `Composable Action Flow `直译 `可组合的action流`\n其实这个组合事件流概念 没怎么用过 也不好翻译 我就简单从变化性翻译它\n就是action现在返回了promise 在之前的版本 并没有返回promise 而2.x的源码中已经返回了promise\n所以也就可以支持所谓的Composable Action\n\n``` javascript\n// action我们定义一个返回promise的add action\nactions:{\n    \"ADD\" : function(store , param){\n        return new Promise(function(resolve, reject) {\n            store.commit('ADD',param)\n            resolve(\"ok\");\n        })\n    }\n}\n\n// 这里可以在dispatch之后直接处理异步\nthis.$store.dispatch('ADD',2).then(function(resp){\n   console.log(resp) // ok\n})\n\n\n```\n\n\n## 4. MapGetters/ MapActions\n\n新版vuex提供了几个封装方法 `mapState`, `mapMutations`, `mapGetters`,`mapActions`\n\n这些都是什么鬼呢？\n\n其实如果你用过vuex1.x以下的版本 其实它就是我们vue组件中的`vuex`属性的 换了一种更高逼格写法\n\n可以定义一组要获取的actions getters 然后map进来 \n\n```javascript\n // 旧版写法\n var App = Vue.extend({\n    template:\"....\",\n    vuex:{\n        getters:{\n            msg : function(state){\n                return state.messages\n            }\n        },\n        actions:{\n            add :actions.ADD\n        }\n    }\n })\n\n // 新版写法 es5 写法\n var App = Vue.extend({\n    template:\"....\",\n    computed:Vuex.mapGetters({\n        msg : 'getMessage'\n    }),\n    methods:Vuex.mapGetters({\n        add : 'ADD'\n    })\n})\n```\n  这种本质跟1.x的`vuex`写法是一样的 内部都是使用vue的`Object.defineProperty`取做响应式\n```javascript\n// es6写法 支持rest参数这种写法 也可以直接完全使用map套装注入\nimport { mapGetters, mapActions } from 'vuex'\nexport default {\n  computed: {\n    someComuted () { … },\n    ...mapGetters(['getMessage', 'getName'])\n  },\n  methods: {\n    someMethod () { … },\n    ...mapActions(['ADD','EDIT'])\n  }\n}\n\n```\n\n##5. Silent \n\n在commit一个mutation的时候 是否触发订阅的插件。\n\n默认silent为false 如果silent设置为true 则表示不触发注册的subscribe\n\n一般注册的插件包括dev-tools 都不会触发了\n\n```javascript\n // 实例代码\n store.commit('ADD',param,{ silent: true}) \n\n```\n\n```javascript\n   \n // 源码 \n if (!options || !options.silent) {\n   this._subscribers.forEach(sub => sub(mutation, this.state))\n }  \n    \n```\n\n\n##6. 其他变动\n\n最新的`vuex-2.0.0.rc5` 为说明API一些新变化\n```javascript\n\n   // 这个就是换个名字\n   store.middlewares -> store.plugins\n    \n   // 这货貌似干掉又被还原了 尤大真是喜怒无常 哈    \n   store.watch\n   \n   // 使用subscribe 监听vuex的变化\n   store.subscribe((mutation, state) => { ... })\n\n   // 注册模块\n   registerModule\n\n   // 注销模块\n   unregisterModule\n```\n\n## 总结\n\n总体来说vuex2.0的变化还是跟vue本身一样 也算折腾了一下 新版的写法和逼格更高些。\n作为vue全家桶中重要的状态流管理框架 vuex值得你拥有\n\n[demo地址](https://github.com/yelingfeng/vuex-tutorial/blob/master/tutorial/03 )\n"
  },
  {
    "path": "tutorial/03/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head lang=\"en\">\n    <meta charset=\"UTF-8\">\n    <title>新版vuex写法</title>\n    <script src=\"lib/vue.js\"></script>\n    <script src=\"lib/vuex.js\"></script>\n</head>\n<body>\n<div id=\"app\"></div>\n<script>\n\n    var App = Vue.extend({\n        template:`<div><p>this is vuex2.0 demo {{msg}}</p><button @click=\"add()\">+</button> <br/></div>`,\n        computed:Vuex.mapGetters({\n            msg : 'getMessage'\n        }),\n        mounted:function(){\n            console.log(this.$store)\n        },\n        methods:{\n            add : function(){\n                this.$store.dispatch('ADD',2).then(function(resp){\n                    console.log(resp)\n                })\n            }\n        }\n    })\n\n    var store =  new Vuex.Store({\n        state: {\n            messages: 0\n        },\n        mutations:{\n            \"ADD\": function(state, msg) {\n                state.messages += msg;\n            }\n        },\n        actions:{\n            \"ADD\" : function(store , param){\n                return new Promise(function(resolve, reject) {\n                    store.commit('ADD',param)\n                    resolve(\"ok\");\n                })\n            },\n        },\n        getters:{\n            getMessage:function(state){\n                return state.messages\n            }\n        }\n    })\n\n\n    new Vue({\n        el: '#app',\n        store,\n        render: function(h){\n             return h(App)\n        }\n    })\n\n\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "tutorial/03/lib/old/vuex.js",
    "content": "/*!\n * Vuex v0.8.0\n * (c) 2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Vuex = factory());\n}(this, function () { 'use strict';\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n  };\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var toConsumableArray = function (arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    } else {\n      return Array.from(arr);\n    }\n  };\n\n  /**\n   * Merge an array of objects into one.\n   *\n   * @param {Array<Object>} arr\n   * @return {Object}\n   */\n\n  function mergeObjects(arr) {\n    return arr.reduce(function (prev, obj) {\n      Object.keys(obj).forEach(function (key) {\n        var existing = prev[key];\n        if (existing) {\n          // allow multiple mutation objects to contain duplicate\n          // handlers for the same mutation type\n          if (Array.isArray(existing)) {\n            existing.push(obj[key]);\n          } else {\n            prev[key] = [prev[key], obj[key]];\n          }\n        } else {\n          prev[key] = obj[key];\n        }\n      });\n      return prev;\n    }, {});\n  }\n\n  /**\n   * Deep clone an object. Faster than JSON.parse(JSON.stringify()).\n   *\n   * @param {*} obj\n   * @return {*}\n   */\n\n  function deepClone(obj) {\n    if (Array.isArray(obj)) {\n      return obj.map(deepClone);\n    } else if (obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') {\n      var cloned = {};\n      var keys = Object.keys(obj);\n      for (var i = 0, l = keys.length; i < l; i++) {\n        var key = keys[i];\n        cloned[key] = deepClone(obj[key]);\n      }\n      return cloned;\n    } else {\n      return obj;\n    }\n  }\n\n  /**\n   * Hacks to get access to Vue internals.\n   * Maybe we should expose these...\n   */\n\n  var Watcher = void 0;\n  function getWatcher(vm) {\n    if (!Watcher) {\n      var noop = function noop() {};\n      var unwatch = vm.$watch(noop, noop);\n      Watcher = vm._watchers[0].constructor;\n      unwatch();\n    }\n    return Watcher;\n  }\n\n  var Dep = void 0;\n  function getDep(vm) {\n    if (!Dep) {\n      Dep = vm._data.__ob__.dep.constructor;\n    }\n    return Dep;\n  }\n\n  var hook = typeof window !== 'undefined' && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n  var devtoolMiddleware = {\n    onInit: function onInit(state, store) {\n      if (!hook) return;\n      hook.emit('vuex:init', store);\n      hook.on('vuex:travel-to-state', function (targetState) {\n        store._dispatching = true;\n        store._vm.state = targetState;\n        store._dispatching = false;\n      });\n    },\n    onMutation: function onMutation(mutation, state) {\n      if (!hook) return;\n      hook.emit('vuex:mutation', mutation, state);\n    }\n  };\n\n  function override (Vue) {\n    var version = Number(Vue.version.split('.')[0]);\n\n    if (version >= 2) {\n      Vue.mixin({\n        init: vuexInit\n      });\n    } else {\n      (function () {\n        // override init and inject vuex init procedure\n        // for 1.x backwards compatibility.\n        var _init = Vue.prototype._init;\n        Vue.prototype._init = function () {\n          var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n          options.init = options.init ? [vuexInit].concat(options.init) : vuexInit;\n          _init.call(this, options);\n        };\n      })();\n    }\n\n    /**\n     * Vuex init hook, injected into each instances init hooks list.\n     */\n\n    function vuexInit() {\n      var options = this.$options;\n      var store = options.store;\n      var vuex = options.vuex;\n      // store injection\n\n      if (store) {\n        this.$store = store;\n      } else if (options.parent && options.parent.$store) {\n        this.$store = options.parent.$store;\n      }\n      // vuex option handling\n      if (vuex) {\n        if (!this.$store) {\n          console.warn('[vuex] store not injected. make sure to ' + 'provide the store option in your root component.');\n        }\n        var state = vuex.state;\n        var actions = vuex.actions;\n        var getters = vuex.getters;\n        // handle deprecated state option\n\n        if (state && !getters) {\n          console.warn('[vuex] vuex.state option will been deprecated in 1.0. ' + 'Use vuex.getters instead.');\n          getters = state;\n        }\n        // getters\n        if (getters) {\n          options.computed = options.computed || {};\n          for (var key in getters) {\n            defineVuexGetter(this, key, getters[key]);\n          }\n        }\n        // actions\n        if (actions) {\n          options.methods = options.methods || {};\n          for (var _key in actions) {\n            options.methods[_key] = makeBoundAction(this.$store, actions[_key], _key);\n          }\n        }\n      }\n    }\n\n    /**\n     * Setter for all getter properties.\n     */\n\n    function setter() {\n      throw new Error('vuex getter properties are read-only.');\n    }\n\n    /**\n     * Define a Vuex getter on an instance.\n     *\n     * @param {Vue} vm\n     * @param {String} key\n     * @param {Function} getter\n     */\n\n    function defineVuexGetter(vm, key, getter) {\n      if (typeof getter !== 'function') {\n        console.warn('[vuex] Getter bound to key \\'vuex.getters.' + key + '\\' is not a function.');\n      } else {\n        Object.defineProperty(vm, key, {\n          enumerable: true,\n          configurable: true,\n          get: makeComputedGetter(vm.$store, getter),\n          set: setter\n        });\n      }\n    }\n\n    /**\n     * Make a computed getter, using the same caching mechanism of computed\n     * properties. In addition, it is cached on the raw getter function using\n     * the store's unique cache id. This makes the same getter shared\n     * across all components use the same underlying watcher, and makes\n     * the getter evaluated only once during every flush.\n     *\n     * @param {Store} store\n     * @param {Function} getter\n     */\n\n    function makeComputedGetter(store, getter) {\n      var id = store._getterCacheId;\n\n      // cached\n      if (getter[id]) {\n        return getter[id];\n      }\n      var vm = store._vm;\n      var Watcher = getWatcher(vm);\n      var Dep = getDep(vm);\n      var watcher = new Watcher(vm, function (vm) {\n        return getter(vm.state);\n      }, null, { lazy: true });\n      var computedGetter = function computedGetter() {\n        if (watcher.dirty) {\n          watcher.evaluate();\n        }\n        if (Dep.target) {\n          watcher.depend();\n        }\n        return watcher.value;\n      };\n      getter[id] = computedGetter;\n      return computedGetter;\n    }\n\n    /**\n     * Make a bound-to-store version of a raw action function.\n     *\n     * @param {Store} store\n     * @param {Function} action\n     * @param {String} key\n     */\n\n    function makeBoundAction(store, action, key) {\n      if (typeof action !== 'function') {\n        console.warn('[vuex] Action bound to key \\'vuex.actions.' + key + '\\' is not a function.');\n      }\n      return function vuexBoundAction() {\n        for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        return action.call.apply(action, [this, store].concat(args));\n      };\n    }\n\n    // option merging\n    var merge = Vue.config.optionMergeStrategies.computed;\n    Vue.config.optionMergeStrategies.vuex = function (toVal, fromVal) {\n      if (!toVal) return fromVal;\n      if (!fromVal) return toVal;\n      return {\n        getters: merge(toVal.getters, fromVal.getters),\n        state: merge(toVal.state, fromVal.state),\n        actions: merge(toVal.actions, fromVal.actions)\n      };\n    };\n  }\n\n  var Vue = void 0;\n  var uid = 0;\n\n  var Store = function () {\n\n    /**\n     * @param {Object} options\n     *        - {Object} state\n     *        - {Object} actions\n     *        - {Object} mutations\n     *        - {Array} middlewares\n     *        - {Boolean} strict\n     */\n\n    function Store() {\n      var _this = this;\n\n      var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var _ref$state = _ref.state;\n      var state = _ref$state === undefined ? {} : _ref$state;\n      var _ref$mutations = _ref.mutations;\n      var mutations = _ref$mutations === undefined ? {} : _ref$mutations;\n      var _ref$modules = _ref.modules;\n      var modules = _ref$modules === undefined ? {} : _ref$modules;\n      var _ref$middlewares = _ref.middlewares;\n      var middlewares = _ref$middlewares === undefined ? [] : _ref$middlewares;\n      var _ref$strict = _ref.strict;\n      var strict = _ref$strict === undefined ? false : _ref$strict;\n      classCallCheck(this, Store);\n\n      this._getterCacheId = 'vuex_store_' + uid++;\n      this._dispatching = false;\n      this._rootMutations = this._mutations = mutations;\n      this._modules = modules;\n      // bind dispatch to self\n      var dispatch = this.dispatch;\n      this.dispatch = function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        dispatch.apply(_this, args);\n      };\n      // use a Vue instance to store the state tree\n      // suppress warnings just in case the user has added\n      // some funky global mixins\n      if (!Vue) {\n        throw new Error('[vuex] must call Vue.use(Vuex) before creating a store instance.');\n      }\n      var silent = Vue.config.silent;\n      Vue.config.silent = true;\n      this._vm = new Vue({\n        data: {\n          state: state\n        }\n      });\n      Vue.config.silent = silent;\n      this._setupModuleState(state, modules);\n      this._setupModuleMutations(modules);\n      this._setupMiddlewares(middlewares, state);\n      // add extra warnings in strict mode\n      if (strict) {\n        this._setupMutationCheck();\n      }\n    }\n\n    /**\n     * Getter for the entire state tree.\n     * Read only.\n     *\n     * @return {Object}\n     */\n\n    createClass(Store, [{\n      key: 'dispatch',\n\n\n      /**\n       * Dispatch an action.\n       *\n       * @param {String} type\n       */\n\n      value: function dispatch(type) {\n        for (var _len2 = arguments.length, payload = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          payload[_key2 - 1] = arguments[_key2];\n        }\n\n        var silent = false;\n        // compatibility for object actions, e.g. FSA\n        if ((typeof type === 'undefined' ? 'undefined' : _typeof(type)) === 'object' && type.type && arguments.length === 1) {\n          payload = [type.payload];\n          if (type.silent) silent = true;\n          type = type.type;\n        }\n        var mutation = this._mutations[type];\n        var state = this.state;\n        if (mutation) {\n          this._dispatching = true;\n          // apply the mutation\n          if (Array.isArray(mutation)) {\n            mutation.forEach(function (m) {\n              return m.apply(undefined, [state].concat(toConsumableArray(payload)));\n            });\n          } else {\n            mutation.apply(undefined, [state].concat(toConsumableArray(payload)));\n          }\n          this._dispatching = false;\n          if (!silent) this._applyMiddlewares(type, payload);\n        } else {\n          console.warn('[vuex] Unknown mutation: ' + type);\n        }\n      }\n\n      /**\n       * Watch state changes on the store.\n       * Same API as Vue's $watch, except when watching a function,\n       * the function gets the state as the first argument.\n       *\n       * @param {Function} fn\n       * @param {Function} cb\n       * @param {Object} [options]\n       */\n\n    }, {\n      key: 'watch',\n      value: function watch(fn, cb, options) {\n        var _this2 = this;\n\n        if (typeof fn !== 'function') {\n          console.error('Vuex store.watch only accepts function.');\n          return;\n        }\n        return this._vm.$watch(function () {\n          return fn(_this2.state);\n        }, cb, options);\n      }\n\n      /**\n       * Hot update mutations & modules.\n       *\n       * @param {Object} options\n       *        - {Object} [mutations]\n       *        - {Object} [modules]\n       */\n\n    }, {\n      key: 'hotUpdate',\n      value: function hotUpdate() {\n        var _ref2 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        var mutations = _ref2.mutations;\n        var modules = _ref2.modules;\n\n        this._rootMutations = this._mutations = mutations || this._rootMutations;\n        this._setupModuleMutations(modules || this._modules);\n      }\n\n      /**\n       * Attach sub state tree of each module to the root tree.\n       *\n       * @param {Object} state\n       * @param {Object} modules\n       */\n\n    }, {\n      key: '_setupModuleState',\n      value: function _setupModuleState(state, modules) {\n        Object.keys(modules).forEach(function (key) {\n          Vue.set(state, key, modules[key].state || {});\n        });\n      }\n\n      /**\n       * Bind mutations for each module to its sub tree and\n       * merge them all into one final mutations map.\n       *\n       * @param {Object} updatedModules\n       */\n\n    }, {\n      key: '_setupModuleMutations',\n      value: function _setupModuleMutations(updatedModules) {\n        var modules = this._modules;\n        var allMutations = [this._rootMutations];\n        Object.keys(updatedModules).forEach(function (key) {\n          modules[key] = updatedModules[key];\n        });\n        Object.keys(modules).forEach(function (key) {\n          var module = modules[key];\n          if (!module || !module.mutations) return;\n          // bind mutations to sub state tree\n          var mutations = {};\n          Object.keys(module.mutations).forEach(function (name) {\n            var original = module.mutations[name];\n            mutations[name] = function (state) {\n              for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n                args[_key3 - 1] = arguments[_key3];\n              }\n\n              original.apply(undefined, [state[key]].concat(args));\n            };\n          });\n          allMutations.push(mutations);\n        });\n        this._mutations = mergeObjects(allMutations);\n      }\n\n      /**\n       * Setup mutation check: if the vuex instance's state is mutated\n       * outside of a mutation handler, we throw en error. This effectively\n       * enforces all mutations to the state to be trackable and hot-reloadble.\n       * However, this comes at a run time cost since we are doing a deep\n       * watch on the entire state tree, so it is only enalbed with the\n       * strict option is set to true.\n       */\n\n    }, {\n      key: '_setupMutationCheck',\n      value: function _setupMutationCheck() {\n        var _this3 = this;\n\n        var Watcher = getWatcher(this._vm);\n        /* eslint-disable no-new */\n        new Watcher(this._vm, 'state', function () {\n          if (!_this3._dispatching) {\n            throw new Error('[vuex] Do not mutate vuex store state outside mutation handlers.');\n          }\n        }, { deep: true, sync: true });\n        /* eslint-enable no-new */\n      }\n\n      /**\n       * Setup the middlewares. The devtools middleware is always\n       * included, since it does nothing if no devtool is detected.\n       *\n       * A middleware can demand the state it receives to be\n       * \"snapshots\", i.e. deep clones of the actual state tree.\n       *\n       * @param {Array} middlewares\n       * @param {Object} state\n       */\n\n    }, {\n      key: '_setupMiddlewares',\n      value: function _setupMiddlewares(middlewares, state) {\n        var _this4 = this;\n\n        this._middlewares = [devtoolMiddleware].concat(middlewares);\n        this._needSnapshots = middlewares.some(function (m) {\n          return m.snapshot;\n        });\n        if (this._needSnapshots) {\n          console.log('[vuex] One or more of your middlewares are taking state snapshots ' + 'for each mutation. Make sure to use them only during development.');\n        }\n        var initialSnapshot = this._prevSnapshot = this._needSnapshots ? deepClone(state) : null;\n        // call init hooks\n        this._middlewares.forEach(function (m) {\n          if (m.onInit) {\n            m.onInit(m.snapshot ? initialSnapshot : state, _this4);\n          }\n        });\n      }\n\n      /**\n       * Apply the middlewares on a given mutation.\n       *\n       * @param {String} type\n       * @param {Array} payload\n       */\n\n    }, {\n      key: '_applyMiddlewares',\n      value: function _applyMiddlewares(type, payload) {\n        var _this5 = this;\n\n        var state = this.state;\n        var prevSnapshot = this._prevSnapshot;\n        var snapshot = void 0,\n            clonedPayload = void 0;\n        if (this._needSnapshots) {\n          snapshot = this._prevSnapshot = deepClone(state);\n          clonedPayload = deepClone(payload);\n        }\n        this._middlewares.forEach(function (m) {\n          if (m.onMutation) {\n            if (m.snapshot) {\n              m.onMutation({ type: type, payload: clonedPayload }, snapshot, prevSnapshot, _this5);\n            } else {\n              m.onMutation({ type: type, payload: payload }, state, _this5);\n            }\n          }\n        });\n      }\n    }, {\n      key: 'state',\n      get: function get() {\n        return this._vm.state;\n      },\n      set: function set(v) {\n        throw new Error('[vuex] Vuex root state is read only.');\n      }\n    }]);\n    return Store;\n  }();\n\n  function install(_Vue) {\n    if (Vue) {\n      console.warn('[vuex] already installed. Vue.use(Vuex) should be called only once.');\n      return;\n    }\n    Vue = _Vue;\n    override(Vue);\n  }\n\n  // auto install in dist mode\n  if (typeof window !== 'undefined' && window.Vue) {\n    install(window.Vue);\n  }\n\n  var index = {\n    Store: Store,\n    install: install\n  };\n\n  return index;\n\n}));"
  },
  {
    "path": "tutorial/03/lib/vue.js",
    "content": "/*!\n * Vue.js v2.0.0-rc.6\n * (c) 2014-2016 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Vue = factory());\n}(this, (function () { 'use strict';\n\n/*  */\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction _toString (val) {\n  return val == null\n    ? ''\n    : typeof val === 'object'\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val, 10)\n  return (n || n === 0) ? n : val\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null)\n  var list = str.split(',')\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true)\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item)\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n  return typeof value === 'string' || typeof value === 'number'\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null)\n  return function cachedFn (str) {\n    var hit = cache[str]\n    return hit || (cache[str] = fn(str))\n  }\n}\n\n/**\n * Camelize a hyphen-delmited string.\n */\nvar camelizeRE = /-(\\w)/g\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n})\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n})\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /([^-])([A-Z])/g\nvar hyphenate = cached(function (str) {\n  return str\n    .replace(hyphenateRE, '$1-$2')\n    .replace(hyphenateRE, '$1-$2')\n    .toLowerCase()\n})\n\n/**\n * Simple bind, faster than native\n */\nfunction bind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n  // record original fn length\n  boundFn._length = fn.length\n  return boundFn\n}\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0\n  var i = list.length - start\n  var ret = new Array(i)\n  while (i--) {\n    ret[i] = list[i + start]\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key]\n  }\n  return to\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nvar toString = Object.prototype.toString\nvar OBJECT_STRING = '[object Object]'\nfunction isPlainObject (obj) {\n  return toString.call(obj) === OBJECT_STRING\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {}\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i])\n    }\n  }\n  return res\n}\n\n/**\n * Perform no operation.\n */\nfunction noop () {}\n\n/**\n * Always return false.\n */\nvar no = function () { return false; }\n\n/**\n * Generate a static keys string from compiler modules.\n */\nfunction genStaticKeys (modules) {\n  return modules.reduce(function (keys, m) {\n    return keys.concat(m.staticKeys || [])\n  }, []).join(',')\n}\n\n/*  */\n\nvar config = {\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"development\" !== 'production',\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: null,\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * List of asset types that a component can own.\n   */\n  _assetTypes: [\n    'component',\n    'directive',\n    'filter'\n  ],\n\n  /**\n   * List of lifecycle hooks.\n   */\n  _lifecycleHooks: [\n    'beforeCreate',\n    'created',\n    'beforeMount',\n    'mounted',\n    'beforeUpdate',\n    'updated',\n    'beforeDestroy',\n    'destroyed',\n    'activated',\n    'deactivated'\n  ],\n\n  /**\n   * Max circular updates allowed in a scheduler flush cycle.\n   */\n  _maxUpdateCount: 100,\n\n  /**\n   * Server rendering?\n   */\n  _isServer: \"client\" === 'server'\n}\n\n/*  */\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0)\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  })\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w\\.\\$]/\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  } else {\n    var segments = path.split('.')\n    return function (obj) {\n      for (var i = 0; i < segments.length; i++) {\n        if (!obj) return\n        obj = obj[segments[i]]\n      }\n      return obj\n    }\n  }\n}\n\n/*  */\n\n/* global MutationObserver */\n// can we use __proto__?\nvar hasProto = '__proto__' in {}\n\n// Browser environment sniffing\nvar inBrowser =\n  typeof window !== 'undefined' &&\n  Object.prototype.toString.call(window) !== '[object Object]'\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__\n\n// UA sniffing for working around browser-specific quirks\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase()\nvar isIos = UA && /(iphone|ipad|ipod|ios)/i.test(UA)\nvar iosVersionMatch = UA && isIos && UA.match(/os ([\\d_]+)/)\nvar iosVersion = iosVersionMatch && iosVersionMatch[1].split('_')\n\n// MutationObserver is unreliable in iOS 9.3 UIWebView\n// detecting it by checking presence of IndexedDB\n// ref #3027\nvar hasMutationObserverBug =\n  iosVersion &&\n  Number(iosVersion[0]) >= 9 &&\n  Number(iosVersion[1]) >= 3 &&\n  !window.indexedDB\n\n/**\n * Defer a task to execute it asynchronously. Ideally this\n * should be executed as a microtask, so we leverage\n * MutationObserver if it's available, and fallback to\n * setTimeout(0).\n *\n * @param {Function} cb\n * @param {Object} ctx\n */\nvar nextTick = (function () {\n  var callbacks = []\n  var pending = false\n  var timerFunc\n  function nextTickHandler () {\n    pending = false\n    var copies = callbacks.slice(0)\n    callbacks = []\n    for (var i = 0; i < copies.length; i++) {\n      copies[i]()\n    }\n  }\n\n  /* istanbul ignore else */\n  if (typeof MutationObserver !== 'undefined' && !hasMutationObserverBug) {\n    var counter = 1\n    var observer = new MutationObserver(nextTickHandler)\n    var textNode = document.createTextNode(String(counter))\n    observer.observe(textNode, {\n      characterData: true\n    })\n    timerFunc = function () {\n      counter = (counter + 1) % 2\n      textNode.data = String(counter)\n    }\n  } else {\n    // webpack attempts to inject a shim for setImmediate\n    // if it is used as a global, so we have to work around that to\n    // avoid bundling unnecessary code.\n    var context = inBrowser\n      ? window\n      : typeof global !== 'undefined' ? global : {}\n    timerFunc = context.setImmediate || setTimeout\n  }\n  return function (cb, ctx) {\n    var func = ctx\n      ? function () { cb.call(ctx) }\n      : cb\n    callbacks.push(func)\n    if (pending) return\n    pending = true\n    timerFunc(nextTickHandler, 0)\n  }\n})()\n\nvar _Set\n/* istanbul ignore if */\nif (typeof Set !== 'undefined' && /native code/.test(Set.toString())) {\n  // use native Set when available.\n  _Set = Set\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = (function () {\n    function Set () {\n      this.set = Object.create(null)\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] !== undefined\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = 1\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null)\n    };\n\n    return Set;\n  }())\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar hasProxy;\nvar proxyHandlers;\nvar initProxy;\nif (\"development\" !== 'production') {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  )\n\n  hasProxy =\n    typeof Proxy !== 'undefined' &&\n    Proxy.toString().match(/native code/)\n\n  proxyHandlers = {\n    has: function has (target, key) {\n      var has = key in target\n      var isAllowed = allowedGlobals(key) || key.charAt(0) === '_'\n      if (!has && !isAllowed) {\n        warn(\n          \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n          \"referenced during render. Make sure to declare reactive data \" +\n          \"properties in the data option.\",\n          target\n        )\n      }\n      return has || !isAllowed\n    }\n  }\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      vm._renderProxy = new Proxy(vm, proxyHandlers)\n    } else {\n      vm._renderProxy = vm\n    }\n  }\n}\n\n/*  */\n\n\nvar uid$2 = 0\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid$2++\n  this.subs = []\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub)\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub)\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this)\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stablize the subscriber list first\n  var subs = this.subs.slice()\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update()\n  }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null\nvar targetStack = []\n\nfunction pushTarget (_target) {\n  if (Dep.target) targetStack.push(Dep.target)\n  Dep.target = _target\n}\n\nfunction popTarget () {\n  Dep.target = targetStack.pop()\n}\n\n/*  */\n\n\nvar queue = []\nvar has = {}\nvar circular = {}\nvar waiting = false\nvar flushing = false\nvar index = 0\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  queue.length = 0\n  has = {}\n  if (\"development\" !== 'production') {\n    circular = {}\n  }\n  waiting = flushing = false\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  flushing = true\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; })\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    var watcher = queue[index]\n    var id = watcher.id\n    has[id] = null\n    watcher.run()\n    // in dev build, check and stop circular updates.\n    if (\"development\" !== 'production' && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1\n      if (circular[id] > config._maxUpdateCount) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        )\n        break\n      }\n    }\n  }\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush')\n  }\n\n  resetSchedulerState()\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id\n  if (has[id] == null) {\n    has[id] = true\n    if (!flushing) {\n      queue.push(watcher)\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1\n      while (i >= 0 && queue[i].id > watcher.id) {\n        i--\n      }\n      queue.splice(Math.max(i, index) + 1, 0, watcher)\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true\n      nextTick(flushSchedulerQueue)\n    }\n  }\n}\n\n/*  */\n\nvar uid$1 = 0\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options\n) {\n  if ( options === void 0 ) options = {};\n\n  this.vm = vm\n  vm._watchers.push(this)\n  // options\n  this.deep = !!options.deep\n  this.user = !!options.user\n  this.lazy = !!options.lazy\n  this.sync = !!options.sync\n  this.expression = expOrFn.toString()\n  this.cb = cb\n  this.id = ++uid$1 // uid for batching\n  this.active = true\n  this.dirty = this.lazy // for lazy watchers\n  this.deps = []\n  this.newDeps = []\n  this.depIds = new _Set()\n  this.newDepIds = new _Set()\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn\n  } else {\n    this.getter = parsePath(expOrFn)\n    if (!this.getter) {\n      this.getter = function () {}\n      \"development\" !== 'production' && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      )\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get()\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this)\n  var value = this.getter.call(this.vm, this.vm)\n  // \"touch\" every property so they are all tracked as\n  // dependencies for deep watching\n  if (this.deep) {\n    traverse(value)\n  }\n  popTarget()\n  this.cleanupDeps()\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id)\n    this.newDeps.push(dep)\n    if (!this.depIds.has(id)) {\n      dep.addSub(this)\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n    var this$1 = this;\n\n  var i = this.deps.length\n  while (i--) {\n    var dep = this$1.deps[i]\n    if (!this$1.newDepIds.has(dep.id)) {\n      dep.removeSub(this$1)\n    }\n  }\n  var tmp = this.depIds\n  this.depIds = this.newDepIds\n  this.newDepIds = tmp\n  this.newDepIds.clear()\n  tmp = this.deps\n  this.deps = this.newDeps\n  this.newDeps = tmp\n  this.newDeps.length = 0\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true\n  } else if (this.sync) {\n    this.run()\n  } else {\n    queueWatcher(this)\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get()\n      if (\n        value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value\n      this.value = value\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue)\n        } catch (e) {\n          \"development\" !== 'production' && warn(\n            (\"Error in watcher \\\"\" + (this.expression) + \"\\\"\"),\n            this.vm\n          )\n          /* istanbul ignore else */\n          if (config.errorHandler) {\n            config.errorHandler.call(null, e, this.vm)\n          } else {\n            throw e\n          }\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue)\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get()\n  this.dirty = false\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n    var this$1 = this;\n\n  var i = this.deps.length\n  while (i--) {\n    this$1.deps[i].depend()\n  }\n};\n\n/**\n * Remove self from all dependencies' subcriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n    var this$1 = this;\n\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed or is performing a v-for\n    // re-render (the watcher list is then filtered by v-for).\n    if (!this.vm._isBeingDestroyed && !this.vm._vForRemoving) {\n      remove(this.vm._watchers, this)\n    }\n    var i = this.deps.length\n    while (i--) {\n      this$1.deps[i].removeSub(this$1)\n    }\n    this.active = false\n  }\n};\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nvar seenObjects = new _Set()\nfunction traverse (val, seen) {\n  var i, keys\n  if (!seen) {\n    seen = seenObjects\n    seen.clear()\n  }\n  var isA = Array.isArray(val)\n  var isO = isObject(val)\n  if ((isA || isO) && Object.isExtensible(val)) {\n    if (val.__ob__) {\n      var depId = val.__ob__.dep.id\n      if (seen.has(depId)) {\n        return\n      } else {\n        seen.add(depId)\n      }\n    }\n    if (isA) {\n      i = val.length\n      while (i--) traverse(val[i], seen)\n    } else if (isO) {\n      keys = Object.keys(val)\n      i = keys.length\n      while (i--) traverse(val[keys[i]], seen)\n    }\n  }\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype\nvar arrayMethods = Object.create(arrayProto)\n\n/**\n * Intercept mutating methods and emit events\n */\n;[\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n]\n.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method]\n  def(arrayMethods, method, function mutator () {\n    var arguments$1 = arguments;\n\n    // avoid leaking arguments:\n    // http://jsperf.com/closure-with-arguments\n    var i = arguments.length\n    var args = new Array(i)\n    while (i--) {\n      args[i] = arguments$1[i]\n    }\n    var result = original.apply(this, args)\n    var ob = this.__ob__\n    var inserted\n    switch (method) {\n      case 'push':\n        inserted = args\n        break\n      case 'unshift':\n        inserted = args\n        break\n      case 'splice':\n        inserted = args.slice(2)\n        break\n    }\n    if (inserted) ob.observeArray(inserted)\n    // notify change\n    ob.dep.notify()\n    return result\n  })\n})\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods)\n\n/**\n * By default, when a reactive property is set, the new value is\n * also converted to become reactive. However when passing down props,\n * we don't want to force conversion because the value may be a nested value\n * under a frozen data structure. Converting it would defeat the optimization.\n */\nvar observerState = {\n  shouldConvert: true,\n  isSettingProps: false\n}\n\n/**\n * Observer class that are attached to each observed\n * object. Once attached, the observer converts target\n * object's property keys into getter/setters that\n * collect dependencies and dispatches updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value\n  this.dep = new Dep()\n  this.vmCount = 0\n  def(value, '__ob__', this)\n  if (Array.isArray(value)) {\n    var augment = hasProto\n      ? protoAugment\n      : copyAugment\n    augment(value, arrayMethods, arrayKeys)\n    this.observeArray(value)\n  } else {\n    this.walk(value)\n  }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj)\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive(obj, keys[i], obj[keys[i]])\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i])\n  }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n *\n * istanbul ignore next\n */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i]\n    def(target, key, src[key])\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value) {\n  if (!isObject(value)) {\n    return\n  }\n  var ob\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__\n  } else if (\n    observerState.shouldConvert &&\n    !config._isServer &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value)\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive (\n  obj,\n  key,\n  val,\n  customSetter\n) {\n  var dep = new Dep()\n\n  var property = Object.getOwnPropertyDescriptor(obj, key)\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get\n  var setter = property && property.set\n\n  var childOb = observe(val)\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val\n      if (Dep.target) {\n        dep.depend()\n        if (childOb) {\n          childOb.dep.depend()\n        }\n        if (Array.isArray(value)) {\n          for (var e, i = 0, l = value.length; i < l; i++) {\n            e = value[i]\n            e && e.__ob__ && e.__ob__.dep.depend()\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val\n      if (newVal === value) {\n        return\n      }\n      if (\"development\" !== 'production' && customSetter) {\n        customSetter()\n      }\n      if (setter) {\n        setter.call(obj, newVal)\n      } else {\n        val = newVal\n      }\n      childOb = observe(newVal)\n      dep.notify()\n    }\n  })\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (obj, key, val) {\n  if (Array.isArray(obj)) {\n    obj.splice(key, 1, val)\n    return val\n  }\n  if (hasOwn(obj, key)) {\n    obj[key] = val\n    return\n  }\n  var ob = obj.__ob__\n  if (obj._isVue || (ob && ob.vmCount)) {\n    \"development\" !== 'production' && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    )\n    return\n  }\n  if (!ob) {\n    obj[key] = val\n    return\n  }\n  defineReactive(ob.value, key, val)\n  ob.dep.notify()\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (obj, key) {\n  var ob = obj.__ob__\n  if (obj._isVue || (ob && ob.vmCount)) {\n    \"development\" !== 'production' && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    )\n    return\n  }\n  if (!hasOwn(obj, key)) {\n    return\n  }\n  delete obj[key]\n  if (!ob) {\n    return\n  }\n  ob.dep.notify()\n}\n\n/*  */\n\nfunction initState (vm) {\n  vm._watchers = []\n  initProps(vm)\n  initData(vm)\n  initComputed(vm)\n  initMethods(vm)\n  initWatch(vm)\n}\n\nfunction initProps (vm) {\n  var props = vm.$options.props\n  var propsData = vm.$options.propsData\n  if (props) {\n    var keys = vm.$options._propKeys = Object.keys(props)\n    var isRoot = !vm.$parent\n    // root instance props should be converted\n    observerState.shouldConvert = isRoot\n    var loop = function ( i ) {\n      var key = keys[i]\n      /* istanbul ignore else */\n      if (\"development\" !== 'production') {\n        defineReactive(vm, key, validateProp(key, props, propsData, vm), function () {\n          if (vm.$parent && !observerState.isSettingProps) {\n            warn(\n              \"Avoid mutating a prop directly since the value will be \" +\n              \"overwritten whenever the parent component re-renders. \" +\n              \"Instead, use a data or computed property based on the prop's \" +\n              \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n              vm\n            )\n          }\n        })\n      } else {}\n    };\n\n    for (var i = 0; i < keys.length; i++) loop( i );\n    observerState.shouldConvert = true\n  }\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data\n  data = vm._data = typeof data === 'function'\n    ? data.call(vm)\n    : data || {}\n  if (!isPlainObject(data)) {\n    data = {}\n    \"development\" !== 'production' && warn(\n      'data functions should return an object.',\n      vm\n    )\n  }\n  // proxy data on instance\n  var keys = Object.keys(data)\n  var props = vm.$options.props\n  var i = keys.length\n  while (i--) {\n    if (props && hasOwn(props, keys[i])) {\n      \"development\" !== 'production' && warn(\n        \"The data property \\\"\" + (keys[i]) + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      )\n    } else {\n      proxy(vm, keys[i])\n    }\n  }\n  // observe data\n  observe(data)\n  data.__ob__ && data.__ob__.vmCount++\n}\n\nvar computedSharedDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n}\n\nfunction initComputed (vm) {\n  var computed = vm.$options.computed\n  if (computed) {\n    for (var key in computed) {\n      var userDef = computed[key]\n      if (typeof userDef === 'function') {\n        computedSharedDefinition.get = makeComputedGetter(userDef, vm)\n        computedSharedDefinition.set = noop\n      } else {\n        computedSharedDefinition.get = userDef.get\n          ? userDef.cache !== false\n            ? makeComputedGetter(userDef.get, vm)\n            : bind(userDef.get, vm)\n          : noop\n        computedSharedDefinition.set = userDef.set\n          ? bind(userDef.set, vm)\n          : noop\n      }\n      Object.defineProperty(vm, key, computedSharedDefinition)\n    }\n  }\n}\n\nfunction makeComputedGetter (getter, owner) {\n  var watcher = new Watcher(owner, getter, noop, {\n    lazy: true\n  })\n  return function computedGetter () {\n    if (watcher.dirty) {\n      watcher.evaluate()\n    }\n    if (Dep.target) {\n      watcher.depend()\n    }\n    return watcher.value\n  }\n}\n\nfunction initMethods (vm) {\n  var methods = vm.$options.methods\n  if (methods) {\n    for (var key in methods) {\n      if (methods[key] != null) {\n        vm[key] = bind(methods[key], vm)\n      } else if (\"development\" !== 'production') {\n        warn((\"Method \\\"\" + key + \"\\\" is undefined in options.\"), vm)\n      }\n    }\n  }\n}\n\nfunction initWatch (vm) {\n  var watch = vm.$options.watch\n  if (watch) {\n    for (var key in watch) {\n      var handler = watch[key]\n      if (Array.isArray(handler)) {\n        for (var i = 0; i < handler.length; i++) {\n          createWatcher(vm, key, handler[i])\n        }\n      } else {\n        createWatcher(vm, key, handler)\n      }\n    }\n  }\n}\n\nfunction createWatcher (vm, key, handler) {\n  var options\n  if (isPlainObject(handler)) {\n    options = handler\n    handler = handler.handler\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler]\n  }\n  vm.$watch(key, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {}\n  dataDef.get = function () {\n    return this._data\n  }\n  if (\"development\" !== 'production') {\n    dataDef.set = function (newData) {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      )\n    }\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef)\n\n  Vue.prototype.$set = set\n  Vue.prototype.$delete = del\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this\n    options = options || {}\n    options.user = true\n    var watcher = new Watcher(vm, expOrFn, cb, options)\n    if (options.immediate) {\n      cb.call(vm, watcher.value)\n    }\n    return function unwatchFn () {\n      watcher.teardown()\n    }\n  }\n}\n\nfunction proxy (vm, key) {\n  if (!isReserved(key)) {\n    Object.defineProperty(vm, key, {\n      configurable: true,\n      enumerable: true,\n      get: function proxyGetter () {\n        return vm._data[key]\n      },\n      set: function proxySetter (val) {\n        vm._data[key] = val\n      }\n    })\n  }\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  ns,\n  context,\n  componentOptions\n) {\n  this.tag = tag\n  this.data = data\n  this.children = children\n  this.text = text\n  this.elm = elm\n  this.ns = ns\n  this.context = context\n  this.key = data && data.key\n  this.componentOptions = componentOptions\n  this.child = undefined\n  this.parent = undefined\n  this.raw = false\n  this.isStatic = false\n  this.isRootInsert = true\n  this.isComment = false\n  this.isCloned = false\n  // apply construct hook.\n  // this is applied during render, before patch happens.\n  // unlike other hooks, this is applied on both client and server.\n  var constructHook = data && data.hook && data.hook.construct\n  if (constructHook) {\n    constructHook(this)\n  }\n};\n\nvar emptyVNode = function () {\n  var node = new VNode()\n  node.text = ''\n  node.isComment = true\n  return node\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    vnode.children,\n    vnode.text,\n    vnode.elm,\n    vnode.ns,\n    vnode.context,\n    vnode.componentOptions\n  )\n  cloned.isStatic = vnode.isStatic\n  cloned.key = vnode.key\n  cloned.isCloned = true\n  return cloned\n}\n\nfunction cloneVNodes (vnodes) {\n  var res = new Array(vnodes.length)\n  for (var i = 0; i < vnodes.length; i++) {\n    res[i] = cloneVNode(vnodes[i])\n  }\n  return res\n}\n\n/*  */\n\nfunction normalizeChildren (\n  children,\n  ns,\n  nestedIndex\n) {\n  if (isPrimitive(children)) {\n    return [createTextVNode(children)]\n  }\n  if (Array.isArray(children)) {\n    var res = []\n    for (var i = 0, l = children.length; i < l; i++) {\n      var c = children[i]\n      var last = res[res.length - 1]\n      //  nested\n      if (Array.isArray(c)) {\n        res.push.apply(res, normalizeChildren(c, ns, i))\n      } else if (isPrimitive(c)) {\n        if (last && last.text) {\n          last.text += String(c)\n        } else if (c !== '') {\n          // convert primitive to vnode\n          res.push(createTextVNode(c))\n        }\n      } else if (c instanceof VNode) {\n        if (c.text && last && last.text) {\n          last.text += c.text\n        } else {\n          // inherit parent namespace\n          if (ns) {\n            applyNS(c, ns)\n          }\n          // default key for nested array children (likely generated by v-for)\n          if (c.key == null && nestedIndex != null) {\n            c.key = \"__vlist_\" + nestedIndex + \"_\" + i + \"__\"\n          }\n          res.push(c)\n        }\n      }\n    }\n    return res\n  }\n}\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\nfunction applyNS (vnode, ns) {\n  if (vnode.tag && !vnode.ns) {\n    vnode.ns = ns\n    if (vnode.children) {\n      for (var i = 0, l = vnode.children.length; i < l; i++) {\n        applyNS(vnode.children[i], ns)\n      }\n    }\n  }\n}\n\nfunction getFirstComponentChild (children) {\n  return children && children.filter(function (c) { return c && c.componentOptions; })[0]\n}\n\nfunction mergeVNodeHook (def, key, hook) {\n  var oldHook = def[key]\n  if (oldHook) {\n    var injectedHash = def.__injected || (def.__injected = {})\n    if (!injectedHash[key]) {\n      injectedHash[key] = true\n      def[key] = function () {\n        oldHook.apply(this, arguments)\n        hook.apply(this, arguments)\n      }\n    }\n  } else {\n    def[key] = hook\n  }\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove\n) {\n  var name, cur, old, fn, event, capture\n  for (name in on) {\n    cur = on[name]\n    old = oldOn[name]\n    if (!cur) {\n      \"development\" !== 'production' && warn(\n        (\"Handler for event \\\"\" + name + \"\\\" is undefined.\")\n      )\n    } else if (!old) {\n      capture = name.charAt(0) === '!'\n      event = capture ? name.slice(1) : name\n      if (Array.isArray(cur)) {\n        add(event, (cur.invoker = arrInvoker(cur)), capture)\n      } else {\n        if (!cur.invoker) {\n          fn = cur\n          cur = on[name] = {}\n          cur.fn = fn\n          cur.invoker = fnInvoker(cur)\n        }\n        add(event, cur.invoker, capture)\n      }\n    } else if (cur !== old) {\n      if (Array.isArray(old)) {\n        old.length = cur.length\n        for (var i = 0; i < old.length; i++) old[i] = cur[i]\n        on[name] = old\n      } else {\n        old.fn = cur\n        on[name] = old\n      }\n    }\n  }\n  for (name in oldOn) {\n    if (!on[name]) {\n      event = name.charAt(0) === '!' ? name.slice(1) : name\n      remove(event, oldOn[name].invoker)\n    }\n  }\n}\n\nfunction arrInvoker (arr) {\n  return function (ev) {\n    var arguments$1 = arguments;\n\n    var single = arguments.length === 1\n    for (var i = 0; i < arr.length; i++) {\n      single ? arr[i](ev) : arr[i].apply(null, arguments$1)\n    }\n  }\n}\n\nfunction fnInvoker (o) {\n  return function (ev) {\n    var single = arguments.length === 1\n    single ? o.fn(ev) : o.fn.apply(null, arguments)\n  }\n}\n\n/*  */\n\nvar activeInstance = null\n\nfunction initLifecycle (vm) {\n  var options = vm.$options\n\n  // locate first non-abstract parent\n  var parent = options.parent\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent\n    }\n    parent.$children.push(vm)\n  }\n\n  vm.$parent = parent\n  vm.$root = parent ? parent.$root : vm\n\n  vm.$children = []\n  vm.$refs = {}\n\n  vm._watcher = null\n  vm._inactive = false\n  vm._isMounted = false\n  vm._isDestroyed = false\n  vm._isBeingDestroyed = false\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._mount = function (\n    el,\n    hydrating\n  ) {\n    var vm = this\n    vm.$el = el\n    if (!vm.$options.render) {\n      vm.$options.render = emptyVNode\n      if (\"development\" !== 'production') {\n        /* istanbul ignore if */\n        if (vm.$options.template) {\n          warn(\n            'You are using the runtime-only build of Vue where the template ' +\n            'option is not available. Either pre-compile the templates into ' +\n            'render functions, or use the compiler-included build.',\n            vm\n          )\n        } else {\n          warn(\n            'Failed to mount component: template or render function not defined.',\n            vm\n          )\n        }\n      }\n    }\n    callHook(vm, 'beforeMount')\n    vm._watcher = new Watcher(vm, function () {\n      vm._update(vm._render(), hydrating)\n    }, noop)\n    hydrating = false\n    // root instance, call mounted on self\n    // mounted is called for child components in its inserted hook\n    if (vm.$root === vm) {\n      vm._isMounted = true\n      callHook(vm, 'mounted')\n    }\n    return vm\n  }\n\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this\n    if (vm._isMounted) {\n      callHook(vm, 'beforeUpdate')\n    }\n    var prevEl = vm.$el\n    var prevActiveInstance = activeInstance\n    activeInstance = vm\n    var prevVnode = vm._vnode\n    vm._vnode = vnode\n    if (!prevVnode) {\n      // Vue.prototype.__patch__ is injected in entry points\n      // based on the rendering backend used.\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating)\n    } else {\n      vm.$el = vm.__patch__(prevVnode, vnode)\n    }\n    activeInstance = prevActiveInstance\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el\n    }\n    if (vm._isMounted) {\n      callHook(vm, 'updated')\n    }\n  }\n\n  Vue.prototype._updateFromParent = function (\n    propsData,\n    listeners,\n    parentVnode,\n    renderChildren\n  ) {\n    var vm = this\n    var hasChildren = !!(vm.$options._renderChildren || renderChildren)\n    vm.$options._parentVnode = parentVnode\n    vm.$options._renderChildren = renderChildren\n    // update props\n    if (propsData && vm.$options.props) {\n      observerState.shouldConvert = false\n      if (\"development\" !== 'production') {\n        observerState.isSettingProps = true\n      }\n      var propKeys = vm.$options._propKeys || []\n      for (var i = 0; i < propKeys.length; i++) {\n        var key = propKeys[i]\n        vm[key] = validateProp(key, vm.$options.props, propsData, vm)\n      }\n      observerState.shouldConvert = true\n      if (\"development\" !== 'production') {\n        observerState.isSettingProps = false\n      }\n    }\n    // update listeners\n    if (listeners) {\n      var oldListeners = vm.$options._parentListeners\n      vm.$options._parentListeners = listeners\n      vm._updateListeners(listeners, oldListeners)\n    }\n    // resolve slots + force update if has children\n    if (hasChildren) {\n      vm.$slots = resolveSlots(renderChildren)\n      vm.$forceUpdate()\n    }\n  }\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this\n    if (vm._watcher) {\n      vm._watcher.update()\n    }\n  }\n\n  Vue.prototype.$destroy = function () {\n    var vm = this\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy')\n    vm._isBeingDestroyed = true\n    // remove self from parent\n    var parent = vm.$parent\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm)\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown()\n    }\n    var i = vm._watchers.length\n    while (i--) {\n      vm._watchers[i].teardown()\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--\n    }\n    // call the last hook...\n    vm._isDestroyed = true\n    callHook(vm, 'destroyed')\n    // turn off all instance listeners.\n    vm.$off()\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null\n    }\n  }\n}\n\nfunction callHook (vm, hook) {\n  var handlers = vm.$options[hook]\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      handlers[i].call(vm)\n    }\n  }\n  vm.$emit('hook:' + hook)\n}\n\n/*  */\n\nvar hooks = { init: init, prepatch: prepatch, insert: insert, destroy: destroy }\nvar hooksToMerge = Object.keys(hooks)\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (!Ctor) {\n    return\n  }\n\n  if (isObject(Ctor)) {\n    Ctor = Vue.extend(Ctor)\n  }\n\n  if (typeof Ctor !== 'function') {\n    if (\"development\" !== 'production') {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context)\n    }\n    return\n  }\n\n  // async component\n  if (!Ctor.cid) {\n    if (Ctor.resolved) {\n      Ctor = Ctor.resolved\n    } else {\n      Ctor = resolveAsyncComponent(Ctor, function () {\n        // it's ok to queue this on every render because\n        // $forceUpdate is buffered by the scheduler.\n        context.$forceUpdate()\n      })\n      if (!Ctor) {\n        // return nothing if this is indeed an async component\n        // wait for the callback to trigger parent update.\n        return\n      }\n    }\n  }\n\n  data = data || {}\n\n  // extract props\n  var propsData = extractProps(data, Ctor)\n\n  // functional component\n  if (Ctor.options.functional) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on\n  // replace with listeners with .native modifier\n  data.on = data.nativeOn\n\n  if (Ctor.options.abstract) {\n    // abstract components do not keep anything\n    // other than props & listeners\n    data = {}\n  }\n\n  // merge component management hooks onto the placeholder node\n  mergeHooks(data)\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }\n  )\n  return vnode\n}\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  context,\n  children\n) {\n  var props = {}\n  var propOptions = Ctor.options.props\n  if (propOptions) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData)\n    }\n  }\n  return Ctor.options.render.call(\n    null,\n    context.$createElement,\n    {\n      props: props,\n      data: data,\n      parent: context,\n      children: normalizeChildren(children),\n      slots: function () { return resolveSlots(children); }\n    }\n  )\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var vnodeComponentOptions = vnode.componentOptions\n  var options = {\n    _isComponent: true,\n    parent: parent,\n    propsData: vnodeComponentOptions.propsData,\n    _componentTag: vnodeComponentOptions.tag,\n    _parentVnode: vnode,\n    _parentListeners: vnodeComponentOptions.listeners,\n    _renderChildren: vnodeComponentOptions.children\n  }\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate\n  if (inlineTemplate) {\n    options.render = inlineTemplate.render\n    options.staticRenderFns = inlineTemplate.staticRenderFns\n  }\n  return new vnodeComponentOptions.Ctor(options)\n}\n\nfunction init (vnode, hydrating) {\n  if (!vnode.child || vnode.child._isDestroyed) {\n    var child = vnode.child = createComponentInstanceForVnode(vnode, activeInstance)\n    child.$mount(hydrating ? vnode.elm : undefined, hydrating)\n  }\n}\n\nfunction prepatch (\n  oldVnode,\n  vnode\n) {\n  var options = vnode.componentOptions\n  var child = vnode.child = oldVnode.child\n  child._updateFromParent(\n    options.propsData, // updated props\n    options.listeners, // updated listeners\n    vnode, // new parent vnode\n    options.children // new children\n  )\n}\n\nfunction insert (vnode) {\n  if (!vnode.child._isMounted) {\n    vnode.child._isMounted = true\n    callHook(vnode.child, 'mounted')\n  }\n  if (vnode.data.keepAlive) {\n    vnode.child._inactive = false\n    callHook(vnode.child, 'activated')\n  }\n}\n\nfunction destroy (vnode) {\n  if (!vnode.child._isDestroyed) {\n    if (!vnode.data.keepAlive) {\n      vnode.child.$destroy()\n    } else {\n      vnode.child._inactive = true\n      callHook(vnode.child, 'deactivated')\n    }\n  }\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  cb\n) {\n  if (factory.requested) {\n    // pool callbacks\n    factory.pendingCallbacks.push(cb)\n  } else {\n    factory.requested = true\n    var cbs = factory.pendingCallbacks = [cb]\n    var sync = true\n\n    var resolve = function (res) {\n      if (isObject(res)) {\n        res = Vue.extend(res)\n      }\n      // cache resolved\n      factory.resolved = res\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        for (var i = 0, l = cbs.length; i < l; i++) {\n          cbs[i](res)\n        }\n      }\n    }\n\n    var reject = function (reason) {\n      \"development\" !== 'production' && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      )\n    }\n\n    var res = factory(resolve, reject)\n\n    // handle promise\n    if (res && typeof res.then === 'function' && !factory.resolved) {\n      res.then(resolve, reject)\n    }\n\n    sync = false\n    // return in case resolved synchronously\n    return factory.resolved\n  }\n}\n\nfunction extractProps (data, Ctor) {\n  // we are only extrating raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props\n  if (!propOptions) {\n    return\n  }\n  var res = {}\n  var attrs = data.attrs;\n  var props = data.props;\n  var domProps = data.domProps;\n  if (attrs || props || domProps) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key)\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey) ||\n      checkProp(res, domProps, key, altKey)\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (hash) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key]\n      if (!preserve) {\n        delete hash[key]\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey]\n      if (!preserve) {\n        delete hash[altKey]\n      }\n      return true\n    }\n  }\n  return false\n}\n\nfunction mergeHooks (data) {\n  if (!data.hook) {\n    data.hook = {}\n  }\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i]\n    var fromParent = data.hook[key]\n    var ours = hooks[key]\n    data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours\n  }\n}\n\nfunction mergeHook$1 (a, b) {\n  // since all hooks have at most two args, use fixed args\n  // to avoid having to use fn.apply().\n  return function (_, __) {\n    a(_, __)\n    b(_, __)\n  }\n}\n\n/*  */\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  tag,\n  data,\n  children\n) {\n  if (data && (Array.isArray(data) || typeof data !== 'object')) {\n    children = data\n    data = undefined\n  }\n  // make sure to use real instance instead of proxy as context\n  return _createElement(this._self, tag, data, children)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children\n) {\n  if (data && data.__ob__) {\n    \"development\" !== 'production' && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    )\n    return\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return emptyVNode()\n  }\n  if (typeof tag === 'string') {\n    var Ctor\n    var ns = config.getTagNamespace(tag)\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      return new VNode(\n        tag, data, normalizeChildren(children, ns),\n        undefined, undefined, ns, context\n      )\n    } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      return createComponent(Ctor, data, context, children, tag)\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      return new VNode(\n        tag, data, normalizeChildren(children, ns),\n        undefined, undefined, ns, context\n      )\n    }\n  } else {\n    // direct component options / constructor\n    return createComponent(tag, data, context, children)\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm.$vnode = null // the placeholder node in parent tree\n  vm._vnode = null // the root of the child tree\n  vm._staticTrees = null\n  vm.$slots = resolveSlots(vm.$options._renderChildren)\n  // bind the public createElement fn to this instance\n  // so that we get proper render context inside it.\n  vm.$createElement = bind(createElement, vm)\n  if (vm.$options.el) {\n    vm.$mount(vm.$options.el)\n  }\n}\n\nfunction renderMixin (Vue) {\n  Vue.prototype.$nextTick = function (fn) {\n    nextTick(fn, this)\n  }\n\n  Vue.prototype._render = function () {\n    var vm = this\n    var ref = vm.$options;\n    var render = ref.render;\n    var staticRenderFns = ref.staticRenderFns;\n    var _parentVnode = ref._parentVnode;\n\n    if (vm._isMounted) {\n      // clone slot nodes on re-renders\n      for (var key in vm.$slots) {\n        vm.$slots[key] = cloneVNodes(vm.$slots[key])\n      }\n    }\n\n    if (staticRenderFns && !vm._staticTrees) {\n      vm._staticTrees = []\n    }\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode\n    // render self\n    var vnode\n    try {\n      vnode = render.call(vm._renderProxy, vm.$createElement)\n    } catch (e) {\n      if (\"development\" !== 'production') {\n        warn((\"Error when rendering \" + (formatComponentName(vm)) + \":\"))\n      }\n      /* istanbul ignore else */\n      if (config.errorHandler) {\n        config.errorHandler.call(null, e, vm)\n      } else {\n        if (config._isServer) {\n          throw e\n        } else {\n          setTimeout(function () { throw e }, 0)\n        }\n      }\n      // return previous vnode to prevent render error causing blank component\n      vnode = vm._vnode\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if (\"development\" !== 'production' && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        )\n      }\n      vnode = emptyVNode()\n    }\n    // set parent\n    vnode.parent = _parentVnode\n    return vnode\n  }\n\n  // shorthands used in render functions\n  Vue.prototype._h = createElement\n  // toString for mustaches\n  Vue.prototype._s = _toString\n  // number conversion\n  Vue.prototype._n = toNumber\n  // empty vnode\n  Vue.prototype._e = emptyVNode\n\n  // render static tree by index\n  Vue.prototype._m = function renderStatic (\n    index,\n    isInFor\n  ) {\n    var tree = this._staticTrees[index]\n    // if has already-rendered static tree and not inside v-for,\n    // we can reuse the same tree by doing a shallow clone.\n    if (tree && !isInFor) {\n      return Array.isArray(tree)\n        ? cloneVNodes(tree)\n        : cloneVNode(tree)\n    }\n    // otherwise, render a fresh tree.\n    tree = this._staticTrees[index] = this.$options.staticRenderFns[index].call(this._renderProxy)\n    if (Array.isArray(tree)) {\n      for (var i = 0; i < tree.length; i++) {\n        tree[i].isStatic = true\n        tree[i].key = \"__static__\" + index + \"_\" + i\n      }\n    } else {\n      tree.isStatic = true\n      tree.key = \"__static__\" + index\n    }\n    return tree\n  }\n\n  // filter resolution helper\n  var identity = function (_) { return _; }\n  Vue.prototype._f = function resolveFilter (id) {\n    return resolveAsset(this.$options, 'filters', id, true) || identity\n  }\n\n  // render v-for\n  Vue.prototype._l = function renderList (\n    val,\n    render\n  ) {\n    var ret, i, l, keys, key\n    if (Array.isArray(val)) {\n      ret = new Array(val.length)\n      for (i = 0, l = val.length; i < l; i++) {\n        ret[i] = render(val[i], i)\n      }\n    } else if (typeof val === 'number') {\n      ret = new Array(val)\n      for (i = 0; i < val; i++) {\n        ret[i] = render(i + 1, i)\n      }\n    } else if (isObject(val)) {\n      keys = Object.keys(val)\n      ret = new Array(keys.length)\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i]\n        ret[i] = render(val[key], key, i)\n      }\n    }\n    return ret\n  }\n\n  // renderSlot\n  Vue.prototype._t = function (\n    name,\n    fallback\n  ) {\n    var slotNodes = this.$slots[name]\n    // warn duplicate slot usage\n    if (slotNodes && \"development\" !== 'production') {\n      slotNodes._rendered && warn(\n        \"Duplicate presence of slot \\\"\" + name + \"\\\" found in the same render tree \" +\n        \"- this will likely cause render errors.\",\n        this\n      )\n      slotNodes._rendered = true\n    }\n    return slotNodes || fallback\n  }\n\n  // apply v-bind object\n  Vue.prototype._b = function bindProps (\n    vnode,\n    value,\n    asProp) {\n    if (value) {\n      if (!isObject(value)) {\n        \"development\" !== 'production' && warn(\n          'v-bind without argument expects an Object or Array value',\n          this\n        )\n      } else {\n        if (Array.isArray(value)) {\n          value = toObject(value)\n        }\n        var data = vnode.data\n        for (var key in value) {\n          if (key === 'class' || key === 'style') {\n            data[key] = value[key]\n          } else {\n            var hash = asProp || config.mustUseProp(key)\n              ? data.domProps || (data.domProps = {})\n              : data.attrs || (data.attrs = {})\n            hash[key] = value[key]\n          }\n        }\n      }\n    }\n  }\n\n  // expose v-on keyCodes\n  Vue.prototype._k = function getKeyCodes (key) {\n    return config.keyCodes[key]\n  }\n}\n\nfunction resolveSlots (\n  renderChildren\n) {\n  var slots = {}\n  if (!renderChildren) {\n    return slots\n  }\n  var children = normalizeChildren(renderChildren) || []\n  var defaultSlot = []\n  var name, child\n  for (var i = 0, l = children.length; i < l; i++) {\n    child = children[i]\n    if (child.data && (name = child.data.slot)) {\n      delete child.data.slot\n      var slot = (slots[name] || (slots[name] = []))\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children)\n      } else {\n        slot.push(child)\n      }\n    } else {\n      defaultSlot.push(child)\n    }\n  }\n  // ignore single whitespace\n  if (defaultSlot.length && !(\n    defaultSlot.length === 1 &&\n    (defaultSlot[0].text === ' ' || defaultSlot[0].isComment)\n  )) {\n    slots.default = defaultSlot\n  }\n  return slots\n}\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null)\n  // init parent attached events\n  var listeners = vm.$options._parentListeners\n  var on = bind(vm.$on, vm)\n  var off = bind(vm.$off, vm)\n  vm._updateListeners = function (listeners, oldListeners) {\n    updateListeners(listeners, oldListeners || {}, on, off)\n  }\n  if (listeners) {\n    vm._updateListeners(listeners)\n  }\n}\n\nfunction eventsMixin (Vue) {\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this\n    ;(vm._events[event] || (vm._events[event] = [])).push(fn)\n    return vm\n  }\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this\n    function on () {\n      vm.$off(event, on)\n      fn.apply(vm, arguments)\n    }\n    on.fn = fn\n    vm.$on(event, on)\n    return vm\n  }\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null)\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event]\n    if (!cbs) {\n      return vm\n    }\n    if (arguments.length === 1) {\n      vm._events[event] = null\n      return vm\n    }\n    // specific handler\n    var cb\n    var i = cbs.length\n    while (i--) {\n      cb = cbs[i]\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1)\n        break\n      }\n    }\n    return vm\n  }\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this\n    var cbs = vm._events[event]\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs\n      var args = toArray(arguments, 1)\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        cbs[i].apply(vm, args)\n      }\n    }\n    return vm\n  }\n}\n\n/*  */\n\nvar uid = 0\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this\n    // a uid\n    vm._uid = uid++\n    // a flag to avoid this being observed\n    vm._isVue = true\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options)\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm),\n        options || {},\n        vm\n      )\n    }\n    /* istanbul ignore else */\n    if (\"development\" !== 'production') {\n      initProxy(vm)\n    } else {}\n    // expose real self\n    vm._self = vm\n    initLifecycle(vm)\n    initEvents(vm)\n    callHook(vm, 'beforeCreate')\n    initState(vm)\n    callHook(vm, 'created')\n    initRender(vm)\n  }\n\n  function initInternalComponent (vm, options) {\n    var opts = vm.$options = Object.create(resolveConstructorOptions(vm))\n    // doing this because it's faster than dynamic enumeration.\n    opts.parent = options.parent\n    opts.propsData = options.propsData\n    opts._parentVnode = options._parentVnode\n    opts._parentListeners = options._parentListeners\n    opts._renderChildren = options._renderChildren\n    opts._componentTag = options._componentTag\n    if (options.render) {\n      opts.render = options.render\n      opts.staticRenderFns = options.staticRenderFns\n    }\n  }\n\n  function resolveConstructorOptions (vm) {\n    var Ctor = vm.constructor\n    var options = Ctor.options\n    if (Ctor.super) {\n      var superOptions = Ctor.super.options\n      var cachedSuperOptions = Ctor.superOptions\n      if (superOptions !== cachedSuperOptions) {\n        // super option changed\n        Ctor.superOptions = superOptions\n        options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions)\n        if (options.name) {\n          options.components[options.name] = Ctor\n        }\n      }\n    }\n    return options\n  }\n}\n\nfunction Vue (options) {\n  this._init(options)\n}\n\ninitMixin(Vue)\nstateMixin(Vue)\neventsMixin(Vue)\nlifecycleMixin(Vue)\nrenderMixin(Vue)\n\nvar warn\nvar formatComponentName\n\nif (\"development\" !== 'production') {\n  var hasConsole = typeof console !== 'undefined'\n\n  warn = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.error(\"[Vue warn]: \" + msg + \" \" + (\n        vm ? formatLocation(formatComponentName(vm)) : ''\n      ))\n    }\n  }\n\n  formatComponentName = function (vm) {\n    if (vm.$root === vm) {\n      return 'root instance'\n    }\n    var name = vm._isVue\n      ? vm.$options.name || vm.$options._componentTag\n      : vm.name\n    return name ? (\"component <\" + name + \">\") : \"anonymous component\"\n  }\n\n  var formatLocation = function (str) {\n    if (str === 'anonymous component') {\n      str += \" - use the \\\"name\\\" option for better debugging messages.\"\n    }\n    return (\"(found in \" + str + \")\")\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies\n\n/**\n * Options with restrictions\n */\nif (\"development\" !== 'production') {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      )\n    }\n    return defaultStrat(parent, child)\n  }\n\n  strats.name = function (parent, child, vm) {\n    if (vm && child) {\n      warn(\n        'options \"name\" can only be used as a component definition option, ' +\n        'not during instance creation.'\n      )\n    }\n    return defaultStrat(parent, child)\n  }\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  var key, toVal, fromVal\n  for (key in from) {\n    toVal = to[key]\n    fromVal = from[key]\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal)\n    } else if (isObject(toVal) && isObject(fromVal)) {\n      mergeData(toVal, fromVal)\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (typeof childVal !== 'function') {\n      \"development\" !== 'production' && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      )\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        childVal.call(this),\n        parentVal.call(this)\n      )\n    }\n  } else if (parentVal || childVal) {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm)\n        : childVal\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm)\n        : undefined\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\n/**\n * Hooks and param attributes are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  return childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal\n}\n\nconfig._lifecycleHooks.forEach(function (hook) {\n  strats[hook] = mergeHook\n})\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (parentVal, childVal) {\n  var res = Object.create(parentVal || null)\n  return childVal\n    ? extend(res, childVal)\n    : res\n}\n\nconfig._assetTypes.forEach(function (type) {\n  strats[type + 's'] = mergeAssets\n})\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (parentVal, childVal) {\n  /* istanbul ignore if */\n  if (!childVal) return parentVal\n  if (!parentVal) return childVal\n  var ret = {}\n  extend(ret, parentVal)\n  for (var key in childVal) {\n    var parent = ret[key]\n    var child = childVal[key]\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent]\n    }\n    ret[key] = parent\n      ? parent.concat(child)\n      : [child]\n  }\n  return ret\n}\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.computed = function (parentVal, childVal) {\n  if (!childVal) return parentVal\n  if (!parentVal) return childVal\n  var ret = Object.create(null)\n  extend(ret, parentVal)\n  extend(ret, childVal)\n  return ret\n}\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n}\n\n/**\n * Make sure component options get converted to actual\n * constructors.\n */\nfunction normalizeComponents (options) {\n  if (options.components) {\n    var components = options.components\n    var def\n    for (var key in components) {\n      var lower = key.toLowerCase()\n      if (isBuiltInTag(lower) || config.isReservedTag(lower)) {\n        \"development\" !== 'production' && warn(\n          'Do not use built-in or reserved HTML elements as component ' +\n          'id: ' + key\n        )\n        continue\n      }\n      def = components[key]\n      if (isPlainObject(def)) {\n        components[key] = Vue.extend(def)\n      }\n    }\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options) {\n  var props = options.props\n  if (!props) return\n  var res = {}\n  var i, val, name\n  if (Array.isArray(props)) {\n    i = props.length\n    while (i--) {\n      val = props[i]\n      if (typeof val === 'string') {\n        name = camelize(val)\n        res[name] = { type: null }\n      } else if (\"development\" !== 'production') {\n        warn('props must be strings when using array syntax.')\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key]\n      name = camelize(key)\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val }\n    }\n  }\n  options.props = res\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives\n  if (dirs) {\n    for (var key in dirs) {\n      var def = dirs[key]\n      if (typeof def === 'function') {\n        dirs[key] = { bind: def, update: def }\n      }\n    }\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  normalizeComponents(child)\n  normalizeProps(child)\n  normalizeDirectives(child)\n  var extendsFrom = child.extends\n  if (extendsFrom) {\n    parent = typeof extendsFrom === 'function'\n      ? mergeOptions(parent, extendsFrom.options, vm)\n      : mergeOptions(parent, extendsFrom, vm)\n  }\n  if (child.mixins) {\n    for (var i = 0, l = child.mixins.length; i < l; i++) {\n      var mixin = child.mixins[i]\n      if (mixin.prototype instanceof Vue) {\n        mixin = mixin.options\n      }\n      parent = mergeOptions(parent, mixin, vm)\n    }\n  }\n  var options = {}\n  var key\n  for (key in parent) {\n    mergeField(key)\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key)\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat\n    options[key] = strat(parent[key], child[key], vm, key)\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type]\n  var res = assets[id] ||\n    // camelCase ID\n    assets[camelize(id)] ||\n    // Pascal Case ID\n    assets[capitalize(camelize(id))]\n  if (\"development\" !== 'production' && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    )\n  }\n  return res\n}\n\n/*  */\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  /* istanbul ignore if */\n  if (!propsData) return\n  var prop = propOptions[key]\n  var absent = !hasOwn(propsData, key)\n  var value = propsData[key]\n  // handle boolean props\n  if (getType(prop.type) === 'Boolean') {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false\n    } else if (value === '' || value === hyphenate(key)) {\n      value = true\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key)\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldConvert = observerState.shouldConvert\n    observerState.shouldConvert = true\n    observe(value)\n    observerState.shouldConvert = prevShouldConvert\n  }\n  if (\"development\" !== 'production') {\n    assertProp(prop, key, value, vm, absent)\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, name) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default\n  // warn against non-factory defaults for Object & Array\n  if (isObject(def)) {\n    \"development\" !== 'production' && warn(\n      'Invalid default value for prop \"' + name + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    )\n  }\n  // call factory function for non-Function types\n  return typeof def === 'function' && prop.type !== Function\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    )\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type\n  var valid = !type || type === true\n  var expectedTypes = []\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type]\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i])\n      expectedTypes.push(assertedType.expectedType)\n      valid = assertedType.valid\n    }\n  }\n  if (!valid) {\n    warn(\n      'Invalid prop: type check failed for prop \"' + name + '\".' +\n      ' Expected ' + expectedTypes.map(capitalize).join(', ') +\n      ', got ' + Object.prototype.toString.call(value).slice(8, -1) + '.',\n      vm\n    )\n    return\n  }\n  var validator = prop.validator\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      )\n    }\n  }\n}\n\n/**\n * Assert the type of a value\n */\nfunction assertType (value, type) {\n  var valid\n  var expectedType = getType(type)\n  if (expectedType === 'String') {\n    valid = typeof value === (expectedType = 'string')\n  } else if (expectedType === 'Number') {\n    valid = typeof value === (expectedType = 'number')\n  } else if (expectedType === 'Boolean') {\n    valid = typeof value === (expectedType = 'boolean')\n  } else if (expectedType === 'Function') {\n    valid = typeof value === (expectedType = 'function')\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value)\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value)\n  } else {\n    valid = value instanceof type\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/)\n  return match && match[1]\n}\n\n\n\nvar util = Object.freeze({\n\tdefineReactive: defineReactive,\n\t_toString: _toString,\n\ttoNumber: toNumber,\n\tmakeMap: makeMap,\n\tisBuiltInTag: isBuiltInTag,\n\tremove: remove,\n\thasOwn: hasOwn,\n\tisPrimitive: isPrimitive,\n\tcached: cached,\n\tcamelize: camelize,\n\tcapitalize: capitalize,\n\thyphenate: hyphenate,\n\tbind: bind,\n\ttoArray: toArray,\n\textend: extend,\n\tisObject: isObject,\n\tisPlainObject: isPlainObject,\n\ttoObject: toObject,\n\tnoop: noop,\n\tno: no,\n\tgenStaticKeys: genStaticKeys,\n\tisReserved: isReserved,\n\tdef: def,\n\tparsePath: parsePath,\n\thasProto: hasProto,\n\tinBrowser: inBrowser,\n\tdevtools: devtools,\n\tUA: UA,\n\tnextTick: nextTick,\n\tget _Set () { return _Set; },\n\tmergeOptions: mergeOptions,\n\tresolveAsset: resolveAsset,\n\tget warn () { return warn; },\n\tget formatComponentName () { return formatComponentName; },\n\tvalidateProp: validateProp\n});\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    /* istanbul ignore if */\n    if (plugin.installed) {\n      return\n    }\n    // additional parameters\n    var args = toArray(arguments, 1)\n    args.unshift(this)\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args)\n    } else {\n      plugin.apply(null, args)\n    }\n    plugin.installed = true\n    return this\n  }\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    Vue.options = mergeOptions(Vue.options, mixin)\n  }\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0\n  var cid = 1\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {}\n    var Super = this\n    var isFirstExtend = Super.cid === 0\n    if (isFirstExtend && extendOptions._Ctor) {\n      return extendOptions._Ctor\n    }\n    var name = extendOptions.name || Super.options.name\n    if (\"development\" !== 'production') {\n      if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n        warn(\n          'Invalid component name: \"' + name + '\". Component names ' +\n          'can only contain alphanumeric characaters and the hyphen.'\n        )\n        name = null\n      }\n    }\n    var Sub = function VueComponent (options) {\n      this._init(options)\n    }\n    Sub.prototype = Object.create(Super.prototype)\n    Sub.prototype.constructor = Sub\n    Sub.cid = cid++\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    )\n    Sub['super'] = Super\n    // allow further extension\n    Sub.extend = Super.extend\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    config._assetTypes.forEach(function (type) {\n      Sub[type] = Super[type]\n    })\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub\n    }\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options\n    Sub.extendOptions = extendOptions\n    // cache constructor\n    if (isFirstExtend) {\n      extendOptions._Ctor = Sub\n    }\n    return Sub\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  config._assetTypes.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if (\"development\" !== 'production') {\n          if (type === 'component' && config.isReservedTag(id)) {\n            warn(\n              'Do not use built-in or reserved HTML elements as component ' +\n              'id: ' + id\n            )\n          }\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id\n          definition = Vue.extend(definition)\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition }\n        }\n        this.options[type + 's'][id] = definition\n        return definition\n      }\n    }\n  })\n}\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n  created: function created () {\n    this.cache = Object.create(null)\n  },\n  render: function render () {\n    var vnode = getFirstComponentChild(this.$slots.default)\n    if (vnode && vnode.componentOptions) {\n      var opts = vnode.componentOptions\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? opts.Ctor.cid + '::' + opts.tag\n        : vnode.key\n      if (this.cache[key]) {\n        vnode.child = this.cache[key].child\n      } else {\n        this.cache[key] = vnode\n      }\n      vnode.data.keepAlive = true\n    }\n    return vnode\n  },\n  destroyed: function destroyed () {\n    var this$1 = this;\n\n    for (var key in this.cache) {\n      var vnode = this$1.cache[key]\n      callHook(vnode.child, 'deactivated')\n      vnode.child.$destroy()\n    }\n  }\n}\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n}\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {}\n  configDef.get = function () { return config; }\n  if (\"development\" !== 'production') {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      )\n    }\n  }\n  Object.defineProperty(Vue, 'config', configDef)\n  Vue.util = util\n  Vue.set = set\n  Vue.delete = del\n  Vue.nextTick = nextTick\n\n  Vue.options = Object.create(null)\n  config._assetTypes.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null)\n  })\n\n  extend(Vue.options.components, builtInComponents)\n\n  initUse(Vue)\n  initMixin$1(Vue)\n  initExtend(Vue)\n  initAssetRegisters(Vue)\n}\n\ninitGlobalAPI(Vue)\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: function () { return config._isServer; }\n})\n\nVue.version = '2.0.0-rc.6'\n\n/*  */\n\n// attributes that should be using props for binding\nvar mustUseProp = makeMap('value,selected,checked,muted')\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck')\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n)\n\nvar isAttr = makeMap(\n  'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +\n  'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +\n  'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' +\n  'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' +\n  'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' +\n  'form,formaction,headers,<th>,height,hidden,high,href,hreflang,http-equiv,' +\n  'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +\n  'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +\n  'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +\n  'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +\n  'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +\n  'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +\n  'target,title,type,usemap,value,width,wrap'\n)\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink'\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n}\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n}\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n}\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data\n  var parentNode = vnode\n  var childNode = vnode\n  while (childNode.child) {\n    childNode = childNode.child._vnode\n    if (childNode.data) {\n      data = mergeClassData(childNode.data, data)\n    }\n  }\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data) {\n      data = mergeClassData(data, parentNode.data)\n    }\n  }\n  return genClassFromData(data)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: child.class\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction genClassFromData (data) {\n  var dynamicClass = data.class\n  var staticClass = data.staticClass\n  if (staticClass || dynamicClass) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  var res = ''\n  if (!value) {\n    return res\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  if (Array.isArray(value)) {\n    var stringified\n    for (var i = 0, l = value.length; i < l; i++) {\n      if (value[i]) {\n        if ((stringified = stringifyClass(value[i]))) {\n          res += stringified + ' '\n        }\n      }\n    }\n    return res.slice(0, -1)\n  }\n  if (isObject(value)) {\n    for (var key in value) {\n      if (value[key]) res += key + ' '\n    }\n    return res.slice(0, -1)\n  }\n  /* istanbul ignore next */\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n}\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template'\n)\n\nvar isUnaryTag = makeMap(\n  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n  'link,meta,param,source,track,wbr',\n  true\n)\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',\n  true\n)\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n  'title,tr,track',\n  true\n)\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font,' +\n  'font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n)\n\nvar isPreTag = function (tag) { return tag === 'pre'; }\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n}\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null)\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase()\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag)\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\n/*  */\n\nvar UA$1 = inBrowser && window.navigator.userAgent.toLowerCase()\nvar isIE = UA$1 && /msie|trident/.test(UA$1)\nvar isIE9 = UA$1 && UA$1.indexOf('msie 9.0') > 0\nvar isAndroid = UA$1 && UA$1.indexOf('android') > 0\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selector = el\n    el = document.querySelector(el)\n    if (!el) {\n      \"development\" !== 'production' && warn(\n        'Cannot find element: ' + selector\n      )\n      return document.createElement('div')\n    }\n  }\n  return el\n}\n\n/*  */\n\nfunction createElement$1 (tagName) {\n  return document.createElement(tagName)\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode)\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child)\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child)\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text\n}\n\nfunction childNodes (node) {\n  return node.childNodes\n}\n\nfunction setAttribute (node, key, val) {\n  node.setAttribute(key, val)\n}\n\n\nvar nodeOps = Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  childNodes: childNodes,\n  setAttribute: setAttribute\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode)\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true)\n      registerRef(vnode)\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true)\n  }\n}\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref\n  if (!key) return\n\n  var vm = vnode.context\n  var ref = vnode.child || vnode.elm\n  var refs = vm.$refs\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref)\n    } else if (refs[key] === ref) {\n      refs[key] = undefined\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (Array.isArray(refs[key])) {\n        refs[key].push(ref)\n      } else {\n        refs[key] = [ref]\n      }\n    } else {\n      refs[key] = ref\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n\n/*\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyData = {}\nvar emptyNode = new VNode('', emptyData, [])\nvar hooks$1 = ['create', 'update', 'postpatch', 'remove', 'destroy']\n\nfunction isUndef (s) {\n  return s == null\n}\n\nfunction isDef (s) {\n  return s != null\n}\n\nfunction sameVnode (vnode1, vnode2) {\n  return (\n    vnode1.key === vnode2.key &&\n    vnode1.tag === vnode2.tag &&\n    vnode1.isComment === vnode2.isComment &&\n    !vnode1.data === !vnode2.data\n  )\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key\n  var map = {}\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key\n    if (isDef(key)) map[key] = i\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j\n  var cbs = {}\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks$1.length; ++i) {\n    cbs[hooks$1[i]] = []\n    for (j = 0; j < modules.length; ++j) {\n      if (modules[j][hooks$1[i]] !== undefined) cbs[hooks$1[i]].push(modules[j][hooks$1[i]])\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove () {\n      if (--remove.listeners === 0) {\n        removeElement(childElm)\n      }\n    }\n    remove.listeners = listeners\n    return remove\n  }\n\n  function removeElement (el) {\n    var parent = nodeOps.parentNode(el)\n    nodeOps.removeChild(parent, el)\n  }\n\n  function createElm (vnode, insertedVnodeQueue, nested) {\n    var i\n    var data = vnode.data\n    vnode.isRootInsert = !nested\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode)\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(i = vnode.child)) {\n        initComponent(vnode, insertedVnodeQueue)\n        return vnode.elm\n      }\n    }\n    var children = vnode.children\n    var tag = vnode.tag\n    if (isDef(tag)) {\n      if (\"development\" !== 'production') {\n        if (\n          !vnode.ns &&\n          !(config.ignoredElements && config.ignoredElements.indexOf(tag) > -1) &&\n          config.isUnknownElement(tag)\n        ) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          )\n        }\n      }\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag)\n      setScope(vnode)\n      createChildren(vnode, children, insertedVnodeQueue)\n      if (isDef(data)) {\n        invokeCreateHooks(vnode, insertedVnodeQueue)\n      }\n    } else if (vnode.isComment) {\n      vnode.elm = nodeOps.createComment(vnode.text)\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text)\n    }\n    return vnode.elm\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      for (var i = 0; i < children.length; ++i) {\n        nodeOps.appendChild(vnode.elm, createElm(children[i], insertedVnodeQueue, true))\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text))\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.child) {\n      vnode = vnode.child._vnode\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode)\n    }\n    i = vnode.data.hook // Reuse variable\n    if (isDef(i)) {\n      if (i.create) i.create(emptyNode, vnode)\n      if (i.insert) insertedVnodeQueue.push(vnode)\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (vnode.data.pendingInsert) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert)\n    }\n    vnode.elm = vnode.child.$el\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue)\n      setScope(vnode)\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode)\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode)\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i\n    if (isDef(i = vnode.context) && isDef(i = i.$options._scopeId)) {\n      nodeOps.setAttribute(vnode.elm, i, '')\n    }\n    if (isDef(i = activeInstance) &&\n        i !== vnode.context &&\n        isDef(i = i.$options._scopeId)) {\n      nodeOps.setAttribute(vnode.elm, i, '')\n    }\n  }\n\n  function addVnodes (parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      nodeOps.insertBefore(parentElm, createElm(vnodes[startIdx], insertedVnodeQueue), before)\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j\n    var data = vnode.data\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode)\n      for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode)\n    }\n    if (isDef(i = vnode.child) && !data.keepAlive) {\n      invokeDestroyHook(i._vnode)\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j])\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx]\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch)\n          invokeDestroyHook(ch)\n        } else { // Text node\n          nodeOps.removeChild(parentElm, ch.elm)\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (rm || isDef(vnode.data)) {\n      var listeners = cbs.remove.length + 1\n      if (!rm) {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners)\n      } else {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.child) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm)\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm)\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm)\n      } else {\n        rm()\n      }\n    } else {\n      removeElement(vnode.elm)\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0\n    var newStartIdx = 0\n    var oldEndIdx = oldCh.length - 1\n    var oldStartVnode = oldCh[0]\n    var oldEndVnode = oldCh[oldEndIdx]\n    var newEndIdx = newCh.length - 1\n    var newStartVnode = newCh[0]\n    var newEndVnode = newCh[newEndIdx]\n    var oldKeyToIdx, idxInOld, elmToMove, before\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx] // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx]\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue)\n        oldStartVnode = oldCh[++oldStartIdx]\n        newStartVnode = newCh[++newStartIdx]\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue)\n        oldEndVnode = oldCh[--oldEndIdx]\n        newEndVnode = newCh[--newEndIdx]\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue)\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm))\n        oldStartVnode = oldCh[++oldStartIdx]\n        newEndVnode = newCh[--newEndIdx]\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue)\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm)\n        oldEndVnode = oldCh[--oldEndIdx]\n        newStartVnode = newCh[++newStartIdx]\n      } else {\n        if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx)\n        idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : null\n        if (isUndef(idxInOld)) { // New element\n          nodeOps.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm)\n          newStartVnode = newCh[++newStartIdx]\n        } else {\n          elmToMove = oldCh[idxInOld]\n          /* istanbul ignore if */\n          if (\"development\" !== 'production' && !elmToMove) {\n            warn(\n              'It seems there are duplicate keys that is causing an update error. ' +\n              'Make sure each v-for item has a unique key.'\n            )\n          }\n          if (elmToMove.tag !== newStartVnode.tag) {\n            // same key but different element. treat as new element\n            nodeOps.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm)\n            newStartVnode = newCh[++newStartIdx]\n          } else {\n            patchVnode(elmToMove, newStartVnode, insertedVnodeQueue)\n            oldCh[idxInOld] = undefined\n            canMove && nodeOps.insertBefore(parentElm, newStartVnode.elm, oldStartVnode.elm)\n            newStartVnode = newCh[++newStartIdx]\n          }\n        }\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      before = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm\n      addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue)\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx)\n    }\n  }\n\n  function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {\n    if (oldVnode === vnode) {\n      return\n    }\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (vnode.isStatic &&\n        oldVnode.isStatic &&\n        vnode.key === oldVnode.key &&\n        vnode.isCloned) {\n      vnode.elm = oldVnode.elm\n      return\n    }\n    var i, hook\n    var hasData = isDef(i = vnode.data)\n    if (hasData && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {\n      i(oldVnode, vnode)\n    }\n    var elm = vnode.elm = oldVnode.elm\n    var oldCh = oldVnode.children\n    var ch = vnode.children\n    if (hasData && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode)\n      if (isDef(hook) && isDef(i = hook.update)) i(oldVnode, vnode)\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly)\n      } else if (isDef(ch)) {\n        if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '')\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue)\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1)\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '')\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text)\n    }\n    if (hasData) {\n      for (i = 0; i < cbs.postpatch.length; ++i) cbs.postpatch[i](oldVnode, vnode)\n      if (isDef(hook) && isDef(i = hook.postpatch)) i(oldVnode, vnode)\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (initial && vnode.parent) {\n      vnode.parent.data.pendingInsert = queue\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i])\n      }\n    }\n  }\n\n  var bailed = false\n  function hydrate (elm, vnode, insertedVnodeQueue) {\n    if (\"development\" !== 'production') {\n      if (!assertNodeMatch(elm, vnode)) {\n        return false\n      }\n    }\n    vnode.elm = elm\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode, true /* hydrating */)\n      if (isDef(i = vnode.child)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue)\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        var childNodes = nodeOps.childNodes(elm)\n        // empty element, allow client to pick up and populate children\n        if (!childNodes.length) {\n          createChildren(vnode, children, insertedVnodeQueue)\n        } else {\n          var childrenMatch = true\n          if (childNodes.length !== children.length) {\n            childrenMatch = false\n          } else {\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!hydrate(childNodes[i$1], children[i$1], insertedVnodeQueue)) {\n                childrenMatch = false\n                break\n              }\n            }\n          }\n          if (!childrenMatch) {\n            if (\"development\" !== 'production' &&\n                typeof console !== 'undefined' &&\n                !bailed) {\n              bailed = true\n              console.warn('Parent: ', elm)\n              console.warn('Mismatching childNodes vs. VNodes: ', childNodes, children)\n            }\n            return false\n          }\n        }\n      }\n      if (isDef(data)) {\n        invokeCreateHooks(vnode, insertedVnodeQueue)\n      }\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode) {\n    if (vnode.tag) {\n      return (\n        vnode.tag.indexOf('vue-component') === 0 ||\n        vnode.tag === nodeOps.tagName(node).toLowerCase()\n      )\n    } else {\n      return _toString(vnode.text) === node.data\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    var elm, parent\n    var isInitialPatch = false\n    var insertedVnodeQueue = []\n\n    if (!oldVnode) {\n      // empty mount, create new root element\n      isInitialPatch = true\n      createElm(vnode, insertedVnodeQueue)\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType)\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly)\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute('server-rendered')) {\n            oldVnode.removeAttribute('server-rendered')\n            hydrating = true\n          }\n          if (hydrating) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true)\n              return oldVnode\n            } else if (\"development\" !== 'production') {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              )\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode)\n        }\n        elm = oldVnode.elm\n        parent = nodeOps.parentNode(elm)\n\n        createElm(vnode, insertedVnodeQueue)\n\n        // component root element replaced.\n        // update parent placeholder node element.\n        if (vnode.parent) {\n          vnode.parent.elm = vnode.elm\n          if (isPatchable(vnode)) {\n            for (var i = 0; i < cbs.create.length; ++i) {\n              cbs.create[i](emptyNode, vnode.parent)\n            }\n          }\n        }\n\n        if (parent !== null) {\n          nodeOps.insertBefore(parent, vnode.elm, nodeOps.nextSibling(elm))\n          removeVnodes(parent, [oldVnode], 0, 0)\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode)\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch)\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: function bindDirectives (oldVnode, vnode) {\n    var hasInsert = false\n    forEachDirective(oldVnode, vnode, function (def, dir) {\n      callHook$1(def, dir, 'bind', vnode, oldVnode)\n      if (def.inserted) {\n        hasInsert = true\n      }\n    })\n    if (hasInsert) {\n      mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {\n        applyDirectives(oldVnode, vnode, 'inserted')\n      })\n    }\n  },\n  update: function updateDirectives (oldVnode, vnode) {\n    applyDirectives(oldVnode, vnode, 'update')\n    // if old vnode has directives but new vnode doesn't\n    // we need to teardown the directives on the old one.\n    if (oldVnode.data.directives && !vnode.data.directives) {\n      applyDirectives(oldVnode, oldVnode, 'unbind')\n    }\n  },\n  postpatch: function postupdateDirectives (oldVnode, vnode) {\n    applyDirectives(oldVnode, vnode, 'componentUpdated')\n  },\n  destroy: function unbindDirectives (vnode) {\n    applyDirectives(vnode, vnode, 'unbind')\n  }\n}\n\nvar emptyModifiers = Object.create(null)\n\nfunction forEachDirective (\n  oldVnode,\n  vnode,\n  fn\n) {\n  var dirs = vnode.data.directives\n  if (dirs) {\n    for (var i = 0; i < dirs.length; i++) {\n      var dir = dirs[i]\n      var def = resolveAsset(vnode.context.$options, 'directives', dir.name, true)\n      if (def) {\n        var oldDirs = oldVnode && oldVnode.data.directives\n        if (oldDirs) {\n          dir.oldValue = oldDirs[i].value\n        }\n        if (!dir.modifiers) {\n          dir.modifiers = emptyModifiers\n        }\n        fn(def, dir)\n      }\n    }\n  }\n}\n\nfunction applyDirectives (\n  oldVnode,\n  vnode,\n  hook\n) {\n  forEachDirective(oldVnode, vnode, function (def, dir) {\n    callHook$1(def, dir, hook, vnode, oldVnode)\n  })\n}\n\nfunction callHook$1 (def, dir, hook, vnode, oldVnode) {\n  var fn = def && def[hook]\n  if (fn) {\n    fn(vnode.elm, dir, vnode, oldVnode)\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n]\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  if (!oldVnode.data.attrs && !vnode.data.attrs) {\n    return\n  }\n  var key, cur, old\n  var elm = vnode.elm\n  var oldAttrs = oldVnode.data.attrs || {}\n  var attrs = vnode.data.attrs || {}\n  // clone observed objects, as the user probably wants to mutate it\n  if (attrs.__ob__) {\n    attrs = vnode.data.attrs = extend({}, attrs)\n  }\n\n  for (key in attrs) {\n    cur = attrs[key]\n    old = oldAttrs[key]\n    if (old !== cur) {\n      setAttr(elm, key, cur)\n    }\n  }\n  for (key in oldAttrs) {\n    if (attrs[key] == null) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key))\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key)\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key)\n    } else {\n      el.setAttribute(key, key)\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true')\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key))\n    } else {\n      el.setAttributeNS(xlinkNS, key, value)\n    }\n  } else {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key)\n    } else {\n      el.setAttribute(key, value)\n    }\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n}\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm\n  var data = vnode.data\n  var oldData = oldVnode.data\n  if (!data.staticClass && !data.class &&\n      (!oldData || (!oldData.staticClass && !oldData.class))) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode)\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses\n  if (transitionClass) {\n    cls = concat(cls, stringifyClass(transitionClass))\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls)\n    el._prevClass = cls\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n}\n\n// skip type checking this file because we need to attach private properties\n// to elements\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (!oldVnode.data.on && !vnode.data.on) {\n    return\n  }\n  var on = vnode.data.on || {}\n  var oldOn = oldVnode.data.on || {}\n  var add = vnode.elm._v_add || (vnode.elm._v_add = function (event, handler, capture) {\n    vnode.elm.addEventListener(event, handler, capture)\n  })\n  var remove = vnode.elm._v_remove || (vnode.elm._v_remove = function (event, handler) {\n    vnode.elm.removeEventListener(event, handler)\n  })\n  updateListeners(on, oldOn, add, remove)\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n}\n\n/*  */\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (!oldVnode.data.domProps && !vnode.data.domProps) {\n    return\n  }\n  var key, cur\n  var elm = vnode.elm\n  var oldProps = oldVnode.data.domProps || {}\n  var props = vnode.data.domProps || {}\n  // clone observed objects, as the user probably wants to mutate it\n  if (props.__ob__) {\n    props = vnode.data.domProps = extend({}, props)\n  }\n\n  for (key in oldProps) {\n    if (props[key] == null) {\n      elm[key] = undefined\n    }\n  }\n  for (key in props) {\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if ((key === 'textContent' || key === 'innerHTML') && vnode.children) {\n      vnode.children.length = 0\n    }\n    cur = props[key]\n    if (key === 'value') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur\n      // avoid resetting cursor position when value is the same\n      var strCur = cur == null ? '' : String(cur)\n      if (elm.value !== strCur) {\n        elm.value = strCur\n      }\n    } else {\n      elm[key] = cur\n    }\n  }\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n}\n\n/*  */\n\nvar prefixes = ['Webkit', 'Moz', 'ms']\n\nvar testEl\nvar normalize = cached(function (prop) {\n  testEl = testEl || document.createElement('div')\n  prop = camelize(prop)\n  if (prop !== 'filter' && (prop in testEl.style)) {\n    return prop\n  }\n  var upper = prop.charAt(0).toUpperCase() + prop.slice(1)\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefixed = prefixes[i] + upper\n    if (prefixed in testEl.style) {\n      return prefixed\n    }\n  }\n})\n\nfunction updateStyle (oldVnode, vnode) {\n  if ((!oldVnode.data || !oldVnode.data.style) && !vnode.data.style) {\n    return\n  }\n  var cur, name\n  var el = vnode.elm\n  var oldStyle = oldVnode.data.style || {}\n  var style = vnode.data.style || {}\n\n  // handle string\n  if (typeof style === 'string') {\n    el.style.cssText = style\n    return\n  }\n\n  var needClone = style.__ob__\n\n  // handle array syntax\n  if (Array.isArray(style)) {\n    style = vnode.data.style = toObject(style)\n  }\n\n  // clone the style for future updates,\n  // in case the user mutates the style object in-place.\n  if (needClone) {\n    style = vnode.data.style = extend({}, style)\n  }\n\n  for (name in oldStyle) {\n    if (!style[name]) {\n      el.style[normalize(name)] = ''\n    }\n  }\n  for (name in style) {\n    cur = style[name]\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      el.style[normalize(name)] = cur || ''\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n}\n\n/*  */\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); })\n    } else {\n      el.classList.add(cls)\n    }\n  } else {\n    var cur = ' ' + el.getAttribute('class') + ' '\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim())\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); })\n    } else {\n      el.classList.remove(cls)\n    }\n  } else {\n    var cur = ' ' + el.getAttribute('class') + ' '\n    var tar = ' ' + cls + ' '\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ')\n    }\n    el.setAttribute('class', cur.trim())\n  }\n}\n\n/*  */\n\nvar hasTransition = inBrowser && !isIE9\nvar TRANSITION = 'transition'\nvar ANIMATION = 'animation'\n\n// Transition property/event sniffing\nvar transitionProp = 'transition'\nvar transitionEndEvent = 'transitionend'\nvar animationProp = 'animation'\nvar animationEndEvent = 'animationend'\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined) {\n    transitionProp = 'WebkitTransition'\n    transitionEndEvent = 'webkitTransitionEnd'\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined) {\n    animationProp = 'WebkitAnimation'\n    animationEndEvent = 'webkitAnimationEnd'\n  }\n}\n\nvar raf = (inBrowser && window.requestAnimationFrame) || setTimeout\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn)\n  })\n}\n\nfunction addTransitionClass (el, cls) {\n  (el._transitionClasses || (el._transitionClasses = [])).push(cls)\n  addClass(el, cls)\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls)\n  }\n  removeClass(el, cls)\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) return cb()\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent\n  var ended = 0\n  var end = function () {\n    el.removeEventListener(event, onEnd)\n    cb()\n  }\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end()\n      }\n    }\n  }\n  setTimeout(function () {\n    if (ended < propCount) {\n      end()\n    }\n  }, timeout + 1)\n  el.addEventListener(event, onEnd)\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el)\n  var transitioneDelays = styles[transitionProp + 'Delay'].split(', ')\n  var transitionDurations = styles[transitionProp + 'Duration'].split(', ')\n  var transitionTimeout = getTimeout(transitioneDelays, transitionDurations)\n  var animationDelays = styles[animationProp + 'Delay'].split(', ')\n  var animationDurations = styles[animationProp + 'Duration'].split(', ')\n  var animationTimeout = getTimeout(animationDelays, animationDurations)\n\n  var type\n  var timeout = 0\n  var propCount = 0\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION\n      timeout = transitionTimeout\n      propCount = transitionDurations.length\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION\n      timeout = animationTimeout\n      propCount = animationDurations.length\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout)\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property'])\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\nfunction toMs (s) {\n  return Number(s.slice(0, -1)) * 1000\n}\n\n/*  */\n\nfunction enter (vnode) {\n  var el = vnode.elm\n\n  // call leave callback now\n  if (el._leaveCb) {\n    el._leaveCb.cancelled = true\n    el._leaveCb()\n  }\n\n  var data = resolveTransition(vnode.data.transition)\n  if (!data) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (el._enterCb || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var transitionNode = activeInstance.$vnode\n  var context = transitionNode && transitionNode.parent\n    ? transitionNode.parent.context\n    : activeInstance\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear ? appearClass : enterClass\n  var activeClass = isAppear ? appearActiveClass : enterActiveClass\n  var beforeEnterHook = isAppear ? (beforeAppear || beforeEnter) : beforeEnter\n  var enterHook = isAppear ? (typeof appear === 'function' ? appear : enter) : enter\n  var afterEnterHook = isAppear ? (afterAppear || afterEnter) : afterEnter\n  var enterCancelledHook = isAppear ? (appearCancelled || enterCancelled) : enterCancelled\n\n  var expectsCSS = css !== false && !isIE9\n  var userWantsControl =\n    enterHook &&\n    // enterHook may be a bound method which exposes\n    // the length of original fn as _length\n    (enterHook._length || enterHook.length) > 1\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, activeClass)\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass)\n      }\n      enterCancelledHook && enterCancelledHook(el)\n    } else {\n      afterEnterHook && afterEnterHook(el)\n    }\n    el._enterCb = null\n  })\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {\n      var parent = el.parentNode\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key]\n      if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) {\n        pendingNode.elm._leaveCb()\n      }\n      enterHook && enterHook(el, cb)\n    })\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el)\n  if (expectsCSS) {\n    addTransitionClass(el, startClass)\n    addTransitionClass(el, activeClass)\n    nextFrame(function () {\n      removeTransitionClass(el, startClass)\n      if (!cb.cancelled && !userWantsControl) {\n        whenTransitionEnds(el, type, cb)\n      }\n    })\n  }\n\n  if (vnode.data.show) {\n    enterHook && enterHook(el, cb)\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb()\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm\n\n  // call enter callback now\n  if (el._enterCb) {\n    el._enterCb.cancelled = true\n    el._enterCb()\n  }\n\n  var data = resolveTransition(vnode.data.transition)\n  if (!data) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (el._leaveCb || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n\n  var expectsCSS = css !== false && !isIE9\n  var userWantsControl =\n    leave &&\n    // leave hook may be a bound method which exposes\n    // the length of original fn as _length\n    (leave._length || leave.length) > 1\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveActiveClass)\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass)\n      }\n      leaveCancelled && leaveCancelled(el)\n    } else {\n      rm()\n      afterLeave && afterLeave(el)\n    }\n    el._leaveCb = null\n  })\n\n  if (delayLeave) {\n    delayLeave(performLeave)\n  } else {\n    performLeave()\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode\n    }\n    beforeLeave && beforeLeave(el)\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass)\n      addTransitionClass(el, leaveActiveClass)\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass)\n        if (!cb.cancelled && !userWantsControl) {\n          whenTransitionEnds(el, type, cb)\n        }\n      })\n    }\n    leave && leave(el, cb)\n    if (!expectsCSS && !userWantsControl) {\n      cb()\n    }\n  }\n}\n\nfunction resolveTransition (def) {\n  if (!def) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def === 'object') {\n    var res = {}\n    if (def.css !== false) {\n      extend(res, autoCssTransition(def.name || 'v'))\n    }\n    extend(res, def)\n    return res\n  } else if (typeof def === 'string') {\n    return autoCssTransition(def)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    leaveClass: (name + \"-leave\"),\n    appearClass: (name + \"-enter\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveActiveClass: (name + \"-leave-active\"),\n    appearActiveClass: (name + \"-enter-active\")\n  }\n})\n\nfunction once (fn) {\n  var called = false\n  return function () {\n    if (!called) {\n      called = true\n      fn()\n    }\n  }\n}\n\nvar transition = inBrowser ? {\n  create: function create (_, vnode) {\n    if (!vnode.data.show) {\n      enter(vnode)\n    }\n  },\n  remove: function remove (vnode, rm) {\n    /* istanbul ignore else */\n    if (!vnode.data.show) {\n      leave(vnode, rm)\n    } else {\n      rm()\n    }\n  }\n} : {}\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n]\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules)\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules })\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\nvar modelableTagRE = /^input|select|textarea|vue-component-[0-9]+(-[0-9a-zA-Z_\\-]*)?$/\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement\n    if (el && el.vmodel) {\n      trigger(el, 'input')\n    }\n  })\n}\n\nvar model = {\n  bind: function bind (el, binding, vnode) {\n    if (\"development\" !== 'production') {\n      if (!modelableTagRE.test(vnode.tag)) {\n        warn(\n          \"v-model is not supported on element type: <\" + (vnode.tag) + \">. \" +\n          'If you are working with contenteditable, it\\'s recommended to ' +\n          'wrap a library dedicated for that purpose inside a custom component.',\n          vnode.context\n        )\n      }\n    }\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context)\n    } else {\n      if (!isAndroid) {\n        el.addEventListener('compositionstart', onCompositionStart)\n        el.addEventListener('compositionend', onCompositionEnd)\n      }\n      /* istanbul ignore if */\n      if (isIE9) {\n        el.vmodel = true\n      }\n    }\n  },\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context)\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matchig\n      // option in the DOM.\n      var needReset = el.multiple\n        ? binding.value.some(function (v) { return hasNoMatchingOption(v, el.options); })\n        : hasNoMatchingOption(binding.value, el.options)\n      if (needReset) {\n        trigger(el, 'change')\n      }\n    }\n  }\n}\n\nfunction setSelected (el, binding, vm) {\n  var value = binding.value\n  var isMultiple = el.multiple\n  if (isMultiple && !Array.isArray(value)) {\n    \"development\" !== 'production' && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    )\n    return\n  }\n  var selected, option\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i]\n    if (isMultiple) {\n      selected = value.indexOf(getValue(option)) > -1\n      if (option.selected !== selected) {\n        option.selected = selected\n      }\n    } else {\n      if (getValue(option) === value) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  for (var i = 0, l = options.length; i < l; i++) {\n    if (getValue(options[i]) === value) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value || option.text\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true\n}\n\nfunction onCompositionEnd (e) {\n  e.target.composing = false\n  trigger(e.target, 'input')\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents')\n  e.initEvent(type, true, true)\n  el.dispatchEvent(e)\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.child && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.child._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode)\n    var transition = vnode.data && vnode.data.transition\n    if (value && transition && !isIE9) {\n      enter(vnode)\n    }\n    var originalDisplay = el.style.display === 'none' ? '' : el.style.display\n    el.style.display = value ? originalDisplay : 'none'\n    el.__vOriginalDisplay = originalDisplay\n  },\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (value === oldValue) return\n    vnode = locateNode(vnode)\n    var transition = vnode.data && vnode.data.transition\n    if (transition && !isIE9) {\n      if (value) {\n        enter(vnode)\n        el.style.display = el.__vOriginalDisplay\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none'\n        })\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none'\n    }\n  }\n}\n\nvar platformDirectives = {\n  model: model,\n  show: show\n}\n\n/*  */\n\n// Provides transition support for a single element/component.\n// supports transition mode (out-in / in-out)\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String\n}\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recrusively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {}\n  var options = comp.$options\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key]\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1].fn\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  return /\\d-keep-alive$/.test(rawChild.tag)\n    ? h('keep-alive')\n    : null\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(function (c) { return c.tag; })\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if (\"development\" !== 'production' && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      )\n    }\n\n    var mode = this.mode\n\n    // warn invalid mode\n    if (\"development\" !== 'production' &&\n        mode && mode !== 'in-out' && mode !== 'out-in') {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      )\n    }\n\n    var rawChild = children[0]\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild)\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    child.key = child.key == null\n      ? (\"__v\" + (child.tag + this._uid) + \"__\")\n      : child.key\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this)\n    var oldRawChild = this._vnode\n    var oldChild = getRealChild(oldRawChild)\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {\n      child.data.show = true\n    }\n\n    if (oldChild && oldChild.data && oldChild.key !== child.key) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data)\n\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false\n          this$1.$forceUpdate()\n        })\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        var delayedLeave\n        var performLeave = function () { delayedLeave() }\n        mergeVNodeHook(data, 'afterEnter', performLeave)\n        mergeVNodeHook(data, 'enterCancelled', performLeave)\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) {\n          delayedLeave = leave\n        })\n      }\n    }\n\n    return rawChild\n  }\n}\n\n/*  */\n\n// Provides transition support for list items.\n// supports move transitions using the FLIP technique.\n\n// Because the vdom's children update algorithm is \"unstable\" - i.e.\n// it doesn't guarantee the relative positioning of removed elements,\n// we force transition-group to update its children into two passes:\n// in the first pass, we remove all nodes that need to be removed,\n// triggering their leaving transition; in the second pass, we insert/move\n// into the final disired state. This way in the second pass removed\n// nodes will remain where they should be.\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps)\n\ndelete props.mode\n\nvar TransitionGroup = {\n  props: props,\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span'\n    var map = Object.create(null)\n    var prevChildren = this.prevChildren = this.children\n    var rawChildren = this.$slots.default || []\n    var children = this.children = []\n    var transitionData = extractTransitionData(this)\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i]\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c)\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData\n        } else if (\"development\" !== 'production') {\n          var opts = c.componentOptions\n          var name = opts\n            ? (opts.Ctor.options.name || opts.tag)\n            : c.tag\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"))\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = []\n      var removed = []\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1]\n        c$1.data.transition = transitionData\n        c$1.data.pos = c$1.elm.getBoundingClientRect()\n        if (map[c$1.key]) {\n          kept.push(c$1)\n        } else {\n          removed.push(c$1)\n        }\n      }\n      this.kept = h(tag, null, kept)\n      this.removed = removed\n    }\n\n    return h(tag, null, children)\n  },\n\n  beforeUpdate: function beforeUpdate () {\n    // force removing pass\n    this.__patch__(\n      this._vnode,\n      this.kept,\n      false, // hydrating\n      true // removeOnly (!important, avoids unnecessary moves)\n    )\n    this._vnode = this.kept\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren\n    var moveClass = this.moveClass || (this.name + '-move')\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    children.forEach(function (c) {\n      /* istanbul ignore if */\n      if (c.elm._moveCb) {\n        c.elm._moveCb()\n      }\n      /* istanbul ignore if */\n      if (c.elm._enterCb) {\n        c.elm._enterCb()\n      }\n      var oldPos = c.data.pos\n      var newPos = c.data.pos = c.elm.getBoundingClientRect()\n      var dx = oldPos.left - newPos.left\n      var dy = oldPos.top - newPos.top\n      if (dx || dy) {\n        c.data.moved = true\n        var s = c.elm.style\n        s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\"\n        s.transitionDuration = '0s'\n      }\n    })\n\n    // force reflow to put everything in position\n    var f = document.body.offsetHeight // eslint-disable-line\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm\n        var s = el.style\n        addTransitionClass(el, moveClass)\n        s.transform = s.WebkitTransform = s.transitionDuration = ''\n        el._moveDest = c.data.pos\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb)\n            el._moveCb = null\n            removeTransitionClass(el, moveClass)\n          }\n        })\n      }\n    })\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      if (this._hasMove != null) {\n        return this._hasMove\n      }\n      addTransitionClass(el, moveClass)\n      var info = getTransitionInfo(el)\n      removeTransitionClass(el, moveClass)\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n}\n\n/*  */\n\n// install platform specific utils\nVue.config.isUnknownElement = isUnknownElement\nVue.config.isReservedTag = isReservedTag\nVue.config.getTagNamespace = getTagNamespace\nVue.config.mustUseProp = mustUseProp\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives)\nextend(Vue.options.components, platformComponents)\n\n// install platform patch function\nVue.prototype.__patch__ = config._isServer ? noop : patch\n\n// wrap mount\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && !config._isServer ? query(el) : undefined\n  return this._mount(el, hydrating)\n}\n\n// devtools global hook\n/* istanbul ignore next */\nsetTimeout(function () {\n  if (config.devtools) {\n    if (devtools) {\n      devtools.emit('init', Vue)\n    } else if (\n      \"development\" !== 'production' &&\n      inBrowser && /Chrome\\/\\d+/.test(window.navigator.userAgent)\n    ) {\n      console.log(\n        'Download the Vue Devtools for a better development experience:\\n' +\n        'https://github.com/vuejs/vue-devtools'\n      )\n    }\n  }\n}, 0)\n\n/*  */\n\n// check whether current browser encodes a char inside attribute values\nfunction shouldDecode (content, encoded) {\n  var div = document.createElement('div')\n  div.innerHTML = \"<div a=\\\"\" + content + \"\\\">\"\n  return div.innerHTML.indexOf(encoded) > 0\n}\n\n// According to\n// https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value\n// when serializing innerHTML, <, >, \", & should be encoded as entities.\n// However, only some browsers, e.g. PhantomJS, encodes < and >.\n// this causes problems with the in-browser parser.\nvar shouldDecodeTags = inBrowser ? shouldDecode('>', '&gt;') : false\n\n// #3663\n// IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? shouldDecode('\\n', '&#10;') : false\n\n/*  */\n\nvar decoder = document.createElement('div')\n\nfunction decodeHTML (html) {\n  decoder.innerHTML = html\n  return decoder.textContent\n}\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n/*!\n * HTML Parser By John Resig (ejohn.org)\n * Modified by Juriy \"kangax\" Zaytsev\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n */\n\n// Regular Expressions for parsing tags and attributes\nvar singleAttrIdentifier = /([^\\s\"'<>\\/=]+)/\nvar singleAttrAssign = /(?:=)/\nvar singleAttrValues = [\n  // attr value double quotes\n  /\"([^\"]*)\"+/.source,\n  // attr value, single quotes\n  /'([^']*)'+/.source,\n  // attr value, no quotes\n  /([^\\s\"'=<>`]+)/.source\n]\nvar attribute = new RegExp(\n  '^\\\\s*' + singleAttrIdentifier.source +\n  '(?:\\\\s*(' + singleAttrAssign.source + ')' +\n  '\\\\s*(?:' + singleAttrValues.join('|') + '))?'\n)\n\n// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName\n// but for Vue templates we can enforce a simple charset\nvar ncname = '[a-zA-Z_][\\\\w\\\\-\\\\.]*'\nvar qnameCapture = '((?:' + ncname + '\\\\:)?' + ncname + ')'\nvar startTagOpen = new RegExp('^<' + qnameCapture)\nvar startTagClose = /^\\s*(\\/?)>/\nvar endTag = new RegExp('^<\\\\/' + qnameCapture + '[^>]*>')\nvar doctype = /^<!DOCTYPE [^>]+>/i\n\nvar IS_REGEX_CAPTURING_BROKEN = false\n'x'.replace(/x(.)?/g, function (m, g) {\n  IS_REGEX_CAPTURING_BROKEN = g === ''\n})\n\n// Special Elements (can contain anything)\nvar isSpecialTag = makeMap('script,style', true)\n\nvar reCache = {}\n\nvar ltRE = /&lt;/g\nvar gtRE = /&gt;/g\nvar nlRE = /&#10;/g\nvar ampRE = /&amp;/g\nvar quoteRE = /&quot;/g\n\nfunction decodeAttr (value, shouldDecodeTags, shouldDecodeNewlines) {\n  if (shouldDecodeTags) {\n    value = value.replace(ltRE, '<').replace(gtRE, '>')\n  }\n  if (shouldDecodeNewlines) {\n    value = value.replace(nlRE, '\\n')\n  }\n  return value.replace(ampRE, '&').replace(quoteRE, '\"')\n}\n\nfunction parseHTML (html, options) {\n  var stack = []\n  var expectHTML = options.expectHTML\n  var isUnaryTag = options.isUnaryTag || no\n  var isFromDOM = options.isFromDOM\n  var index = 0\n  var last, lastTag\n  while (html) {\n    last = html\n    // Make sure we're not in a script or style element\n    if (!lastTag || !isSpecialTag(lastTag)) {\n      var textEnd = html.indexOf('<')\n      if (textEnd === 0) {\n        // Comment:\n        if (/^<!--/.test(html)) {\n          var commentEnd = html.indexOf('-->')\n\n          if (commentEnd >= 0) {\n            advance(commentEnd + 3)\n            continue\n          }\n        }\n\n        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n        if (/^<!\\[/.test(html)) {\n          var conditionalEnd = html.indexOf(']>')\n\n          if (conditionalEnd >= 0) {\n            advance(conditionalEnd + 2)\n            continue\n          }\n        }\n\n        // Doctype:\n        var doctypeMatch = html.match(doctype)\n        if (doctypeMatch) {\n          advance(doctypeMatch[0].length)\n          continue\n        }\n\n        // End tag:\n        var endTagMatch = html.match(endTag)\n        if (endTagMatch) {\n          var curIndex = index\n          advance(endTagMatch[0].length)\n          parseEndTag(endTagMatch[0], endTagMatch[1], curIndex, index)\n          continue\n        }\n\n        // Start tag:\n        var startTagMatch = parseStartTag()\n        if (startTagMatch) {\n          handleStartTag(startTagMatch)\n          continue\n        }\n      }\n\n      var text\n      if (textEnd >= 0) {\n        text = html.substring(0, textEnd)\n        advance(textEnd)\n      } else {\n        text = html\n        html = ''\n      }\n\n      if (options.chars) {\n        options.chars(text)\n      }\n    } else {\n      var stackedTag = lastTag.toLowerCase()\n      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'))\n      var endTagLength = 0\n      var rest = html.replace(reStackedTag, function (all, text, endTag) {\n        endTagLength = endTag.length\n        if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') {\n          text = text\n            .replace(/<!--([\\s\\S]*?)-->/g, '$1')\n            .replace(/<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g, '$1')\n        }\n        if (options.chars) {\n          options.chars(text)\n        }\n        return ''\n      })\n      index += html.length - rest.length\n      html = rest\n      parseEndTag('</' + stackedTag + '>', stackedTag, index - endTagLength, index)\n    }\n\n    if (html === last) {\n      throw new Error('Error parsing template:\\n\\n' + html)\n    }\n  }\n\n  // Clean up any remaining tags\n  parseEndTag()\n\n  function advance (n) {\n    index += n\n    html = html.substring(n)\n  }\n\n  function parseStartTag () {\n    var start = html.match(startTagOpen)\n    if (start) {\n      var match = {\n        tagName: start[1],\n        attrs: [],\n        start: index\n      }\n      advance(start[0].length)\n      var end, attr\n      while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n        advance(attr[0].length)\n        match.attrs.push(attr)\n      }\n      if (end) {\n        match.unarySlash = end[1]\n        advance(end[0].length)\n        match.end = index\n        return match\n      }\n    }\n  }\n\n  function handleStartTag (match) {\n    var tagName = match.tagName\n    var unarySlash = match.unarySlash\n\n    if (expectHTML) {\n      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n        parseEndTag('', lastTag)\n      }\n      if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\n        parseEndTag('', tagName)\n      }\n    }\n\n    var unary = isUnaryTag(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash\n\n    var l = match.attrs.length\n    var attrs = new Array(l)\n    for (var i = 0; i < l; i++) {\n      var args = match.attrs[i]\n      // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n      if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n        if (args[3] === '') { delete args[3] }\n        if (args[4] === '') { delete args[4] }\n        if (args[5] === '') { delete args[5] }\n      }\n      var value = args[3] || args[4] || args[5] || ''\n      attrs[i] = {\n        name: args[1],\n        value: isFromDOM ? decodeAttr(\n          value,\n          options.shouldDecodeTags,\n          options.shouldDecodeNewlines\n        ) : value\n      }\n    }\n\n    if (!unary) {\n      stack.push({ tag: tagName, attrs: attrs })\n      lastTag = tagName\n      unarySlash = ''\n    }\n\n    if (options.start) {\n      options.start(tagName, attrs, unary, match.start, match.end)\n    }\n  }\n\n  function parseEndTag (tag, tagName, start, end) {\n    var pos\n    if (start == null) start = index\n    if (end == null) end = index\n\n    // Find the closest opened tag of the same type\n    if (tagName) {\n      var needle = tagName.toLowerCase()\n      for (pos = stack.length - 1; pos >= 0; pos--) {\n        if (stack[pos].tag.toLowerCase() === needle) {\n          break\n        }\n      }\n    } else {\n      // If no tag name is provided, clean shop\n      pos = 0\n    }\n\n    if (pos >= 0) {\n      // Close all the open elements, up the stack\n      for (var i = stack.length - 1; i >= pos; i--) {\n        if (options.end) {\n          options.end(stack[i].tag, start, end)\n        }\n      }\n\n      // Remove the open elements from the stack\n      stack.length = pos\n      lastTag = pos && stack[pos - 1].tag\n    } else if (tagName.toLowerCase() === 'br') {\n      if (options.start) {\n        options.start(tagName, [], true, start, end)\n      }\n    } else if (tagName.toLowerCase() === 'p') {\n      if (options.start) {\n        options.start(tagName, [], false, start, end)\n      }\n      if (options.end) {\n        options.end(tagName, start, end)\n      }\n    }\n  }\n}\n\n/*  */\n\nfunction parseFilters (exp) {\n  var inSingle = false\n  var inDouble = false\n  var curly = 0\n  var square = 0\n  var paren = 0\n  var lastFilterIndex = 0\n  var c, prev, i, expression, filters\n\n  for (i = 0; i < exp.length; i++) {\n    prev = c\n    c = exp.charCodeAt(i)\n    if (inSingle) {\n      // check single quote\n      if (c === 0x27 && prev !== 0x5C) inSingle = !inSingle\n    } else if (inDouble) {\n      // check double quote\n      if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble\n    } else if (\n      c === 0x7C && // pipe\n      exp.charCodeAt(i + 1) !== 0x7C &&\n      exp.charCodeAt(i - 1) !== 0x7C &&\n      !curly && !square && !paren\n    ) {\n      if (expression === undefined) {\n        // first filter, end of expression\n        lastFilterIndex = i + 1\n        expression = exp.slice(0, i).trim()\n      } else {\n        pushFilter()\n      }\n    } else {\n      switch (c) {\n        case 0x22: inDouble = true; break // \"\n        case 0x27: inSingle = true; break // '\n        case 0x28: paren++; break         // (\n        case 0x29: paren--; break         // )\n        case 0x5B: square++; break        // [\n        case 0x5D: square--; break        // ]\n        case 0x7B: curly++; break         // {\n        case 0x7D: curly--; break         // }\n      }\n    }\n  }\n\n  if (expression === undefined) {\n    expression = exp.slice(0, i).trim()\n  } else if (lastFilterIndex !== 0) {\n    pushFilter()\n  }\n\n  function pushFilter () {\n    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim())\n    lastFilterIndex = i + 1\n  }\n\n  if (filters) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i])\n    }\n  }\n\n  return expression\n}\n\nfunction wrapFilter (exp, filter) {\n  var i = filter.indexOf('(')\n  if (i < 0) {\n    // _f: resolveFilter\n    return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n  } else {\n    var name = filter.slice(0, i)\n    var args = filter.slice(i + 1)\n    return (\"_f(\\\"\" + name + \"\\\")(\" + exp + \",\" + args)\n  }\n}\n\n/*  */\n\nvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g\n\nvar buildRegex = cached(function (delimiters) {\n  var open = delimiters[0].replace(regexEscapeRE, '\\\\$&')\n  var close = delimiters[1].replace(regexEscapeRE, '\\\\$&')\n  return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n})\n\nfunction parseText (\n  text,\n  delimiters\n) {\n  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE\n  if (!tagRE.test(text)) {\n    return\n  }\n  var tokens = []\n  var lastIndex = tagRE.lastIndex = 0\n  var match, index\n  while ((match = tagRE.exec(text))) {\n    index = match.index\n    // push text token\n    if (index > lastIndex) {\n      tokens.push(JSON.stringify(text.slice(lastIndex, index)))\n    }\n    // tag token\n    var exp = parseFilters(match[1].trim())\n    tokens.push((\"_s(\" + exp + \")\"))\n    lastIndex = index + match[0].length\n  }\n  if (lastIndex < text.length) {\n    tokens.push(JSON.stringify(text.slice(lastIndex)))\n  }\n  return tokens.join('+')\n}\n\n/*  */\n\nfunction baseWarn (msg) {\n  console.error((\"[Vue parser]: \" + msg))\n}\n\nfunction pluckModuleFunction (\n  modules,\n  key\n) {\n  return modules\n    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n    : []\n}\n\nfunction addProp (el, name, value) {\n  (el.props || (el.props = [])).push({ name: name, value: value })\n}\n\nfunction addAttr (el, name, value) {\n  (el.attrs || (el.attrs = [])).push({ name: name, value: value })\n}\n\nfunction addDirective (\n  el,\n  name,\n  value,\n  arg,\n  modifiers\n) {\n  (el.directives || (el.directives = [])).push({ name: name, value: value, arg: arg, modifiers: modifiers })\n}\n\nfunction addHook (el, name, code) {\n  var hooks = el.hooks || (el.hooks = {})\n  var hook = hooks[name]\n  /* istanbul ignore if */\n  if (hook) {\n    hook.push(code)\n  } else {\n    hooks[name] = [code]\n  }\n}\n\nfunction addHandler (\n  el,\n  name,\n  value,\n  modifiers,\n  important\n) {\n  // check capture modifier\n  if (modifiers && modifiers.capture) {\n    delete modifiers.capture\n    name = '!' + name // mark the event as captured\n  }\n  var events\n  if (modifiers && modifiers.native) {\n    delete modifiers.native\n    events = el.nativeEvents || (el.nativeEvents = {})\n  } else {\n    events = el.events || (el.events = {})\n  }\n  var newHandler = { value: value, modifiers: modifiers }\n  var handlers = events[name]\n  /* istanbul ignore if */\n  if (Array.isArray(handlers)) {\n    important ? handlers.unshift(newHandler) : handlers.push(newHandler)\n  } else if (handlers) {\n    events[name] = important ? [newHandler, handlers] : [handlers, newHandler]\n  } else {\n    events[name] = newHandler\n  }\n}\n\nfunction getBindingAttr (\n  el,\n  name,\n  getStatic\n) {\n  var dynamicValue =\n    getAndRemoveAttr(el, ':' + name) ||\n    getAndRemoveAttr(el, 'v-bind:' + name)\n  if (dynamicValue != null) {\n    return dynamicValue\n  } else if (getStatic !== false) {\n    var staticValue = getAndRemoveAttr(el, name)\n    if (staticValue != null) {\n      return JSON.stringify(staticValue)\n    }\n  }\n}\n\nfunction getAndRemoveAttr (el, name) {\n  var val\n  if ((val = el.attrsMap[name]) != null) {\n    var list = el.attrsList\n    for (var i = 0, l = list.length; i < l; i++) {\n      if (list[i].name === name) {\n        list.splice(i, 1)\n        break\n      }\n    }\n  }\n  return val\n}\n\n/*  */\n\nvar dirRE = /^v-|^@|^:/\nvar forAliasRE = /(.*)\\s+(?:in|of)\\s+(.*)/\nvar forIteratorRE = /\\(([^,]*),([^,]*)(?:,([^,]*))?\\)/\nvar bindRE = /^:|^v-bind:/\nvar onRE = /^@|^v-on:/\nvar argRE = /:(.*)$/\nvar modifierRE = /\\.[^\\.]+/g\n\nvar decodeHTMLCached = cached(decodeHTML)\n\n// configurable state\nvar warn$1\nvar platformGetTagNamespace\nvar platformMustUseProp\nvar platformIsPreTag\nvar preTransforms\nvar transforms\nvar postTransforms\nvar delimiters\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n  template,\n  options\n) {\n  warn$1 = options.warn || baseWarn\n  platformGetTagNamespace = options.getTagNamespace || no\n  platformMustUseProp = options.mustUseProp || no\n  platformIsPreTag = options.isPreTag || no\n  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')\n  transforms = pluckModuleFunction(options.modules, 'transformNode')\n  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode')\n  delimiters = options.delimiters\n  var stack = []\n  var preserveWhitespace = options.preserveWhitespace !== false\n  var root\n  var currentParent\n  var inVPre = false\n  var inPre = false\n  var warned = false\n  parseHTML(template, {\n    expectHTML: options.expectHTML,\n    isUnaryTag: options.isUnaryTag,\n    isFromDOM: options.isFromDOM,\n    shouldDecodeTags: options.shouldDecodeTags,\n    shouldDecodeNewlines: options.shouldDecodeNewlines,\n    start: function start (tag, attrs, unary) {\n      // check namespace.\n      // inherit parent ns if there is one\n      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag)\n\n      // handle IE svg bug\n      /* istanbul ignore if */\n      if (options.isIE && ns === 'svg') {\n        attrs = guardIESVGBug(attrs)\n      }\n\n      var element = {\n        type: 1,\n        tag: tag,\n        attrsList: attrs,\n        attrsMap: makeAttrsMap(attrs),\n        parent: currentParent,\n        children: []\n      }\n      if (ns) {\n        element.ns = ns\n      }\n\n      if (\"client\" !== 'server' && isForbiddenTag(element)) {\n        element.forbidden = true\n        \"development\" !== 'production' && warn$1(\n          'Templates should only be responsible for mapping the state to the ' +\n          'UI. Avoid placing tags with side-effects in your templates, such as ' +\n          \"<\" + tag + \">.\"\n        )\n      }\n\n      // apply pre-transforms\n      for (var i = 0; i < preTransforms.length; i++) {\n        preTransforms[i](element, options)\n      }\n\n      if (!inVPre) {\n        processPre(element)\n        if (element.pre) {\n          inVPre = true\n        }\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = true\n      }\n      if (inVPre) {\n        processRawAttrs(element)\n      } else {\n        processFor(element)\n        processIf(element)\n        processOnce(element)\n\n        // determine whether this is a plain element after\n        // removing structural attributes\n        element.plain = !element.key && !attrs.length\n\n        processKey(element)\n        processRef(element)\n        processSlot(element)\n        processComponent(element)\n        for (var i$1 = 0; i$1 < transforms.length; i$1++) {\n          transforms[i$1](element, options)\n        }\n        processAttrs(element)\n      }\n\n      function checkRootConstraints (el) {\n        if (\"development\" !== 'production') {\n          if (el.tag === 'slot' || el.tag === 'template') {\n            warn$1(\n              \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n              'contain multiple nodes:\\n' + template\n            )\n          }\n          if (el.attrsMap.hasOwnProperty('v-for')) {\n            warn$1(\n              'Cannot use v-for on stateful component root element because ' +\n              'it renders multiple elements:\\n' + template\n            )\n          }\n        }\n      }\n\n      // tree management\n      if (!root) {\n        root = element\n        checkRootConstraints(root)\n      } else if (\"development\" !== 'production' && !stack.length && !warned) {\n        // allow 2 root elements with v-if and v-else\n        if ((root.attrsMap.hasOwnProperty('v-if') && element.attrsMap.hasOwnProperty('v-else'))) {\n          checkRootConstraints(element)\n        } else {\n          warned = true\n          warn$1(\n            (\"Component template should contain exactly one root element:\\n\\n\" + template)\n          )\n        }\n      }\n      if (currentParent && !element.forbidden) {\n        if (element.else) {\n          processElse(element, currentParent)\n        } else {\n          currentParent.children.push(element)\n          element.parent = currentParent\n        }\n      }\n      if (!unary) {\n        currentParent = element\n        stack.push(element)\n      }\n      // apply post-transforms\n      for (var i$2 = 0; i$2 < postTransforms.length; i$2++) {\n        postTransforms[i$2](element, options)\n      }\n    },\n\n    end: function end () {\n      // remove trailing whitespace\n      var element = stack[stack.length - 1]\n      var lastNode = element.children[element.children.length - 1]\n      if (lastNode && lastNode.type === 3 && lastNode.text === ' ') {\n        element.children.pop()\n      }\n      // pop stack\n      stack.length -= 1\n      currentParent = stack[stack.length - 1]\n      // check pre state\n      if (element.pre) {\n        inVPre = false\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = false\n      }\n    },\n\n    chars: function chars (text) {\n      if (!currentParent) {\n        if (\"development\" !== 'production' && !warned) {\n          warned = true\n          warn$1(\n            'Component template should contain exactly one root element:\\n\\n' + template\n          )\n        }\n        return\n      }\n      text = inPre || text.trim()\n        ? decodeHTMLCached(text)\n        // only preserve whitespace if its not right after a starting tag\n        : preserveWhitespace && currentParent.children.length ? ' ' : ''\n      if (text) {\n        var expression\n        if (!inVPre && text !== ' ' && (expression = parseText(text, delimiters))) {\n          currentParent.children.push({\n            type: 2,\n            expression: expression,\n            text: text\n          })\n        } else {\n          currentParent.children.push({\n            type: 3,\n            text: text\n          })\n        }\n      }\n    }\n  })\n  return root\n}\n\nfunction processPre (el) {\n  if (getAndRemoveAttr(el, 'v-pre') != null) {\n    el.pre = true\n  }\n}\n\nfunction processRawAttrs (el) {\n  var l = el.attrsList.length\n  if (l) {\n    var attrs = el.attrs = new Array(l)\n    for (var i = 0; i < l; i++) {\n      attrs[i] = {\n        name: el.attrsList[i].name,\n        value: JSON.stringify(el.attrsList[i].value)\n      }\n    }\n  } else if (!el.pre) {\n    // non root node in pre blocks with no attributes\n    el.plain = true\n  }\n}\n\nfunction processKey (el) {\n  var exp = getBindingAttr(el, 'key')\n  if (exp) {\n    el.key = exp\n  }\n}\n\nfunction processRef (el) {\n  var ref = getBindingAttr(el, 'ref')\n  if (ref) {\n    el.ref = ref\n    el.refInFor = checkInFor(el)\n  }\n}\n\nfunction processFor (el) {\n  var exp\n  if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n    var inMatch = exp.match(forAliasRE)\n    if (!inMatch) {\n      \"development\" !== 'production' && warn$1(\n        (\"Invalid v-for expression: \" + exp)\n      )\n      return\n    }\n    el.for = inMatch[2].trim()\n    var alias = inMatch[1].trim()\n    var iteratorMatch = alias.match(forIteratorRE)\n    if (iteratorMatch) {\n      el.alias = iteratorMatch[1].trim()\n      el.iterator1 = iteratorMatch[2].trim()\n      if (iteratorMatch[3]) {\n        el.iterator2 = iteratorMatch[3].trim()\n      }\n    } else {\n      el.alias = alias\n    }\n  }\n}\n\nfunction processIf (el) {\n  var exp = getAndRemoveAttr(el, 'v-if')\n  if (exp) {\n    el.if = exp\n  }\n  if (getAndRemoveAttr(el, 'v-else') != null) {\n    el.else = true\n  }\n}\n\nfunction processElse (el, parent) {\n  var prev = findPrevElement(parent.children)\n  if (prev && prev.if) {\n    prev.elseBlock = el\n  } else if (\"development\" !== 'production') {\n    warn$1(\n      (\"v-else used on element <\" + (el.tag) + \"> without corresponding v-if.\")\n    )\n  }\n}\n\nfunction processOnce (el) {\n  var once = getAndRemoveAttr(el, 'v-once')\n  if (once != null) {\n    el.once = true\n  }\n}\n\nfunction processSlot (el) {\n  if (el.tag === 'slot') {\n    el.slotName = getBindingAttr(el, 'name')\n  } else {\n    var slotTarget = getBindingAttr(el, 'slot')\n    if (slotTarget) {\n      el.slotTarget = slotTarget\n    }\n  }\n}\n\nfunction processComponent (el) {\n  var binding\n  if ((binding = getBindingAttr(el, 'is'))) {\n    el.component = binding\n  }\n  if (getAndRemoveAttr(el, 'inline-template') != null) {\n    el.inlineTemplate = true\n  }\n}\n\nfunction processAttrs (el) {\n  var list = el.attrsList\n  var i, l, name, value, arg, modifiers, isProp\n  for (i = 0, l = list.length; i < l; i++) {\n    name = list[i].name\n    value = list[i].value\n    if (dirRE.test(name)) {\n      // mark element as dynamic\n      el.hasBindings = true\n      // modifiers\n      modifiers = parseModifiers(name)\n      if (modifiers) {\n        name = name.replace(modifierRE, '')\n      }\n      if (bindRE.test(name)) { // v-bind\n        name = name.replace(bindRE, '')\n        if (modifiers && modifiers.prop) {\n          isProp = true\n          name = camelize(name)\n          if (name === 'innerHtml') name = 'innerHTML'\n        }\n        if (isProp || platformMustUseProp(name)) {\n          addProp(el, name, value)\n        } else {\n          addAttr(el, name, value)\n        }\n      } else if (onRE.test(name)) { // v-on\n        name = name.replace(onRE, '')\n        addHandler(el, name, value, modifiers)\n      } else { // normal directives\n        name = name.replace(dirRE, '')\n        // parse arg\n        var argMatch = name.match(argRE)\n        if (argMatch && (arg = argMatch[1])) {\n          name = name.slice(0, -(arg.length + 1))\n        }\n        addDirective(el, name, value, arg, modifiers)\n      }\n    } else {\n      // literal attribute\n      if (\"development\" !== 'production') {\n        var expression = parseText(value, delimiters)\n        if (expression) {\n          warn$1(\n            name + \"=\\\"\" + value + \"\\\": \" +\n            'Interpolation inside attributes has been deprecated. ' +\n            'Use v-bind or the colon shorthand instead.'\n          )\n        }\n      }\n      addAttr(el, name, JSON.stringify(value))\n    }\n  }\n}\n\nfunction checkInFor (el) {\n  var parent = el\n  while (parent) {\n    if (parent.for !== undefined) {\n      return true\n    }\n    parent = parent.parent\n  }\n  return false\n}\n\nfunction parseModifiers (name) {\n  var match = name.match(modifierRE)\n  if (match) {\n    var ret = {}\n    match.forEach(function (m) { ret[m.slice(1)] = true })\n    return ret\n  }\n}\n\nfunction makeAttrsMap (attrs) {\n  var map = {}\n  for (var i = 0, l = attrs.length; i < l; i++) {\n    if (\"development\" !== 'production' && map[attrs[i].name]) {\n      warn$1('duplicate attribute: ' + attrs[i].name)\n    }\n    map[attrs[i].name] = attrs[i].value\n  }\n  return map\n}\n\nfunction findPrevElement (children) {\n  var i = children.length\n  while (i--) {\n    if (children[i].tag) return children[i]\n  }\n}\n\nfunction isForbiddenTag (el) {\n  return (\n    el.tag === 'style' ||\n    (el.tag === 'script' && (\n      !el.attrsMap.type ||\n      el.attrsMap.type === 'text/javascript'\n    ))\n  )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/\nvar ieNSPrefix = /^NS\\d+:/\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n  var res = []\n  for (var i = 0; i < attrs.length; i++) {\n    var attr = attrs[i]\n    if (!ieNSBug.test(attr.name)) {\n      attr.name = attr.name.replace(ieNSPrefix, '')\n      res.push(attr)\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar isStaticKey\nvar isPlatformReservedTag\n\nvar genStaticKeysCached = cached(genStaticKeys$1)\n\n/**\n * Goal of the optimizier: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n  if (!root) return\n  isStaticKey = genStaticKeysCached(options.staticKeys || '')\n  isPlatformReservedTag = options.isReservedTag || (function () { return false; })\n  // first pass: mark all non-static nodes.\n  markStatic(root)\n  // second pass: mark static roots.\n  markStaticRoots(root, false)\n}\n\nfunction genStaticKeys$1 (keys) {\n  return makeMap(\n    'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +\n    (keys ? ',' + keys : '')\n  )\n}\n\nfunction markStatic (node) {\n  node.static = isStatic(node)\n  if (node.type === 1) {\n    for (var i = 0, l = node.children.length; i < l; i++) {\n      var child = node.children[i]\n      markStatic(child)\n      if (!child.static) {\n        node.static = false\n      }\n    }\n  }\n}\n\nfunction markStaticRoots (node, isInFor) {\n  if (node.type === 1) {\n    if (node.once || node.static) {\n      node.staticRoot = true\n      node.staticInFor = isInFor\n      return\n    }\n    if (node.children) {\n      for (var i = 0, l = node.children.length; i < l; i++) {\n        markStaticRoots(node.children[i], !!node.for)\n      }\n    }\n  }\n}\n\nfunction isStatic (node) {\n  if (node.type === 2) { // expression\n    return false\n  }\n  if (node.type === 3) { // text\n    return true\n  }\n  return !!(node.pre || (\n    !node.hasBindings && // no dynamic bindings\n    !node.if && !node.for && // not v-if or v-for or v-else\n    !isBuiltInTag(node.tag) && // not a built-in\n    isPlatformReservedTag(node.tag) && // not a component\n    Object.keys(node).every(isStaticKey)\n  ))\n}\n\n/*  */\n\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?'\\]|\\[\".*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/\n\n// keyCode aliases\nvar keyCodes = {\n  esc: 27,\n  tab: 9,\n  enter: 13,\n  space: 32,\n  up: 38,\n  left: 37,\n  right: 39,\n  down: 40,\n  'delete': [8, 46]\n}\n\nvar modifierCode = {\n  stop: '$event.stopPropagation();',\n  prevent: '$event.preventDefault();',\n  self: 'if($event.target !== $event.currentTarget)return;'\n}\n\nfunction genHandlers (events, native) {\n  var res = native ? 'nativeOn:{' : 'on:{'\n  for (var name in events) {\n    res += \"\\\"\" + name + \"\\\":\" + (genHandler(events[name])) + \",\"\n  }\n  return res.slice(0, -1) + '}'\n}\n\nfunction genHandler (\n  handler\n) {\n  if (!handler) {\n    return 'function(){}'\n  } else if (Array.isArray(handler)) {\n    return (\"[\" + (handler.map(genHandler).join(',')) + \"]\")\n  } else if (!handler.modifiers) {\n    return simplePathRE.test(handler.value)\n      ? handler.value\n      : (\"function($event){\" + (handler.value) + \"}\")\n  } else {\n    var code = ''\n    var keys = []\n    for (var key in handler.modifiers) {\n      if (modifierCode[key]) {\n        code += modifierCode[key]\n      } else {\n        keys.push(key)\n      }\n    }\n    if (keys.length) {\n      code = genKeyFilter(keys) + code\n    }\n    var handlerCode = simplePathRE.test(handler.value)\n      ? handler.value + '($event)'\n      : handler.value\n    return 'function($event){' + code + handlerCode + '}'\n  }\n}\n\nfunction genKeyFilter (keys) {\n  var code = keys.length === 1\n    ? normalizeKeyCode(keys[0])\n    : Array.prototype.concat.apply([], keys.map(normalizeKeyCode))\n  if (Array.isArray(code)) {\n    return (\"if(\" + (code.map(function (c) { return (\"$event.keyCode!==\" + c); }).join('&&')) + \")return;\")\n  } else {\n    return (\"if($event.keyCode!==\" + code + \")return;\")\n  }\n}\n\nfunction normalizeKeyCode (key) {\n  return (\n    parseInt(key, 10) || // number keyCode\n    keyCodes[key] || // built-in alias\n    (\"_k(\" + (JSON.stringify(key)) + \")\") // custom alias\n  )\n}\n\n/*  */\n\nfunction bind$1 (el, dir) {\n  addHook(el, 'construct', (\"_b(n1,\" + (dir.value) + (dir.modifiers && dir.modifiers.prop ? ',true' : '') + \")\"))\n}\n\nvar baseDirectives = {\n  bind: bind$1,\n  cloak: noop\n}\n\n/*  */\n\n// configurable state\nvar warn$2\nvar transforms$1\nvar dataGenFns\nvar platformDirectives$1\nvar staticRenderFns\nvar currentOptions\n\nfunction generate (\n  ast,\n  options\n) {\n  // save previous staticRenderFns so generate calls can be nested\n  var prevStaticRenderFns = staticRenderFns\n  var currentStaticRenderFns = staticRenderFns = []\n  currentOptions = options\n  warn$2 = options.warn || baseWarn\n  transforms$1 = pluckModuleFunction(options.modules, 'transformCode')\n  dataGenFns = pluckModuleFunction(options.modules, 'genData')\n  platformDirectives$1 = options.directives || {}\n  var code = ast ? genElement(ast) : '_h(\"div\")'\n  staticRenderFns = prevStaticRenderFns\n  return {\n    render: (\"with(this){return \" + code + \"}\"),\n    staticRenderFns: currentStaticRenderFns\n  }\n}\n\nfunction genElement (el) {\n  if (el.staticRoot && !el.staticProcessed) {\n    // hoist static sub-trees out\n    el.staticProcessed = true\n    staticRenderFns.push((\"with(this){return \" + (genElement(el)) + \"}\"))\n    return (\"_m(\" + (staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n  } else if (el.for && !el.forProcessed) {\n    return genFor(el)\n  } else if (el.if && !el.ifProcessed) {\n    return genIf(el)\n  } else if (el.tag === 'template' && !el.slotTarget) {\n    return genChildren(el) || 'void 0'\n  } else if (el.tag === 'slot') {\n    return genSlot(el)\n  } else {\n    // component or element\n    var code\n    if (el.component) {\n      code = genComponent(el)\n    } else {\n      var data = genData(el)\n      var children = el.inlineTemplate ? null : genChildren(el)\n      code = \"_h('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\"\n    }\n    // module transforms\n    for (var i = 0; i < transforms$1.length; i++) {\n      code = transforms$1[i](el, code)\n    }\n    return code\n  }\n}\n\nfunction genIf (el) {\n  var exp = el.if\n  el.ifProcessed = true // avoid recursion\n  return (\"(\" + exp + \")?\" + (genElement(el)) + \":\" + (genElse(el)))\n}\n\nfunction genElse (el) {\n  return el.elseBlock\n    ? genElement(el.elseBlock)\n    : '_e()'\n}\n\nfunction genFor (el) {\n  var exp = el.for\n  var alias = el.alias\n  var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : ''\n  var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : ''\n  el.forProcessed = true // avoid recursion\n  return \"(\" + exp + \")&&_l((\" + exp + \"),\" +\n    \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n      \"return \" + (genElement(el)) +\n    '})'\n}\n\nfunction genData (el) {\n  if (el.plain) {\n    return\n  }\n\n  var data = '{'\n\n  // directives first.\n  // directives may mutate the el's other properties before they are generated.\n  var dirs = genDirectives(el)\n  if (dirs) data += dirs + ','\n\n  // key\n  if (el.key) {\n    data += \"key:\" + (el.key) + \",\"\n  }\n  // ref\n  if (el.ref) {\n    data += \"ref:\" + (el.ref) + \",\"\n  }\n  if (el.refInFor) {\n    data += \"refInFor:true,\"\n  }\n  // record original tag name for components using \"is\" attribute\n  if (el.component) {\n    data += \"tag:\\\"\" + (el.tag) + \"\\\",\"\n  }\n  // slot target\n  if (el.slotTarget) {\n    data += \"slot:\" + (el.slotTarget) + \",\"\n  }\n  // module data generation functions\n  for (var i = 0; i < dataGenFns.length; i++) {\n    data += dataGenFns[i](el)\n  }\n  // attributes\n  if (el.attrs) {\n    data += \"attrs:{\" + (genProps(el.attrs)) + \"},\"\n  }\n  // DOM props\n  if (el.props) {\n    data += \"domProps:{\" + (genProps(el.props)) + \"},\"\n  }\n  // hooks\n  if (el.hooks) {\n    data += \"hook:{\" + (genHooks(el.hooks)) + \"},\"\n  }\n  // event handlers\n  if (el.events) {\n    data += (genHandlers(el.events)) + \",\"\n  }\n  if (el.nativeEvents) {\n    data += (genHandlers(el.nativeEvents, true)) + \",\"\n  }\n  // inline-template\n  if (el.inlineTemplate) {\n    var ast = el.children[0]\n    if (\"development\" !== 'production' && (\n      el.children.length > 1 || ast.type !== 1\n    )) {\n      warn$2('Inline-template components must have exactly one child element.')\n    }\n    if (ast.type === 1) {\n      var inlineRenderFns = generate(ast, currentOptions)\n      data += \"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\"\n    }\n  }\n  return data.replace(/,$/, '') + '}'\n}\n\nfunction genDirectives (el) {\n  var dirs = el.directives\n  if (!dirs) return\n  var res = 'directives:['\n  var hasRuntime = false\n  var i, l, dir, needRuntime\n  for (i = 0, l = dirs.length; i < l; i++) {\n    dir = dirs[i]\n    needRuntime = true\n    var gen = platformDirectives$1[dir.name] || baseDirectives[dir.name]\n    if (gen) {\n      // compile-time directive that manipulates AST.\n      // returns true if it also needs a runtime counterpart.\n      needRuntime = !!gen(el, dir, warn$2)\n    }\n    if (needRuntime) {\n      hasRuntime = true\n      res += \"{name:\\\"\" + (dir.name) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\\\"\" + (dir.arg) + \"\\\"\") : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\"\n    }\n  }\n  if (hasRuntime) {\n    return res.slice(0, -1) + ']'\n  }\n}\n\nfunction genChildren (el) {\n  if (el.children.length) {\n    return '[' + el.children.map(genNode).join(',') + ']'\n  }\n}\n\nfunction genNode (node) {\n  if (node.type === 1) {\n    return genElement(node)\n  } else {\n    return genText(node)\n  }\n}\n\nfunction genText (text) {\n  return text.type === 2\n    ? text.expression // no need for () because already wrapped in _s()\n    : JSON.stringify(text.text)\n}\n\nfunction genSlot (el) {\n  var slotName = el.slotName || '\"default\"'\n  var children = genChildren(el)\n  return children\n    ? (\"_t(\" + slotName + \",\" + children + \")\")\n    : (\"_t(\" + slotName + \")\")\n}\n\nfunction genComponent (el) {\n  var children = genChildren(el)\n  return (\"_h(\" + (el.component) + \",\" + (genData(el)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n  var res = ''\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i]\n    res += \"\\\"\" + (prop.name) + \"\\\":\" + (prop.value) + \",\"\n  }\n  return res.slice(0, -1)\n}\n\nfunction genHooks (hooks) {\n  var res = ''\n  for (var key in hooks) {\n    res += \"\\\"\" + key + \"\\\":function(n1,n2){\" + (hooks[key].join(';')) + \"},\"\n  }\n  return res.slice(0, -1)\n}\n\n/*  */\n\n/**\n * Compile a template.\n */\nfunction compile$1 (\n  template,\n  options\n) {\n  var ast = parse(template.trim(), options)\n  optimize(ast, options)\n  var code = generate(ast, options)\n  return {\n    ast: ast,\n    render: code.render,\n    staticRenderFns: code.staticRenderFns\n  }\n}\n\n/*  */\n\n// operators like typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n  'super,throw,while,yield,delete,export,import,return,switch,default,' +\n  'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b')\n// check valid identifier for v-for\nvar identRE = /[A-Za-z_$][\\w$]*/\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g\n\n// detect problematic expressions in a template\nfunction detectErrors (ast) {\n  var errors = []\n  if (ast) {\n    checkNode(ast, errors)\n  }\n  return errors\n}\n\nfunction checkNode (node, errors) {\n  if (node.type === 1) {\n    for (var name in node.attrsMap) {\n      if (dirRE.test(name)) {\n        var value = node.attrsMap[name]\n        if (value) {\n          if (name === 'v-for') {\n            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), errors)\n          } else {\n            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), errors)\n          }\n        }\n      }\n    }\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        checkNode(node.children[i], errors)\n      }\n    }\n  } else if (node.type === 2) {\n    checkExpression(node.expression, node.text, errors)\n  }\n}\n\nfunction checkFor (node, text, errors) {\n  checkExpression(node.for || '', text, errors)\n  checkIdentifier(node.alias, 'v-for alias', text, errors)\n  checkIdentifier(node.iterator1, 'v-for iterator', text, errors)\n  checkIdentifier(node.iterator2, 'v-for iterator', text, errors)\n}\n\nfunction checkIdentifier (ident, type, text, errors) {\n  if (typeof ident === 'string' && !identRE.test(ident)) {\n    errors.push((\"- invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + text))\n  }\n}\n\nfunction checkExpression (exp, text, errors) {\n  try {\n    new Function((\"return \" + exp))\n  } catch (e) {\n    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE)\n    if (keywordMatch) {\n      errors.push(\n        \"- avoid using JavaScript keyword as property name: \" +\n        \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + text\n      )\n    } else {\n      errors.push((\"- invalid expression: \" + text))\n    }\n  }\n}\n\n/*  */\n\nfunction transformNode (el, options) {\n  var warn = options.warn || baseWarn\n  var staticClass = getAndRemoveAttr(el, 'class')\n  if (\"development\" !== 'production' && staticClass) {\n    var expression = parseText(staticClass, options.delimiters)\n    if (expression) {\n      warn(\n        \"class=\\\"\" + staticClass + \"\\\": \" +\n        'Interpolation inside attributes has been deprecated. ' +\n        'Use v-bind or the colon shorthand instead.'\n      )\n    }\n  }\n  if (staticClass) {\n    el.staticClass = JSON.stringify(staticClass)\n  }\n  var classBinding = getBindingAttr(el, 'class', false /* getStatic */)\n  if (classBinding) {\n    el.classBinding = classBinding\n  }\n}\n\nfunction genData$1 (el) {\n  var data = ''\n  if (el.staticClass) {\n    data += \"staticClass:\" + (el.staticClass) + \",\"\n  }\n  if (el.classBinding) {\n    data += \"class:\" + (el.classBinding) + \",\"\n  }\n  return data\n}\n\nvar klass$1 = {\n  staticKeys: ['staticClass'],\n  transformNode: transformNode,\n  genData: genData$1\n}\n\n/*  */\n\nfunction transformNode$1 (el) {\n  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */)\n  if (styleBinding) {\n    el.styleBinding = styleBinding\n  }\n}\n\nfunction genData$2 (el) {\n  return el.styleBinding\n    ? (\"style:(\" + (el.styleBinding) + \"),\")\n    : ''\n}\n\nvar style$1 = {\n  transformNode: transformNode$1,\n  genData: genData$2\n}\n\nvar modules$1 = [\n  klass$1,\n  style$1\n]\n\n/*  */\n\nvar warn$3\n\nfunction model$1 (\n  el,\n  dir,\n  _warn\n) {\n  warn$3 = _warn\n  var value = dir.value\n  var modifiers = dir.modifiers\n  var tag = el.tag\n  var type = el.attrsMap.type\n  if (tag === 'select') {\n    return genSelect(el, value)\n  } else if (tag === 'input' && type === 'checkbox') {\n    genCheckboxModel(el, value)\n  } else if (tag === 'input' && type === 'radio') {\n    genRadioModel(el, value)\n  } else {\n    return genDefaultModel(el, value, modifiers)\n  }\n}\n\nfunction genCheckboxModel (el, value) {\n  if (\"development\" !== 'production' &&\n    el.attrsMap.checked != null) {\n    warn$3(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n      \"inline checked attributes will be ignored when using v-model. \" +\n      'Declare initial values in the component\\'s data option instead.'\n    )\n  }\n  var valueBinding = getBindingAttr(el, 'value') || 'null'\n  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'\n  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'\n  addProp(el, 'checked',\n    \"Array.isArray(\" + value + \")\" +\n      \"?(\" + value + \").indexOf(\" + valueBinding + \")>-1\" +\n      \":(\" + value + \")===(\" + trueValueBinding + \")\"\n  )\n  addHandler(el, 'change',\n    \"var $$a=\" + value + \",\" +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n    'if(Array.isArray($$a)){' +\n      \"var $$v=\" + valueBinding + \",\" +\n          '$$i=$$a.indexOf($$v);' +\n      \"if($$c){$$i<0&&(\" + value + \"=$$a.concat($$v))}\" +\n      \"else{$$i>-1&&(\" + value + \"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}\" +\n    \"}else{\" + value + \"=$$c}\",\n    null, true\n  )\n}\n\nfunction genRadioModel (el, value) {\n  if (\"development\" !== 'production' &&\n    el.attrsMap.checked != null) {\n    warn$3(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n      \"inline checked attributes will be ignored when using v-model. \" +\n      'Declare initial values in the component\\'s data option instead.'\n    )\n  }\n  var valueBinding = getBindingAttr(el, 'value') || 'null'\n  addProp(el, 'checked', (\"(\" + value + \")===(\" + valueBinding + \")\"))\n  addHandler(el, 'change', (value + \"=\" + valueBinding), null, true)\n}\n\nfunction genDefaultModel (\n  el,\n  value,\n  modifiers\n) {\n  if (\"development\" !== 'production') {\n    if (el.tag === 'input' && el.attrsMap.value) {\n      warn$3(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" value=\\\"\" + (el.attrsMap.value) + \"\\\">:\\n\" +\n        'inline value attributes will be ignored when using v-model. ' +\n        'Declare initial values in the component\\'s data option instead.'\n      )\n    }\n    if (el.tag === 'textarea' && el.children.length) {\n      warn$3(\n        \"<textarea v-model=\\\"\" + value + \"\\\">:\\n\" +\n        'inline content inside <textarea> will be ignored when using v-model. ' +\n        'Declare initial values in the component\\'s data option instead.'\n      )\n    }\n  }\n\n  var type = el.attrsMap.type\n  var ref = modifiers || {};\n  var lazy = ref.lazy;\n  var number = ref.number;\n  var trim = ref.trim;\n  var event = lazy || (isIE && type === 'range') ? 'change' : 'input'\n  var needCompositionGuard = !lazy && type !== 'range'\n  var isNative = el.tag === 'input' || el.tag === 'textarea'\n\n  var valueExpression = isNative\n    ? (\"$event.target.value\" + (trim ? '.trim()' : ''))\n    : \"$event\"\n  var code = number || type === 'number'\n    ? (value + \"=_n(\" + valueExpression + \")\")\n    : (value + \"=\" + valueExpression)\n  if (isNative && needCompositionGuard) {\n    code = \"if($event.target.composing)return;\" + code\n  }\n  addProp(el, 'value', isNative ? (\"_s(\" + value + \")\") : (\"(\" + value + \")\"))\n  addHandler(el, event, code, null, true)\n  if (needCompositionGuard) {\n    // need runtime directive code to help with composition events\n    return true\n  }\n}\n\nfunction genSelect (el, value) {\n  if (\"development\" !== 'production') {\n    el.children.some(checkOptionWarning)\n  }\n  var code = value + \"=Array.prototype.filter\" +\n    \".call($event.target.options,function(o){return o.selected})\" +\n    \".map(function(o){return \\\"_value\\\" in o ? o._value : o.value})\" +\n    (el.attrsMap.multiple == null ? '[0]' : '')\n  addHandler(el, 'change', code, null, true)\n  // need runtime to help with possible dynamically generated options\n  return true\n}\n\nfunction checkOptionWarning (option) {\n  if (option.type === 1 &&\n    option.tag === 'option' &&\n    option.attrsMap.selected != null) {\n    warn$3(\n      \"<select v-model=\\\"\" + (option.parent.attrsMap['v-model']) + \"\\\">:\\n\" +\n      'inline selected attributes on <option> will be ignored when using v-model. ' +\n      'Declare initial values in the component\\'s data option instead.'\n    )\n    return true\n  }\n  return false\n}\n\n/*  */\n\nfunction text (el, dir) {\n  if (dir.value) {\n    addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"))\n  }\n}\n\n/*  */\n\nfunction html (el, dir) {\n  if (dir.value) {\n    addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"))\n  }\n}\n\nvar directives$1 = {\n  model: model$1,\n  text: text,\n  html: html\n}\n\n/*  */\n\nvar cache = Object.create(null)\n\nvar baseOptions = {\n  isIE: isIE,\n  expectHTML: true,\n  modules: modules$1,\n  staticKeys: genStaticKeys(modules$1),\n  directives: directives$1,\n  isReservedTag: isReservedTag,\n  isUnaryTag: isUnaryTag,\n  mustUseProp: mustUseProp,\n  getTagNamespace: getTagNamespace,\n  isPreTag: isPreTag\n}\n\nfunction compile (\n  template,\n  options\n) {\n  options = options\n    ? extend(extend({}, baseOptions), options)\n    : baseOptions\n  return compile$1(template, options)\n}\n\nfunction compileToFunctions (\n  template,\n  options,\n  vm\n) {\n  var _warn = (options && options.warn) || warn\n  // detect possible CSP restriction\n  /* istanbul ignore if */\n  if (\"development\" !== 'production') {\n    try {\n      new Function('return 1')\n    } catch (e) {\n      if (e.toString().match(/unsafe-eval|CSP/)) {\n        _warn(\n          'It seems you are using the standalone build of Vue.js in an ' +\n          'environment with Content Security Policy that prohibits unsafe-eval. ' +\n          'The template compiler cannot work in this environment. Consider ' +\n          'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n          'templates into render functions.'\n        )\n      }\n    }\n  }\n  var key = options && options.delimiters\n    ? String(options.delimiters) + template\n    : template\n  if (cache[key]) {\n    return cache[key]\n  }\n  var res = {}\n  var compiled = compile(template, options)\n  res.render = makeFunction(compiled.render)\n  var l = compiled.staticRenderFns.length\n  res.staticRenderFns = new Array(l)\n  for (var i = 0; i < l; i++) {\n    res.staticRenderFns[i] = makeFunction(compiled.staticRenderFns[i])\n  }\n  if (\"development\" !== 'production') {\n    if (res.render === noop || res.staticRenderFns.some(function (fn) { return fn === noop; })) {\n      _warn(\n        \"failed to compile template:\\n\\n\" + template + \"\\n\\n\" +\n        detectErrors(compiled.ast).join('\\n') +\n        '\\n\\n',\n        vm\n      )\n    }\n  }\n  return (cache[key] = res)\n}\n\nfunction makeFunction (code) {\n  try {\n    return new Function(code)\n  } catch (e) {\n    return noop\n  }\n}\n\n/*  */\n\nvar idToTemplate = cached(function (id) {\n  var el = query(id)\n  return el && el.innerHTML\n})\n\nvar mount = Vue.prototype.$mount\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && query(el)\n\n  /* istanbul ignore if */\n  if (el === document.body || el === document.documentElement) {\n    \"development\" !== 'production' && warn(\n      \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n    )\n    return this\n  }\n\n  var options = this.$options\n  // resolve template/el and convert to render function\n  if (!options.render) {\n    var template = options.template\n    var isFromDOM = false\n    if (template) {\n      if (typeof template === 'string') {\n        if (template.charAt(0) === '#') {\n          isFromDOM = true\n          template = idToTemplate(template)\n        }\n      } else if (template.nodeType) {\n        isFromDOM = true\n        template = template.innerHTML\n      } else {\n        if (\"development\" !== 'production') {\n          warn('invalid template option:' + template, this)\n        }\n        return this\n      }\n    } else if (el) {\n      isFromDOM = true\n      template = getOuterHTML(el)\n    }\n    if (template) {\n      var ref = compileToFunctions(template, {\n        warn: warn,\n        isFromDOM: isFromDOM,\n        shouldDecodeTags: shouldDecodeTags,\n        shouldDecodeNewlines: shouldDecodeNewlines,\n        delimiters: options.delimiters\n      }, this);\n      var render = ref.render;\n      var staticRenderFns = ref.staticRenderFns;\n      options.render = render\n      options.staticRenderFns = staticRenderFns\n    }\n  }\n  return mount.call(this, el, hydrating)\n}\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n  if (el.outerHTML) {\n    return el.outerHTML\n  } else {\n    var container = document.createElement('div')\n    container.appendChild(el.cloneNode(true))\n    return container.innerHTML\n  }\n}\n\nVue.compile = compileToFunctions\n\nreturn Vue;\n\n})));"
  },
  {
    "path": "tutorial/03/lib/vuex.js",
    "content": "/**\n * vuex v2.0.0-rc.5\n * (c) 2016 Evan You\n * @license MIT\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Vuex = factory());\n}(this, function () { 'use strict';\n\n  var devtoolHook =\n    typeof window !== 'undefined' &&\n    window.__VUE_DEVTOOLS_GLOBAL_HOOK__\n\n  function devtoolPlugin (store) {\n    if (!devtoolHook) return\n\n    store._devtoolHook = devtoolHook\n\n    devtoolHook.emit('vuex:init', store)\n\n    devtoolHook.on('vuex:travel-to-state', function (targetState) {\n      store.replaceState(targetState)\n    })\n\n    store.subscribe(function (mutation, state) {\n      devtoolHook.emit('vuex:mutation', mutation, state)\n    })\n  }\n\n  function applyMixin (Vue) {\n    var version = Number(Vue.version.split('.')[0])\n\n    if (version >= 2) {\n      var usesInit = Vue.config._lifecycleHooks.indexOf('init') > -1\n      Vue.mixin(usesInit ? { init: vuexInit } : { beforeCreate: vuexInit })\n    } else {\n      // override init and inject vuex init procedure\n      // for 1.x backwards compatibility.\n      var _init = Vue.prototype._init\n      Vue.prototype._init = function (options) {\n        if ( options === void 0 ) options = {};\n\n        options.init = options.init\n          ? [vuexInit].concat(options.init)\n          : vuexInit\n        _init.call(this, options)\n      }\n    }\n\n    /**\n     * Vuex init hook, injected into each instances init hooks list.\n     */\n\n    function vuexInit () {\n      var options = this.$options\n      // store injection\n      if (options.store) {\n        this.$store = options.store\n      } else if (options.parent && options.parent.$store) {\n        this.$store = options.parent.$store\n      }\n    }\n  }\n\n  function mapState (states) {\n    var res = {}\n    normalizeMap(states).forEach(function (ref) {\n      var key = ref.key;\n      var val = ref.val;\n\n      res[key] = function mappedState () {\n        return typeof val === 'function'\n          ? val.call(this, this.$store.state, this.$store.getters)\n          : this.$store.state[val]\n      }\n    })\n    return res\n  }\n\n  function mapMutations (mutations) {\n    var res = {}\n    normalizeMap(mutations).forEach(function (ref) {\n      var key = ref.key;\n      var val = ref.val;\n\n      res[key] = function mappedMutation () {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        return this.$store.commit.apply(this.$store, [val].concat(args))\n      }\n    })\n    return res\n  }\n\n  function mapGetters (getters) {\n    var res = {}\n    normalizeMap(getters).forEach(function (ref) {\n      var key = ref.key;\n      var val = ref.val;\n\n      res[key] = function mappedGetter () {\n        if (!(val in this.$store.getters)) {\n          console.error((\"[vuex] unknown getter: \" + val))\n        }\n        return this.$store.getters[val]\n      }\n    })\n    return res\n  }\n\n  function mapActions (actions) {\n    var res = {}\n    normalizeMap(actions).forEach(function (ref) {\n      var key = ref.key;\n      var val = ref.val;\n\n      res[key] = function mappedAction () {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        return this.$store.dispatch.apply(this.$store, [val].concat(args))\n      }\n    })\n    return res\n  }\n\n  function normalizeMap (map) {\n    return Array.isArray(map)\n      ? map.map(function (key) { return ({ key: key, val: key }); })\n      : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n  }\n\n  var Vue // bind on install\n\n  var Store = function Store (options) {\n    var this$1 = this;\n    if ( options === void 0 ) options = {};\n\n    assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\")\n    assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\")\n\n    var state = options.state; if ( state === void 0 ) state = {};\n    var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n    var strict = options.strict; if ( strict === void 0 ) strict = false;\n\n    // store internal state\n    this._options = options\n    this._committing = false\n    this._actions = Object.create(null)\n    this._mutations = Object.create(null)\n    this._wrappedGetters = Object.create(null)\n      this._runtimeModules = Object.create(null)\n    this._subscribers = []\n    this._watcherVM = new Vue()\n\n    // bind commit and dispatch to self\n    var store = this\n    var ref = this;\n    var dispatch = ref.dispatch;\n    var commit = ref.commit;\n      this.dispatch = function boundDispatch (type, payload) {\n      return dispatch.call(store, type, payload)\n    }\n    this.commit = function boundCommit (type, payload, options) {\n      return commit.call(store, type, payload, options)\n    }\n\n    // strict mode\n    this.strict = strict\n\n    // init root module.\n    // this also recursively registers all sub-modules\n    // and collects all module getters inside this._wrappedGetters\n    installModule(this, state, [], options)\n\n    // initialize the store vm, which is responsible for the reactivity\n    // (also registers _wrappedGetters as computed properties)\n    resetStoreVM(this, state)\n\n    // apply plugins\n    plugins.concat(devtoolPlugin).forEach(function (plugin) { return plugin(this$1); })\n  };\n\n  var prototypeAccessors = { state: {} };\n\n  prototypeAccessors.state.get = function () {\n    return this._vm.state\n  };\n\n  prototypeAccessors.state.set = function (v) {\n    assert(false, \"Use store.replaceState() to explicit replace store state.\")\n  };\n\n  Store.prototype.commit = function commit (type, payload, options) {\n      var this$1 = this;\n\n    // check object-style commit\n    var mutation\n    if (isObject(type) && type.type) {\n      options = payload\n      payload = mutation = type\n      type = type.type\n    } else {\n      mutation = { type: type, payload: payload }\n    }\n    var entry = this._mutations[type]\n    if (!entry) {\n      console.error((\"[vuex] unknown mutation type: \" + type))\n      return\n    }\n    this._withCommit(function () {\n      entry.forEach(function commitIterator (handler) {\n        handler(payload)\n      })\n    })\n    if (!options || !options.silent) {\n      this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); })\n    }\n  };\n\n  Store.prototype.dispatch = function dispatch (type, payload) {\n    var entry = this._actions[type]\n    if (!entry) {\n      console.error((\"[vuex] unknown action type: \" + type))\n      return\n    }\n    return entry.length > 1\n      ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n      : entry[0](payload)\n  };\n\n  Store.prototype.subscribe = function subscribe (fn) {\n    var subs = this._subscribers\n    if (subs.indexOf(fn) < 0) {\n      subs.push(fn)\n    }\n    return function () {\n      var i = subs.indexOf(fn)\n      if (i > -1) {\n        subs.splice(i, 1)\n      }\n    }\n  };\n\n  Store.prototype.watch = function watch (getter, cb, options) {\n      var this$1 = this;\n\n    assert(typeof getter === 'function', \"store.watch only accepts a function.\")\n    return this._watcherVM.$watch(function () { return getter(this$1.state); }, cb, options)\n  };\n\n  Store.prototype.replaceState = function replaceState (state) {\n      var this$1 = this;\n\n    this._withCommit(function () {\n      this$1._vm.state = state\n    })\n  };\n\n  Store.prototype.registerModule = function registerModule (path, module) {\n    if (typeof path === 'string') path = [path]\n    assert(Array.isArray(path), \"module path must be a string or an Array.\")\n    this._runtimeModules[path.join('.')] = module\n    installModule(this, this.state, path, module)\n    // reset store to update getters...\n    resetStoreVM(this, this.state)\n  };\n\n  Store.prototype.unregisterModule = function unregisterModule (path) {\n      var this$1 = this;\n\n    if (typeof path === 'string') path = [path]\n    assert(Array.isArray(path), \"module path must be a string or an Array.\")\n    delete this._runtimeModules[path.join('.')]\n    this._withCommit(function () {\n      var parentState = getNestedState(this$1.state, path.slice(0, -1))\n      Vue.delete(parentState, path[path.length - 1])\n    })\n    resetStore(this)\n  };\n\n  Store.prototype.hotUpdate = function hotUpdate (newOptions) {\n    var options = this._options\n    if (newOptions.actions) {\n      options.actions = newOptions.actions\n    }\n    if (newOptions.mutations) {\n      options.mutations = newOptions.mutations\n    }\n    if (newOptions.getters) {\n      options.getters = newOptions.getters\n    }\n    if (newOptions.modules) {\n      for (var key in newOptions.modules) {\n        options.modules[key] = newOptions.modules[key]\n      }\n    }\n    resetStore(this)\n  };\n\n  Store.prototype._withCommit = function _withCommit (fn) {\n    var committing = this._committing\n      this._committing = true\n    fn()\n    this._committing = committing\n  };\n\n  Object.defineProperties( Store.prototype, prototypeAccessors );\n\n  function assert (condition, msg) {\n    if (!condition) throw new Error((\"[vuex] \" + msg))\n  }\n\n  function resetStore (store) {\n    store._actions = Object.create(null)\n    store._mutations = Object.create(null)\n    store._wrappedGetters = Object.create(null)\n    var state = store.state\n    // init root module\n    installModule(store, state, [], store._options, true)\n    // init all runtime modules\n    Object.keys(store._runtimeModules).forEach(function (key) {\n      installModule(store, state, key.split('.'), store._runtimeModules[key], true)\n    })\n    // reset vm\n    resetStoreVM(store, state)\n  }\n\n  function resetStoreVM (store, state) {\n    var oldVm = store._vm\n\n    // bind store public getters\n    store.getters = {}\n    var wrappedGetters = store._wrappedGetters\n    var computed = {}\n    Object.keys(wrappedGetters).forEach(function (key) {\n      var fn = wrappedGetters[key]\n      // use computed to leverage its lazy-caching mechanism\n      computed[key] = function () { return fn(store); }\n      Object.defineProperty(store.getters, key, {\n        get: function () { return store._vm[key]; }\n      })\n    })\n\n    // use a Vue instance to store the state tree\n    // suppress warnings just in case the user has added\n    // some funky global mixins\n    var silent = Vue.config.silent\n    Vue.config.silent = true\n    store._vm = new Vue({\n      data: { state: state },\n      computed: computed\n    })\n    Vue.config.silent = silent\n\n    // enable strict mode for new vm\n    if (store.strict) {\n      enableStrictMode(store)\n    }\n\n    if (oldVm) {\n      // dispatch changes in all subscribed watchers\n      // to force getter re-evaluation.\n      store._withCommit(function () {\n        oldVm.state = null\n      })\n      Vue.nextTick(function () { return oldVm.$destroy(); })\n    }\n  }\n\n  function installModule (store, rootState, path, module, hot) {\n    var isRoot = !path.length\n    var state = module.state;\n    var actions = module.actions;\n    var mutations = module.mutations;\n    var getters = module.getters;\n    var modules = module.modules;\n\n    // set state\n    if (!isRoot && !hot) {\n      var parentState = getNestedState(rootState, path.slice(0, -1))\n      var moduleName = path[path.length - 1]\n      store._withCommit(function () {\n        Vue.set(parentState, moduleName, state || {})\n      })\n    }\n\n    if (mutations) {\n      Object.keys(mutations).forEach(function (key) {\n        registerMutation(store, key, mutations[key], path)\n      })\n    }\n\n    if (actions) {\n      Object.keys(actions).forEach(function (key) {\n        registerAction(store, key, actions[key], path)\n      })\n    }\n\n    if (getters) {\n      wrapGetters(store, getters, path)\n    }\n\n    if (modules) {\n      Object.keys(modules).forEach(function (key) {\n        installModule(store, rootState, path.concat(key), modules[key], hot)\n      })\n    }\n  }\n\n  function registerMutation (store, type, handler, path) {\n    if ( path === void 0 ) path = [];\n\n    var entry = store._mutations[type] || (store._mutations[type] = [])\n    entry.push(function wrappedMutationHandler (payload) {\n      handler(getNestedState(store.state, path), payload)\n    })\n  }\n\n  function registerAction (store, type, handler, path) {\n    if ( path === void 0 ) path = [];\n\n    var entry = store._actions[type] || (store._actions[type] = [])\n    var dispatch = store.dispatch;\n    var commit = store.commit;\n    entry.push(function wrappedActionHandler (payload, cb) {\n      var res = handler({\n        dispatch: dispatch,\n        commit: commit,\n        getters: store.getters,\n        state: getNestedState(store.state, path),\n        rootState: store.state\n      }, payload, cb)\n      if (!isPromise(res)) {\n        res = Promise.resolve(res)\n      }\n      if (store._devtoolHook) {\n        return res.catch(function (err) {\n          store._devtoolHook.emit('vuex:error', err)\n          throw err\n        })\n      } else {\n        return res\n      }\n    })\n  }\n\n  function wrapGetters (store, moduleGetters, modulePath) {\n    Object.keys(moduleGetters).forEach(function (getterKey) {\n      var rawGetter = moduleGetters[getterKey]\n      if (store._wrappedGetters[getterKey]) {\n        console.error((\"[vuex] duplicate getter key: \" + getterKey))\n        return\n      }\n      store._wrappedGetters[getterKey] = function wrappedGetter (store) {\n        return rawGetter(\n          getNestedState(store.state, modulePath), // local state\n          store.getters, // getters\n          store.state // root state\n        )\n      }\n    })\n  }\n\n  function enableStrictMode (store) {\n    store._vm.$watch('state', function () {\n      assert(store._committing, \"Do not mutate vuex store state outside mutation handlers.\")\n    }, { deep: true, sync: true })\n  }\n\n  function isObject (obj) {\n    return obj !== null && typeof obj === 'object'\n  }\n\n  function isPromise (val) {\n    return val && typeof val.then === 'function'\n  }\n\n  function getNestedState (state, path) {\n    return path.length\n      ? path.reduce(function (state, key) { return state[key]; }, state)\n      : state\n  }\n\n  function install (_Vue) {\n    if (Vue) {\n      console.error(\n        '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n      )\n      return\n    }\n    Vue = _Vue\n    applyMixin(Vue)\n  }\n\n  // auto install in dist mode\n  if (typeof window !== 'undefined' && window.Vue) {\n    install(window.Vue)\n  }\n\n  var index = {\n    Store: Store,\n    install: install,\n    mapState: mapState,\n    mapMutations: mapMutations,\n    mapGetters: mapGetters,\n    mapActions: mapActions\n  }\n\n  return index;\n\n}));"
  },
  {
    "path": "tutorial/03/old.html",
    "content": "<!DOCTYPE html>\n<html>\n<head lang=\"en\">\n    <meta charset=\"UTF-8\">\n    <title>旧版vuex写法</title>\n    <script src=\"lib/old/vue.min.js\"></script>\n    <script src=\"lib/old/vuex.js\"></script>\n</head>\n<body>\n<div id=\"app\">\n    <App></App>\n</div>\n<script>\n\n    var actions = {\n        ADD: function(store, param ){\n            store.dispatch('COMMIT',param)\n        },\n    }\n\n    var store =  new Vuex.Store({\n        state: {\n            messages: 0\n        },\n        mutations:{\n            \"COMMIT\": function(state, msg) {\n                state.messages += msg;\n            }\n        },\n        getters:{\n            getMessage:function(state){\n                return state.messages\n            }\n        }\n    })\n\n    var App = Vue.extend({\n        template:`<div><p>this is vuex old version,  {{msg}}</p><button @click=\"add(1)\">+</button><br/></div>`,\n        vuex:{\n            getters:{\n                msg : function(state){\n                    return state.messages\n                }\n            },\n            actions:{\n                add :actions.ADD\n            }\n        }\n    })\n    new Vue({\n        el: '#app',\n        store,\n        components:{\n            App:App\n        }\n    })\n\n\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "tutorial/03.md",
    "content": "# 注意事项 TODOS"
  },
  {
    "path": "webpack.config.dev.js",
    "content": "var path = require('path')\nvar webpack = require('webpack')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin');\n\nmodule.exports = {\n  devtool: 'source-map',\n  debug:true,\n  entry: [\n    'webpack/hot/only-dev-server',\n    './src/main'\n  ],\n  output: {\n    path: process.cwd(),\n    filename: 'bundle.js',\n    publicPath: '/'\n  },\n  plugins: [\n    new webpack.optimize.OccurenceOrderPlugin(),\n    new webpack.HotModuleReplacementPlugin(),\n    new webpack.NoErrorsPlugin(),\n    new HtmlWebpackPlugin({\n      title : \"vuex-tutorial\",\n      template: path.join(__dirname,'/src/index.html'),\n      inject: true\n    }),\n    new webpack.ProvidePlugin({\n      $: \"jquery\",\n      jQuery: \"jquery\",\n      \"window.jQuery\": \"jquery\"\n    }),\n    new ExtractTextPlugin('[hash:8].style.css', { allChunks: true })\n  ],\n  module: {\n    loaders: [\n    {\n      test: /\\.vue$/,\n      loader: 'vue'\n    },\n    {\n      test: /\\.js$/,\n      loader: 'babel',\n      exclude: /node_modules|vue\\/dist|vue-hot-reload-api|vue-router\\/|vue-loader/\n    }, \n    {\n      test: /\\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap' )\n    },\n    {\n      test: /\\.(jpe?g|png|gif)$/i,\n      loaders: [\n        'url?limit=10000&name=images/[hash:8].[name].[ext]',\n        'image-webpack?{progressive:true, optimizationLevel: 7, interlaced: false, pngquant:{quality: \"65-90\", speed: 4}}'\n      ]\n    },{\n      test: /\\.(woff|woff2|ttf|eot|svg)(\\?v=[0-9]\\.[0-9]\\.[0-9])?$/,\n      loader: 'url?limit=10000&name=fonts/[hash:8].[name].[ext]'\n    }]\n  },\n  vue: {\n    loaders: {\n      js: 'babel'\n    }\n  },\n  resolve: {\n    root: path.resolve(__dirname, 'node_modules'),\n    extensions: ['','.js','.vue','.scss']\n  }\n}\n\n"
  },
  {
    "path": "webpack.config.js",
    "content": "if(process.env.NODE_ENV === 'production'){\n  module.exports = require('./webpack.config.prod')\n}else{\n  module.exports = require('./webpack.config.dev')\n}"
  },
  {
    "path": "webpack.config.prod.js",
    "content": "var path = require('path')\nvar webpack = require('webpack')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin');\nvar HtmlWebpackPlugin = require('html-webpack-plugin');\n\nmodule.exports = {\n  entry: {\n    vendor: ['vue','vuex'],\n    bundle: './src/main'\n  },\n  output: {\n    path: path.join(__dirname, 'dist'),\n    filename: '[hash:8].[name].js'\n  },\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env':{\n        'NODE_ENV': JSON.stringify('production')\n      }\n    }),\n    new webpack.optimize.OccurenceOrderPlugin(),\n    new webpack.optimize.UglifyJsPlugin({\n        compress: { warnings: false },\n        minimize: true\n    }),\n    new webpack.optimize.CommonsChunkPlugin({\n      name: \"vendor\",\n      //filename:\"vendor.js\",\n      minChunks: Infinity //Infinity\n    }),\n    new ExtractTextPlugin('[hash:8].style.css', { allChunks: true }),\n    new HtmlWebpackPlugin({\n      title: \"vuex-tutorial\",\n      template: path.join(__dirname,'src/index.html'),  //模板文件\n      inject:'body',\n      hash:false,    //为静态资源生成hash值\n      minify:{    //压缩HTML文件\n        removeComments:false,    //移除HTML中的注释\n        collapseWhitespace:true    //删除空白符与换行符\n      }\n    }),\n    new webpack.ProvidePlugin({\n      $: \"jquery\",\n      jQuery: \"jquery\",\n      \"window.jQuery\": \"jquery\"\n    })\n  ],\n  module: {\n    loaders: [\n    {\n      test: /\\.vue$/,\n      loader: 'vue'\n    }, \n    {\n      test: /\\.js$/,\n      loader: 'babel',\n      exclude: /node_modules|vue\\/dist|vue-hot-reload-api|vue-router\\/|vue-loader/\n    },\n    { test: /\\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap' ) },\n    //{ test: /\\.(css|scss)$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!sass-loader?sourceMap&includePaths[]=' + path.resolve(__dirname, \"./node_modules/compass-mixins/lib\") ) },\n    {\n      test: /\\.(jpe?g|png|gif)$/i,\n      loaders: [\n        'url?limit=10000&name=images/[hash:8].[name].[ext]',\n        'image-webpack?{progressive:true, optimizationLevel: 7, interlaced: false, pngquant:{quality: \"65-90\", speed: 4}}'\n      ]\n    },{\n      test: /\\.(woff|woff2|ttf|eot|svg)(\\?v=[0-9]\\.[0-9]\\.[0-9])?$/,\n      loader: 'url?limit=10000&name=fonts/[hash:8].[name].[ext]'\n    }\n\n    ]\n  },\n  resolve: {\n    root: path.resolve(__dirname, 'node_modules'),\n    extensions: ['','.js','.vue','.scss']\n  }\n}\n\n"
  }
]