diff --git "a/blog\345\220\216\345\217\260/.example.env" "b/blog\345\220\216\345\217\260/.example.env" new file mode 100644 index 0000000000000000000000000000000000000000..c27f74caea59e0bc78bae1941793a6ac34c85a9c --- /dev/null +++ "b/blog\345\220\216\345\217\260/.example.env" @@ -0,0 +1 @@ +APP_DEBUG = true [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = test USERNAME = username PASSWORD = password HOSTPORT = 3306 CHARSET = utf8 DEBUG = true [LANG] default_lang = zh-cn \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/.gitignore" "b/blog\345\220\216\345\217\260/.gitignore" new file mode 100644 index 0000000000000000000000000000000000000000..d465120e74b813c80d55c418ed3cab757a22033c --- /dev/null +++ "b/blog\345\220\216\345\217\260/.gitignore" @@ -0,0 +1,5 @@ +/.idea +/.vscode +/vendor +*.log +.env \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/.travis.yml" "b/blog\345\220\216\345\217\260/.travis.yml" new file mode 100644 index 0000000000000000000000000000000000000000..36f7b6f90dafe374d0eca306886df83f09ff13a9 --- /dev/null +++ "b/blog\345\220\216\345\217\260/.travis.yml" @@ -0,0 +1,42 @@ +sudo: false + +language: php + +branches: + only: + - stable + +cache: + directories: + - $HOME/.composer/cache + +before_install: + - composer self-update + +install: + - composer install --no-dev --no-interaction --ignore-platform-reqs + - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip . + - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0" + - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0" + - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0" + - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip . + +script: + - php think unit + +deploy: + provider: releases + api_key: + secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw= + file: + - ThinkPHP_Core.zip + - ThinkPHP_Full.zip + skip_cleanup: true + on: + tags: true diff --git "a/blog\345\220\216\345\217\260/LICENSE.txt" "b/blog\345\220\216\345\217\260/LICENSE.txt" new file mode 100644 index 0000000000000000000000000000000000000000..574a39c401ff71ffcb90d15edb906b8046c7661b --- /dev/null +++ "b/blog\345\220\216\345\217\260/LICENSE.txt" @@ -0,0 +1,32 @@ + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 +版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) +All rights reserved。 +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +Apache Licence是著名的非盈利开源组织Apache采用的协议。 +该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, +允许代码修改,再作为开源或商业软件发布。需要满足 +的条件: +1. 需要给代码的用户一份Apache Licence ; +2. 如果你修改了代码,需要在被修改的文件中说明; +3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 +带有原来代码中的协议,商标,专利声明和其他原来作者规 +定需要包含的说明; +4. 如果再发布的产品中包含一个Notice文件,则在Notice文 +件中需要带有本协议内容。你可以在Notice中增加自己的 +许可,但不可以表现为对Apache Licence构成更改。 +具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git "a/blog\345\220\216\345\217\260/README.md" "b/blog\345\220\216\345\217\260/README.md" new file mode 100644 index 0000000000000000000000000000000000000000..2929dad091236d93f73380bd02d6a0bbb58b5b2f --- /dev/null +++ "b/blog\345\220\216\345\217\260/README.md" @@ -0,0 +1,56 @@ +ThinkPHP 6.0 +=============== + +> 运行环境要求PHP7.1+,兼容PHP8.0。 + +[官方应用服务市场](https://market.topthink.com) | [`ThinkAPI`——官方统一API服务](https://docs.topthink.com/think-api) + +ThinkPHPV6.0版本由[亿速云](https://www.yisu.com/)独家赞助发布。 + +## 主要新特性 + +* 采用`PHP7`强类型(严格模式) +* 支持更多的`PSR`规范 +* 原生多应用支持 +* 更强大和易用的查询 +* 全新的事件系统 +* 模型事件和数据库事件统一纳入事件系统 +* 模板引擎分离出核心 +* 内部功能中间件化 +* SESSION/Cookie机制改进 +* 对Swoole以及协程支持改进 +* 对IDE更加友好 +* 统一和精简大量用法 + +## 安装 + +~~~ +composer create-project topthink/think tp 6.0.* +~~~ + +如果需要更新框架使用 +~~~ +composer update topthink/framework +~~~ + +## 文档 + +[完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/content) + +## 参与开发 + +请参阅 [ThinkPHP 核心框架包](https://github.com/top-think/framework)。 + +## 版权信息 + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 + +本项目包含的第三方源码和二进制文件之版权信息另行标注。 + +版权所有Copyright © 2006-2020 by ThinkPHP (http://thinkphp.cn) + +All rights reserved。 + +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +更多细节参阅 [LICENSE.txt](LICENSE.txt) diff --git "a/blog\345\220\216\345\217\260/app/admin/common.php" "b/blog\345\220\216\345\217\260/app/admin/common.php" new file mode 100644 index 0000000000000000000000000000000000000000..124361568ff89529382ad44b04b53d6fd7543152 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/common.php" @@ -0,0 +1,2 @@ + $categoryList]); + } + + public function addSave() + { + $params = Request::param(); + $validate = Validate::rule([ + 'admin_name|管理员名称' => 'require|min:2|max:50', + 'admin_email|管理员邮箱' => 'require|min:1|max:100', + 'admin_password|密码' => 'require|min:6|max:20', + 'admin_password2|再次输入密码' => 'require|min:6|max:20', + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + if ($params['admin_password'] !== $params['admin_password2']) { + return View::fetch('public/tips_error', [ + 'message' => '两次密码输入不一致。', + ]); + } + + $params['add_time'] = time(); + $params['update_time'] = time(); + $params['admin_password'] = AdminModel::encrypt($params['admin_password']); + + $result = AdminModel::create($params); + + return View::fetch('public/tips', ['result' => $result]); + } + + // 编辑管理员 + public function edit() + { + $adminId = Request::param("admin_id"); + $validate = Validate::rule([ + 'admin_id|管理员id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['admin_id' => $adminId])) { + echo $validate->getError(); + exit(); + } + + $admin = AdminModel::find($adminId); + if (!$admin) { + echo '管理员不存在'; + exit(); + } + return View::fetch('', ['admin' => $admin]); + } + + // 保存数据 + public function editSave() + { + $params = Request::param(); + $validate = Validate::rule([ + 'admin_name|管理员名称' => 'require|min:2|max:50', + 'admin_email|管理员邮箱' => 'require|min:1|max:100', + 'admin_password|密码' => 'min:6|max:20', + 'admin_password2|再次输入密码' => 'min:6|max:20', + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + if ($params['admin_password'] + && ($params['admin_password'] !== $params['admin_password2'])) { + return View::fetch('public/tips_error', [ + 'message' => '两次密码输入不一致。', + ]); + } + + // update + // 查找出对应的管理员信息 + $admin = AdminModel::find($params['admin_id']); + if (!$admin) { + echo '管理员不存在'; + exit(); + } + $admin['admin_name'] = $params['admin_name']; + $admin['admin_email'] = $params['admin_email']; + $admin['admin_password'] = AdminModel::encrypt($params['admin_password']); + $admin['update_time'] = time(); + $result = $admin->save(); + + return View::fetch('public/tips', [ + 'result' => $result, + ]); + } + + // 管理员删除 + public function delete() + { + $adminId = Request::param("admin_id"); + $validate = Validate::rule([ + 'admin_id|管理员id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['admin_id' => $adminId])) { + echo $validate->getError(); + exit(); + } + + $result = AdminModel::destroy($adminId); + return View::fetch('public/tips', ['result' => $result]); + } +} diff --git "a/blog\345\220\216\345\217\260/app/admin/controller/Article.php" "b/blog\345\220\216\345\217\260/app/admin/controller/Article.php" new file mode 100644 index 0000000000000000000000000000000000000000..34e78cd2f745e0b00c9ee74181c4e5297fcbedf1 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/controller/Article.php" @@ -0,0 +1,128 @@ + $categoryList]); + } + + public function addSave() + { + $params = Request::param(); + $validate = Validate::rule([ + 'article_title|文章标题' => 'require|min:5|max:50', + 'intro|文章简介' => 'require|min:5|max:100', + 'content|文章内容' => 'require|min:10|max:20000', + 'category_id|文章分类' => 'require|between:1,' . PHP_INT_MAX + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + + $params['add_time'] = time(); + $params['update_time'] = time(); + $result = ArticleModel::create($params); + + return View::fetch('public/tips', [ + 'result' => $result, + 'url' => '/index.php?s=admin/article/index' + ]); + } + + // 编辑文章 + public function edit() + { + $articleId = Request::param("article_id"); + $validate = Validate::rule([ + 'article_id|文章id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['article_id' => $articleId])) { + echo $validate->getError(); + exit(); + } + + $article = ArticleModel::find($articleId); + if (!$article) { + echo '文章不存在'; + exit(); + } + $categoryList = CategoryModel::getAllPreKey(); + return View::fetch('', ['article' => $article, 'categoryList' => $categoryList]); + } + + // 保存数据 + public function editSave() + { + $params = Request::param(); + $validate = Validate::rule([ + 'article_id|文章id' => 'require|between:1,' . PHP_INT_MAX, + 'article_title|文章标题' => 'require|min:5|max:50', + 'intro|文章简介' => 'require|min:5|max:100', + 'content|文章内容' => 'require|min:10|max:20000', + 'category_id|文章分类' => 'require|between:1,' . PHP_INT_MAX + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + + // update + // 查找出对应的文章信息 + $article = ArticleModel::find($params['article_id']); + if (!$article) { + echo '文章不存在'; + exit(); + } + $article['article_title'] = $params['article_title']; + $article['intro'] = $params['intro']; + $article['content'] = $params['content']; + $article['category_id'] = $params['category_id']; + $article['update_time'] = time(); + $result = $article->save(); + + return View::fetch('public/tips', [ + 'result' => $result, + 'url' => '/index.php?s=admin/article/index' + ]); + } + + // 文章删除 + public function delete() + { + $articleId = Request::param("article_id"); + $validate = Validate::rule([ + 'article_id|文章id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['article_id' => $articleId])) { + echo $validate->getError(); + exit(); + } + + $result = ArticleModel::destroy($articleId); + return View::fetch('public/tips', ['result' => $result]); + } +} diff --git "a/blog\345\220\216\345\217\260/app/admin/controller/Category.php" "b/blog\345\220\216\345\217\260/app/admin/controller/Category.php" new file mode 100644 index 0000000000000000000000000000000000000000..ddd173425e85e1a5e8905db27d592849b4e99063 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/controller/Category.php" @@ -0,0 +1,147 @@ + 'require|min:2|max:45', + 'category_desc|分类描述' => 'require|min:10|max:255', + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + + if (CategoryModel::getByCategoryName($params['category_name'])) { + echo '分类已经存在,请用其他分类名。'; + echo '返回上一页'; + exit(); + } + + // 插入数据 + // 连接数据库(TP做好了) + // 新建一个模型 + // 模型操作增加 + $params['add_time'] = time(); + $params['update_time'] = time(); + $result = CategoryModel::create($params); + + return View::fetch('public/tips', ['result' => $result]); + } + + // 编辑分类 + public function edit() + { + // 整出视图, + // 查询出要编辑的分类信息 + // 获取参数category_id + $categoryId = Request::param("category_id"); + $validate = Validate::rule([ + 'category_id|分类id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['category_id' => $categoryId])) { + echo $validate->getError(); + exit(); + } + + $category = CategoryModel::find($categoryId); + if (!$category) { + echo '分类不存在'; + exit(); + } + + return View::fetch('', ['category' => $category]); + } + + // 保存数据 + public function editSave() + { + $params = Request::param(); // 获取参数 + $validate = Validate::rule([ + 'category_id|分类id' => 'require|between:1,' . PHP_INT_MAX, + 'category_name|分类名称' => 'require|min:2|max:45', + 'category_desc|分类描述' => 'require|min:10|max:255', + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + // update + // 查找出对应的分类信息 + $category = CategoryModel::find($params['category_id']); + if (!$category) { + echo '分类不存在'; + exit(); + } + $category['category_name'] = $params['category_name']; + $category['category_desc'] = $params['category_desc']; + $category['update_time'] = time(); + $result = $category->save(); + + return View::fetch('public/tips', ['result' => $result]); + } + + // 分类删除 + public function delete() + { + $categoryId = Request::param("category_id"); + $validate = Validate::rule([ + 'category_id|分类id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['category_id' => $categoryId])) { + echo $validate->getError(); + exit(); + } + + // 判断是否有文章? + $article = ArticleModel::where('category_id', '=', $categoryId)->find(1); + if ($article) { + echo '分类下有文章,请先删除相关文章。'; + echo '返回上一页'; + exit(); + } + + $result = CategoryModel::destroy($categoryId); + + return View::fetch('public/tips', ['result' => $result]); + } +} diff --git "a/blog\345\220\216\345\217\260/app/admin/controller/Comment.php" "b/blog\345\220\216\345\217\260/app/admin/controller/Comment.php" new file mode 100644 index 0000000000000000000000000000000000000000..b1fa449d8ba79a4fdd05c02ebdb3874f318a1181 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/controller/Comment.php" @@ -0,0 +1,118 @@ +select(); + + View::assign('commentList', $commentList); + View::assign('status', $status); + return View::fetch(); + } + + // 回收站 + public function garbage() + { + $commentId = Request::param("comment_id"); + $validate = Validate::rule([ + 'comment_id|评论id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['comment_id' => $commentId])) { + $data = [ + 'status' => 0, + 'message' => $validate->getError(), + 'data' => [], + ]; + return json($data); + } + + $result = CommentModel::update(['status' => 2,'comment_id' => $commentId]); + if ($result) { + $data = [ + 'status' => 1, + 'message' => '', + 'data' => [ + 'success' => '移入回收站', + ], + ]; + return json($data); + } + + } + + // 恢复 + public function resume() + { + $commentId = Request::param("comment_id"); + $validate = Validate::rule([ + 'comment_id|评论id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['comment_id' => $commentId])) { + $data = [ + 'status' => 0, + 'message' => $validate->getError(), + 'data' => [], + ]; + return json($data); + } + + $result = CommentModel::update(['status' => 1,'comment_id' => $commentId]); + if ($result) { + $data = [ + 'status' => 2, + 'message' => '', + 'data' => [ + 'success' => '恢复', + ], + ]; + return json($data); + } + } + + // 彻底删除 + public function delete() + { + $commentId = Request::param("comment_id"); + $validate = Validate::rule([ + 'comment_id|评论id' => 'require|between:1,' . PHP_INT_MAX, + ]); + if (!$validate->check(['comment_id' => $commentId])) { + $data = [ + 'status' => 0, + 'message' => $validate->getError(), + 'data' => [], + ]; + return json($data); + } + + $result = CommentModel::destroy(['comment_id' => $commentId]); + if ($result) { + $data = [ + 'status' => 3, + 'message' => '', + 'data' => [ + 'success' => '彻底删除', + ], + ]; + return json($data); + } + } +} \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/controller/Index.php" "b/blog\345\220\216\345\217\260/app/admin/controller/Index.php" new file mode 100644 index 0000000000000000000000000000000000000000..677cfdd769a13e3a88e5ce221c799c49820d1cae --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/controller/Index.php" @@ -0,0 +1,12 @@ + 'require|min:1|max:100', + 'admin_password|密码' => 'require|min:6|max:20', + 'verify_code|验证码' => 'require|min:4|max:4', + ]); + if (!$validate->check($params)) { + echo $validate->getError(); + exit(); + } + session_start(); + if ($_SESSION['verify_code'] != $params['verify_code']) { + return View::fetch('public/tips_error', ['message' => '验证码不对']); + } + + $admin = AdminModel::where("admin_email", '=', $params['admin_email'])->find(); + $result = false; + if ($admin && AdminModel::checkPassword($params['admin_password'], $admin['admin_password'])) { + session("admin_email", $admin['admin_email']); + session("admin_name", $admin['admin_name']); + $result = true; + } + + return View::fetch('', ['result' => $result]); + } + + public function logout() + { + session("admin_name", null); + session("admin_email", null); + + return View::fetch(''); + } + + public function verifyCode() + { + session_start(); + + $image = \imagecreate(58, 25); // 创建一张图片 + $white = \imagecolorallocate($image, 255, 255, 255);// 创建背景为白色 + + $verifyCode = ''; + for ($i = 1; $i <= 4; $i++) { + $str = mt_rand(0, 9); // 要插入的字符串 + $font = 4; // 字体大小,如果 font 是 1,2,3,4 或 5,则使用内置字体。 + $x = 2 + ($i - 1) * 15; // 左偏移量,每画1个,左偏移量就加大一些。 + $y = 5; // 上偏移量 + $color = \imagecolorallocate($image, 255, 192, 203); // 设置一个浅粉色 + \imagestring($image, $font, $x, $y, $str, $color); // 将字符串画到图片上 + + $verifyCode .= $str; + } + $_SESSION['verify_code'] = $verifyCode; + + header("Content-type: image/png"); + \imagepng($image); // 以 PNG 格式将图像输出到浏览器 + \imagedestroy($image); // 销毁一图像, 释放资源 + } +} \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/controller/User.php" "b/blog\345\220\216\345\217\260/app/admin/controller/User.php" new file mode 100644 index 0000000000000000000000000000000000000000..46e657275c02150fc8716992f32083760822337d --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/controller/User.php" @@ -0,0 +1,17 @@ +pathinfo())) { + // 检测是否有登录,如果没有登录,调整到登录页面 + if (empty(session("admin_email"))) { + return redirect('/index.php?s=admin/login/index'); + } + } + $response = $next($request); + return $response; + } + + public function end(Response $response) + { + + } +} \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/admin/add.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/admin/add.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..2a78a84cb877359dcdcac80282c968aefa79caaf --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/admin/add.phtml" @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/admin/edit.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/admin/edit.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..9ae23ca9bfa87d0eee1ca03b6ddc2046ba712f6a --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/admin/edit.phtml" @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/admin/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/admin/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..8892018be07c8c03cc1806a12adbd6f5ed460168 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/admin/index.phtml" @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/article/add.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/article/add.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..0476ad810762b3a21f17aa1d3162536c9fe46720 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/article/add.phtml" @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/article/edit.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/article/edit.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..0a1a132c4dd4f2b9e8cbaef484c6e1ca6dc79aba --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/article/edit.phtml" @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/article/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/article/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..26d5148fae85ec5de9cafa3267f3c9d7900705ce --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/article/index.phtml" @@ -0,0 +1,86 @@ + + + + + + + + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/category/add.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/category/add.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..92bfe50b05220de050bea2d10b620f642fb3732b --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/category/add.phtml" @@ -0,0 +1,36 @@ + + + + + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/category/edit.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/category/edit.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..88882015c31bdcf158a3b2e600aa98d791e4df0d --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/category/edit.phtml" @@ -0,0 +1,42 @@ + + + + + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/category/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/category/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..19545b9c075f199776fb503d23fe361a7f43de29 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/category/index.phtml" @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/admin/view/comment/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/comment/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..cc7cdbd5581c44f469ee2a3634916d2b67c57107 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/comment/index.phtml" @@ -0,0 +1,94 @@ + + + + + + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/login/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/login/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..6d4a2483acf58bed7eec4848910d243b82f039da --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/login/index.phtml" @@ -0,0 +1,33 @@ + + + + + 登录 + + + +
+
+
+

非常日记后台管理

+
+ +
+

请输入账号和密码

+
+
+
+
+ + +
+
记住我
+ +
+
+ + +
+
+ + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/login/login.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/login/login.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..0e3e1bc699f90c90ae3aee55933a1736322b90d0 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/login/login.phtml" @@ -0,0 +1,6 @@ +前往文章列表页"; +} else { + echo "账户或者密码不匹配。返回登录页"; +} diff --git "a/blog\345\220\216\345\217\260/app/admin/view/login/logout.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/login/logout.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..7aa7f794ba68c17d2c0d1c257c46b96c7f53fa18 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/login/logout.phtml" @@ -0,0 +1,2 @@ +返回登录页"; diff --git "a/blog\345\220\216\345\217\260/app/admin/view/public/footer.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/public/footer.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..070739d8811a91c6fcfad0dfeb8c79f01abc1084 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/public/footer.phtml" @@ -0,0 +1,5 @@ + + + + + diff --git "a/blog\345\220\216\345\217\260/app/admin/view/public/header.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/public/header.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..3de91cd04390d5a51c918255e6c98148fa04297c --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/public/header.phtml" @@ -0,0 +1,36 @@ + + + + + 增加或者修改 + + + + + + + + + + + + +
+ + +
+ +
diff --git "a/blog\345\220\216\345\217\260/app/admin/view/public/tips.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/public/tips.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..b1ed26f5f2a264188dc486359f2aa9894743563e --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/public/tips.phtml" @@ -0,0 +1,9 @@ +返回列表页"; + exit(); +} else { + echo "保存失败,错误信息,请联系管理员:303410541@qq.com"; +} diff --git "a/blog\345\220\216\345\217\260/app/admin/view/public/tips_error.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/public/tips_error.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..02375b161cf8a8fa73bda6e52ffce47e53dd28f7 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/public/tips_error.phtml" @@ -0,0 +1,3 @@ +返回上一页'; diff --git "a/blog\345\220\216\345\217\260/app/admin/view/user/index.phtml" "b/blog\345\220\216\345\217\260/app/admin/view/user/index.phtml" new file mode 100644 index 0000000000000000000000000000000000000000..a3dee9592633bea4e120d526f692e70ce53a6ef3 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/admin/view/user/index.phtml" @@ -0,0 +1,45 @@ + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/model/AdminModel.php" "b/blog\345\220\216\345\217\260/app/model/AdminModel.php" new file mode 100644 index 0000000000000000000000000000000000000000..23de775f19034be30142891c0579493c8d868211 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/model/AdminModel.php" @@ -0,0 +1,29 @@ +toArray(); + } + return $return; + } +} \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/app/model/CommentModel.php" "b/blog\345\220\216\345\217\260/app/model/CommentModel.php" new file mode 100644 index 0000000000000000000000000000000000000000..03f4ecd24fd86a4947bc661b9406e2d335a91549 --- /dev/null +++ "b/blog\345\220\216\345\217\260/app/model/CommentModel.php" @@ -0,0 +1,18 @@ +=7.1.0", + "topthink/framework": "^6.0.0", + "topthink/think-orm": "^2.0", + "topthink/think-multi-app": "^1.0", + "topthink/think-view": "^1.0" + }, + "require-dev": { + "symfony/var-dumper": "^4.2", + "topthink/think-trace":"^1.0" + }, + "autoload": { + "psr-4": { + "app\\": "app" + }, + "psr-0": { + "": "extend/" + } + }, + "config": { + "preferred-install": "dist" + }, + "scripts": { + "post-autoload-dump": [ + "@php think service:discover", + "@php think vendor:publish" + ] + } +} diff --git "a/blog\345\220\216\345\217\260/composer.lock" "b/blog\345\220\216\345\217\260/composer.lock" new file mode 100644 index 0000000000000000000000000000000000000000..0d1f4ccfc363a869d9b77d3bd6abd0d760c5e613 --- /dev/null +++ "b/blog\345\220\216\345\217\260/composer.lock" @@ -0,0 +1,1202 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "af4c1d3fa817eb8c58caa9a7ec0362b0", + "packages": [ + { + "name": "league/flysystem", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-08-23T07:39:11+00:00" + }, + { + "name": "league/flysystem-cached-adapter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-cached-adapter.git", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "league/flysystem": "~1.0", + "psr/cache": "^1.0.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0", + "tedivm/stash": "~0.12" + }, + "suggest": { + "ext-phpredis": "Pure C implemented extension for PHP" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Cached\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "frankdejonge", + "email": "info@frenky.net" + } + ], + "description": "An adapter decorator to enable meta-data caching.", + "support": { + "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues", + "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master" + }, + "time": "2020-07-25T15:56:04+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.18", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2021-01-18T20:58:21+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "topthink/framework", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/top-think/framework.git", + "reference": "db8fe22520a9660dd5e4c87e304034ac49e39270" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/framework/zipball/db8fe22520a9660dd5e4c87e304034ac49e39270", + "reference": "db8fe22520a9660dd5e4c87e304034ac49e39270", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "league/flysystem": "^1.0", + "league/flysystem-cached-adapter": "^1.0", + "php": ">=7.1.0", + "psr/container": "~1.0", + "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "topthink/think-helper": "^3.1.1", + "topthink/think-orm": "^2.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "mockery/mockery": "^1.2", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "autoload": { + "files": [], + "psr-4": { + "think\\": "src/think/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + }, + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "The ThinkPHP Framework.", + "homepage": "http://thinkphp.cn/", + "keywords": [ + "framework", + "orm", + "thinkphp" + ], + "support": { + "issues": "https://github.com/top-think/framework/issues", + "source": "https://github.com/top-think/framework/tree/v6.0.7" + }, + "time": "2021-01-25T14:48:29+00:00" + }, + { + "name": "topthink/think-helper", + "version": "v3.1.4", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-helper.git", + "reference": "c28d37743bda4a0455286ca85b17b5791d626e10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-helper/zipball/c28d37743bda4a0455286ca85b17b5791d626e10", + "reference": "c28d37743bda4a0455286ca85b17b5791d626e10", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\": "src" + }, + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "The ThinkPHP6 Helper Package", + "support": { + "issues": "https://github.com/top-think/think-helper/issues", + "source": "https://github.com/top-think/think-helper/tree/3.0" + }, + "time": "2019-11-08T08:01:10+00:00" + }, + { + "name": "topthink/think-multi-app", + "version": "v1.0.14", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-multi-app.git", + "reference": "ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3", + "reference": "ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/framework": "^6.0.0" + }, + "type": "library", + "extra": { + "think": { + "services": [ + "think\\app\\Service" + ] + } + }, + "autoload": { + "psr-4": { + "think\\app\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "thinkphp6 multi app support", + "support": { + "issues": "https://github.com/top-think/think-multi-app/issues", + "source": "https://github.com/top-think/think-multi-app/tree/master" + }, + "time": "2020-07-12T13:50:37+00:00" + }, + { + "name": "topthink/think-orm", + "version": "v2.0.39", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-orm.git", + "reference": "39a9d0a0e52d9b8bad9d98484d8484cdf5b683a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-orm/zipball/39a9d0a0e52d9b8bad9d98484d8484cdf5b683a7", + "reference": "39a9d0a0e52d9b8bad9d98484d8484cdf5b683a7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-pdo": "*", + "php": ">=7.1.0", + "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "topthink/think-helper": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7|^8|^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\": "src" + }, + "files": [ + "stubs/load_stubs.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "think orm", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/top-think/think-orm/issues", + "source": "https://github.com/top-think/think-orm/tree/v2.0.39" + }, + "time": "2021-02-26T10:20:00+00:00" + }, + { + "name": "topthink/think-template", + "version": "v2.0.8", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-template.git", + "reference": "abfc293f74f9ef5127b5c416310a01fe42e59368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368", + "reference": "abfc293f74f9ef5127b5c416310a01fe42e59368", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "psr/simple-cache": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "the php template engine", + "support": { + "issues": "https://github.com/top-think/think-template/issues", + "source": "https://github.com/top-think/think-template/tree/v2.0.8" + }, + "time": "2020-12-10T07:52:03+00:00" + }, + { + "name": "topthink/think-view", + "version": "v1.0.14", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-view.git", + "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-view/zipball/edce0ae2c9551ab65f9e94a222604b0dead3576d", + "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/think-template": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\view\\driver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "thinkphp template driver", + "support": { + "issues": "https://github.com/top-think/think-view/issues", + "source": "https://github.com/top-think/think-view/tree/v1.0.14" + }, + "time": "2019-11-06T11:40:13+00:00" + } + ], + "packages-dev": [ + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.21", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0da0e174f728996f5d5072d6a9f0a42259dbc806" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0da0e174f728996f5d5072d6a9f0a42259dbc806", + "reference": "0da0e174f728996f5d5072d6a9f0a42259dbc806", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v4.4.21" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-27T19:49:03+00:00" + }, + { + "name": "topthink/think-trace", + "version": "v1.4", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-trace.git", + "reference": "9a9fa8f767b6c66c5a133ad21ca1bc96ad329444" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-trace/zipball/9a9fa8f767b6c66c5a133ad21ca1bc96ad329444", + "reference": "9a9fa8f767b6c66c5a133ad21ca1bc96ad329444", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/framework": "^6.0.0" + }, + "type": "library", + "extra": { + "think": { + "services": [ + "think\\trace\\Service" + ], + "config": { + "trace": "src/config.php" + } + } + }, + "autoload": { + "psr-4": { + "think\\trace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "thinkphp debug trace", + "support": { + "issues": "https://github.com/top-think/think-trace/issues", + "source": "https://github.com/top-think/think-trace/tree/v1.4" + }, + "time": "2020-06-29T05:27:28+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.1.0" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git "a/blog\345\220\216\345\217\260/config/app.php" "b/blog\345\220\216\345\217\260/config/app.php" new file mode 100644 index 0000000000000000000000000000000000000000..8c153135db47557b0fcd01695ed6eaee24cfb701 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/app.php" @@ -0,0 +1,32 @@ + env('app.host', ''), + // 应用的命名空间 + 'app_namespace' => '', + // 是否启用路由 + 'with_route' => true, + // 默认应用 + 'default_app' => 'index', + // 默认时区 + 'default_timezone' => 'Asia/Shanghai', + + // 应用映射(自动多应用模式有效) + 'app_map' => [], + // 域名绑定(自动多应用模式有效) + 'domain_bind' => [], + // 禁止URL访问的应用列表(自动多应用模式有效) + 'deny_app_list' => [], + + // 异常页面的模板文件 + 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', + + // 错误显示信息,非调试模式有效 + 'error_message' => '页面错误!请稍后再试~', + // 显示错误信息 + 'show_error_msg' => true, +]; diff --git "a/blog\345\220\216\345\217\260/config/cache.php" "b/blog\345\220\216\345\217\260/config/cache.php" new file mode 100644 index 0000000000000000000000000000000000000000..a8d69d247be95ccf50446556d71ec782080a56bb --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/cache.php" @@ -0,0 +1,29 @@ + env('cache.driver', 'file'), + + // 缓存连接方式配置 + 'stores' => [ + 'file' => [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + 'path' => '', + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, + // 缓存标签前缀 + 'tag_prefix' => 'tag:', + // 序列化机制 例如 ['serialize', 'unserialize'] + 'serialize' => [], + ], + // 更多的缓存连接 + ], +]; diff --git "a/blog\345\220\216\345\217\260/config/console.php" "b/blog\345\220\216\345\217\260/config/console.php" new file mode 100644 index 0000000000000000000000000000000000000000..a818a9800951114c99173356086b5906b6d2eb4c --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/console.php" @@ -0,0 +1,9 @@ + [ + ], +]; diff --git "a/blog\345\220\216\345\217\260/config/cookie.php" "b/blog\345\220\216\345\217\260/config/cookie.php" new file mode 100644 index 0000000000000000000000000000000000000000..d3b3aab925a32374481749793a5b71fdc3e89569 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/cookie.php" @@ -0,0 +1,20 @@ + 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => false, + // 是否使用 setcookie + 'setcookie' => true, + // samesite 设置,支持 'strict' 'lax' + 'samesite' => '', +]; diff --git "a/blog\345\220\216\345\217\260/config/database.php" "b/blog\345\220\216\345\217\260/config/database.php" new file mode 100644 index 0000000000000000000000000000000000000000..f39318e6dac05ed5e262f5ed8bb32569c0e006e7 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/database.php" @@ -0,0 +1,60 @@ + env('database.driver', 'mysql'), + + // 自定义时间查询规则 + 'time_query_rule' => [], + + // 自动写入时间戳字段 + // true为自动识别类型 false关闭 + // 字符串则明确指定时间字段类型 支持 int timestamp datetime date + 'auto_timestamp' => true, + + // 时间字段取出后的默认时间格式 + 'datetime_format' => 'Y-m-d H:i:s', + + // 数据库连接配置信息 + 'connections' => [ + 'mysql' => [ + // 数据库类型 + 'type' => env('database.type', 'mysql'), + // 服务器地址 + 'hostname' => env('database.hostname', '127.0.0.1'), + // 数据库名 + 'database' => env('database.database', 'blog'), + // 用户名 + 'username' => env('database.username', 'root'), + // 密码 + 'password' => env('database.password', '123456'), + // 端口 + 'hostport' => env('database.hostport', '3306'), + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => env('database.charset', 'utf8mb4'), + // 数据库表前缀 + 'prefix' => env('database.prefix', ''), + + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 是否需要断线重连 + 'break_reconnect' => false, + // 监听SQL + 'trigger_sql' => env('app_debug', true), + // 开启字段缓存 + 'fields_cache' => false, + ], + + // 更多的数据库配置信息 + ], +]; diff --git "a/blog\345\220\216\345\217\260/config/filesystem.php" "b/blog\345\220\216\345\217\260/config/filesystem.php" new file mode 100644 index 0000000000000000000000000000000000000000..965297e8f471c082fb48395c09a1c15753c7c31e --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/filesystem.php" @@ -0,0 +1,24 @@ + env('filesystem.driver', 'local'), + // 磁盘列表 + 'disks' => [ + 'local' => [ + 'type' => 'local', + 'root' => app()->getRuntimePath() . 'storage', + ], + 'public' => [ + // 磁盘类型 + 'type' => 'local', + // 磁盘路径 + 'root' => app()->getRootPath() . 'public/storage', + // 磁盘路径对应的外部URL路径 + 'url' => '/storage', + // 可见性 + 'visibility' => 'public', + ], + // 更多的磁盘配置信息 + ], +]; diff --git "a/blog\345\220\216\345\217\260/config/lang.php" "b/blog\345\220\216\345\217\260/config/lang.php" new file mode 100644 index 0000000000000000000000000000000000000000..59f320ffd7c568df4aeb9ac751de08616268a16b --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/lang.php" @@ -0,0 +1,27 @@ + env('lang.default_lang', 'zh-cn'), + // 允许的语言列表 + 'allow_lang_list' => [], + // 多语言自动侦测变量名 + 'detect_var' => 'lang', + // 是否使用Cookie记录 + 'use_cookie' => true, + // 多语言cookie变量 + 'cookie_var' => 'think_lang', + // 多语言header变量 + 'header_var' => 'think-lang', + // 扩展语言包 + 'extend_list' => [], + // Accept-Language转义为对应语言包名称 + 'accept_language' => [ + 'zh-hans-cn' => 'zh-cn', + ], + // 是否支持语言分组 + 'allow_group' => false, +]; diff --git "a/blog\345\220\216\345\217\260/config/log.php" "b/blog\345\220\216\345\217\260/config/log.php" new file mode 100644 index 0000000000000000000000000000000000000000..ea24ff9d26657863f36b69824896780b6755ca96 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/log.php" @@ -0,0 +1,45 @@ + env('log.channel', 'file'), + // 日志记录级别 + 'level' => [], + // 日志类型记录的通道 ['error'=>'email',...] + 'type_channel' => [], + // 关闭全局日志写入 + 'close' => false, + // 全局日志处理 支持闭包 + 'processor' => null, + + // 日志通道列表 + 'channels' => [ + 'file' => [ + // 日志记录方式 + 'type' => 'File', + // 日志保存目录 + 'path' => '', + // 单文件日志写入 + 'single' => false, + // 独立日志级别 + 'apart_level' => [], + // 最大日志文件数量 + 'max_files' => 0, + // 使用JSON格式记录 + 'json' => false, + // 日志处理 + 'processor' => null, + // 关闭通道日志写入 + 'close' => false, + // 日志输出格式化 + 'format' => '[%s][%s] %s', + // 是否实时写入 + 'realtime_write' => false, + ], + // 其它日志通道配置 + ], + +]; diff --git "a/blog\345\220\216\345\217\260/config/middleware.php" "b/blog\345\220\216\345\217\260/config/middleware.php" new file mode 100644 index 0000000000000000000000000000000000000000..7e1972f5a09c7f09a1801dca6742e1971cc4e26d --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/middleware.php" @@ -0,0 +1,8 @@ + [], + // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行 + 'priority' => [], +]; diff --git "a/blog\345\220\216\345\217\260/config/route.php" "b/blog\345\220\216\345\217\260/config/route.php" new file mode 100644 index 0000000000000000000000000000000000000000..2f4cd12902712b07c826a16d7653399c45184a44 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/route.php" @@ -0,0 +1,45 @@ + '/', + // URL伪静态后缀 + 'url_html_suffix' => 'html', + // URL普通方式参数 用于自动生成 + 'url_common_param' => true, + // 是否开启路由延迟解析 + 'url_lazy_route' => false, + // 是否强制使用路由 + 'url_route_must' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => false, + // 访问控制器层名称 + 'controller_layer' => 'controller', + // 空控制器名 + 'empty_controller' => 'Error', + // 是否使用控制器后缀 + 'controller_suffix' => false, + // 默认的路由变量规则 + 'default_route_pattern' => '[\w\.]+', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache_key' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 操作方法后缀 + 'action_suffix' => '', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', +]; diff --git "a/blog\345\220\216\345\217\260/config/session.php" "b/blog\345\220\216\345\217\260/config/session.php" new file mode 100644 index 0000000000000000000000000000000000000000..c1ef6e16d3d96f671bae7842196338ab0347ca7d --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/session.php" @@ -0,0 +1,19 @@ + 'PHPSESSID', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // 驱动方式 支持file cache + 'type' => 'file', + // 存储连接标识 当type使用cache的时候有效 + 'store' => null, + // 过期时间 + 'expire' => 1440, + // 前缀 + 'prefix' => '', +]; diff --git "a/blog\345\220\216\345\217\260/config/trace.php" "b/blog\345\220\216\345\217\260/config/trace.php" new file mode 100644 index 0000000000000000000000000000000000000000..fad2392d9bba5b6e9aaedf64824bc30560212aee --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/trace.php" @@ -0,0 +1,10 @@ + 'Html', + // 读取的日志通道名 + 'channel' => '', +]; diff --git "a/blog\345\220\216\345\217\260/config/view.php" "b/blog\345\220\216\345\217\260/config/view.php" new file mode 100644 index 0000000000000000000000000000000000000000..f602edee99b12421458261c616465da6e2778f88 --- /dev/null +++ "b/blog\345\220\216\345\217\260/config/view.php" @@ -0,0 +1,25 @@ + 'Think', + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 + 'auto_rule' => 1, + // 模板目录名 + 'view_dir_name' => 'view', + // 模板后缀 + 'view_suffix' => 'phtml', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', +]; diff --git "a/blog\345\220\216\345\217\260/docs/blog.sql" "b/blog\345\220\216\345\217\260/docs/blog.sql" new file mode 100644 index 0000000000000000000000000000000000000000..a81fc9ce9f88bd5d885439120212aea56589c7e5 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/blog.sql" @@ -0,0 +1,139 @@ +/* +Navicat MySQL Data Transfer + +Source Server : 127.0.0.1 +Source Server Version : 50730 +Source Host : 127.0.0.1:3306 +Source Database : blog + +Target Server Type : MYSQL +Target Server Version : 50730 +File Encoding : 65001 + +Date: 2021-07-20 10:00:09 +*/ + +SET FOREIGN_KEY_CHECKS=0; + +-- ---------------------------- +-- Table structure for admin +-- ---------------------------- +DROP TABLE IF EXISTS `admin`; +CREATE TABLE `admin` ( + `admin_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增长', + `admin_name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名 ', + `admin_email` varchar(100) NOT NULL DEFAULT '' COMMENT '用户邮箱,登录账号', + `admin_password` varchar(100) NOT NULL DEFAULT '' COMMENT '用户密码', + `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', + `add_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '增加时间', + PRIMARY KEY (`admin_id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of admin +-- ---------------------------- +INSERT INTO `admin` VALUES ('1', '上帝打手', '303410541@qq.com', 'ba3de1965adbe5d9396279ca02e44b27', '1617863686', '1617001766'); +INSERT INTO `admin` VALUES ('2', '小黑', '110@qq.com', '270ee9520713030acb7b5ff17d15ae43', '1617863771', '1617863771'); +INSERT INTO `admin` VALUES ('3', 'Turakio', '1250205160@qq.com', 'ba3de1965adbe5d9396279ca02e44b27', '1617863771', '1617863771'); + +-- ---------------------------- +-- Table structure for article +-- ---------------------------- +DROP TABLE IF EXISTS `article`; +CREATE TABLE `article` ( + `article_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `category_id` int(11) NOT NULL COMMENT '所属分类', + `article_title` varchar(45) NOT NULL COMMENT '标题', + `cover_image` varchar(1024) NOT NULL DEFAULT '' COMMENT '封面图', + `intro` varchar(200) NOT NULL COMMENT '文章简介', + `content` longtext NOT NULL COMMENT '文章内容', + `update_time` int(11) NOT NULL COMMENT '更新时间', + `add_time` int(11) NOT NULL COMMENT '增加时间', + PRIMARY KEY (`article_id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COMMENT='文章表'; + +-- ---------------------------- +-- Records of article +-- ---------------------------- +INSERT INTO `article` VALUES ('3', '1', '马斯克暗示特斯拉可能已清仓所持比特币', 'https://img.36krcdn.com/20210517/v2_e7f5de58848b4550865f599b3939d821_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '马斯克似乎还在努力推销狗狗币', '

编者按:本文来自网易科技,36氪经授权发布。

\r\n

5月17日消息,美国当地时间周日下午,特斯拉首席执行官埃隆·马斯克(Elon Musk)在Twitter上暗示,这家电动汽车制造商可能或已经出售了其持有的所有比特币。这导致这种加密货币价格下跌约8%,至每枚44000美元左右。

\r\n

\r\n

\"\"

\r\n

名为@CryptoWhale的Twitter用户说:“下个季度,当比特币投资者发现特斯拉抛售了他们剩余的比特币资产时,他们可能会自扇耳光。不过鉴于马斯克受到的仇恨如此之多,我不会因此而责怪他!”马斯克回答说:“的确是这样。”

\r\n

就在几天前,马斯克表示,该公司计划继续持有而不是出售现有的比特币,并打算一旦比特币采矿转向可持续能源,就将继续进行交易。特斯拉没有立即回复置评请求。

\r\n

马斯克始终是加密货币的高调支持者,在过去一年里几次帮助推动包括比特币在内的加密货币价格上涨。在2月份提交给美国证券交易委员会(SEC)的文件中,特斯拉透露,它购买了价值15亿美元的比特币。该公司后来表示,第一季度从比特币销售中获得1.01亿美元净收益,帮助将该季度净利润推高至创纪录水平。

\r\n

\r\n

\"\"

\r\n

然而,最近几周,马斯克似乎改弦易辙,转而支持另一种加密货币“狗狗币”。特斯拉上周还“暂停接受比特币支付购买车辆”,原因是担心“用于比特币开采的化石燃料迅速增加”。在马斯克宣布这个消息后一分钟,比特币价格就下跌了约5%。

\r\n

自那以来,马斯克多次在Twitter上回击那些批评其加密货币立场的用户。联合广场风险投资公司创始合伙人、知名风险投资人弗雷德·威尔逊(Fred Wilson)炮轰称:“马斯克在玩游戏,但我们很难认真对待这样做的人。在过去的一年里,这让我失去了对他的尊重。”

\r\n

马斯克似乎还在努力推销狗狗币,他旗下的太空公司SpaceX上周宣布,将接受狗狗币作为发射“Doge-1登月任务”的报酬。他的背书帮助推高了这款加密货币的价格。

\r\n

加密货币交易平台Coinbase表示,将在未来六到八周内提供“狗狗币”。在散户投资者中颇受欢迎的其他交易平台,如Robinhood和Binance,都已经允许用户交易狗狗币。

', '1621216053', '1618192197'); +INSERT INTO `article` VALUES ('4', '1', '东芝遭遇野蛮人,日本顶级豪门十年大溃败', 'https://img.36krcdn.com/20210517/v2_f4066860df564b8fa6d1510991df5096_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '日本半导体存储独苗惨遭收割。', '

编者按:本文来自微信公众号“资本侦探”(ID:deep_insights),作者:周永亮,36氪经授权发布。

\r\n

曾经的“日本之光”东芝,正遭遇“野蛮人”敲门。

\r\n

近日,欧洲PE(私募股权公司)巨头CVC资本突然提议私有化东芝,整笔交易的价格达到207亿美元。根据CVC的提议,其将以每股5000日元的价格私有化东芝,并计划最早在2021年10月将东芝从东京证券交易所退市。

\r\n

对于此次收购要约,东芝董事会主席永山治表示,CVC是不请自来,“最初的提议完全是非邀约的,不是东芝提出的”。同时,他还称,CVC提出的要约缺乏实质内容,需要谨慎考虑,接下来将考虑成立一个由外部董事组成的独立委员会。

\r\n

这是2013年以来PE发起的全球最大并购案,也是针对日本企业的又一次收购。根据彭博数据,私募股权公司过去12个月对日本企业公布的收购交易总额达到151亿美元。

\r\n

闻到了“血腥味”,其他资本巨鳄开始围了过来。据悉,除了CVC,美国私募股权公司贝恩资本、KKR & Co、Brookfield、Japan Investment Corp(JIC)和Norinchukin Bank也在考虑竞购东芝。

\r\n

作为曾经日本制造代表的东芝,它是如何沦落到如此局面?它的未来在哪里?

\r\n

“猎物”东芝

\r\n

东芝之所以被盯上,主要是最近几年业务深陷困境,股价持续低迷,股东对管理层的信任下降,俨然是一个“落魄豪门”。

\r\n

财报显示,2019财年(2019年4月-2020年3月),东芝营收下滑8.2%至3.39万亿日元,仅相当于2014年巅峰时(接近7万亿日元)的一半。营业利润年增268%至1305亿日元,净亏损1146.3亿日元(约10.5亿美元);2020财年(2020年4月至2021年3月)净利润扭亏为盈,达到1139亿日元,但这主要是集团公司的股份出售收益做出了贡献。

\r\n

目前,东芝旗下有六大业务板块,具体产品包括核电、水电、城市供水、污水处理、高铁、功率芯片、通讯芯片、硬盘等等。

\r\n

其中,东芝旗下40%的铠侠(KIOXIA)股份,是最优质的资产,也是PE们最看重的“肥肉”。2019年,东芝储存器业务独立运作,并更名为铠侠。截止2021年,贝恩资本持铠侠49.9%的股份,东芝持有40.2%股份。

\r\n

目前,铠侠是全球第8大半导体制造商,NAND闪存的第二大制造商,拥有近一万名员工。此前,美国半导体企业美光科技和西部数据曾提出收购铠侠,当时将铠侠的企业估值定为300亿美元规模。以此计算,东芝持有的铠侠股份价值约120亿美元。

\r\n

值得注意的是,如果此次东芝的交易中,任何一家同业企业将铠侠吞并,都将引起市场格局的巨变。目前闪存领域两大主要市场NAND Flash和DRAM中。其中,DRAM被三星、海力士、美光三巨头掌控了超过九成的份额。

\r\n

相比之下,NAND市场还比较分散,由六大核心厂商掌控99%的份额。根据TrendForce集邦咨询的研究数据,2020年四季度,三星以46.44亿美元位居龙头,市占率达到32.9%。其次就是铠侠的27.49亿美元,市占率为19.5%,紧随其后的西部数据、SK海力士、美光、英特尔分别占据14.4%、11.6%、11.2%、8.6%的份额。

\r\n

关于东芝的未来走向,将由多方势力的博弈结果来决定,包括收购方、股东方、管理层以及日本政府。

\r\n

从目前来看,管理层更希望保持东芝的上市公司地位,目前已经展开了一系列动作。4月14日,东芝公司一方面对外宣布,社长兼CEO车谷畅昭于当日辞职,且立即生效。与此同时,东芝前社长兼CEO纲川智重新担任这两项职位。

\r\n

据了解,车谷畅昭之所以辞职,是因为东芝管理层在CVC潜在的收购交易上出现了分歧。东芝官方的解释是,因为CVC是英国公司,而东芝拥有核能、国防业务等与国家安全有关的业务,导致部分现有股东对这次收购存在质疑和反对。

\r\n

值得一提的是,车谷畅昭作为东芝史上为数不多的“空降”社长兼CEO,他的前东家就是CVC。

\r\n

另一方面,日媒爆出,东芝高层紧急给日本各大金融机构打了招呼,要求它们不要为CVC的并购行动提供资金。据称东芝高层还试图游说日本政府,以阻止对东芝的收购。

\r\n

不容忽视的是,虽然管理层极力反对,但股东方的“松动”,给这场收购战增添了新的变量。

\r\n

4月下旬,东芝第二大股东新加坡私募股权投资公司3D Investment Partners,公开致信东芝董事会,要求就出售进行一次全面的评估,并敦促东芝管理层收起对收购的敌视态度,以免吓退潜在的投资者。

\r\n

截至目前,收购方虽未曝出新的动作,但各种操作应该也在紧锣密鼓地进行中。日本政府方面,内阁官房长官加藤胜信,此前拒绝就东芝交易谈判发表评论,但表示任何外国公司的收购都需要相关批准。

\r\n

据了解,东芝涉及能源业务,铠侠作为日本仅存为数不多的存储芯片厂商,对日本的战略意义较为重要,所以这笔收购还需要经过日本政府审核。

\r\n

“日本之光”暗淡

\r\n

如今落魄的东芝,曾是日本战后工业发展的楷模和名片。

\r\n

东芝创立于1875年7月,曾造出了许多个日本和全球第一:日本的第一个电灯泡、第一台晶体管电视、第一台冰箱、第一台DVD等,以及全球第一台笔记本电脑、全球首款彩色视频电话等等。

\r\n

辉煌时期,东芝的经营范围涵盖制造、发电、核能、半导体、基建、家电、计算机、家电等诸多领域。其中,半导体和笔记本业务分别位列世界第二,曾东芝与夏普、松下合称日本白电三巨头,风光一时无两。

\r\n

但在1990年代,日本经济泡沫破裂,进入了长期的低迷时期,被称为“失去的20年”。与此同时,中国制造开始冲击日本企业。

\r\n

对此,日本企业的应对是,逐步退出消费品领域,转战产业链上游的高端材料、高价值部件,希望成为持有高端技术的“隐形巨头”——比如,索尼收购了美国医疗诊断设备研发公司,利用在数字家电领域培育起来的独有技术开拓医疗市场;日立则在发电和发电控制系统、半导体生产设备、高性能材料等领域发力;京瓷则发力热敏电阻内置晶体、晶振等手机零部件。

\r\n

\r\n

在这个过程中,东芝“押注”核能和通信等领域,这也为它的败落埋下了伏笔。

\r\n

2006年1月,东芝从英国核燃料公司那里收购了美国核电技术企业西屋公司(WEC),出价54亿美元,这个价格是当时市场预期(18亿美元)的三倍。随后,东芝又通过两次收购(分别花费16亿美元和1.57亿美元),实现了对西屋电气的全资控股。这也意味着,东芝为西屋电气花费了大约72亿美元。

\r\n

东芝之所以高价收购西屋,主要是基于三大利好预期:一是日本政府支持,二对中国和全球核电未来前景的预期,三是技术考量,西屋的AP1000第三代压水堆技术(PWR)更受中国市场的重视。

\r\n

但2011年的“黑天鹅事件”——福岛核事故,成为东芝由盛而衰的第一个转折点。

\r\n

因为福岛第一核电站所用的机组自东芝,核事故发生后,不少已经到手的订单取消,东芝再去很多新兴市场国家开拓核电市场难上加难。

\r\n

据了解,当时日本暂时关闭了境内全部核电站,全球范围内核电站业务发展速度骤减,已经拿到的美国8基待建核电站中,有4基中止,而其他国家也都陆续暂停了核电站的计划。剩下的8基,也全部推迟建设进度。

\r\n

\r\n

福岛第一核电站

\r\n

图源网络

\r\n

随后,为了管控分歧,减少交易成本,东芝在2015年购了另一家美国CB&I公司的核电业务子公司,成为此次“核电门”事件的“导火索”。不断膨胀的建设费用非但没有得到控制,反而使东芝公司被“深度套牢”,核电业务出现大幅亏损。

\r\n

据东芝数据显示,自2015年实施并购后,西屋电气负债总额不降反升,最后攀升至98亿美元,资不抵债。

\r\n

在当时那个节点,东芝为了维护自身形象,并未向投资者披露自身状况,反而企图通过财务造假来“瞒天过海”。

\r\n

但最终“纸还是包不住火”,2015年4月东芝承认财务造假。从2008年到2014年底,东芝虚报了2248亿日元(约120亿元人民币)的税前利润,超过了这七年间税前利润的三成。在这期间,有三任社长参与。

\r\n

消息传出,东芝形象也一落千丈,从“日本骄傲”成了“日本之耻”,股票暴跌40%左右。

\r\n

在此后的相当长时间里,东芝一直在持续推进重组,出售包括电梯、家电、电视、医疗等非核心资产。

\r\n

其中,最重要的三笔出售是:

\r\n
    \r\n
  • 2016年3月,东芝以6655亿日元(近60亿美元)出售旗下的医疗设备供应业务给佳能;

  • \r\n
  • 2017年,东芝将NAND Flash业务出售给美国私募股权公司贝恩资本牵头的财团,交易价格180亿美元;

  • \r\n
  • 2018年初,东芝以46亿美元将西屋电气出售给Brookfield。

  • \r\n
\r\n

但这依旧未能止住东芝下滑的态势,如今它已经从日本综合机电企业的阵营中“掉队”了。

\r\n

目前,围绕东芝的并购大战,正在紧锣密鼓地展开,最终的结局还无法预料。作为曾经的日本骄傲,东芝为何短短10年间就沦落至此?除了唏嘘,这背后深层的原因更值得深思。

', '1621218105', '1621218105'); +INSERT INTO `article` VALUES ('5', '1', '微信小程序要干掉第三方软件?', 'https://img.36krcdn.com/20210517/v2_85dba7b4beae41ed9c8a00a45885bf78_img_png?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '微信宣布将在5月19日后停止小程序打开APP的服务。', '

编者按:本文来自微信公众号“雷科技”(ID:leitech),作者:TSknight,36氪经授权发布。

\r\n

5月14日,微信的开放社区发布了新一期的社区每周公告,一则普通的公告确实引起了许多人的关注,因为在公告标题中就赫然写到“不再提供小程序打开App技术服务”。

\r\n

\r\n

What?

\r\n

微信小程序不能跳转App了?

\r\n

我想不少开发者看到这个公告,第一时间的想法都懵逼的,不再提供App跳转服务对于一些小型App来说,无疑对其宣传和下载带来明显的阻碍。而且,某种程度上来说也会让用户有些不方便,那么微信为什么要关闭这项服务?

\r\n

微信给出的理由也很简单:收到大量用户投诉、开发者滥用接口能力、严重影响了小程序用户体验,言简意赅地就将“死刑”理由交代清楚。

\r\n

小程序跳转App被滥用了吗?

\r\n

当年张小龙提出小程序的时候,许多人都认为这会是微信的又一大创新和亮点,不过在小程序推出的初期,人们并不待见这个功能,用户觉得小程序不好用,功能少而且经常崩溃,开发者觉得小程序在分流App的流量,降低了用户对App的依赖度,在给小程序版本做开发优化的时候也往往是不情不愿的。

\r\n

但是,微信作为超越了QQ的国民级聊天软件,如果想要硬推某个功能,那么是肯定能够成功的,随着腾讯对小程序的不停优化,以及开放各种分享、跳转接口。小程序也逐渐被不少人所接受,现在更是成为了许多餐饮行业、娱乐行业的得力助手,想必大家都体验过微信扫一扫点单吧?

\r\n

\r\n

不得不说,一些简单的功能和轻量化的需求,在微信小程序上已经能够拥有很好地体验,大多数情况下我们甚至不用打开App就能够享受到那个App的大部分功能。虽然对于App的开发者来说自己的App流量变少了,但是公司的整体业务范围却是扩大了不少,所以最终大部分开发者都愿意接入到小程序的生态中。

\r\n

不过,即使如此也还是有着不少的开发者希望能够将流量最终引导到自己的App中,毕竟不管是做年度汇报还是工作报告,App的下载量、使用率都是实打实地KPI。

\r\n

需求有了,该如何实现?很简单,通过小程序的跳转接口,让用户在使用小程序的时候会自动跳出一个跳转窗口,并且提示用户跳转后可以获得更好的体验即可,至于会影响用户的使用体验?这个问题并不在程序员的考虑范围内。

\r\n

\r\n

小雷举两个例子,同是购物软件,以京东购物为例,点击朋友分享的购物链接进入小程序后,全程浏览下来基本上不会自动弹出跳转提示窗口。整个浏览的过程与在京东App上浏览几乎一样,体验相当出色,甚至连点击购买都可以直接进入到付款下单页面,京东几乎把所有的基础功能都完美地复刻到了微信上。

\r\n

\r\n

但是,如果是程序员在小程序中滥用跳转接口,体验就会大不相同,往往只是想往下拉到商品介绍页面看看详情,突然弹出的跳转窗口就会挡在屏幕中央,让整个浏览过程都产生了严重的割裂感。至少小雷以前在使用的时候,往往都十分厌烦这样的窗口,毕竟我又不是真的想要购买,为何非要我打开App?

\r\n

\r\n

还有一些新闻类、短视频类软件,也是跳转接口滥用的重灾区,文章看到一半,询问你是否跳转;视频看到一半,硕大的窗口就挡在中央,导致实际的体验相当差。当然,小雷能够理解开发者和运营者的苦衷,但是为了KPI而破坏用户体验,真的值得吗?

\r\n

小雷认为是不值得的,毕竟没有什么软件是真正无法代替的,如果你给不到用户好的体验,用户往往就会选择用脚投票的方式离开你的App。要知道,小程序同样代表着你们App的脸面,如果小程序都无法给用户带来良好的体验,那么又如何让用户相信你们的App可以给到更好的体验呢?

\r\n

\r\n

而且,微信也对此做出了解释:“以上行为,违反了《微信小程序平台运营规范》5.15,属于滥用接口能力行为,微信小程序应当合法、合规、正当、善意地使用腾讯提供的各项功能、接口和能力等,使用时应当遵循微信小程序相关的协议规则,保护微信用户和其他第三方的合法权益,并符合腾讯对微信小程序所提倡的各项要求和建议。不得自行或协助他人滥用、不正当使用、非善意使用上述功能、接口、能力等。”

\r\n

同时,因为小程序是微信的一部分,用户往往还会迁怒到微信身上,即使在某种程度上来说这与微信本身毫无关系,躺着也中枪的感觉我想没有人会喜欢。

\r\n

一刀切往往不是最好的办法

\r\n

随着小程序生态的扩大、丰富,对于类似的滥用行为肯定会被微信所重视,并且出手解决的。所以,对于微信会封禁相关接口的决定,小雷并不感到意外,但是,留给开发者的时间如此紧迫且如此决绝,确实是让人有点意外。

\r\n

5月14日的公告,5月19日关闭,留给开发者的时间只有短短的5天,考虑到15、16是周末,实际的工作日更是只有3天,时间之紧迫,恐怕能够让不少的开发者暗地里骂娘。

\r\n

\r\n

微信如此快速的收回App跳转接口,让小雷突然想到了之前流传的关于淘宝特价版和淘宝的小程序即将登陆微信的消息,在经过多年的争斗后,阿里巴巴终究是与腾讯和解了,但是,显然微信并不想成为阿里巴巴为App引流的桥梁。

\r\n

不过,相比起这个阴谋论,提升用户体验应该才是微信的主要目的,同时也能够更好的将流量留在微信中,毕竟是商业公司,如此做法倒也无可厚非。

\r\n

但是,小雷依然觉得,微信没有必要做的如此决绝,依然可以考虑给一些表现良好的小程序留下跳转App的接口,或者是给予用户一个选择的权力,在小程序的设置中加入是否允许小程序跳转App的开关。

\r\n

毕竟,虽然小程序的功能已经十分完善,但是在稳定性、功能等方面依然是无法与App媲美,用户有时候也会希望能够直接通过分享页面进入到App中了解更详细的信息。单就小雷个人来说,有时候就是单纯的不想再输入一遍账号密码在小程序中完成登录,直接跳转到已经处于登录状态的App中无疑会省下不少功夫。

\r\n

\r\n

不过,现在看来微信收回权限已经是既定事实,基本上不会进行更改,至少在未来的小程序使用过程中,我们不用再被烦人的跳转弹窗骚扰了。

\r\n

结语

\r\n

微信关闭跳转App的接口,出发点肯定是为了用户的体验,这点小雷觉得是无可厚非的,但是对于开发者来说,也许并不愿意见到这样的一刀切政策。

\r\n

毕竟除了少数不遵守平台规范的开发者,大部分的开发者在遵守规则方面还是做的不错的,一棒子打死难免有些不讲情义。

', '1621219251', '1621219251'); +INSERT INTO `article` VALUES ('6', '21', '《武林外传》的15年,也是传统情景喜剧衰落的15年?', 'https://img.36krcdn.com/20210517/v2_4b51918b56ab46dbbccc523f82cb7b51_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '“嗨,兄弟!我们好久不见你在哪里?”', '

编者按:本文来自微信公众号“全媒派”(ID:quanmeipai),作者:郭雪梅,36氪经授权发布。

\r\n

今年年初,央视网原创视频栏目“小央视频”在B站24小时轮播《武林外传》,在线观看人数一度冲到了130多万,网友们在弹幕里将各种陈年老梗玩得不亦乐乎

\r\n

作为国内古装类情景喜剧的“巅峰”,《武林外传》于2006年1月首播。剧情围绕着“同福客栈”里的一群年轻人展开,女掌柜佟湘玉、“盗圣”白展堂、女侠郭芙蓉、张口“子曰”的吕秀才、想当捕快的厨师李大嘴、小小年纪已是衡山派掌门的莫小贝……这部没有腥风血雨的江湖传奇,曾在欢笑和泪水中陪伴一代人成长,如今又成为了新一代年轻人的下饭神器。

\r\n

自90年代初《编辑部的故事》《我爱我家》等情景喜剧在国内取得不错反响之后,《闲人马大姐》《炊事班的故事》《家有儿女》等一系列国产情景喜剧纷至沓来。

\r\n

\r\n

《我爱我家》剧照。

\r\n

多聚焦家庭、职场的现代情景喜剧潮流下,《武林外传》披着古装的外衣,既制造了一个新鲜的情景空间,又通过古代叙事隐射现代真实的方式获得了更广泛的喜爱。

\r\n

作为一部成功的经典作品,电视剧《武林外传》有哪些魔力?今天的年轻人为何还会被这样一部老剧吸引?而在《武林外传》之后,国产情景喜剧的声势为何逐渐缩小?本期全媒派(ID:quanmeipai)聚焦情景喜剧话题,以《武林外传》15年为契机,探讨国产情景喜剧的盛衰发展、未来变势。

\r\n

《武林外传》契合了情景喜剧哪些套路?

\r\n

情景喜剧作为一种受欢迎的电视剧形态,在美国早已有九十年的历史。中国情景喜剧作为舶来品,尽管比美国晚了七十多年,但发展很快。从1992年的《编辑部的故事》开始,国产情景喜剧在短短二十几年内不断推陈出新。

\r\n

而相比于美国知名的情景喜剧《老友记》(Friends)和《生活大爆炸》(The Big Bang Theory),《武林外传》依靠它更贴合中国本土网络特征的表达方式走红,对于国内情景喜剧的发展起到了承前启后的作用。

\r\n

后现代的喜剧解构和文本挪用

\r\n

熟悉《武林外传》和周星驰喜剧风格的观众,在观看《武林外传》时或许会有穿越到《大话西游》场景中的错觉。的确,《武林外传》的搞笑风格和《大话西游》系列作品有些类似。

\r\n

首先,是两者对于经典和规则颠覆的认同,《大话西游》解构了《西游记》的严肃和禁欲,《武林外传》则是传统武侠叙事的颠覆。它“巧妙地编织了一个‘反武侠’的武侠喜剧,并在主流意识、市民伦理和知识分子心态之间,实现了有效的符码重组”。[1]

\r\n

剧中既有佟掌柜代表的生意人,又有白展堂代表的小偷、郭芙蓉所代表的侠客、吕秀才代表的文艺青年等,而他们的身上,却又散发着更多元的人物性格和品质,本不该成为一个集合的群体关系在一家客栈交错,因为身份不同、观念不同所引发的各个故事则成为了喜剧效果的源泉

\r\n

\r\n

“掌柜的”正在讲她的人生哲学。图片来源:《武林外传》

\r\n

其次,《武林外传》解构了“武林”一词。在七侠镇的同福客栈,你可以见到各式各样的“武林中人”,例如剧中的莫小贝,她先是“衡山派掌门”,后又拿到“五岳盟主”的称号。在将小偷、捕快、厨子这些人物中心化的过程中,《武林外传》一点也不“武林”的设计重塑了原本庄严肃穆的江湖神话。

\r\n

当然,《武林外传》的喜剧风格不仅体现在它对于后现代解构的使用当中,文本挪用也是其独特的喜剧表达源泉。

\r\n

比方说主角们颇有深意的名字,模仿《神雕侠侣》中郭芙的郭芙蓉、模仿《楚留香传奇》中左轻侯的吕轻侯,再比方说剧中角色对各种现代常用网络语或英文的使用等,都是对现代社会知名文本的挪用和改编,恰好也是对“武林”一词解构的延续。

\r\n

\r\n

将英文当喜剧包袱使用。图片来源:《武林外传》

\r\n

而这样的解构和挪用后来还被用在各类情景喜剧中,例如《爱情公寓》中的《无间道》《决战紫禁之巅》等经典复现桥段,情景喜剧在将影视“降格化处理”的过程中,完成了自己风格的确立。

\r\n

“欢乐+N”种生活哲学

\r\n

幽默是一种智慧,开心是一种财富。情景喜剧尽管以抖包袱、惹人笑为核心命题,但如果单纯是一个搞笑的剧集,也就不会有反复看了12遍、在豆瓣小组分享观后感、在B站刷弹幕的网友了。

\r\n

不管是早期以家庭故事为核心的情景喜剧,还是后面不断延伸出的职场类情景喜剧,它们的中心要义是展现生活、解剖生活。

\r\n

在《武林外传》中既有挑大梁的职场女性佟湘玉、有试图通过努力考上“公务员”的吕秀才、也追寻人生自由梦的大小姐郭芙蓉,他们巧妙且鲜明地展现出当下时代的人物困境,观众既是看他们,也是看自己。

\r\n

\r\n

台词在现在看来依然受用。图片来源:《武林外传》

\r\n

而剧中夹杂着的郭芙蓉和吕秀才、佟湘玉和白展堂的恋情更是成为了现实中多样的爱情模板。佟湘玉和莫小贝的亲情、同福客栈掌柜和伙计们的友情也在不断地演绎中深化和延伸为现实中的关系处理。

\r\n

就像另一部经典情景喜剧《家有儿女》一样,孩子和家长的周旋、兄弟姐妹之间的羁绊在欢乐的故事中深刻地反映出来。生活是苦闷的,但也可以是快乐的。

\r\n

固定情景中的不固定

\r\n

里德(Reed)在所编的《电视、电缆和录像百科全书》一书中,曾对情景喜剧做出如下描述:每周30分钟的故事,分为三小节,每小节8分钟(另外6分钟为广告)。第一节创设场景,第二节矛盾复杂化,第三节喜剧式地解决矛盾。[2]

\r\n

从中我们可以看到“情景”(“场景”)在情景喜剧中的关键作用:所有故事只有建立在特定的情景中,才能继续下去。

\r\n

但正如我们所知,情景喜剧是最不重视更换情景的,一成不变仿佛是它的特色。

\r\n

但事实上,这样的情景布置反而会带来特别的观众体验,即制造固定情景中不固定的情感延伸。譬如《老友记》中央公园复刻咖啡馆,在剧中咖啡馆场景中固定出现的长沙发,成为人们打卡最爱的区域。

\r\n

\r\n

《老友记》中央公园咖啡馆的长沙发。

\r\n

同时,情景喜剧重语言输出的特质本身就会减少人们对于情景的关注,情景多是背景,充当营造氛围的作用。 

\r\n

情景喜剧的情景相比其他类型剧而言,它又不限于固定的想象,在展示的情景之外,观众永远能凭借只言片语脑补出其他的画面,真正将情景的打造交给观众。

\r\n

黄金时代落幕,传统情景喜剧辉煌不再?

\r\n

2011年《武林外传》电视剧开播5年之际,《武林外传》大电影上映。电影版票房破亿,在当年的电影市场表现算不错的。不过,从口碑上来看,豆瓣上对于电影版《武林外传》近8万的三星评分,也可以看到大家对于《武林外传》5年后交出的番外并不是很满意。

\r\n

\r\n

\r\n

上图为电视版《武林外传》评分,下图为电影版《武林外传》评分。图片来源:豆瓣

\r\n

不仅仅是《武林外传》一部情景喜剧口碑如此,豆瓣8分出道的《爱情公寓1》在之后的几部作品中也不断受到观众对剧情原创性的质疑。

\r\n

而2013年全新阵容的《武林外传》姊妹篇《龙门镖局》、2019年《武林外传》儿童版《天真派:武林外传》也都不复当年之勇,没有激起太大水花。

\r\n

回顾这几年算得上大制作的电视剧,几乎已经没有情景喜剧的身影。反而是像《武林外传》《编辑部的故事》等剧的片段不断作为短视频或表情包在网络上出现。

\r\n

那么,是国产情景喜剧繁荣不再还是另有原因?

\r\n

情景喜剧进入“网生时代”,碎片化演绎占主流

\r\n

在2010年左右,除了上述国产情景喜剧的不断出现,伴随手机端观影时间的增多,新兴的网络情景喜剧应运而生。其中最突出的代表是2012年搜狐视频推出的自制喜剧《屌丝男士》,由于其广泛的关注度,随后《万万没想到》《极品女士》等类似作品也开始涌现。

\r\n

网络情景喜剧对于传统情景喜剧带来冲击,这是毋庸置疑的。一方面,网络情景喜剧的短时长契合了互联网时代人们的观影习惯,相比于每集45分钟的《爱情公寓》,《屌丝男士》每集的时长只有13分钟,《万万没想到》则只有5分钟左右。

\r\n

另一方面,这些网络情景喜剧的选题通常都紧跟时事热点、贴近互联网原住民的心理。像《屌丝男士》《废柴兄弟》这样的剧名,本身就传递了当时极其热门的网络流行亚文化。

\r\n

但这些情景喜剧短时长、迎合年轻人的制造逻辑却也产生了不少问题。首先,短时长带来的碎片化演绎必然会降低故事的完整感,用5分钟讲出《武林外传》一集47分钟的丰盈故事,必然是天方夜谭。因此爆款常有,但经典难寻。

\r\n

其次则是为了迎合部分受众心理而不断出现的恶俗情节。由于在观看情景喜剧的过程中,人们多希望生活压力得到释放,这不免会导致编剧使用一些低俗的段子和笑料来吸引受众。

\r\n

而在网络情景喜剧充当年轻人减压阀的过程中,传统情景喜剧则因为其滞后的段子和冗长的剧情,让自己无路可走、无路可退。

\r\n

创作门槛降低,群创情景喜剧进入主流市场

\r\n

琼斯·杰拉德曾经这样描述情景喜剧,他说:“情景喜剧是流水线生产的产品,是一件大众消费的商品。”[3]

\r\n

在当下的互联网空间,这样的认知开始变成现实。而同时,技术的发展首先释放了情景喜剧的生产力,更多PUGC和UGC内容出现。

\r\n

比如,依靠抖音、快手等短视频平台的崛起,许多素人开始自创情景喜剧,化被动为主动,将他们自身的喜剧天赋挖掘出来,从观看喜剧的观众转变为喜剧创作者,获得了不错的流量和知名度。而在群创情景喜剧发展不断上扬的态势下,注意力进一步瓜分,投资传统情景喜剧的热情在消减,市场回报存疑。

\r\n

越经典的情景喜剧反而越年轻?

\r\n

尽管网络上的情景喜剧越来越多,在数量上可能早就超过了十年前,但情景喜剧这个门类的确已经很久没有出过大爆款,这一影视剧类型,在各种都市现实题材、耽改题材、悬疑题材和爽剧题材的轮番刷屏下,正在边缘化。

\r\n

可神奇的是,播出15年的《武林外传》,依然是当代年轻人反复观摩的对象;B站上,弹幕溢出屏幕的《武林外传》短视频比比皆是;微博上,时不时出现一些用《武林外传》轻松蹭到的热点;豆瓣小组里的“武林外传十级学者”,已经达到3万人。

\r\n

著名粉丝文化研究者亨利·詹金斯强调了粉丝所特有的创作热情,他们俨然成为了一个个“文本盗猎者”,而像《武林外传》这样的传统情景喜剧,正是在“欢乐+N”模式的生活哲学以及情景想象的不固定中天然给予了粉丝无穷的创作空间。

\r\n

\r\n

图片来源:《武林外传》

\r\n

而且,它们铸造的影视记忆具有连续性、持久性,不需要喜剧综艺那样每期来新嘉宾,也不一定要贴合时事热点、段子热梗来设计剧集走向。

\r\n

无论是表情包、热门话题、流行梗还是各种二次创作的短视频,它们的层出不穷都在说明,经典情景喜剧非常契合当下的碎片化消费需求。剧中频密的笑点、金句和对现实话题的映射等,很容易引发现实中观众的共鸣。

\r\n

可以说,越经典的情景喜剧也就获得了越长的生命力,在一幅幅完整的情景喜剧画卷中,人们流连忘返于那些悲喜交加的情感叙事,面对网络时代的速食内容消费,传统情景喜剧讲述的具有层次感的大事小事,让它们能在新的时代继续散发魅力。

\r\n

今日互动

\r\n

15年后的《武林外传》依然深受观众喜爱,你是它的粉丝吗?你觉得《武林外传》作为一部情景喜剧,最大的特色是什么?你如何看待如今情景喜剧的短视频化、碎片化?欢迎在评论区分享你的观点~

\r\n

参考链接:

\r\n

1.房伟.文化按摩:在没有侠客的江湖——二十一世纪中国语境下《武林外传》的影像世界[J].南方文坛.2007,(05):87-91

\r\n

2.彭启贵.美国情景喜剧探源[J].中国电视.2006,(05):76-80

\r\n

3.蒋伟.从《我爱我家》到“互联网+”看中国情景喜剧的风格特色[J].名作欣赏. 2016,(36): 172-174

\r\n

4.王玉娇,王斌.互联网视域下情景喜剧的创作困境与出路[J].戏剧之家. 2016,(23):86-88

', '1621219366', '1621219366'); +INSERT INTO `article` VALUES ('7', '21', '大热的剧本杀,以及风口上的沉浸经济', 'https://img.36krcdn.com/20210516/v2_a63f06d5c1274ea789f0378d2372f0bb_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '工业造梦,一代更比一代强\r\n', '

文 | 白雪 吴曦

\r\n

周天财经 原创出品

\r\n

凌晨 2 点,昆明五华区护国路上的公寓楼里相继走出三两成群的年轻人,他们互相争执的声音在深夜显得十分吵闹。

\r\n

大楼门口有经验的保安会立刻意识到,这又是一群刚刚玩完剧本杀的年轻人,而作为昆明中心街区的大楼保安,他们已经对这些玩家们见怪不怪。

\r\n

一到周五晚,就有许多年轻人们就会顺着地图导航,摸进高层电梯,找到隐匿在众多居民楼的实景剧本杀体验馆,玩一场角色扮演式的解密游戏。

\r\n

毕业后在成都工作的王可也和他们一样,是剧本杀死忠粉。「双休」「稳定」「有房有车」构成了王可目前生活状态的关键词,但王可拥有的充裕休息时间,曾一度让她发了愁。

\r\n

「我爸喜欢去河边喝茶,我妈时常会去跟姐妹们打麻将,但我对川渝地区的这些传统娱乐项目都不太感兴趣,所以以前对周末真的没去处。」而这种局面在王可接触剧本杀后,发生了变化。

\r\n

现在,王可沉迷于角色演绎和硬核推理,每周都会去约朋友玩上一场剧本杀。显然,像王可这样的年轻人们对于「找乐子」、「杀时间」乐此不疲。剧本杀满足了 TA 们的需要。

\r\n

根据艾媒咨询《2021 年中国剧本杀行业发展现状及市场调研分析报告》显示,2019 年中国剧本杀市场规模超过百亿元,同比增长 68.0%,即便是在有疫情的 2020 年,市场规模也没有停止增长,而是来到了 117.4 亿元,并预计将在 2022 年再次翻倍。

\r\n

\r\n

2020年中国剧本杀行业规模达到117.4亿元 

\r\n

图源:艾媒咨询

\r\n

年轻人在周末有了新玩法,体验式的剧本杀为什么吸引人?对于创业者来说真的是一门好生意吗?剧本杀的大火又是否促使体验式产业浮出水面?

\r\n

我们将在本文中一一解答。

\r\n

01 剧本杀,玩的就是体验

\r\n

剧本杀,是英美近年来流行的派对聚会游戏「谋杀之谜(Mistery of Murder)」的舶来品,这种游戏要求聚会中的一名宾客在其他人不知道的情况下秘密扮演凶手的角色,而其他宾客作为玩家需要通过调查和推理寻找出凶手,也正是此规则构成了现在剧本杀的核心框架。

\r\n

2016 年,芒果 TV 推出明星推理综艺秀《明星大侦探第一季》,首播上线两小时,收视率即突破千万。伴随这款人气与口碑俱佳的综艺在线上走红,剧本杀成为桌游店的当红辣子鸡。

\r\n

剧本杀何以能征服年轻人躁动无聊的心呢?不同于三国杀、狼人杀追寻策略和胜负的快感,在剧本杀的世界里,角色代入与玩家体验感才是游戏核心。

\r\n

「能够代入到不同的角色,进入不同故事的感觉还是很刺激的」已经玩了超过 20 次剧本杀的小媛这样说到。

\r\n

具体来说,剧本杀需要玩家们要根据自己手里的剧本演绎自己的角色,通过互动交流、探讨、交换线索揭开故事全貌。除玩家以外,剧本杀还需要一个 DM(主持人)角色,一般由桌游店的店员担任,是游戏组织和剧情推进者。在玩家讨论进入歧途的时候及时给予提示。

\r\n

那么由此来看,一场剧本杀的体验好坏,剧本质量起到了决定性的作用。

\r\n

小红书、美团等社区中,总是会有许多年度最佳剧本杀榜单,尽管有众多版本,但像《安生》《年轮》《古木吟》《你好》等在玩家口碑较好的剧本都基本能够列入前茅,从而产生马太效应——好的剧本吸引更多人去玩,越来越贵,烂的剧本也越来越无人问津。

\r\n

但是作为以「体验」为主实景游戏,对于剧本「好」和「烂」的评判是有主观色彩的。时不时会被朋友邀请一起玩剧本杀的 Jaz 就吐槽了那本被誉为年度催泪剧本的《在人间》。她在网上查到的评价是「心绪难平」「情感剧本里的天花板」。

\r\n

\r\n

小红书用户分享在玩《在人间》时痛哭流涕的场景

\r\n

然而当 Jaz 在队友众目睽睽的注视下,被穿戴上属于主角的凤冠霞帔时,她悻悻说道:「要念那些让我鸡皮疙瘩起一身的台词,中途还被要求穿起主角的嫁衣,开宝箱拿金钗。如果说真有什么好哭的,那肯定是我尬到想哭。」

\r\n

剧本质量之外,玩家的参与度以及 DM 的专业水平,也将影响整个剧本杀体验。

\r\n

在剧情的推动下,玩家完成一轮又一轮的搜证、交流、推理。虽然都是扮演的虚拟角色,但每个人都需要投入大量的智力与感情才能参与其中,所以极为考验玩家的耐心和逻辑能力。

\r\n

如果遇到不负责的 DM,不熟悉推理逻辑、甚至游戏规则的新手,玩家不仅无法很好代入角色,甚至会影响整个剧本杀的推理线。

\r\n

因此,对于资深剧本杀玩家来说,最不愿意碰到的事情可能就是和新手同场。

\r\n

Jaz 之前就带着两个新手去玩剧本杀,然而大家在读剧本的环节,就已经叫嚷着「这也太难读了」「不想玩了」,途中 DM 也跑出去吃外卖。在后来大家消极情绪的推动下,这场剧本杀不欢而散,连复盘的环节都没有。

\r\n

与之相反,如果遇到熟悉规则、投入到位的老玩家,再加上控场能力一流的 DM,则是另一种场面——在感情本里「男默女泪」、或者在硬核推本里「针锋相对」。

\r\n

最后,剧本杀的体验感则归功于这种游戏模式的社交属性。

\r\n

根据周天财经的了解,一般一场剧本杀最少需要 4 个玩家,一个剧本最多可以有 10 个角色。为此,店家常通过运营线上微信群、以及大众点评拼团的模式,协助玩家组局

\r\n

在组局后,许多陌生人会最终会成为游戏队友从而产生交集。剧本杀最短 3 小时,最长无上限的游戏时间保证了这群人有足够多且深入的交流。

\r\n

「玩剧本杀可以接触不同职业、不同类型的人,和他们聊天很好玩」小媛这样说道。而且自从王可「入坑」剧本杀以后,关系好的同事、同学都被拉进了圈。现在,王可有了专门和朋友凑局玩剧本杀的微信群,也养成了每周一聚的习惯。

\r\n

在这种情况下,剧本杀的社交属性得以充分释放——熟人之间促进友谊,陌生人之间则能「下次再约」。

\r\n

02 低门槛蜂拥入局之后

\r\n

剧本杀靠体验感甩出狼人杀、三国杀一类桌游一条大街,成了年轻人线下 kill time 的主要玩法之后,又成为年轻人相继创业的首选。

\r\n

据美团统计,截止 2020 年 11 月底,剧本杀门店数量已经突破三万家,在其中不乏从资深玩家转变为店主的年轻人。

\r\n

2019 年,在朋友的怂恿下,性格较真的阿飞接触了剧本杀。在上瘾式玩了一个月之后,阿飞决定在昆明开一家沉浸式剧本杀体验店。

\r\n

阿飞看中入行剧本杀的低门槛,「前期房租和房间装修成本在二线城市能控制在 20 万以内,开这个店几乎就是说干就干,没有什么可犹豫的。」

\r\n

\r\n

阿飞在昆明开的古风类剧本杀体验馆

\r\n

低门槛之外,剧本杀产生的利润也是传统桌游店难以匹敌的。

\r\n

让我们先来算一笔账,打开美团可以发现,二线城市质量稍好的剧本杀线下门店客单价通常在 60-120 元之间,如果按照最低 60 元客单价来计算,客流量不错的门店月经营收入至少可达 5 万以上。那么赚回本钱,进入完全盈利状态基本能在 3 个月—6 个月内迅速完成。

\r\n

因此,许多人将剧本杀描述为暴利行业并非没有道理。

\r\n

低门槛、高毛利堆起了一个风光无限好的产业,年轻创业者纷纷以为砸钱投资、快速培训 DM 就能走上剧本杀的造富、造梦之路,但真正压垮他们的却往往是后期持续的资金、营销、人员投入。

\r\n

具体来说,店家首先需要对剧本进行持续性投入。由于同一个剧本杀主题不具备重复可玩性,店家需要靠不断提供精品剧本来提升玩家的复购率,因此剧本数量多、质量好、更新频率快就成为玩家选择一家剧本杀店的重要因素。

\r\n

「虽然流水高,但是后续也得长期投入做运营,更新店里的装修、布置,还要买新的本子,旧了的话很快就没人来了。」曾在吉林长春开设剧本杀门店的小孔向我们表示。

\r\n

但剧本的价格对于店家而言并不低,根据周天财经的调查,市场上的剧本主题按稀缺程度高低分为城市独家本、城市限定本(一个城市只有 3-5 家门店拥有版权)与盒装本。

\r\n

从淘宝和微信小程序等剧本销售渠道上显示的数据来看,盒装本的价格在 500 左右,城市限定本在 2000 到 3000 之间,独家本比城限本的价格又翻了一倍。

\r\n

在一个全国剧本杀店主交流群中,有店主在聊天时提到自己曾经上班的店,有 500+ 剧本,其中大概 200 个是城市限定本,这就代表着这家店在剧本上至少就投入了 55 万。

\r\n

尽管这样拥有 500 个剧本量的大店是少数,但目前一个正常运营的剧本杀店,在剧本量上起步也是 50—100 个,因此,每一年在剧本上店家就能花去 4 万元左右,而且想要买到最新的本子,店家必须耗费精力在全国各地参加剧本展会,积极从发行商那里抢本子。

\r\n

除此之外,更新装修、熬夜看店、批量培训店长、DM 都是熬人的活儿,从这个角度来看,剧本杀其实是一门后期越做越累的生意。

\r\n

第二个就是后续店面的长期生存乃至可复制化扩张的问题。目前,阿飞的店早已盈利,也积累了一批稳定的客源,吃到甜头的他今年又开了自己的二店,但是对此他抱怨道:「二店同样延续了一店的装修风格、价格、地理位置,但是二店的生意就没有一店那么好」。

\r\n

事实上,由于剧本杀非标程度高,玩家对于环境、服务的要求高,因此既要做细做深硬件和服务,又要进行规模化增长对于个体剧本杀创业者而言非常困难。

\r\n

因此资本趁虚而入,拿着资金开始在行业内试水线下实体店剧本杀品牌。

\r\n

今年,不仅线上谋杀推理社交 app「我是谜」在多地成立线下门店之外,以原创剧本发家的「叁千世界」、「剧本部落」等知名剧本杀品牌也纷纷开始试水加盟模式。北京、上海等一线城市门店扎堆现象严重,很多商家开始依靠「打折优惠」来吸引玩家。

\r\n

\r\n

叁千世界旗下的一家加盟店

\r\n

品牌的围堵并对个人创业者造成过渡的焦虑,在许多店家看来,以叁千世界为首加盟品牌收了加盟费什么也不管,「你赚钱了他们赚,你亏欠了就是自己单纯的创业失败」一位 90 后剧本杀创业者这样评价。

\r\n

但长远考虑,不太成熟的品牌如果熟悉了迅速收割各地的大小加盟商,赚取短期快钱的模式,一旦较差的创意供给和用户体验打击了用户复购,等待行业的就是泡沫的迅速破灭。而要恢复用户信任,恐怕需要的是更久的周期。

\r\n

03 剧本杀之下,藏着体验他者人生的沉浸式经济

\r\n

理查德·巴特的角色理论把游戏玩法分为 PVP(玩家对抗玩家)和 PVE(玩家对抗环境),PVE 目前比较有代表性的游戏是密室逃脱,而剧本杀在游戏模式上属于经典的 PVP 模式,但同时,剧本杀也会通过服化道具营造出沉浸式场景,增强玩家的游戏新奇感和体验感。

\r\n

我们访谈的剧本杀玩家中,其中不少也都玩过密室逃脱。Jaz 之前就带家人一起玩过全国连锁的长藤鬼校密室逃脱,她谈道:「剧本杀是玩角色,密室逃脱玩环境,说到底都是体验一场他者的人生」。

\r\n

事实上,年轻人「体验他者人生」的思潮正在全方位催生沉浸式经济。

\r\n

这种沉浸式经济最初可能只是各大乐园充斥着喷水、晃座椅的「5D 电影」,但随着玩家日渐严格的游玩要求,以及 3D 全息投影、虚拟现实、5G 技术的发展,沉浸模式开始被广泛应用在戏剧、展览上,甚至餐饮上。

\r\n

2016 年底,风靡百老汇的浸没式戏剧《不眠之夜》登陆中国,制作团队为此打造了一个还原上世纪三十年代风格的「麦金侬酒店」,一小时内多条故事线在酒店不同方位平行开展,三小时内表演重复三次,观众可以选择不同线路观看。

\r\n

除此之外,还有一大堆沉浸式艺术体验展开始迅速风靡国内一线城市。其中,最为典型各类「梵·高、艺术沉浸式体验」艺术展览,这种展览利用 360 度全景全息视频影像技术,还原了梵·高经典作品。马上,这样的展览往往会成为当月最火爆的网红打卡点。

\r\n

\r\n

中国国家博物馆

\r\n

“心灵的畅想——梵高艺术沉浸式体验”现场

\r\n

无论是将沉浸式应用在任何具体的娱乐文化领域,它们都是从「体验模式」出发,以「我」的身份代替了「他者」。

\r\n

这中就沉浸式体验能做到多极致呢?以密室逃脱为例,一个质量高的密室主题开发涉及剧本编写、游戏环节与空间设计和落地环节,具体需要牵扯到剧情、场景、机关、谜题、灯光、音效、道具以及真人 NPC 等多种元素。

\r\n

2018 年最佳剧情《弥生》内穿插了大量日本民间传说元素和道具,背景音乐随剧情起伏不断变化,甚至连「指甲刮擦门板」的细节都有体现。

\r\n

冲着这些及其考究的细节和刺激新鲜的体验感,越来越多的人愿意花高价买体验,密室逃脱品牌 MRX 创始人张翰曾公开表示:现在我们一个新产品上线,预约排队就得一个月,而一场沉浸式体验的单价有的高达 498 元。

\r\n

结语

\r\n

如果将视角放大到整个沉浸式经济中来看,只达到「看故事」「参与并主导故事」的密室逃脱、剧本杀只能算是沉浸式经济的开胃菜,目前,沉浸式餐厅、沉浸式魔术、沉浸式自习室等都成了许多创业者试水的新业态。

\r\n

根据《2020 中国沉浸产业发展白皮书》显示,2019 年中国沉浸产业总产值为 48.2 亿元,沉浸业态也从 2018 年的 21 种增长为 35 种。

\r\n

中国沉浸产业正肉眼可见呈爆发式增长趋势,但问题也非常突出。往小里说,目前沉浸产业的叙事深度、互动深度、体验深度远未达到浸入现实的程度,许多沉浸式餐厅、展览,无非是一个大型「投影房」+ 用餐或看展功能的存在。

\r\n

\r\n

深圳一家“艺术感官”餐厅

\r\n

往大里来说,由于产业尚未有大规模资本注入烧钱营销,大部分体验感良好的沉浸体验对于消费者都有对体验内容保密的要求,消费者只能依靠网络点评票务平台进行口碑传播获取信息,产业信息不透明、传播范围小,使得沉浸体验产业的整体影响力增长缓慢。

\r\n

不过,我们仍可以从众多剧本杀、密室逃脱玩家的游戏体验中,感受到沉浸体验虽然是工业制作的产物,但却能使消费者主观上认为自身获得了个性化的体验。

\r\n

《报告》中描写道「这个时代的消费者不需要工业化产品和无差异的体验,需要符合自身喜好和个性的内容;他们无需深刻的意义,他们需要非凡的现场感和朋友圈的存在感,他们不需要听从别人的价值判断,他们爱听从自己内心的声音。」

\r\n

赛博朋克之父威廉·吉普森曾说「未来早已到来, 只是尚未流行」, 由这群年轻消费者托举起的沉浸产业,已经逐渐浮出水面,构筑科幻感十足的行业版图。

', '1621219461', '1621219461'); +INSERT INTO `article` VALUES ('8', '21', '4月新消费品牌融资大盘点,Z世代还有这些“心头好”', 'https://img.36krcdn.com/20210517/v2_75768e24afc24e16b609261fbdf6615f_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '除了食品饮料和美妆护肤,年轻消费群体还关注酒饮、咖啡、汉服、潮玩等领域。\r\n', '

出品/联商网&搜铺网

\r\n

撰文/陈新生

\r\n

中国消费市场已经走向精细化、多元化和个性化时代,不断成熟的90后、95后、00后已经逐步成为消费主力军。

\r\n

传统品牌越来越难以取悦消费者,而近些年消费市场涌现出的新品牌,借助互联网思维在商品、品牌、营销、服务、商业模式等方面不断创新,满足了新消费时代下的消费者新需求。

\r\n

据联商网零售研究中心不完全统计,4月份新消费领域共发生47起融资事件,融资总金额约97亿元人民币(数百万元人民币融资以100万元计,数千万元人民币以1000万元计,数亿元人民币以1亿元计,外币经过换算,未披露融资金额未计入,融资时间以披露时间为主)。

\r\n

\r\n

与前三个月类似,4月份融资主要集中在食品和美妆领域,这两个领域的融资数量和融资规模远高于其他赛道。

\r\n

4月份新消费品牌融资额主要以千万级为主,获得千万级人民币融资的品牌有20家,亿元以上融资主要集中在食品饮料、美妆个护、运动健身等领域。

\r\n

燕麦制品“欧扎克”完成了由嘉御基金独家投资的亿元级A轮融资,资金主要用于品牌建设和渠道扩张。目前,消费者对燕麦制品益处的认识日益增强,这一市场仍处于发展早期,市场潜力巨大。欧扎克深耕这一赛道多年,其部分产品在天猫平台复购率较高,单品长居细分类目第一。

\r\n

新锐连锁咖啡品牌“代数学家咖啡”此前宣布于去年底完成元生资本投资的数千万元A轮融资。代数学家咖啡前身是MATRIX矩阵咖啡,为精品咖啡领域主要玩家之一。

\r\n

值得一提的是,运动健身领域发生了两起亿元级融资。智能健身品牌FITURE完成了全明星基金、红杉中国、腾讯等3亿美元B轮融资,这是全球运动健身领域最大规模的B轮融资。

\r\n

健身市场是一个千亿级市场,前景广阔。疫情使得消费者更加关注运动与健康,无论是市场还是消费者本身,都有着巨大需求,这些入场玩家也受到了资本的青睐。

\r\n

此外,在生活方式、餐饮、在线教育、婴童等领域也有数额不等的投资。

\r\n

资本更爱在品牌早期成长阶段“下注投资”

\r\n

\r\n

从融资轮次来看,4月份新消费品牌融资主要集中在天使轮和A轮融资阶段。其中,A轮融资品牌数量达到17起,天使轮融资品牌数量达到10起,B轮阶段融资数量为4起,战略融资数量4起。

\r\n

新消费与其他赛道有所不同,存在一定的时间窗口和时间红利。由于消费品大多面向C端消费者,因此消费者消费行为和需求的变化会传导到供给端,新的消费趋势会催生出新品牌,吸引资本入场。正如峰瑞资本创始合伙人李丰所说,刚需消费品受到了资本市场追捧,这些领域在二级市场的火热,带动了财富效应,形成了投资热点。

\r\n

而在新消费品领域,资本更为关注那些颠覆传统的早期项目。如在美妆领域,一些新消费品牌在极短的时间内便实现了十亿级、百亿级估值,这种隐形的财富效应,使得资本在品牌早期成长阶段,便谋篇布局,下注投资。

\r\n

男士护理已成为美妆市场的一个新的增长点。国际市场机构预测,到2023年全球男士化妆品将有5400亿元的市场规模。根据天猫和菜鸟联合发布的数据显示,2020年双十一男性彩妆商品备货同比增长超3000%,增长了30倍。

\r\n

以男士综合个人护理品牌“理然”为例,这家2019年底上线的品牌,已完成第六轮近3亿元B+轮融资,最新一轮融资由Tiger Global领投,战略投资方为B站。

\r\n

今年1月,理然完成了由M31资本与五源资本共同领投的近1.5亿元B轮融资。理然主打的产品有衣物淡香水、肌肤特饮沐浴露、造型喷雾组合、素颜乳等,其2020年全渠道GMV近2亿元。

\r\n

食品、美妆之外,Z世代还有这些“心头好”

\r\n

\r\n

食品与美妆仍然是最受资本关注的赛道,食品饮料领域发生18起融资事件,占比为39%;美妆个护领域发生8起融资事件,占比为17%。紧随其后的是服饰、生活方式、家居、运动健身等。

\r\n

就食品领域来看,增长迅速。以天猫为例,早在去年7月,天猫食品行业的增速已经超过美妆,成为大快消增速第一的行业。这背后的原因是,年轻消费者特别是Z世代消费人群已渐趋主流,食品的属性发生变化,便利性与健康性成为首选考虑因素,如预制食品、功能饮代餐等逐步渗入到消费者生活中。

\r\n

0糖饮料、功能零食、低度潮饮、代餐奶昔、精品咖啡、半成品菜等都是食品饮料赛道的重要消费趋势,这些品类的头部商家也迎来了爆发式增长。据了解,2020年天猫食品领域,相关品类商品销售额同比增长达500%。

\r\n

功能性食品品牌“minayo”获得了由北极光创投独家投资的数千万元Pre-A轮融资,同一赛道的“柠琅”完成了数千万元天使轮融资。这背后的趋势是,中国已经成为全球第二大保健食品市场和第一大的保健食品增量市场,但保健食品和休闲食品健康化的消费需求仍然未被满足,仍是一个巨大的市场。

\r\n

因“0蔗糖”宣传文案翻车的元气森林完成了5亿美元第六轮融资,融后估值达60亿美元。此外,瑞芬生物获得了挑战者资本的数千万人民币A轮融资,而挑战者资本由元气森林创始人唐彬森创立,瑞芬生物为元气森林的代糖供应商。

\r\n

年轻消费群体的增多以及悦己意识不断觉醒,推动了美妆市场蓬勃的发展。而Z世代人群已成为线上美妆消费主力,消费者对国货接受程度越来越高。在Z世代人群看来,国货不再是低质低价的代名词,而是有着独特的文化印记和设计,他们更愿意去尝鲜那些创新品类和产品。如国货彩妆品牌“SEVEN · JULY”完成了由日本护肤品牌花印投资的数百万元种子轮融资,国货妆发品牌“生气斑马”完成了由弘毅创投领投的数千万元Pre-A轮融资。

\r\n

除了食品饮料和美妆护肤,年轻消费群体还关注酒饮、咖啡、汉服、潮玩等领域。

\r\n

年轻消费者已进入酒饮市场,90后、00后成为新主力,他们更加追求口感和健康度,为了贴近年轻消费者,不少主打低度酒、预调酒及鸡尾酒的新式轻酒饮企业兴起。外卖以及居家佐餐的需求,带动了复合调味品的增长,一些新式调味品企业开始受到资本关注。

\r\n

新零售酒企“肆拾玖坊”完成了由凯辉基金领投的A轮融资,本轮融资后,肆拾玖坊将加速在产能、品牌、用户体验方面的布局速度。威士忌创新品牌“响杯”完成了复朴基金等投资的数千万融资,本轮融资后,响杯将在原有的启示酒盒基础上,推出一款以威士忌为基酒的预调酒。低度发酵酒供应商“赋比兴”完成了由银河系创投领投、宽窄创投等老股东跟投的最新数千万元A+轮融资,这也是赋比兴在近4个月内连续完成的第3轮融资。

\r\n

2020年成立的调味品品牌“口味全”完成了由险峰长青领投,42 Capital跟投的1000万元天使轮融资。酱油是口味全的切入点,价位定位在20元左右,主要对标市场上15元左右的酱油,进行健康化升级。

\r\n

此外,精品咖啡、餐饮小吃、线下折扣店也频受青睐。目前,各种类型的创新型咖啡品牌不断涌现,精品速溶、即饮咖啡等领域消费需求持续爆发,中国现制咖啡市场仍然增长迅速。随着消费升级,即食小吃市场正在加速优化,品类空间持续扩大,而食材的标准化也助推了这一市场的增长。折扣超市是一个规模巨大的市场,高性价比是零售发展的长期底层驱动力之一,尾货连锁超市也成为了一个生意机会。这些领域也涌现出不少品牌,受到了资本关注。

\r\n

以折扣超市“小象生活”为例,其完成了愉悦资本领投,天使湾资本跟投的数千万元天使轮融资。在天使湾创投合伙人芮造杰看来,小象生活在当下特定的时点切入这个市场,用新的数字化技术和新的模式提升运营效率,能够为消费者创造全新的消费体验。

\r\n

而作为Z世代文化属性的“三坑”不再圈地自萌,逐步进入到消费消费视线。汉服国风品牌“十三余”完成了正心谷和B站联合领投、泡泡玛特跟投的过亿元人民币A轮融资。而除了出手“三坑”外,泡泡玛特还投资了潮牌买手店“Solestage”,它的市场边界在不断对外扩张。

\r\n

围绕健康、美丽与好玩等因素,新品牌仍在不断崛起和创新,这一领域还将有更多的资本进入。

', '1621219498', '1621219498'); +INSERT INTO `article` VALUES ('9', '21', '大厂走出来的互联网敲钟“排头兵”', 'https://img.36krcdn.com/20210516/v2_abe47ba170b24fadad5369b253193e10_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '“另起炉灶”的大厂员工。\r\n', '

编者按:本文来自微信公众号“Tech星球”(ID:tech618),作者:王慧莹,36氪经授权发布。

\r\n

\r\n
\r\n

 “另起炉灶”的大厂员工。

\r\n
\r\n

在北京西二旗有个知名的互联网十字路口,百度腾讯、新浪、网易四家公司就矗立在这个十字路口,那里也是“后厂村”的核心地带。可以说,后厂村就是半个中国互联网。

\r\n

或许是地域上的优势,让大厂的跳槽更加便捷。甚至有后厂村员工笑称,“上午从百度离职,下午就搬个箱子,入职腾讯”。

\r\n

事实上,互联网本就是个人才流动频繁的行业,有人跳槽,有人“另起炉灶”。作为互联网巨头公司的员工,也不例外。某种意义上来说,对于从大厂走出来的创业者来说,“To BAT”不是最终目标,但BAT带给他们的更多是企业文化、企业精神,而这些都成为他们创业路上的加分项。

\r\n

对于自己培养出来的“孩子”,“BAT”们有着各自不同的培养方法。“百老汇”、“前橙会”、“南极圈”分别代表着BAT离职员工的组织或团体。从这里走出来的创业者,诸如沈鹏、何小鹏、宿华、程维、唐永波等,很多已经成功敲钟上市或走在敲钟的道路上。

\r\n

\r\n

本文提到的公司,按提及先后顺序排列

\r\n

而他们与老东家的关系也各异,有的创业者自力更生,有的是汲取前东家资源,也有的寻找新的“伯乐”,甚至倒戈投奔竞对阵营......

\r\n

前东家扶持,资源最优化

\r\n

张一鸣曾说,“我创立今日头条,不是为了成为腾讯员工”。显然,不是所有创始人都像张一鸣一样。即便是一向直言不讳的美团创始人王兴,背后也曾有阿里、腾讯的资本支撑。王兴虽然不是阿里系的人,但美团有阿里一半的DNA。

\r\n

王兴与阿里没有“血缘”关系的亲情并不稳定,这也让王兴后来很注重关心美团系创业者。

\r\n

前不久,创立5年的水滴公司成功上市,其创始人沈鹏,就是从“TMD”阵营走出来的首批上市创业者。

\r\n

嗓音沙哑,模样精瘦,是大众对沈鹏的初印象。关于嗓音沙哑,一个普遍的传闻是来自沈鹏当年在美团天津做BD“拼命三郎”的经历。

\r\n

回看沈鹏在美团的六年半时间,每一个三年都是沈鹏“纵情向前”的节点。第一个三年,以美团10号员工的身份成长为美团外卖的联合创始人;第二个三年,作为“千团大战”的急先锋,沈鹏帮助整合美团和点评的团购业务,并决定辞职创业。

\r\n

彼时,美团已经成长为百亿美元估值的超级独角兽。谈起沈鹏和美团的战友关系,从他创立的公司名字和美团的投资便可窥探一二。「北京纵情向前科技有限公司」是沈鹏注册公司的名字,而纵情向前,来自于沈鹏在美团六年升级打怪的经历。

\r\n

另一方面,梳理水滴背后的资本力量,不难发现美团对于老部下的“毫不吝啬”。水滴上市路演期间,王兴认购3000万美元,王慧文通过家族信托Kevin Sunny也投了3000万美元,天使轮融资也有美团的身影。值得一提的是,水滴 IPO 当晚,王慧文亲自为水滴站台。

\r\n

正如阿里创始人马云曾说,“希望中国500强中,有200强CEO来自阿里生态”。小鹏汽车董事长何小鹏,便是阿里看着长大的创业者

\r\n

2014年,阿里豪掷40亿美金收购UC优视,被称为中国互联网史上最大并购案。而UC优视就出自何小鹏之手,至此,何小鹏有了超级产品经理的名号。正因这笔并购案,何小鹏与阿里结下缘分,先后出任阿里移动事业群总裁、阿里游戏董事长等职位。

\r\n

之于创业者,创业项目就是他们的“孩子”。从萌生、孕育到落地,“老父亲们”都是加倍地呵护。作为互联网第一批创业者的马云早就意识到了这一点,在这场互联网×互联网公司的组合中,阿里给了何小鹏足够的信任和放权。

\r\n

何小鹏曾在混沌大学的演讲中坦言,合并之后,马云和时任阿里CEO陆兆禧只来过UC一次。后来,马云和现任阿里CEO张勇说,“因为我信任你们,所以我不关注你们具体大的战略是怎么制定的,我只关注中间的大的milestone是什么样的”。

\r\n

“创业一轮回,苦辣酸甜咸,归来还是少年”,2017年从阿里辞职后,何小鹏在社交平台上这样写道。字里行间中流露出他对创业的不甘心,也为他后来创业造车埋下伏笔。

\r\n

同年,何小鹏联合YY创始人李学凌、猎豹移动CEO傅盛等知名互联网企业的高管,共同投资创立小鹏汽车。

\r\n

Tech星球梳理发现,在何小鹏加入小鹏汽车担任CEO,阿里才开始押注小鹏。如今,小鹏汽车已经成功登陆纳斯达克,并拥有千亿市值。公开资料显示,小鹏汽车A轮、B轮融资都有阿里的身影。在IPO冲刺的前一个月,阿里更是多次注资。

\r\n

自力更生,寻找新伯乐

\r\n

“与其站队,不如独立做大。”张一鸣曾在央视财经节目《对话》中表示,巨头之间是互相防范和进入对方的领域,如果你站队的话,可能竞争会更激烈。

\r\n

正是因为如此,在字节跳动的创始团队和投资背后,都不见BAT的身影。如今,张一鸣带领的字节跳动,已然成为估值近4000亿美元的超级独角兽,并位于TMD阵营的头位,是BAT的有力竞争对手。

\r\n

但不是所有最终能成功的创业者,都有张一鸣的定力,很多甚至要“背叛”自己出身的大厂,与其他的巨头,甚至投靠老东家的竞争对手阵营。

\r\n

诺曼底登陆,第一个登陆点很重要。如果创始人没有这个概念,那很难带兵打仗。这一点上,快手CEO宿华是个很好的范例。在经历了33次创业失败后,因为最后阿里的收购,才有了一定的资本。这也为他参与创立快手打下了基础。

\r\n

宿华的第一个创业项目,是他离职谷歌后做的视频广告网站,草草失败收场,但不得不承认,宿华是个眼光很超前的人。放到现在,视频广告是个很赚钱的项目

\r\n

2009年底,加入百度,担任凤巢系统架构师。这时宿华已经实现了财务自由。从2009年底到2011年4月,宿华在百度待得时间并不长,但却因为在百度的这段经历,让宿华明白怎么去带领一个团队。彼时,宿华已经年薪百万,创业梦仍在他心中生根发芽。

\r\n

有着湖南人“霸蛮”性格的宿华,在一次公开演讲中说过这样一句话:“如果失败了,就换个姿势再来一次。”也是因为如此,宿华开启了第34个创业项目,加入短视频社交平台——快手,任职CEO。

\r\n

作为短视频第一股,快手是宿华第一个成功的项目。快手的成功,让360创始人周鸿祎直言,“宿华去干快手我没投,想想我都想跳楼”。毕竟此前,宿华也算是给周鸿祎打过工的“码农”。前东家百度,也只在快手C轮融资的时候投过一笔。

\r\n

快手CEO宿华算是百度系,但在上市的路上,腾讯却是给快手投资次数最多的巨头。据公开资料显示,10次融资中,有5次都有腾讯的身影。快手上市,一定程度上,是腾讯投资的胜利。招股书显示,宿华持股12.648%,程一笑持股10.023%,而最大机构股东是腾讯,持股21.567%。

\r\n

竞合交错,相爱相杀

\r\n

伴随着阿里系、腾讯系、百度系创业者们的不段扩张,巨头们相爱相杀,相互接盘的故事也多了起来。大厂员工搭档创业,大厂对前员工项目的交叉投资,这些案例也比比皆是。

\r\n

一个典型的例子,关于滴滴是腾讯系还是阿里系的争论,一直存在了多年。这一切,要从2013年腾讯创始人马化腾和滴滴创始人程维的一场饭局说起。

\r\n

彼时,程维收到一份邀请,“腾讯投资滴滴,占股20%”。程维犹豫了,因为从阿里离开的人,接受腾讯的投资,需要做一下心理建设。

\r\n

要知道,程维曾是支付宝B2C事业部的副总经理,在阿里供职8年,更在有地推“少林派”之称的阿里“中供铁军”团队中锤炼过。此外,滴滴天使投资人王刚,曾在阿里供职超过10年,主管B2B,是一名“老阿里”,且与马云私交甚好。

\r\n

那时的共享出行市场,“快的”已经拿了阿里的投资,半路又杀出个“大黄蜂”,而滴滴正在寻求B轮融资,三家出行公司从上海打到杭州。在程维左右为难时,腾讯给出“投资后不要董事会席位,投票权减半”的优惠条件。就这样,滴滴接受了腾讯1500万美元的B轮投资。

\r\n

2016年,滴滴合并“快的”后,阿里牵线软银、苹果、富士康巨额投资。据《财经》报道,腾讯和阿里各拥有滴滴董事会一席,到滴滴和Uber中国合并,百度也成了滴滴的股东,虽然占股不大。

\r\n

但如今,可以看出,熟谙中外战争史的程维,试图在BAT的复杂关系中保持平衡和协调。因此,外界对滴滴的评价是,一个“集齐阿里的人才,百度的技术,腾讯的钱”的互联网公司。

\r\n

如今,共享出行市场迎来上市潮。哈啰计划于纳斯达克上市,嘀嗒赴港上市申请失效,凹凸出行被传上市。滴滴成功周旋在BAT之间,自身估值据传也达到了1000亿美元,处于等待上市阶段。

\r\n

另一个让阿里和腾讯同时注资的,同样处在共享经济领域的风口,是唐永波带领的共享充电宝品牌小电科技。上个月底,小电科技公开提交了招股书,上市速度似乎比滴滴更快。

\r\n

值得一提的是,唐永波和程维都是名副其实的“阿里系”。在离开阿里之前,唐永波是阿里巴巴淘宝本地生活行业、淘点点业务创始人及淘宝食品农业特色中国业务负责人。

\r\n

2014年,阿里上市,唐永波是第一批阿里走出来的创业者之一。作为典型的“阿里系”,唐永波继承了阿里人“火”一样的性格。小电的成立,距离唐永波上一个失败的创业项目“空格”,只有60天。而空格的创始团队,都是曾在阿里供职的高管。他们身价多则上亿,少则数百万。

\r\n

爱折腾的唐永波,从哪跌倒就从哪里站起。

\r\n

2017年5月,小电在A轮投资后仅两个月,就完成了B轮融资。在红杉资本中国基金和高榕资本联合领头,腾讯加持下,小电科技成为共享充电行业内第一个拿到B轮融资的公司,也是融资数量最多、最快的公司。2020年下半年,小电获蚂蚁集团投资。这也意味着,阿里和腾讯现同为小电科技的投资方,且两者分别为怪兽充电和小电科技的最大机构股东。

\r\n

以前,在中国互联网,有个不成文的规定,互联网公司几乎都要在阿里和腾讯之间选一家。在反垄断的监管下,巨头们逐渐从竞争走向了合作。

\r\n

马云曾表示,“阿里的工号是保留的,每个工作过的员工都有自己的工号,哪怕只工作过1天。我一直相信,会有这么一天,外面的阿里人比公司里的多”。至今,阿里系仍是创业路上的排头兵。

\r\n

明星创业可能靠的是明星光环,但互联网江湖足够理性,也十分残酷。在走向上市敲钟的路上,靠得更多的是BAT从业经历,带给他们的韧性和坚持。创业,本身就是九死一生,过去积累下的人脉,或许会在危机时雪中送炭。

', '1621219588', '1621219588'); +INSERT INTO `article` VALUES ('10', '22', '我在大厂,下班了也戴着工牌', 'https://img.36krcdn.com/20210517/v2_f33a704b7c0c45aeb5afbed2d78aca4c_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '大厂身份,真的香吗?', '

编者按:本文来自微信公众号“深燃”(ID:shenrancaijing),作者:王敏 李秋涵 唐亚华 黎明,编辑:王敏,36氪经授权发布。

\r\n

“我有字节工牌,你有吗?”最近,字节跳动的工牌火了。网友们吐槽,怎么哪里都有戴字节工牌的人。不管是公交、地铁,还是高铁,甚至假期在景区,都能看到字节的工牌。

\r\n

脉脉上,字节工牌被戏称为宇宙最强工牌,有人写脑洞小作文称:“字节工卡可以刷公交、地铁,还可以刷ATM机取钱”,甚至还有人在淘宝上购买高仿工牌。不过,字节跳动文化官方公众号“字节范儿”发文回应称,字节工牌并没有那么多特殊功能,最特殊的在于个性化的工牌照以及数据线挂绳,让广大网友调侃直呼“可惜”。

\r\n

\r\n

除了字节跳动,下班时间,各大厂工牌或多或少都会在一些公共场合出现。有的人是因为忘记摘了,有的人是因为还要回去加班懒得摘,还有人故意不摘以展现自己大厂员工的身份。

\r\n

工牌,是一个公司的文化产品。对于一些人而言,工牌是一种使命感、一份安全感和归属感。而大厂工牌的出圈,也代表了一些人对于大厂身份的自豪感和优越感。

\r\n

工牌对于大厂员工究竟意味着什么?本期小酒馆和5位正在或曾在大厂工作的员工,聊了聊他们关于“大厂工牌”的感受。他们中,有人把在下班时间还戴工牌当作一种束缚,担心自己一些无意识的不当行为被拍下来传到网上,引发不必要的麻烦;有人认为工牌是大厂螺丝钉的编码,少了谁换了谁,这个机器都不会受影响;还有人因为大厂工牌也分等级、处于鄙视链底端享受不到福利权限而心有不平。以下是他们的故事。

\r\n

大厂工牌对我来说是束缚,但有同事去酒吧会故意戴工牌

\r\n

阮龄 | 28岁 字节跳动前员工

\r\n

我上个月刚刚从字节离职,在字节工作了三年,目前正在准备入职新公司。在字节时,工牌主要是进公司的时候做验证身份用。此外,字节的办公区多而散,单是在海淀就有大大小小十几个工区,有一些岗位的员工需要出示工牌、坐接驳车在各个工区之间来回穿梭,这种情况下,便会有一些人经常戴着工牌。

\r\n

真正意义上的福利,我记得之前HR给的员工手册里面有提到,出示工牌,可以免费去新中关一个健身房健身。我听同事提到过,那家健身房要办会员,一年要一两万。除此之外,我就没有再感受到其他福利了。

\r\n

我看到脉脉上有段子说,在丈母娘要30万彩礼的时候亮出字节工牌,是能让她倒贴30万的。虽然没有免彩礼那么夸张,但在我老家,尽管父母、亲戚不知道字节跳动,但一说是抖音那家公司,大家都还是挺认可的。

\r\n

我个人觉得,在公司以外的场合戴工牌,挺羞耻的,有时和朋友出去吃饭,到了餐厅,发现还戴着工牌,就会立马摘下来。哪怕是我穿着公司的文化衫在街上,我都会战战兢兢谨言慎行,毕竟在当前这个信息高速传播的时代,自己一些无意识的不当行为被拍下来传到网上,很可能会影响自己在公司的人际关系。

\r\n

所以,在公司之外戴工牌、穿文化衫于我而言,反而是种束缚。不过其他人,可能不这么想。还在字节时,我身边就有同事,大家一起去酒吧,他会故意戴着工牌。虽然他没有明说,但我们觉得,他就是想秀一下大厂身份,满足一下自己的虚荣心,同行的人觉得还挺奇葩的。

\r\n

网上传淘宝上有专门卖高仿字节跳动工牌的店铺,不仅如此,小红书还有人晒买来的高仿工牌,假装已经入职了字节跳动。但是他连名字和工号都没有打码,评论区很快便被前来拆穿的字节员工占领,问他飞书上工号和名字都搜不到,是怎么拿到工牌的,而且他晒的工牌带子还是黑色的,不是官方蓝色的。

\r\n

其实,仅仅是字节跳动的工牌,并没有多高的含金量,毕竟这个庞大的组织现在员工已经超过了10万人,很多岗位招聘门槛是比较低的,并非能进大厂就意味着能力高,现在大厂的定义可能更在于“大”而非“厂”。

\r\n

在大厂,反而可能意味着加班比较严重,而且薪资福利可能也没有外界想象的那么好,毕竟工作时间比较长,算下来单位时间获得的效益并不算高。我离开字节就是因为不愿意再接受大小周、996,想在工作和生活之间寻求平衡。

\r\n

以前在字节时会觉得,它最大的敌人可能是其他大厂,但是在字节待了三年,经历了字节快速发展的几年,这个组织庞大之后,工作效率、部门间的协作都会存在一定的问题,现在我反而觉得,字节最大的敌人可能是它自己。

\r\n

工牌是大厂螺丝钉的编码,但离职交卡我还是会不舍

\r\n

张建国 | 30岁 网易前员工

\r\n

我在很多大厂待过,平时不常戴工牌,但基本上入职第一天,都会在朋友圈晒一下工牌,觉得是一个有仪式感的事。

\r\n

这里面让我印象最深刻的是网易。它的工牌用处很多,进出大厦、坐班车、去健身房、取快递、停车场停车,都会用到,其中最重要的福利是餐厅。

\r\n

网易的餐厅不仅味道好、用工牌免费,而且供应商每个月还会给我们发邮件,让我们投票,看看哪些窗口的菜要改善。我们经常调侃说,戴上这个工牌,我们就是丁老板养的一头猪,天天吃,我在网易一度吃得很胖。

\r\n

后厂村还有新浪、联想百度腾讯,虽然它们也有自己的餐厅,但很多员工都抱怨说不好吃。尤其是对面我新浪的朋友,老想来网易蹭饭,我们一张工牌只能给一个人用,我就去找不去食堂的同事借工牌,这个工牌还挺受邻居们欢迎的。

\r\n

我觉得字节跳动工牌只是一个段子。他们可能真的只是忘了摘。

\r\n

拿我的几次经历来说,我有几个朋友去了百度,有时候我们下了班会聚餐,一般他们都会姗姗来迟,戴着工牌就来了。有一次我们问,你们几个百度的,晚上下班吃个烤串儿怎么还戴着工牌?他们说,因为吃完饭一会儿还得回去加班,进大厦得刷卡,担心忘了。

\r\n

所以我觉得我们碰到下班之后还戴着工牌的人,可能是一会儿还得回去加班,担心摘了找不到,还有可能纯粹是忘了摘,不一定是在凡尔赛。

\r\n

当然,在一些人眼中,大厂是自带光环的。大厂工牌代表着你在面试入职的时候,PK掉了很多人,这是对你的一种认可。从大厂出来之后,的确职业选择也会多一些。但这也意味着你是一架巨型机器上的一个螺丝钉,工牌就像是螺丝钉上的一个编码,少了谁换了谁,这个机器不会受影响。

\r\n

我们所有人都有点像卖房中介或保险销售,和他们都得穿西服打领带一样,你是谁,你来自哪里,你是什么性格,都不重要,戴上工牌,你就是一个螺丝钉,看起来一样最好。

\r\n

离职后我其实还挺想保留工牌的,但按照规定得收回。我每次都挺不舍,倒不是对工牌不舍,而是对大厂的经历不舍。离开大厂之后,你还是一个小小螺丝钉的话,想要找到一个适合自己的机器,还是挺不容易的。

\r\n

我在大厂“绿牌”实习,团建经费、节日礼盒都没我的份儿

\r\n

李薇 | 22岁 某大厂实习生

\r\n

我目前大四,正在一家大厂实习,之前在另一家大厂实习了两个多月。我在这两家大厂实习期间,周围的同事都没有一直戴工牌的习惯,基本是上了班会把工牌摘下来放桌子上,下班刷了门禁,就塞包里带走。

\r\n

最近网上很多人吐槽,到处都能见到戴字节工牌的人,我觉得,原因之一可能是,字节工牌的照片可以自己选个性化的照片,展示自己的风格。这与其他大厂只能放证件照相比,还是有一定吸引力的。

\r\n

我觉得大家都是打工社畜,工牌没什么值得炫耀。不过,入职当天,我曾在社交平台晒过工牌和公司定位,毕竟实习offer是自己辛辛苦苦过五关、斩六将“卷”来的,这是对自己阶段性努力成果的肯定。

\r\n

虽然只是一张小小的工牌,但不同的工牌背后可能是不同的福利待遇,我就有过这样的亲身经历。

\r\n

在上一家大厂实习,工牌有蓝牌和绿牌的差别。一般蓝牌实习为校招实习,能够享受正常员工待遇,招的人数比较少,入职的难度较大,但转正机会比较大;绿牌实习为日常实习,一年四季都会有招聘,招的人比较多,但转正机会比较小,只能够享受部分员工待遇。也有一些外包岗位的工牌也是绿色的,以至于很多“绿牌”实习,经常会被当作外包。

\r\n

\r\n

来源 / Pexels

\r\n

在这里实习两个多月,蓝牌和绿牌背后福利和权限的差别,是比我想象中要大很多的。

\r\n

绿牌实习的员工福利和权限很少,比如内部很多学习资料,包括一些公司内部的线上大会等等,作为绿牌实习生我是看不到的,而且我也享受不到团建经费、节日礼盒等这些福利。我们组团建会带我去,但其实我是占用了组内其他同事的团建经费。隔壁组“绿牌”实习生有好几个,他们组团建的时候,实习生就不会被带上。

\r\n

除此之外,“绿牌”实习的两个多月,我没有自己独立的工位,也没有配备电脑。虽然导师会带领我做一些行业调研相关的工作,但会尽量避免我参与到部门的重要业务,而且我也不会知道部门工作的目标和规划,导师对我的期许就是把手头这些机械化的事情做好就行,我感觉自己就是一个工具人。

\r\n

虽然我们组里的工作氛围、同事都很nice,但我对工作内容不是很满意,而且“绿牌”实习所受到的限制,一直是我心里的一根刺,所以待了两个多月之后,我选择了离开。

\r\n

当然,这只是我的个人经历,“绿牌”实习也不能一竿子打死,可能每个部门和每个组的要求和氛围都不一样,而且没有“绿牌”实习这块垫脚石,我可能也很难拿到现在的实习offer。

\r\n

来到现在这个大厂,刚入职的第一周,我有点受宠若惊。我入职第三天,就参加了部门的重要会议,还有面对面跟事业群大老板聊业务的机会。我觉得,我在这个大厂实习不到1个月,收获远远超过了之前“绿牌”实习的两个多月。

\r\n

心仪公司的工牌就像北大学生证,恨不得纹在身上

\r\n

小鹿 | 30岁 某大厂员工

\r\n

我觉得对工牌的态度取决于员工对公司的认同以及业界对这个公司的评价。对我来说,喜欢的公司的工牌,就像我能进入北大,拿到北大的学生证,我恨不得纹在身上,走在大街上都告诉所有人我是北大的。

\r\n

我印象最深的是曾经去实习过的奥美。奥美是广告人心中的黄埔军校,即使是实习,之后有80%的可能性会找到一个还不错的相关工作。那边实习也没有那么容易,我当时也是前辈推荐才进去。有一次我看到旁边的姐姐面试来自北京某大学的实习生都面试了两个多小时。我们那时候实习工资是一天50元,很多人自愿不拿工资去实习都很难。

\r\n

在奥美实习,身边的同事、领导都特别厉害,专业上确实会有很大的成长。公司也非常注重文化建设,比如一年一度的D.O.DAY,全球奥美员工都会举办狂欢活动,大佬们会给5年、10年、15年的奥美人颁发奖章,这份荣誉每个人都非常想得到

\r\n

我认识的99%的奥美人在入职和离职那一天都会在朋友圈发工牌照片。我去的第一天拿到工牌后也发了,他们的工牌设计也好看,照片可以自己选择有个性的,我们还会专门为工牌买一个好看的工牌带,还不止一条,为了好搭衣服。离职的时候因为工牌要交回去,大家都会不舍,也会拍照。

\r\n

我当时在那里就很有自豪感,公司所有奥美元素装饰的墙面我都拍过照。就因为觉得这个公司很好,所以它的一切都变得特别好,工牌是最基本的。

\r\n

公司的周边也很洋气,它们的logo是红色的,所以会有红色的充电宝、本子、饭盒,当年有一款餐具,筷子上面都印着每个员工的名字。我至今还保留了不少周边,其中一个笔记本,我现在还在用。

\r\n

\r\n

来源 / Pexels

\r\n

这类型周边还会成为我们的纽带,所有曾经在奥美待过的人看到我在用的笔记本都会亲切地跟我说:“原来你是奥美的,我也是”,之后我们合作起来都会比跟别人更顺畅。从奥美离开后,在圈子里,只要提起我曾经是奥美人,大家的关系就像北大校友相遇一样亲切。

\r\n

毕业之后这三四年里,我陆续去了两家互联网大厂,这时候的工牌就相对没有那么有归属感了,它又回归到了一个工具本身的功能。因为公司有几万人,大家的工牌都一样,除了门禁、打卡、食堂吃饭之类的功能之外,没什么特别的。

\r\n

我们的工牌长得也千篇一律,上面的照片是入职第一天公司给现场拍的,比较正统,没什么特别想戴的冲动,唯一会戴着的原因是担心丢掉,因为补办要花200块钱。

\r\n

现在的工牌有一些福利就是公司行政可能跟周边的商户谈合作,有的地方能打个折,另外我们加班的话刷工牌会显示,可以兑换加班券,用来在便利店换零食。偷偷说一下,可以把工牌交给下班晚的人帮忙刷卡,就能拿到加班券,不过曾经有实习生因为这个被开除。

\r\n

字节跳动的人爱晒工牌,或者回老家显摆,我觉得很大程度上是因为字节在下沉市场业务做得比较好,比如今日头条,一些家长会觉得自己的孩子在这样一个人人都在用的软件的公司上班,非常自豪。另外字节可能年轻人比较多,更愿意高调张扬一些,觉得戴上工牌表示自己是有一份令别人羡慕的工作。

\r\n

领导能用工牌刷开不同楼层,却从来不挂在脖子上炫耀

\r\n

Galen | 40岁 某金融公司前高管

\r\n

我之前在一家集团性质的金融公司工作,集团资产过万亿,属于金融圈鄙视链上层的存在。总部大楼每天人来人往,但同时又戒备森严,重要关口都有保安把手,而进出大楼的凭证,就是工牌。

\r\n

我们的工牌,除了用来通行,还可以用来消费,公司的餐补都是打到工牌里,职级不同,补助金额不同。公司大楼里便利店、餐厅、花店、理发店、洗车店一应俱全,全部都可以用工牌支付。有时候,一些部门负责人,让下属去买东西,都是拿工牌去买。

\r\n

工牌还代表了持有人在集团的权力等级。

\r\n

工牌分三种:正式员工、外包团队、临时访客。每种工牌的颜色都不一样,功能和权限也不一样。正式员工的工牌照片,必须是正装照,公司会安排摄影棚统一拍摄;外包团队,协议时间不超过3个月的,工牌上都不会有照片;而临时访客的工牌只有编号,当天有效,过了12点自动失效。

\r\n

大楼的进出口很多,一层的各个门、地库都安装了闸机,都需要刷工牌才能进入。乘坐电梯同样需要刷工牌,有的楼层出了电梯,还有一层玻璃墙,需要再刷一次工牌才能进入。普通员工的工牌,只能到达他所在的楼层,以及大堂、车库、餐厅等公共区域,其他楼层都去不了。部门总经理以上的领导,可以凭工牌进入很多楼层。另外还有极少数的关口,只有集团少数几个人可以进。

\r\n

\r\n

来源 / Pexels

\r\n

公司还有一部VIP电梯,要中层及以上的人才能刷,普通员工进去,只有开门关门两个按钮能按得动,其他按钮都按不了。

\r\n

某种意义上,在我们公司,通过工牌的通行权限大小,就能判断出一个人的职位高低。正式员工的工牌外表看起来都一样,但权限差异非常大。如果你在电梯看到一个人经常刷开好多楼层,那么这个人估计是个领导。

\r\n

我很少把工牌挂在脖子上,因为那跟我西装革履的形象不搭。我们公司里有职级的人,从来都不挂工牌,反而是那些刚入职的小白领,会规规矩矩每天挂着工牌,中午吃饭的时候也会挂着。

\r\n

真正职位高的人,不必通过挂工牌来炫耀,在他们进入VIP电梯的时候,在刷开不同楼层、进入很多你根本不知道存在的地方时,高下立判。

\r\n

*应受访者要求,文中阮龄、张建国、李薇、小鹿、Galen为化名。

', '1621219652', '1621219652'); +INSERT INTO `article` VALUES ('11', '22', '成为老板的宠儿,千万别高兴太早', 'https://img.36krcdn.com/20210517/v2_d0ca1f8e4abb4aba8601b9cd9b5cb2ac_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '被老板青睐有好处是不用说的,但也会有负面影响。', '

编者按:本文来自微信公众号“哈佛商业评论”(ID:hbrchinese),作者:HBR-China,36氪经授权发布。

\r\n

被老板青睐有好处是不用说的,但也会有负面影响:招致同事怨恨,继而影响团队士气。假如你在上司面前受宠,该如何告诉他要更平等地对待所有人?如何抵制偏袒的风气,又不至于显得忘恩负义、影响人际关系?

\r\n

\r\n

出版了《HBR办公室政治指南》等著作的凯伦·迪隆(Karen Dillon)说,被上司垂青“既是好事,又是坏事”。好处很明显:能获得高质量任务、特别关注和组织内部信息。但这种特殊待遇是有价格的。迪隆说,“会招来同侪的敌意和怨恨”,让你的日子不好过。

\r\n

哈佛商学院管理实践教授、《自由飞翔》(Flying Without a Net)一书作者托马斯·德朗(Thomas J. DeLong)表示赞同,“上司偏爱的人常常遭到围攻,因为其他人嫉妒。被偏爱的人可能会以微妙或不那么微妙的角度受到意外的政治打击。”以下提供几条应对措施,以及如何促使上司平等关爱所有人的相关建议。

\r\n

反思

\r\n

迪隆说,受老板宠爱会令你在同事中处境难堪,不过要记住,上司不是有意害你的,“事出有因”。你赢得了上司的信赖和欣赏,但上司并不了解你的处境多么艰难,也不知道自己可能在无意间让你招致同事的怨恨,“破坏了工作环境”。在上司心中,你是有价值、值得尊重的员工,而在同事眼里,你是受宠的人。

\r\n

不过,一直当上司的宠儿,对自己的前途不一定有利。“你仰仗这个人的权势,假如这个人离职或被解雇,你就失去了后盾。”德朗说。还要想一想上司为什么看中你。“受宠的人知道如何逢迎上司,”德朗说,“这是一种心理上的合谋。你让上司感觉良好。”但总有一天你会失宠。

\r\n

留意他人的目光

\r\n

与上司关系亲近随意的时候,“很容易意识不到其他人的观感。”迪隆说。你是否经常不打招呼就随意进出上司的办公室?是否经常跟上司一起吃午饭?或者偶尔在走廊里跟上司扔橄榄球玩?“这些举动看似微不足道,但在外人看来十分刺眼,”她说,“其中有深意,其他人会做出解读。”要留意场合,有时候你要“注意跟上司保持距离”。

\r\n

德朗补充说,可以尝试保持结构上的距离。为了公平起见,你可以建议上司进行一项时间记录练习。他说,“比如可以说‘这个练习可能很有趣。记录自己的时间,看看自己跟谁在一起时间最长。然后想一想这种情况看起来怎么样’。你的目标是让上司更注意自己的行为模式。毕竟领导者做的每一件事都是信号,信号必须纯粹。”

\r\n

让上司平等待人

\r\n

作为受宠的员工,你也必须努力帮助上司“看到团队中其他人的价值”,迪隆如是说。“利用自己的地位把聚光灯打到别人身上,突出别人的功劳。”这不仅能促使上司平等地关注众人,还能让团队成员看到你在聪明地利用自己所处的平台。她推荐在公开场合和私下都这样做。

\r\n

比方说,可以给上司发邮件详细讲述某位同事为准备一场重要的报告而付出的努力,抄送给这位同事本人。还可以请上司在下次会议上表扬某位员工,感谢其辛勤工作。你的目标是促使上司“对该表扬的员工不吝赞美”。最重要的是,不要独占上司的关注和好意,不要利用这段关系占便宜。

\r\n

\r\n

直截了当

\r\n

可以考虑跟上司讨论自己的处境。德朗建议这样说,“我们关系太近了,影响了我跟其他人的关系。我不想被当作你的间谍。我必须跟你保持距离。”他预测,因为你很坦诚,上司“会更爱你”。你的坦白直接说明“你不只关注自己的事。”你传达的信息是:“这样对整个公司最好。”不过,迪隆建议谨慎触及这个话题,“你不会希望让上司处于防御状态。”她的建议是尽量“用自己的行动”引导局面,要积极、富有建设性。

\r\n

别八卦

\r\n

德朗说,“讨论其他人,当然比讨论体系或者理论有意思多了”,但跟上司八卦不是明智之举。“你可以说,‘我们必须谈谈我们聊的话题。很荣幸你与我分享这件事,但这样会影响我跟同事的关系,而且我不知道怎样处理这样的信息。’”坚持自己的立场。假如上司反复向你抱怨某位同事,德朗建议以“半开玩笑的支持语气”说,“‘我觉得你该把自己的想法告诉这个人了吧’。”

\r\n

你的目标是慢慢“训练”上司改正这个行为。迪隆说,不要对上司太严格。想一想:“上司是越界了吗?抑或只是在分享自己一闪而过的念头?”也许只要安静听对方说话就好。你还可以尝试“不动声色地保护同事”,或者补充背景信息。无论如何,“不要跟上司一起批判。”

\r\n

努力博得大家的好感

\r\n

因为受宠而引起别人怨恨,最好的应对方法也许就是“努力工作,成为所有人的好同事”,迪隆这样说。换言之,“不要只博得上司青睐,要让所有人喜欢你”。投入工作,为他人提供支持,密切关注其他团队成员在做什么,在有需要的时候提供反馈和帮助。你的目标是获得上司的认可,以及团队其他人的认可。“一个热心帮助、认真工作,而且在公私两方面都能提供支持的人,是很难被恨的。”

\r\n

\r\n

记住以下原则

\r\n

要这样做

\r\n
    \r\n
  • 考虑跟上司谈谈自己的处境,坦陈对团队的影响。

  • \r\n
  • 注意其他人的眼光,尝试与上司保持距离。

  • \r\n
  • 努力博取其他同事的好感。热心帮助且专心工作的人不太会招致怨恨。

  • \r\n
\r\n

不要这样做

\r\n
    \r\n
  • 对上司生气。他们可能并不知道自己令你在同事中处境艰难。

  • \r\n
  • 独占上司的关注和好意——要促使上司在公开场合认可其他人的价值和贡献。

  • \r\n
  • 跟上司一起八卦。要慢慢引导上司改正这种行为。

  • \r\n
\r\n

实践建议

\r\n

案例研究一:对同事抱有同理心,设法在公开场合和私下提供支持。

\r\n

戈登学院职业发展与联系中心执行董事亚历山大·劳瑞(Alexander Lowry)说,应对被上司偏爱引来的怨恨,关键是要记住一条黄金法则。

\r\n

“希望别人怎样待你,你就怎样待人。”他说,“想象自己站在其他人的立场上观察被偏爱的员工。(想一想:)如何在自己有后盾的时候为其他同事提供支持和帮助?”

\r\n

亚历山大曾在纽约一家投资银行一位名叫琼的上司手下工作。当时琼来到这家公司时间不长。“她很聪明,我们共事很愉快。”亚历山大说。

\r\n

琼对每个人都很好,但亚历山大毫无疑问是她最喜欢的。她把亚历山大的工位安排在自己办公室旁边。“所以她每次开完会回来,就在我那里停下来,告诉我会议内容,”他回忆道,“我的职务是她的副手,但其实我更像是事实上的部门联合负责人。”

\r\n

亚历山大与琼的密切关系被同事注意到了,一位叫雪莉的同事非常嫉妒。“雪莉是团队初期成员之一,知道自己的晋升与琼有关,”他说,“我变得好像是跟琼平等的另一个负责人一样,雪莉明显受不了。”

\r\n

为了打消雪莉的疑虑,亚历山大努力向她证明,自己将她的利益放在心上。例如,他经常让雪莉参加会议,解除其他高管并了解组织的工作重点。“我还会说出她做得好的地方,让琼认可她的贡献。”他说。

\r\n

“我希望帮助雪莉得到展示自己的机会。”

\r\n

亚历山大还努力成为雪莉的优秀同事。“我经常问她在做什么工作,有没有我可以帮忙的地方。”他说。

\r\n

雪莉很感激,与亚历山大建立起了稳固的同事关系。

\r\n

现在亚历山大给学生的建议是,要认识到这种处境中既有事业发展的机遇,又有隐藏的陷阱。“必须理解同事的感受。你要跟每一个人建立起稳固的关系,因为人际网络是对事业发展最重要的因素。”

\r\n

案例研究二:保持距离,不要跟上司一起批判同事。

\r\n

克里斯·李很了解被老板偏爱的感觉。他早期当过医疗经纪人,是团队里最年轻的成员。他的老板哈罗德特别喜欢他,在其他同事面前表扬他,还经常带他去吃午饭。

\r\n

吃午饭的时候,哈罗德经常轻蔑地评论其他同事。“有时候他会抱怨某位团队成员做的事,比如(他会说)‘那家伙上个月谈成了一笔大订单,所以现在在偷懒’,”克里斯回忆道,“这样让我很难办。”

\r\n

克里斯思考上司分享这类信息的动机。“我知道有时候人就是想倾诉,”他说,“我确定老板不需要寻求我的建议,问我如何应对员工。他就是想发泄自己的不满。”

\r\n

不过,听上司批判别人还是“会影响自己对别人的看法”,他知道必须纠正上司的这个习惯。

\r\n

克里斯开始“轻微质疑”哈罗德的预判,让对话变得客观一些,迫使哈罗德“退一步”考虑全局。克里斯没有参与过批判。

\r\n

“有时候就是重复他说的话,比如‘你说他上个月带来了一大笔生意,对吗?’或者如果上司把某位同事表现欠佳归因于懒,我会说‘也许他最近处境艰难’——不会分析和参与,毕竟不是我该评论的。”

\r\n

克里斯也很注意别人的看法,所以经常跟其他同事吃午饭,尝试与上司保持一定的距离。

\r\n

克里斯在那里干了两年,现在是大医院的高级营销经理,建立了职业发展咨询公司PurposeRedeemed。

\r\n

他还跟哈罗德保持着很好的关系。“与上司建立那种程度的信赖和默契是很难的,我绝不会觉得是理所当然,”他说,“他帮我推荐其他工作,还请我合作过一个项目。”

', '1621219680', '1621219680'); +INSERT INTO `article` VALUES ('12', '22', '8 本好书,教给我了 9 条重要人生经验', 'https://img.36krcdn.com/20210513/v2_fcffdaa714af493fa3dbf00f6c0736bc_img_jpeg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '简单化之后,我发现生活变得更好了。', '
\r\n

神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。

\r\n
\r\n

编者按:阅读一本书的时候,你其实是在窥视和借用别人的大脑。诚然,并不是所有的书都是好书,但一本好书可能会给你的生活带来持久的改变,让你成为更好的自己。作者在文中向我们分享了8本书,以及她从这8本书中学到的9条经验教训,其中包括简化生活、拥抱消极情绪、保证睡眠等等,希望对你有用。文章作者Sinem Günel,原文标题:9 Actionable Ideas From Books That Had a Lasting Impact on My Life

\r\n

\r\n

图片来源:Sincerely Media on Unsplash

\r\n

20世纪80年代,我爷爷离开了故国,来到奥地利当建筑工人。回忆当时,他说自己不得不忍受艰苦的生活条件,因此后来他不断地告诉我要努力学习,以便有一天我能找到一个稳定的工作,比他有更好的条件。

\r\n

幸运的是,我从第一天开始就喜欢学习、阅读和上学,所以十多年来,我听从了他的建议,茁壮成长。

\r\n

但是在我开始商科学习一年半后,我对正规教育的热爱逐渐消失了,我没有从大学毕业。

\r\n

相反,我发现了个人发展的世界,并意识到正儿八经的科班教育并不能在现实生活中对我有所帮助。

\r\n

我意识到我缺乏社交技巧、自信和生活的使命感。我很生气,因为我学到的东西都不重要。我花了几百个小时学习拉丁语、生物、化学和历史——所有的话题这些我其实都没多少兴趣。

\r\n

幸运的是,我把挫折变成了我的目标。

\r\n

首先,我把大部分时间花在了个人成长上。

\r\n

其次,我组织了免费的讲习班,把我学到的东西教给年轻人。

\r\n

第三,我写了一本书,成为了一名认证教练,在23岁的时候把我热衷的事情发展成了一门价值6位数的生意。

\r\n

如果我爷爷还活着,他可能会让我完成学业。然而,事实是,下面这些书带给我的远比15年的正规教育要多的多。

\r\n

当我简化生活,减少噪音,享受我喜欢的事情时,我的生活变得更好了

\r\n

Leo Babauta的《少做的力量》(The Power of Less)告诉我,我可以通过少做得到更多。

\r\n

在我人生的大部分时间里,我相信,我需要做的不仅仅是竞争,而是不断地与自己战斗,对遇到的每一个机会说“是”。

\r\n

随着时间的推移,我明白了,所谓充实的生活,就是专注于最基本的事情,把其他的事情都抛到一边。

\r\n
\r\n

做更多的事情意味着你可能会做很多不重要的事情,同时你会过度劳累,压力也会很大。

\r\n
\r\n

与其做更多的事情,不如专注于做那些让你走得更快、帮助你实现真正重要的目标的事情。

\r\n

每一天就像一张白纸,当你写满后,你可以把它保存起来,你可以把它揉成一团,你也可以把它扔进垃圾箱,任其自生自灭。

\r\n

你是否曾因为无法放下过去继续前进而感到痛苦?

\r\n

好吧,你不是一个人。

\r\n

让过去过去,说比做容易,但是你可以从一个简单的办法开始:先让每一天过去。

\r\n

在《继续前进》(Keep Going)一书中,Austin Kleon分享了许多小贴士,帮助你在不知所措的时候继续前进。

\r\n

把每一天看作是空白的一页,合上整本书来结束每一天,这让我感到更加放松和平静。

\r\n

在过去,我经常因为犯了错误或没有完成的任务而难以入睡。现在,我面带微笑结束每一天,允许自己不完美。有时,我很骄傲,有时,我觉得我浪费了我的一整天,有时,我只想忘记一切。

\r\n

但是不管我的感觉如何,我一定要结束这一页,重新开始新的一天。

\r\n

没有人需要意志力

\r\n

《如何聪明地做笔记》(How to Take Smart Notes)一书的作者Sönke Ahrens从两个方面改变了我的生活:

\r\n
    \r\n
  • 它说服我开始使用Zettelkasten法来组织和管理我的知识、想法和资源。

  • \r\n
  • 它告诉我自律与我们的环境直接相关,而与我们的意志力无关。

  • \r\n
\r\n

正如Ahrens所写的:

\r\n
\r\n

周围没有巧克力棒时,我们压根就不需要忍住不去吃它。我们有想做的事情的时候,我们压根就不需要意志力去实现它。

\r\n
\r\n

如果某件事真的很有意义并且很容易解决,那么你就可以轻而易举地完成它。

\r\n

如果你不知道你做某件事的原因,并且在这个过程中面临很多障碍,你很容易就放弃了。

\r\n

所以,不要再依赖你的意志力或自律了,着眼于创造环境、养成习惯,让你轻松地成为最好的自己。

\r\n

你是你选择让什么进入你的生活,你最后就会变成什么样子

\r\n

我从Austin Kleon那里学到的另一个教训是,太阳底下无新事,只不过这一次是来自他的《“偷”师学艺》(Steal Like An Artist)一书。

\r\n

每当我们认为自己创造了一些新的或独特的内容时,我们通常只是将一些已经存在的内容混合在一起

\r\n

Kleon说,我们是各种影响的总和。这就是为什么有意识地选择你消费的信息、你见的人、你做的项目是如此重要的原因了。

\r\n

你周围的事物塑造了你,所以不要让任何事物或任何人占据你生活的主要位置,如果它不能代表你理想的未来的话。

\r\n

我可以共同创造我想要看到的世界,通过调整良好的情感,并将它们导向我的欲望

\r\n

作为一个青少年,我认为生活需要艰难一些。

\r\n

我周围的大多数人都在不停地抱怨现状,却从未尝试改变它。所以我抱着类似的心态,认为我无法改变自己的命运。

\r\n

如今,我的看法正好相反。我通过表现出我最好的一面来塑造我的经历和情绪。

\r\n

我不是成为环境的受害者,而是通过把精力集中在我想要建立的事情上,共同创造我的现实。

\r\n

最重要的是,我允许自己在做这些事情的时候享受乐趣。正如Gaby Bernstein在她的《超级吸引者》(Super Attractor)一书中所说的那样:

\r\n
\r\n

当你倾向于快乐时,你就会被引导向快乐。

\r\n
\r\n

感激那些给你带来不适的事情,因为你会发现你仍需要治愈

\r\n

《超级吸引者》教给我的另一课是,面对不舒服要泰然自若。

\r\n

我们大多数人在“要么迎敌要么逃跑”的模式下长大。一旦我们感到不舒服或面临一个问题,我们就试图避免这种情况。

\r\n

乍一看,这似乎很有效,但事实是,它阻碍了我们的康复和成长。

\r\n

通往持久成功的道路包括感觉不舒服和面对你的恐惧。只有我们敢于面对自己的阴暗面和让我们感到不舒服的事情,我们才能成长。

\r\n

所以,不要再试图控制你的情绪了,要学会接纳和感受所有的情绪——包括消极的情绪。

\r\n

只有当你相信你的系统,真正知道一切都会被处理好,你的大脑才会放松下来,专注于手头的任务

\r\n

《搞定:无压工作的艺术》(Getting Things Done)不仅是一本畅销书,而且是一本提速增效的巨作。

\r\n

这本书着眼于建立一个能让你更清楚地思考和更高效地完成工作的系统。正如作家David Allen所说的那样:

\r\n
\r\n

你的头脑是迸发想法的,而不是容纳想法的。

\r\n
\r\n

如果你想让你的大脑产生伟大的想法,放松而不感到内疚,你需要建立一个对你有利的效率系统。

\r\n

尽管我并不适用这本书中的所有规则,但这本书让我能够想出自己的方法来节省时间和脑力。

\r\n

你的快乐会让你周围的人也感到快乐

\r\n

在《幸福哲学书》(The Happiness Project)中,Gretchen Rubin介绍了12种实用而简单的方法,通过小小的改变来提升你的幸福感。

\r\n

虽然我很喜欢每一个建议,但对我帮助最大的是,为你的幸福而努力既不是自私,也不是无知。

\r\n

你不是生来要过悲惨的生活的。你应该得到幸福。但更重要的是,为了自己的满足而工作也能让你周围的人更快乐。

\r\n

如果让我选择是与积极快乐的人相处还是与消极沮丧的人相处,我会选择前者。

\r\n

我不想浪费时间和消极的人在一起,你也不应该。

\r\n

好的睡眠是好的生活的关键

\r\n

好的睡眠就是好的生活。这是Shawn Stevenson在他的《这本书能让你睡得好》(Sleep Smarter)一书中分享的关键信息。

\r\n

Stevenson表示,你的精神、情绪或身体表现都受到睡眠质量的影响。

\r\n

有时候,一个好的睡眠是高效、快乐和健康的关键。

\r\n
\r\n

早就有数不胜数的研究表明,当你睡眠不好时,你的效率会降低,更缺乏创造力,更有压力,表现更差。

\r\n
\r\n

如果你没有得到足够的高质量睡眠,你只能发挥出你全部潜能的一小部分。所以不要再想着多回几封邮件了,还是早点睡觉吧。

\r\n

写在最后

\r\n

每当我读一本书的时候,我都觉得这是在借用别人的大脑。

\r\n

诚然,并不是所有的书都是好书,很多书都不值得一读。但如果仔细选择并认真阅读,一本好书可能会给你的生活带来持久的改变,让你成为更好的自己。

\r\n

在最糟糕的情况下,它可能帮助你从嘈杂的世界中逃离,帮助你在忙碌的一天结束时放松。无论哪种方式,你都不会后悔花在阅读上的时间。

\r\n

最终,书籍可能会帮助你成为最快乐、最充实、最有帮助的自己。

\r\n

译者:喜汤

', '1621219749', '1621219749'); +INSERT INTO `article` VALUES ('13', '22', '供需错配的考研领域,考虫正在下一盘大棋', 'https://img.36krcdn.com/20210515/v2_6eaa747d5c834f9ea56dba8d3809450c_img_jpg', '低调的考虫在考研业务上做对了什么?未来有哪些战略布局?它会是下一个职教巨头吗?', '
\r\n

“如果说职业教育领域还有什么特别值得关注的低调公司,我第一个想到的一定是考虫”。一位教育创业者近日和36氪的交流中这样评价。

\r\n
\r\n

考虫确实有些特立独行——一方面,它在短短几年时间里,变成最大的大学生在线教育品牌之一,并且深受用户喜爱:“好玩,专业,有调性”;另一方面,行业端却异常低调,除了三年前高瓴领投的D轮融资消息,找不到任何新闻,也极少对外发声。

\r\n

2020年,考虫考研课程用户突破120万人,每3个考研的大学生里就有1个在使用考虫,考研的正价课订单量也跃居行业第一。百万级别的考研学员数不仅意味着考虫跻身主流互联网教育公司,也为开启下一个增长曲线打下良好基础。

\r\n

那么,低调的考虫在考研业务上做对了什么?未来有哪些战略布局?它会是下一个职教巨头吗?36氪和考虫创始人李好宇进行了一次深度交流,力争还原一个真实的考虫。

\r\n

供需错配下的结构性红利

\r\n

投资界一直流传一句话:“好的投资机会是罕见的,赢面比较大的时候,就应该下重注。”

\r\n

识别大的投资机会方面,媒体出身的创业者往往具备天然的优势。李好宇先后就职于老牌IT媒体《电脑报》、网易门户科技频道,2013年创办首个教育媒体多知网。资深媒体人的他在2015年,发现了第一个结构性的行业机会——直播大班课。

\r\n
\r\n

“当时职业教育万元左右的面授是主流形态。用户如果想选择相对轻度的学习方案,主流的供给只有图书和录播课。买书自学,每个人理解能力不一样,解析能不能看的懂?看了解析能不能举一反三?很难。录播课缺乏交互,也很难坚持。所以需求挺旺盛,没有真正好的解决方案。”李好宇对36氪回忆道。

\r\n
\r\n

五年前,两百多万人考研,全国面授大概服务十多万名学员,90%以上同学的需求根本无人关注。这样的趋势下,谁能提供更有效率、更符合轻度学习需求的备考产品,谁就有机会爆炸式增长。

\r\n

显然,直播大班课+图书(系统班)的产品模式很好的解决了需求——对比图书有成体系的课程讲解,对比录播课又有很好的交互体验和互动氛围,对于老一代的供给,系统班的体验是碾压式的。在那个场景下,很好的实现了供需匹配,也就带来了爆发式的增长——在考虫上线的前几年,没有一个销售人员,课程全部需要定闹钟抢购,最高纪录是30秒抢购了5000单课程,“考虫宕机”也经常被推上微博热搜。

\r\n
\r\n

“这是当时的大趋势,能看到供需错配产生的大的时代机会,本身也是一种幸运。”李好宇说。

\r\n
\r\n
\r\n

为什么会出现供需错配?简单的原因是需求一直在变,供给(产品/服务)更新和变化的速度慢了,量变积累导致质变,在一个关键的时间节点上,可能就会有新的结构性机会出现——这也意味着,无论有多辉煌的历史,谁都不能躺在功劳簿上,因为行业永远都可能有新的供需错配的机会。“我一直都在寻找这样新的机会”,李好宇说。

\r\n
\r\n

考虫的底层价值

\r\n

教育是个非标服务行业,用户在选择时往往会比较在意品牌。“这个品牌,一方面是专业性积累带来的结果保证,另一方面就是你展现的产品观和价值观。”

\r\n
\r\n

“如果拉长到五年十年这个维度,一家公司的胜利最终一定是价值观的胜利。”在李好宇看来,公司价值观会外化为产品观,产品和用户直接打交道,构建公司的核心价值。

\r\n
\r\n

考虫把用户放在第一位,也写进了公司价值观的第一句“和用户做朋友”,并且从中获益——今天,百万级别的正价课付费学员中,四六级学员90%来自于口碑转介绍,考研60%以上来自于口碑转介绍。也就是说,大部分用户对产品满意,并且推荐给了身边的人。

\r\n

“用户至上”的底层思维,第一步是围绕用户需求做产品设计。“产品的诚意是最大的诚意”,所以考虫内部有个不成文的规定,课程产品设计毛利不超过60%。背后的核心逻辑在于:A企业100元售价卖20元成本的产品,毛利80%;B企业100元售价卖40元成本的产品,毛利60%,交付成本差一倍,用户体验差距也是一倍。A公司为了劝说用户放弃同等售价但体验更好的B产品,需要多花出可能20元以上的营销费用。结构上来讲,拥有更高毛利的A公司未必拥有更高的运营利润率。用户体验提升可以降低营销费用,因为用户永远是最聪明的,20元和40元成本的产品,会倾向于更扎实的40元成本产品。这也是考虫在产品上能够转化效率远高于同行的真正原因。

\r\n

更重要的原因是,毛利可以设计和控制,营销费用的定价权掌握在别人手里。与其将钱花在广告渠道上,不如让利给用户,也就是设计合理毛利产品,增加转介绍的比例。“我希望这个生意,是能五年十年之后持续赚钱的,而不是今年投放有渠道红利,就赚一笔快钱,明年后年就不知道怎么活下去了”。李好宇对36氪如此解释坚持合理毛利的原因,这也是他一直坚持的长期主义。

\r\n

正是因为坚持以用户为中心,考虫在后端做了大量的投入,比如职业教育公司,教研工作很多由老师兼职负责,考虫不仅很早配备了独立的教研团队,人数上甚至和教学团队相当;技术方面,从产品上线第二年,公司只有十几个人的时候就开始研发自己的直播系统,今天流量消耗能做到主流方案的五分之一以下,一小时视频仅需25兆,大大降低了学生在校园听课的门槛。“我们不是技术上最好的直播系统,但一定是最适合大学环境里使用的直播系统”,李好宇说。

\r\n

和商业模式匹配,并且长期能够从中获益的价值观,才是好的价值观。考虫把用户放在前面,不仅获得了品类超过60%以上的转介绍率,还收获了大量用户的信任。在职业教育普遍头疼渠道费用贵,LTV短的今天,依赖高性价比的产品和用户的信任,考虫顺利实现了扩科。除了四六级和考研,今天业务线也拓展到教师、公考、财经、留学等领域。

\r\n

考虫长出“新触角”

\r\n

产品是在线的大班课程,打法是基于用户的互联网思维。过去几年,考虫可以算是非常典型的在线教育公司。实际上随着业务的发展,为了更好服务用户,考虫也正在长出新的触角——今年三月开始,布局线下业务。

\r\n

为什么布局线下,跟考虫的节奏有关。李好宇在内部提出“深度场景+重连接”的方向,深度场景指产品更加多元化,能够解决更多复杂的需求,提供更深层次的用户价值,比如在线产品,探索期的双师班,今年增长200%;再比如学习规划、择校、定向专业课等场景;重连接是指能够有更多方式,积极主动地影响用户,产生更好的备考效果。

\r\n

在这样的方向里,线下显然是必选项——即更深也更重。

\r\n

考虫的第一款线下考研产品,是今年3月份开售的考虫Space业务,集学习和生活于一体的考研线下空间,第一批Space校区分布在郑州、济南、西安和武汉。

\r\n

\r\n
\r\n
\r\n

“它更像是针对考研尤其二战用户的自如友家,给大家一个舒适的备考环境,配合我们的在线课程使用”,李好宇解释道。

\r\n
\r\n

除了Space业务,线下课程序列也在筹备中。据了解,短短两个月,考虫已经开设8个省级分校,年内计划10-12个,明年完成15个以上分校的布局。高校渠道方面,全国共有1200所本科院校,目前考虫已经覆盖了30多所高校,未来希望三年时间,深度覆盖超过600所高校。

\r\n

\r\n
\r\n

“做线下对我们挑战很大,机会更大,也是我非常看好的结构性机会。目前线下需求旺盛,供给都是低质高价,很多机构都在割韭菜。我们希望从用户本位去设计产品,坚持高性价比的打法,给这个行业带来一些改变,这也符合我们一贯的理念”,李好宇说。

\r\n
\r\n

客观来讲,线上拥有高渗透率和良好口碑的考虫,做线下确实有独到优势,加之去年疫情导致一些机构元气大伤,考研行业或许真的到了变革前夜。

\r\n

在公司内部,李好宇提出了三年时间做到考研线下正价课学员数第一的目标。线上考研做到订单量第一,从18年学科布局完成开始算整整用了两年时间,而线下标准化程度更低,各省/校之间情况也更复杂,三年时间,这个目标确实有难度。

\r\n

当然诱惑也足够大——考研辅导超过150亿的市场规模中,接近百亿是线下面授,“先行者”考虫能否在考研业务上搅动风云,值得拭目以待。

', '1621219797', '1621219797'); +INSERT INTO `article` VALUES ('14', '22', '教培巨头“交了学费”,但还顶风违规?', 'https://img.36krcdn.com/20210515/v2_da4c3a60405b426480258e12e6d4af8c_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '教培机构想做大,必先合规。', '

编者按:本文来自微信公众号“子弹财经”(ID:wwwhygc),作者:黄燕华,编辑:蛋总,36氪经授权发布。

\r\n

最近,国家对教培行业“强监管”的信号正在密集释放。

\r\n

4月23日,学而思网校、高途课堂、网易有道精品课和猿辅导这4家机构遭北京市教委点名通报;4月25日,跟谁学、学而思、新东方在线和高思被北京市市场监管局顶格罚款50万元;5月5日,重庆市教委及市场监管局联合发文,对学而思、新东方等18家机构通报;5月10日,北京市市场监管局向作业帮、猿辅导两家机构分别开出250万元罚单。

\r\n

在短短18天内的4次违规通报中,仅学而思就出现了3次,新东方、高途(前身是跟谁学)和猿辅导也各出现了2次。

\r\n

客观来说,作为行业排头兵,学而思、新东方等机构对教育政策的研读和理解程度理应要高于中小机构,但它们仍触碰了监管红线,因而遭到监管层的严厉点名,难免也带有“示范作用”的意味。

\r\n

不过,监管层雷霆出击,可以在短期内缓解和遏制教培行业乱象,但若要从根上整治,绝非一日之功。

\r\n

1、大机构为何屡遭点名?

\r\n

当前,头部教培机构已成为监管部门重点“盯紧”的对象。

\r\n

“其实,很多中小型教培机构一直都无证办学,超纲超前教学的情况也十分普遍,相关主管部门为何总通报大机构,却鲜少提及中小机构呢?当然,监管是为了安全规范,但是不是也要公平人性化一些呢?”近日,从事教育行业多年的陈峰(化名)在其朋友圈发表了这样一条动态。

\r\n

很明显,陈峰在为被点名通报的头部机构们喊“冤”。那它们真的“冤”吗?答案是:未必。

\r\n

「子弹财经」了解到,上述头部教培机构确实存在触犯“红线”的问题。根据最近几次的官方发文通报,市教委与相关部门经查发现,头部机构涉嫌虚假宣传、超纲教学及提前招生收费等违规问题。

\r\n

“这类问题已经不是存在一天两天了。”在教培行业摸爬滚打了十余年的龚伟(化名)向「子弹财经」坦言。

\r\n

事实上,上述机构的违规行为与之前监管层发布的政策法规相悖。比如招生收费问题,早在2018年8月,国务院办公厅就曾印发了《关于规范校外培训机构发展的意见》,其中特别规定中小学校外培训机构不得一次性收取时间跨度超过3个月的学费。

\r\n

2019年7月,教育部等六部门又联合印发了《关于规范校外线上培训的实施意见》,要求按课时收费的,每科不得一次性收取超过60课时的费用;按培训周期收费的,不得一次性收取时间跨度超过3个月的费用。

\r\n

然而,即便有相应的文件出台,但机构们为了生存发展总是“上有政策,下有对策”,违规的现象难以杜绝。

\r\n

而此类违规情况也发生在中小教培机构身上,为何它们总能“幸运”躲过监管?一个重要原因是,相比中小机构,“头部机构遭点名通报”带来的示范效应更明显。

\r\n

无论是品牌影响力,还是覆盖用户数,抑或是辐射范围,中小机构均不及头部机构。向头部机构“动刀”,更能体现相关部门对教培行业乱象整治的姿态与决心。“同时也在向整个教培市场传递,之前的那些政策发文再也不是说说而已,而是要动真格的了。”资深教育投资人徐华对「子弹财经」说道。

\r\n

此外,从某种程度上来说,教育相关部门对头部机构的取证要比中小机构更容易。“大机构员工多,发展规模大,违规行为相对更明显。”徐华称。

\r\n

当然,还有一个原因在于,点名头部机构可以起到威慑其背后大资本的作用。毕竟,头部资本的疯狂涌入,一定程度上也让教培行业乱象变得更为明显。5月7日,俞敏洪也曾公开表示:“资本把本来慢热型的教育,催生成了快热泡沫。”

\r\n

业内人士普遍认为,当下监管层对教育行业的整顿也将促使资本与机构回归理性,转而聚焦教育的本质。

\r\n

2、顶风违规的背后

\r\n

按理说,头部教培机构对于教育政策的研读和理解程度一般要高于中小机构。自开年以来,国家监管层面多次下发文件要求各机构整顿,且党媒央媒也频繁发文“敲打”在线教育行业,直指乱象。(详见此前报道《教师资质监管风暴,席卷在线教育机构》《从“弹药”被严管,看教育机构的“张良计”》《“被盯上”的在线教育》

\r\n

然而,在强监管风暴袭来后,各机构未能及时做好应对措施,因此有了4月以来的各种被点名、被通报与被罚款。

\r\n

而且,上述提到有头部机构受到“顶格处罚”,这算是一种性质较为严重的处罚。百度百科对它的解释是:顶格处罚是指行政机关适用法定罚款幅度上限做出行政处罚,是一种较重的行政处罚措施,对行政相对人的利益影响较大。

\r\n

但在严格的监管手段下,“顶风违规”的行为还是发生在了头部教培机构身上。

\r\n

至于原因,其实不难理解——为了实现业绩的快速增长。对于很多非上市头部机构来说,无论是启动下一轮融资还是冲刺IPO,都需要业绩增长作为支撑。对已经上市的头部机构而言,业绩表现更是其股价的“晴雨表”。

\r\n

如果只是普通的业绩增长,头部机构大可不必“焦虑”。可问题是,资本市场对头部机构的业绩增速要求往往很“苛刻”。

\r\n

龚伟向「子弹财经」透露,某知名上市教培企业创始人曾多次说过,为了让股价快速增长,投资人要求他将公司年营收增速做到30%以上,以该公司当时营收体量,意味着公司每年需要新增几十亿的收入,在这位创始人看来,新增几十亿收入,他完全可以做出一家新的上市公司。

\r\n

所以说,无论上市与否,头部教培机构们都面临着巨大的业绩增长压力。

\r\n

此外,头部教培机构们还面临来自同行的竞争压力。“要知道,很多竞争对手都在激进突围,不断扩大市场份额,如若不跟进,头部机构难保不掉队。”龚伟表示。

\r\n

当然,头部机构可以通过加大对教研、师资等方面的投入,提升教学质量、转介绍和续报率,进而获得增长。但问题是,这种方式收效相对较慢。

\r\n

而加大前端投放力度,给头部教培机构带来的增长效果显然更明显且快速。“更重要的是,当越来越多的机构热衷于前端投放获客的时候,不管你是大机构还是中小机构,也不管你的主营业务是线上或是线下,其实都很难再做到‘洁身自好’。”徐华对「子弹财经」说。

\r\n

正因此,很多公司将更多的钱花在低价促销、电销团队扩充等方面。以新东方在线为例,公开信息显示,截至2020年5月31日,该公司拥有全职雇员和兼职雇员分别为7094名、6683名。而上一财年末(截至2019年5月31日),这两个数字分别仅为1690名、4545名。

\r\n

在龚伟看来,“当前违规违法成本低”也是头部教培机构敢于“铤而走险”、屡碰监管红线的原因之一。“几十上百万的罚款,对这些大机构来说,并不多。”他说。

\r\n

或许,教培巨头们交了这笔“学费”后,也未能马上整治好当前运营模式存在的违规之处,毕竟行业的乱象由来已久,并不会一朝一夕便治理好。

\r\n

3、整治乱象非一日之功

\r\n

在线教育从业者李琛(化名)向「子弹财经」透露,遭官方屡次点名通报后,某些头部教培机构并未真正停止“暑秋联报或秋季续报”的行为。“它们依然向学员家长一次性收取超过三个月的学费,还通知未续报的家长,如果现在不续报,过了续报截止日期就无法享受当前特惠。”

\r\n

甚至有头部教培机构直接向学员家长表示:如果现在不续报,将面临关班(课程关闭)的结果。“这是典型的吓唬家长的行为。”李琛直言。

\r\n

究其背后原因,李琛认为,一来,头部教培机构由于规模较大,层层调整,需要一定的时间,不是说调整就能马上调整好的;二则,头部教培机构还是抱有一些侥幸心理。“毕竟,几百万的罚款对他们来说真的不多。”李琛说。

\r\n

不过,资本市场对头部机构频遭监管“连环拳”的反应还是十分直接的。

\r\n

「子弹财经」注意到,截至5月13日收盘,高途、新东方、一起教育和好未来等机构的股价分别大跌15.1%、14.42%、14%和11.13%。而在此前的一个超重磅消息是,两家在线教育巨头分别收到了北京市市场监管局开出的250万元罚单。

\r\n

需要提及的是,今年以来,在线教育中概股集体表现不佳。以高途(前身是跟谁学)为例,该公司股价已从2021年1月27日的最高点149.05美元/股跌至2021年5月13日的20.36美元/股,短短不足四个月的时间,股价暴跌了86.34%。

\r\n

众所周知,一些非上市头部在线教育公司在近几年的融资估值很大程度上是以高途在二级市场的估值作为参考的。所以,高途的股价走势也证明了过去资本市场对在线教育的估值或许存在偏高的问题。

\r\n

在这种情况下,当前非上市的头部在线教育机构若想再融资则显得尤为困难。毕竟,按照它们现在的高估值,很多投资人会望而却步,而如果通过自降估值的方式去融资,老股东们基本也不会同意。“所以,这些机构现在处于‘骑虎难下’的尴尬局面。”龚伟说。

\r\n

不过,在某种程度上说,官方点名通报其实有利于头部机构跟资本议价。

\r\n

龚伟表示,官方点名通报之前,头部教培机构基本都面临来自投资人的增长压力。而此番点名通报后,头部机构可以此为由,将更多的时间和精力投入到教学研发、产品迭代和技术升级等方面。

\r\n

在徐华看来,一些头部教培机构会因此自查并有所调整,比如开始聚焦教学教研,不再盲目地做一些违规的事。“毕竟,他们也都看到国家对教培行业乱象整治的决心。”

\r\n

但他同时也提到,一些头部机构难免再违规。“毕竟,短期来看,多花点钱在前端营销获客,要比做好后端教学教研服务来得更实际些。”

\r\n

而作为监管背后保护的对象,家长们受“监管层点名头部机构”这一影响并不大,想报班的还是会报班。

\r\n

“家长对教培机构的选择行为难改变。”徐华解释,在如何科学教育孩子的问题上,很多家长由于缺乏专业知识,往往会认为机构超纲超前教学有利于提升孩子的学习成绩。所以,从短期来看,很多家长依然会基于口碑和广告两方面选择机构。

\r\n

不过,家长的教育支出费用或将被提高。因为监管趋严之下,很多机构不排除由于经营压力大而做出课程涨价决定的可能性。“一旦涨价,多出来的费用都是家长买单。”李琛说。

\r\n

此外,在李琛看来,如果很多教培机构真的不超纲超前教学,与学校学习进度保持一致,一些孩子学习成绩或因此下滑,进而给他们的父母带来更大的教育焦虑。这就意味着家长们对超前教学的需求不会在短期内消失,机构也无法立马停止相关的课程设置。

\r\n

至于整顿行为对行业的影响,则需要分时间段来看。

\r\n

从短期来看,教培行业乱象问题会因此得到些许缓解,但要想从根本上杜绝显然需要更长的时间。

\r\n

徐华认为,监管至少需要持续两年,且全国各地均做到对违规违法行为发现一起、查处一起,才能真正把教培市场带回正轨。“否则,就是野火烧不尽,春风吹又生。”

\r\n

4、结语

\r\n

可以说,教培市场的监管巨浪已掀起,部分头部机构因此“交出的学费”虽不高,但足以给行业“上一课”。更重要的是,类似的行业强监管并不会在短期内结束。

\r\n

触碰监管红线的教培机构,尤其是头部机构要“悬崖勒马”,主动承担起社会赋予的更多信任与责任,做好教学教研服务,真正回归教育本质,而不要为了讨好资本,继续迷恋于广告营销大战,透支广大家长对自身的信任。

\r\n

毕竟,支撑一家教培企业活多久、走多远的最关键要素不是营销,而是实实在在的口碑。

', '1621219833', '1621219833'); +INSERT INTO `article` VALUES ('15', '24', '我是特斯拉车主,我该被歧视吗?', 'https://img.36krcdn.com/20210517/v2_57a52553c5f943d89b9175e466614b82_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '虽然当前遇到“刹车失灵”的车主是极少数,但绝大多数车主或被动地与之产生关联,或正在担忧自己遇到这一情况。', '

编者按:本文来自微信公众号“新浪科技”(ID:techsina),作者:努力码稿的小浪,36氪经授权发布。

\r\n

\r\n

特斯拉女车主维权“后遗症”:普通车主们为何要遭全民嘲讽?

\r\n

特斯拉车主维权事件仍未平息。

\r\n

舆论犹如一把”镰刀”,割裂特斯拉品牌的同时,也在误伤着大量的特斯拉车主。在电商平台上,“远离特斯拉”、“刹车失灵”、“防止追尾,请特斯拉超车”的车贴销量走俏,用人将其贴在爱车上,以“嘲讽”马路上的特斯拉车主们。

\r\n

这种怪异的现象让普通特斯拉车主们很受伤。终于有人按耐不住,一纸“状书”对张女士(上海车展特斯拉展台维权当事人)提起民事诉讼,要求张女士赔偿精神损失费570元,并直言其本人和身边其他的特斯拉车主在日常生活中遭到了讥讽、嘲笑甚至是人身攻击。

\r\n

据新浪科技了解,准备对此次维权行动造成的负面影响采取法律行动的特斯拉车主并不止一位,随着舆论的持续发酵,越来越多的车主希望通过法律途径,扭转当前的被动局面。

\r\n

但在旋涡中,每个人都身不由己。“维权女车主”曾经是每个特斯拉车友群的主要话题,但随着时间的推移,这些讨论变成了站队、讨伐、申诉……

\r\n

特斯拉车主意欲联合起诉女车主

\r\n

4月的一个下午,就在一位准备提车的特斯拉车主在微博上找到了特斯拉对外事务副总裁陶琳,以提建议的口吻告诉后者:“请贵公司的法务部门发律师函或起诉有些无良媒体,现在但凡特斯拉的车子发生事故都把责任推给车子。”

\r\n

他直言,这个新闻情况已经严重影响了车主平时的生活权益,被人指指点点,碰到偏激的可能还会被划车。“特别是韩潮和封士明那两个人,作为公众人物,完全没有经过核实,发布一些不实信息,推波助澜,你们的法务部门能否做一些该做的反击?”

\r\n

当天深夜,陶琳对这段微博留言给予了肯定回答:“明白,会的。”

\r\n

当下,有越来越多的车主正面临类似于这位准车主的烦恼。自从河南安阳的张女士在上海车展站上特斯拉展车车顶上维权,特斯拉与“刹车失灵”的捆绑就越来越深,即使,目前依然没有任何证据显示,特斯拉车辆存在因缺陷导致的“刹车失灵”。

\r\n

\r\n

“其他特斯拉车主因为她的不理智行为饱受舆论压力,我们找谁赔偿?特斯拉还是张女士?”一位车友群的群主告诉新浪科技,很多车主都因为这次维权带来的舆论压力,而感觉开车像是在犯罪一样。

\r\n

该群主告诉新浪科技,自己管理多个特斯拉车主群,成员数量接近2000人。“(车顶维权)闹得最厉害的时候,大家的讨论也比较多。不过现在这方面的讨论不多。”但是,没有讨论不代表这件事产生的影响不在了。

\r\n

新浪科技在多个独立的特斯拉车友群中发现,多个特斯拉车友群的讨论重点在这段时间不断变化,刚开始集中讨论的是“是否真的会刹车失灵”、“为何刹车停不下来”、“数据是否能进行检测”等话题,后来逐步变成了“女车主只想要钱”、“特斯拉态度差”等,再后来就更多是吐槽为主,“开特斯拉就被笑”、“好朋友发信息问我刹车还好吗”等等。

\r\n

前述车友群的群主高速新浪科技,没有真相公告的时候,车友群里每一个人都饱受各方舆论的压力。“如果最后结果不是刹车失灵,而是司机操作不当,网民、自媒体可以像没事一样,那我们这些无辜车主饱受的嘲笑、压力,谁来补偿?”

\r\n

在诉状中,宋律师认为,自己所驾驶的特斯拉是没有问题的,但目前之所以受到歧视,完全是因为维权车主张女士的维权行动导致。“自从女车主以特斯拉刹车失灵开始维权后,社会上越来越多人被误导,将特斯拉和刹车失灵联系在一起,并因此对其他特斯拉车主进行善意或恶意地问候、讥讽、嘲笑甚至人身攻击。”他在诉状中称。

\r\n

这一点也得到了该群主的认可,他告诉新浪科技,自己管理的所有车友群,没有一个人遇到刹车相关的问题。“我们不是特孝子(意为捧特斯拉的车主、用户),我们也是花辛苦钱买的车,车主都是比较中立的群体,如果真的有问题,没人愿意乘坐一辆定时炸弹上路。”他告诉新浪科技。

\r\n

在新浪科技进行的一项随机投票调查中,有1.6万参与调查的用户中,有69.27%的用户认为张女士的维权没有侵害到其他特斯拉车主的利益,只有30.73%的用户认为,张女士的举动对其他车主产生了负面影响。

\r\n

\r\n

但在另外一项有超过2000名用户参与的投票中,有60.88%的用户如今在路上看到特斯拉的车辆会有闪躲的意识,会将之与“刹车失灵”联系起来,有10.31%的用户会在看到特斯拉车辆的时候将之与“车顶维权”联系起来,另外28.81%的用户则对此完全无感,只是将之视为正常的行驶车辆。

\r\n

\r\n

这种撕裂的观点,恰恰印证了如今其他特斯拉车主所处的困境,在车顶维权事件中,外界看来他们似乎应该置身事外,但是在实际中,很多人看到特斯拉车辆又会有不好的联想

\r\n

近日在北京机场高速出现的一起因为变道引发碰撞的普通事故,就因为涉事车辆中其中一辆车是特斯拉Model 3,便有好事者在拍照后上传到社交媒体,配文“特斯拉这是又刹车失灵了?”

\r\n

“只不过有的人说出来,有的人只是在心里想。虽然我的确没有遇到过类似的情况,但我知道是有的。”一位特斯拉Model 3车主告诉新浪科技。

\r\n

新浪科技从一些车主群中了解到一些来自其他品牌车主群体的“歧视”或者是特斯拉车主的自嘲。比如一位吉利帝豪车主在车尾贴上“为防止刹车失灵导致追尾,请尊贵的特斯拉车主超车先行”。或者是一位特斯拉车主把自己的车标换成了大众,还把“Model 3”字样替换成了“上汽大众”。

\r\n

自嘲的背后,或者被嘲笑的背后都是特斯拉车主的无奈。据新浪科技了解到,除了已经提交诉状的宋姓律师,“我车友群的不少车主打算联名起诉她(张女士)。”前述车友群车主告诉新浪科技,很多车友之前都是支持张女士的,但她的行为只会让其他车主遭受更多网络暴力和歧视。

\r\n

中国法学会消费者权益保护法研究会副秘书长、北京阳光消费大数据研究院执行院长陈音江告诉新浪科技,消费者站在车顶维权,因为扰乱了公共秩序被行政拘留,但这并不意味其依法维权和对产品质量提出质疑的权力受到否定,因为这是《消费者权益保护法》赋予每一名消费者的权利。如果其他特斯拉车主认为自己受到人身或者名誉侵犯,应该起诉对其进行名誉或者人身进行侵犯的个人。

\r\n

而张女士的维权依然会持续进行。在走出拘留所后,河南安阳车主张女士就在一份声明中表示,“会维权到底。”虽然特斯拉已经提交了事故车辆在遭遇事故30分钟前的行车数据,但张女士及其丈夫依然表示不认可这一份数据。

\r\n

当前,双方的核心争议在于:第一是提交怎样的数据,特斯拉方面认为之前所提交的数据已经是完整的数据,可以证明车辆的制动系统处于正常工作状态,而张女士一方则认为,这一份数据不是原始数据,特斯拉应该提交院士数据。第二则是基于原始数据进行的鉴定。

\r\n

张女士一方也不接受特斯拉指定的鉴定机构,而是寻求独立的第三方鉴定机构。但当前的难点在于,鉴定机构目前只是有能力鉴定车辆的机械机构,而没有技术能力检测智能汽车的核心软件。

\r\n

“基于博士的ibooster已经非常成熟,且并非只有特斯拉一家在使用,基本可以判断(如果有问题),是软件的问题。但关键在于,软件运行的鉴定,尚未有标准,也没有哪家机构有能力。”一位特斯拉前员工告诉新浪科技。

\r\n

这也是当前这一事件进展缓慢的原因之一。张女士的丈夫则告诉新浪科技,自己之所以坚持索要原始数据,就是因为并不着急进行鉴定,而是等待具有检测能力的鉴定机构出现后,再提交原始数据进行鉴定。“若现在不拿原始数据,恐怕之后就没有了。”他说。

\r\n

特斯拉改进交付流程意在减少事故?

\r\n

在一系列舆论发酵的同时,特斯拉也在改进自身的流程。用陶琳的说法,则是“在车辆使用环节加强消费者的教育,让大家了解新型汽车的使用方法,避免使用环节的误操作。”

\r\n

5月16日,特斯拉提到了近日引起热议的“特斯拉准车主提车要考试拿到80分”一事——特斯拉最近刚刚开始试点“交付日车主讲堂”,作为丰富交付体验的“选修”活动。特斯拉提到,在产品讲解环节,安排专人对产品细节、驾驶模式、实用Tips全覆盖讲解,帮助车主增进对产品的了解。

\r\n

此前,特斯拉过于追求销量,并精简了交付的流程,也缺乏对销售人员进行培训。

\r\n

\r\n

“我们只是被要求卖出更多的车。” 一位北京芳草地门店的特斯拉销售人员告诉新浪科技。这是特斯拉在亚洲开设的第一家门店,当时,特斯拉并没有为销售人员设立销量的目标,而是要求他们向消费者推销特斯拉的理念和倡导的科技生活方式。

\r\n

从第一家门店到第一家海外超级工厂落地上海,销量也变成为特斯拉在中国市场的唯一追求。这么做无可厚非,但是无法忽视的一点是,销量考核与日俱增的压力也带来了潜在的风险——急于卖车的销售人员无法帮助消费者更好地接受和理解新能源智能汽车这一新兴事物,相比较传统燃油车,智能汽车在操控、交互和性能上都有差异。

\r\n

更糟糕的是,特斯拉一线销售人员越来越缺少稳定性和连续性,流动性非常高,导致一线销售人员的专业性不足,水平良莠不齐,自然无法为消费者提供更好的服务和更专业的产品知识。

\r\n

前述芳草地门店销售人员告诉新浪科技,从他入职到离职不足一年时间,一线的销售仅剩下四五人是他入职之时就在该店工作的,其余全部是替换离职销售的新人。甚至,当时该店到岗的五位应届毕业生,均在一周左右全部离职。

\r\n

新浪科技曾经于2020年5月在华贸等门店走访,而在过去的一年多时间里,接到了将近20个来自特斯拉销售人员的电话,多集中于2020年国庆节降价之后的这一段时期内,特别是在中国制造Model Y上市后,邀请到店和试驾的电话频率更高。

\r\n

“很明显,我们缺乏专业的培训,至少和我前东家相比是如此。”前述芳草地门店的销售人员告诉新浪科技,除了入职培训,特斯拉还会有周期性的全国统一视频培训,主要讲解服务流程和简单的产品知识,以及同步最新的指示,没有深入的讲解。

\r\n

一位特斯拉的早期员工说,“现在完全变了,特斯拉在不断招人,开店,卖车。很多人来了没多久就走了,那就再招人来卖车。”然而,变化的不只是销售体系,还有交付体系。

\r\n

其中一位特斯拉早期员工告诉新浪科技,最早特斯拉要求交付专员与客户进行40分钟的一对一车辆使用讲解,以便于客户最安全的使用车辆,这被列为他们的工作任务。

\r\n

\r\n

但是,随着交付量的增长,人手严重不足,为了提高交付的效率,取消了原本的40分钟一对一讲解要求,改为在交付中心听集体的交付讲堂。

\r\n

这样做的传达率虽然受到影响,但依然坚持专业人员讲解的方式。特斯拉的交付量还在走高,人手更加短缺,就把集体听交付讲堂的方式改为在交付中心的电视机里循环播放录像讲解,把交付专员从日复一日的讲解中解放出来。

\r\n

但关键在于,交付中心对于录像疏于维护,也没有把观看录像列为交付流程的必须操作,所以极少有车主会看完录像之后才接受交付。

\r\n

新浪科技采访了多位特斯拉的车主,他们均向新浪科技表示,不管是到交付中心还是到家交付,自己的交付全部流程持续在10分钟到20分钟之间,主要内容就是接受合同、车辆资料以及一些简单的讲解,比如车辆如何启动等。

\r\n

人员流动性大的不仅仅是销售部门,交付部门同样如此。一位新入职特斯拉不久的交付人员告诉新浪科技,同期和他入职特斯拉的一共有五个人,在不到3个月的时间里就有三个人离职了。

\r\n

“当前处于快速扩张,但人员流动性极大,内部缺乏专业的培训。为了追求更高的发展速度,会牺牲掉一部分用户体验。”一位特斯拉员工说,为了快速交付满足季度交付的目标,交付部门的工作流程需要尽可能缩短。随着特斯拉价格的不断下降,销量猛增,更多来自下沉市场的新增的用户对于车辆的了解程度也不尽相同,交付部门无暇进行专业的讲解,导致很多新用户不熟悉车辆功能。

\r\n

目前,关于张女士和特斯拉方面的纠纷,短期内依然看不到出现结果的可能性。虽然当前气氛已经有所缓和,但这一事件对于大众带来的冲击力,依然需要时间去消化。

\r\n

虽然当前遇到“刹车失灵”的车主是极少数,但绝大多数车主或被动地与之产生关联,或正在担忧自己遇到这一情况。

\r\n

特斯拉原来带来的光环,现在变成了他们各自的烦恼。

', '1621220086', '1621220086'); +INSERT INTO `article` VALUES ('16', '24', '中国新造车出海:底气不少,挑战很多', 'https://img.36krcdn.com/20210517/v2_5decb2f26f2b4ccf98032dc539e596b5_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '是先驱,还是先烈?', '

编者按:本文来自微信公众号“深响”(ID:deep-echo),作者:周永亮,36氪经授权发布。

\r\n

\r\n

©深响原创 · 作者|周永亮

\r\n

进军欧美市场,打开“第二增长曲线”,这一直是中国车企的梦想。

\r\n

但在很长一段时间内,由于产品力、合规等方面的原因,中国汽车难以在欧美等成熟市场有大的突破。无奈之下,只能“取道”东南亚、中东地区、俄罗斯、南美和非洲,希望实现“农村包围城市”。

\r\n

如今,中国车企开始了又一次尝试。相比之前的出海浪潮,这次换做了“新造车”当先锋,直取欧洲市场。

\r\n
    \r\n
  • 2019年9月,上汽名爵ZS纯电动SUV在挪威和荷兰上市;

  • \r\n
  • 小鹏汽车已经有超300辆G3i出口挪威,随后P7也将登陆欧洲;

  • \r\n
  • 2020年5月,爱驰汽车700台定制欧版U5发往欧洲市场,投入当地的出行租赁服务;

  • \r\n
  • 2020年6月,上汽大通宣布,首批328辆上汽大通MAXUS EV30发运挪威;

  • \r\n
  • 比亚迪联手挪威经销商RSA将旗下唐EV引入挪威市场;

  • \r\n
  • 而最近,蔚来也正式发布挪威战略,将于今年9月在挪威开启全新ES8的交付,另一款轿车ET7也将于明年进入挪威市场。

  • \r\n
\r\n

新能源汽车的出口量正在大幅增加。

\r\n

中国汽车工业协会(以下简称“中汽协”)根据企业报送的出口数据统计,2020年新能源汽车出口接近7万辆,同比增长89%,占汽车出口总量的7%,比上年提升了3.4个百分点。其中,纯电动车型出口4.4万辆,插电式混合动力车型出口2.6万辆。相比之下,2020年中国汽车企业出口量达到99.5万辆,同比下降2.9%。

\r\n

换将新造车,这一次的出海究竟是一马平川还是败兴而归?情况恐怕并不简单。

\r\n

“跳板”挪威

\r\n

在此次“出海”浪潮中,蔚来、小鹏、比亚迪、名爵等车企,都不约而同把挪威作为首选之地。

\r\n

挪威是个拥有530万人口的国家,本身是世界上石油生产大国,在1980年第三次石油危机受益很大。但挪威却极力想撕掉“石油”的标签,如今它已成为电动车销售比例最高的国家。

\r\n

根据挪威公路联合会的数据,2020年总共销售了14.14万辆新车,其中7.68万辆为纯电动车,占比达到了54.3%,成为全世界首个全年电动车销量占比过半的国家。

\r\n

挪威电动车联盟秘书长Christina Bu表示,他们预测2021年电动车占挪威市场的比例将达到65%。这距离他们2025年全面禁售燃油车的目标,又近了一步。

\r\n

与此同时,挪威新能源汽车渗透率高达65.1%,是世界上新能源汽车渗透率最高的国家。相比之下,德国、法国、英国的渗透率在10%到15%之间。

\r\n

\r\n

挪威之所以如此“特别”,是因为他们对新能源汽车大力倾斜。

\r\n

据了解,为推动电动汽车销售,挪威提供了大量激励措施,比如免除高额的汽车进口税、注册税和销售税,以刺激电动汽车的销售。此外,电动车车主不用交路费,还可以使用公交车道。

\r\n

这使得挪威充电桩基础较为成熟,用车成本较低。截止2020年底,挪威充电桩累计注册量为45万个,在欧洲仅次于德国的60万个,每1万人拥有35个充电桩,高于法国的6.9个充电桩/万人,日本的2.3个充电桩/万人。

\r\n

这些特点对主打电动车的中国新造车来说,提供了极佳的契机和条件。

\r\n

当然,在中国车企眼中,挪威仅仅是一个“跳板”,快速增长的欧洲市场才是他们的最终目标。李斌透露,预计蔚来明年将进入5个欧洲国家。

\r\n

欧洲绝对是个大市场。数据显示,2020年,欧洲市场销售新能源乘用车为136.5万辆,同比增长达137%,已经超越了中国(124.6万辆),成为全球最大的新能源乘用车市场。从市场份额来看,新能源新车销量占整个欧洲车市份额的11%,其中纯电车型占比6.2%,插电混动车型占比4.8%。

\r\n

从区域市场来看,德国、英国、法国是欧洲最大的三个新能源汽车消费国,合计销量 75.6 万台,同比增长 211%,占欧洲新能源销售的比例达到56%,同比增长 13个百分点。这将是中国出海车企发力的主要地区。

\r\n

跟挪威类似,目前欧洲新能源市场的大幅增长,是由强有力的新能源补贴政策带动所致。

\r\n

据了解,德国将始于2016年的12亿欧补贴延长至2025 年。2020年7月开始,再次将4万欧元以内的纯电动汽车政府补贴上调50%;英国对于购置电动乘用车可获得3500 英镑补贴,购置碳排放小于75g/km的电动货车最高可获得8000英镑补贴。法国、挪威、西班牙、葡萄牙等国家相继出台直接补贴政策、充电桩建设政策等。

\r\n

\r\n

不过,除了“胡萝卜”,欧洲也祭出了严厉的“大棒”政策。欧洲市场并没有想象中那么好啃。

\r\n

2014 年欧盟要求 ,2020 年欧盟范围内 95%乘用车平均碳排放需降低至 95g/km(相当于油耗4升/百公里),到 2021 年 100% 新车要达到此要求,超额部分按每辆汽车每 g/km 二氧化碳排放 95 欧元进行罚款。

\r\n

在此基础上,2020年9月,《欧盟绿色协议》更新了《2030年气候目标计划》草案,提出2030年乘用车每公里二氧化碳排放需减少到2021年的50%,即47.5g/km(大约2升/百公里),比原先 59.4g/km的目标下降了20%。这使得欧洲各大车企不得不加速电动化和数字化布局。

\r\n

多重挑战

\r\n

二十年来,奇瑞、上汽、吉利、比亚迪等一直在积极拓展海外市场,但始终未能在欧洲市场“站稳脚跟”。背后的原因是多层次的,其中产品力是很重要的因素。

\r\n

众所周知,中国车企在海外主要走中低端路线,依靠性价比作为主要竞争力。在欧洲,中国汽车被贴上了“廉价品”的标签,不仅价格便宜,质量也不让人放心。2007年,在欧洲进行NCAP碰撞测试中,当时刚刚进入德国市场的中华尊驰仅获得1星的评价(5星最高)。

\r\n

不过,随着十几年的积极探索,中国车企在技术、生产制造和流程管理等方面已取得长足进步。汽车咨询公司J.D. Power发布的2020中国新能源汽车体验研究显示,上汽大众(105个PP100)获得插电混动车市场新车质量第一名,宝马(108个PP100)位列插电混动车市场第二位。蔚来(109 个PP100)获得纯电动车市场新车质量第一名,特斯拉(113个PP100)和欧拉(129个PP100)位列纯电动车市场第二和第三位。

\r\n

在这个评价体系中,新车质量得分以平均每百辆车问题数(PP100)表达,得分越低,表明问题数越少,质量也越好。

\r\n

这也是新造车集体出海的底气。

\r\n

但要想在欧洲立足,还有很多的工作要做。在欧美相关机构看来,中国车企在设计、技术性能以及智能化等方面,投入了大量精力,但在品牌建设方面相对较弱。特别是,中国车企在国外市场尚处于初期阶段,消费者对这些新品牌倍感陌生,心理上的接受度和信任度不高。

\r\n

福特汽车公司集团副总裁陈安宁在采访中曾表示,很多国外的消费者根本分不清中国品牌哪家是哪家,他们只是笼统地知道都是来自中国。所以,企业想从中国品牌中脱颖而出,塑造品牌个性和差异化是十分关键的一步。

\r\n

不过,品牌的塑造,是个长期的系统工程。目前,大部分出海车企选择与当地经销商合作,比如小鹏汽车是与挪威经销商Zero Emission Mobility AS(ZEM)展开深入合作,面向当地消费者开展市场销售及售后服务;比亚迪与与挪威汽车经销商集团 RSA 合作;红旗 E-HS9 由 Motor Gruppen 进口挪威并进行分销。

\r\n

这种模式虽然可以规避部分风险,并快速推进销售,但在品牌形象、认知度、销售标准、售后服务以及零部件等方面,汽车厂商的掌控力度会受到影响。

\r\n

相比之下,蔚来直营模式,或是在海外打造品牌形象的新尝试。据了解,蔚来计划将更多“中国模式”复制到挪威。李斌表示,蔚来在每个市场的商业模式是一样的,即采取基础设施先行、直营直销、服务用户的模式。“我们不光卖车,我们更希望打造一个以车为起点的社区。”

\r\n

\r\n

另外,本地化运营也是持续发展的关键。除了需要考虑税率外,政策、法规、标准等等众多细节,也是出海企业必须要考虑的因素。

\r\n

此前,中国出海车企已经踩过不少“坑”,比如服务未体现价值化,仅仅为海外市场提供备件和解决质量问题,谈不上服务;完全以成本定价,只能维持企业短期利润,无法沉淀再投资新产品、客户服务和相应网络拓展;对当地市场缺乏深度的了解,所有的产品定义交给经销商做,导致有所缺失。

\r\n

对此,汽车咨询公司J.D. Power给进军海外的中国车企,开出一剂“药方”:首先,要意识到海外消费者和中国消费者在期待、喜好、习惯、行为等方面都可能存在差异;其次,“第一印象”至关重要;第三,在本土市场进行颠覆性创新尝试,再将成功经验复制到国际市场,形成差异化优势。

\r\n

欧洲是很多车企的发展起源地,也是非常成熟的汽车市场,目前主要德系车和法系车所占据。进军欧洲市场,注定是一条鲜花与荆棘并存的路,但也是中国车企必须要走的一条路。跨过它,也就意味着拥有了成熟的体系化能力,有机会成长为世界级公司。

\r\n

不过,先驱与先烈,只有一线之隔。

', '1621220137', '1621220137'); +INSERT INTO `article` VALUES ('17', '24', '共享出行上市潮,凹凸出行启动IPO冲击第一股', 'https://img.36krcdn.com/20210517/v2_14238a69413b40749c42c15ffe16757d_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '“真共享出行平台”的价值几何?', '

编者按:本文来自微信公众号“Tech星球”(ID:tech618),作者:杨晓鹤 王琳,36氪经授权发布。

\r\n

\r\n
\r\n

 “真共享出行平台”的价值几何?

\r\n
\r\n

继共享充电宝企业接连IPO后,滴滴、嘀嗒、哈啰等共享出行企业也迎来上市潮,谁是“共享出行第一股”的竞争,日趋白热化起来。

\r\n

Tech星球独家获悉,闲置私家车共享平台“凹凸出行”启动上市计划,将以新兴的SPAC(特殊目的并购公司)模式在美股纳斯达克上市,上市时间将在2021年完成,估值为60-70亿元。

\r\n

对此,凹凸出行方面回复Tech星球:目前公司没有明确详细的上市计划。

\r\n

此前媒体报道,共享出行巨头滴滴已在4月秘密提交纽约上市申请,并希望最早在7月份上市,而一度差点摘下“共享出行第一股”桂冠的嘀嗒出行,也在4月13日向港交所二次递交招股书。10天后,哈啰出行在美提交了上市文件。还有主打下沉市场电单车的松果出行,也传出启动上市的消息。

\r\n

至此,经历烧钱大战和残酷补贴战的共享出行企业们,似乎集体迎来“上市”的春天。然而,OFO、大黄蜂等企业濒临倒闭之后,共享出行并没有进入胜者为王的时代,滴滴和嘀嗒迟迟不见上市,哈啰和松果出行等企业也在探索商业化。

\r\n

甚至,在滴滴何时盈利仍不明朗的情况下,有不少投资人曾反思,共享出行的网络效应和壁垒是否足够高,共享出行的盈利能力是否真的乐观?

\r\n

凹凸出行冲击IPO,实力几何

\r\n

相比其他几家共享出行的企业,没有进入烧钱大战核心战场的凹凸出行,名气远逊色滴滴等企业,这也与其企业定位有关。

\r\n

凹凸出行成立于2013年7月,总部设在上海。凹凸出行联合创始人、CEO陈韦予,也是出行领域为数不多的女性CEO。第一笔天使轮融资100万美元后,杀入了共享出行领域。

\r\n

相比滴滴的网约车模式,凹凸出行和一嗨租车、PP租车等,都属于P2P租车模式。通过凹凸平台,私家车车主可以将自己闲置车辆租给他人使用,租客也由此可以选择丰富的车型。P2P租车的模式特点是平台不持有车辆,也不负责司机管理。

\r\n

在前几年,共享经济火热之际,很多共享经济平台曾投放上千万量共享单车,亦或租赁众多房产做共享办公,很多人认为这是“分享经济”。凹凸出行只做平台的模式,也让其比较强调自己是“真共享经济”。

\r\n

但不通过置办资产投入市场竞争,规模也就很难迅速起量。根据最新公开数据显示,经过6年的发展后,凹凸出行的业务覆盖北京、上海、广州、深圳、南京、杭州等60个城市,平台注册用户达到1500万,注册车辆超过50万辆。

\r\n

目标客户主要为家庭周边游和城市生活场景的车辆短租,以及日常公务等候牌照摇号时的长租等等。这些场景的服务,也与滴滴等主要共享出行平台有一定的错位竞争。

\r\n

相比哈啰和青桔等主要覆盖0.5-1.5公里(共享单车)与1-3公里(共享电单车),滴滴和嘀嗒等网约车主要覆盖3-100公里,租车服务更多是50—500公里的自驾用户。

\r\n

而且这些客户的客单价也比较高,据悉凹凸出行2020年度金额最高的单笔订单,是在3月份起租的奔驰G500,累计租了47天,租金12万元。

\r\n

如果从这一模式看,凹凸出行与传统的汽车租赁公司并没有太大区别。不过,凹凸出行方面向Tech星球介绍:其旗下有以长短租业务为主的“凹凸租车”、专注分时租赁的“凹凸共享车”,以及车险用户出险后可以一键预约的“凹凸出险代步车”等业务子品牌,平台有精准搜车、个性化推荐等共享出行功能,与传统租赁企业并不相同。

\r\n

从以上业务范围可以看出,凹凸出行是轻资产的业务模式,这也让其顺利盈利。据内部消息,凹凸出行预计在2021年将实现2.5亿元的营收,但预计利润率比较高。

\r\n

只听楼梯响的“共享出行第一股”

\r\n

共享出行大战是过去互联网领域最惨烈、热钱流入最多的战争之一。以滴滴为例,根据公开信息显示,累计融资规模高达220多亿美元,相当于字节跳动目前融资金额的3倍左右,是美团上市前融资总额的2倍多。

\r\n

热钱加注,五颜六色的单车挤满街头;补贴成风,用户的习惯一步步养成。单车、电单车、快车、专车等丰富了用户的出行选择,也喂养出庞大的出行企业。

\r\n

大战过后,企业开始寻求得到更广泛的资金支持。2020年10月,嘀嗒正式向香港交易所公开递交IPO招股书,成为第一家正式启动上市的新出行企业。

\r\n

但上市之路并不顺利。成立于2014年的嘀嗒主打顺风车业务,也是目前顺风车业务最大的平台,而顺风车也为嘀嗒贡献了最主要的收入来源。

\r\n

但企业过度依赖单一业务,意味着极高的风险。更何况,顺风车天然存在弊端,仅仅靠撮合,双方自愿,这都意味着较小的规模、较低的日均订单、较低的抽佣和较高的风险。

\r\n

嘀嗒率先开启上市之路后,其他出行企业也陆陆续续向资本市场递交了其IPO文件。4月9日,滴滴向SEC秘密提交IPO文件,申请在美挂牌,或预计在今年第三季度内上市,目标估值在1000亿美元。随后,押注两轮业务的松果出行、哈啰出行先后提交IPO文件,而货运领域的滴滴满帮集团也开启了上市之旅。

\r\n

出行企业争先恐口上市的大背景是,多次大放水引来美股高涨,而没有抓住第一批互联网公司的港股,希望通过改革来承接移动互联网市场的红利,互联网公司们则希望趁着市场热潮谋得一个高估值,储备更多现金,以度过未来可能到来的寒冬。

\r\n

但值得关注的是,目前尚没有一家共享出行企业完成IPO。就在滴滴、哈啰先后提交IPO文件的间隙,嘀嗒因递交的上市申请资料超过6个月失效,而再次提交相关文件。

\r\n

据媒体统计,嘀嗒出行自2020年就已遭到了52项行政处罚,原因都是由于“擅自从事或变相从事网约车经营活动”。

\r\n

5月14日,交通运输部、中央网信办、国家发展改革委、工信部等交通运输新业态协同监管部际联席会议8家成员单位,对滴滴出行首汽约车曹操出行、美团出行、T3出行、高德、嘀嗒出行、满帮、货拉拉、快狗打车等10家交通运输新业态平台公司进行联合约谈。约谈的重点是,网约车平台公司抽成比例高、分配机制不公开透明、随意调整计价规则,以及互联网货运平台垄断货运信息、恶意压低运价、随意上涨会员费等问题。

\r\n

这给出行企业上市,尤其是已提交IPO申请7个月的嘀嗒,增添了一分隐扰。

\r\n

共享出行的商业化难题何解?

\r\n

沸腾的共享出行领域,虽然规模远比共享充电宝领域大,但尴尬的是,相比共享充电宝大多具有稳定的盈利能力不同,共享出行企业大多面临规模商业化的难题。

\r\n

最近刚刚更新了招股书的哈啰出行,2021年第一季度总营收为14.15亿元,相比于去年第一季度的6.94亿元,同比增长约104%。但亏损也在跟随营收增长,第一季度哈啰出行净亏损8.36亿元,同比2020年Q1亏损扩大近40%。

\r\n

招股书显示,2018年-2020年间,哈啰出行出现了近50亿元的巨额亏损。巨额的亏损,也让哈啰急切地布局业务多元化,Tech星球曾在《哈啰下沉新版图,复刻OYO、美团和滴滴》一文中,报道了哈啰将流量商业化的种种尝试与探索。

\r\n

共享出行领域的巨头滴滴,也正在这条路上摸索。Tech星球曾独家报道了滴滴内测“今日爆款”电商、以及与饿了么合作本地生活等多项跨界业务,滴滴不浪费每点流量的商业化潜力,也是为在上市之际力争摆脱亏损的困境。

\r\n

滴滴和哈啰的共同困境是,其主营业务增长早已见顶,如今各家更多的红海竞争,战争从攻变守。提高资本想象空间的另一个方法,则寄希望于打通产业链上下游,滴滴造车、哈啰打造两轮电动车皆是如此。

\r\n

但造车对企业一号位的要求更高,比如,是否操盘过足够大的资金,该如何定战略,互联网那一套“小步试错、快速迭代”的方法,是否适用于周期较长的造车产业等等。

\r\n

相比滴滴和哈啰在网约车和共享单车两个核心领域,每天都有数千万的流量不同,很多共享出行企业的业务单量并不足够大,比如嘀嗒主要的顺风车业务,凹凸租车的租车业务,日订单量仅在几十万到200万以内,这也让其不得以选择精细化为主的盈利发展模式。

\r\n

在千亿规模的顺风车市场中,2020年嘀嗒出行全年营业收入为7.91亿元,同期经调整净利润额为3.43亿元,而按照公认的会计法则,嘀嗒依然是亏损的。而同样在千亿租车市场,凹凸出行的真实营收与净利润仍旧待解。

\r\n

据了解,凹凸租车在也拓展布局代驾包车、UBI保险、汽车金融、车后市场、综合生活类服务等领域,进一步扩大营收能力,以期在资本市场讲个更动听的故事。

\r\n

据此前36氪报道,美国P2P汽车分时租赁平台「Getaround」在2020年10月份完成 1.4 亿美元 E 轮融资,而凹凸出行2019年和2020年两轮战略融资未公布融资额。软银投资的Getaround,估值曾达到10亿美元的独角兽级别。不过在国内,一位出行领域的人士认为,国内租车领域神州租车和一嗨租车的市场份额更大(自有车辆的重资产模式),轻资产的凹凸出行在吸引车主加入共享平台方面,并不会特别顺利。

\r\n

 然而,凹凸出行的1500万用户数,多于Getaround的600万。后者的全球用户数更少,这可能也与美国的私家车更多有关。总而言之,美股能多大程度认可凹凸出行,还需要其登陆资本市场后来证明。

\r\n


\r\n


\r\n


\r\n


\r\n


\r\n


\r\n


', '1621220206', '1621220206'); +INSERT INTO `article` VALUES ('18', '24', '周鸿祎你千万别造车', 'https://img.36krcdn.com/20210517/v2_a9c36cc69e284cc29df81ff8f14d3bba_img_jpeg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '造车需要All in,但周鸿祎做不到。', '

编者按:本文来自微信公众号“字母榜”(ID:wujicaijing),作者:蒋晓婷,36氪经授权发布。

\r\n

周鸿祎终归没放过造车这个风口。

\r\n

近日,360官宣领投哪吒汽车,成为第二大股东。周鸿祎毛遂自荐,要做哪吒汽车的产品经理,试水造车,“雷军都敢干,我为什么不敢干?” 

\r\n

出于好意,必须提醒老周一下:可不敢比雷军啊。

\r\n

之前360学小米做手机,结果数以亿计的巨额资金打了水漂,还被酷派摆了一道,如此惨痛的教训,老周不会好了伤疤忘了疼吧?

\r\n

再说,在造车方面,周鸿祎把自己跟雷军相提并论,多少有碰瓷儿之嫌。小米起码是摆出了一副独立造车的架势,360从现在披露的信息来看,也就是出钱做投资人,充其量和百度之前投资威马差相仿佛,但显然连百度都不认为投资威马能算独立造车,李彦宏正式宣布造车,是在成立集度那时候了。

\r\n

互联网造车分两拨,一拨是百度、小米这样独立造车的激进派,另一拨是腾讯、阿里这样主要输出技术和传统车企合作的稳健派。从现有信息来看,360可能连稳健派都不算。

\r\n

按照阿里、腾讯这些互联网巨头树立的造车标准,宣称造车,那至少得与车企成立合资公司,而360只是成为哪吒造车的二股东;另一方面,360虽然是互联网企业,但主业是安全,能否在车载系统、自动驾驶等技术上给予车企支持,目前来看,得打个大大的问号。

\r\n

另外,造车可是个吞金兽,贾跃亭之前算过,说至少得投入500亿元,这两年随着竞争加剧,新玩家显然要投入更多,但360在资金方面并没有优势,根据360在今年4月发布的年报显示,2020年实现总收入116.15亿元,不到小米年度营收的二十分之一。

\r\n

雷军造车,可是当着全世界的面,拍出了100亿美元;周鸿祎既然敢跟雷军叫板,那至少也得拍个几十亿美元吧?

\r\n

并没有。

\r\n

\r\n

雷军和周鸿祎(右)

\r\n

没祭出真金白银,可见老周这次也就是做营销,帮哪吒汽车造势,另外帮助360做做市值管理,毕竟百度和小米一放出造车消息,股价就蹿上了历史新高。

\r\n

话说回来,这样才明智,虽然周鸿祎号称“中国最好的产品经理之一”,但在移动互联网时代,360早就偏离了中国互联网主航道,没能做出任何征服用户与市场的主流产品。百度造车起码有技术,小米起码拍出了100亿美元,360不但没钱没技术,连做出一款好产品的能力都没有,如果真的要造车,那不但抓不住机会,反而会引发祸端。

\r\n

360之所以在移动互联网时代屡屡错失机会,根子还在老周本人。

\r\n

"兴趣点转移得太快,不懂得专注的力量,这和踏踏实实把一个生意做透是相违背的。"在他2017年出的自传里,周鸿祎反思过自己创业存在的毛病——浮躁,投机取巧,“没有毅力在一个方向坚持到最后,最后的失败、头破血流是必然的。”

\r\n

到去年接受《中国企业家》采访,他依然在反思自己的不专注。“我有经验,又有很多想法,又觉得自己很聪明,然后手里又有点资源,这种情况下会产生一种虚假的幻觉,觉得自己无所不能。”

\r\n

在移动互联时代,从手机到直播,周鸿祎经手的大多数产品都属于浅尝辄止,看见风口就试试水,不行就撤退,专注执着的企业家精神,在老周身上是看不到的。

\r\n

从人性方面考量,我们也可以理解周鸿祎。要求一个功成名就的企业家,时刻保持饥饿感,这和健身一样,压根就是反人性的;而在风口上不顾一切的all in,也不一定能成为雷军,倒更有可能沦为贾跃亭。

\r\n

360的投资人、股民们可能要庆幸,还好周鸿祎保守, 360的股价虽然跌得不好看,现在至少还能剩下800多亿。

\r\n

这是周鸿祎和造车不适配的地方。周鸿祎很难做到allin,但造车恰恰需要all in。造车不仅工艺复杂,生产周期漫长,对资金要求更高,还得经过3、5年的准备期才见效果。最先入局的三大玩家,都经历过融资压力和九死一生的生存危机。如今国内大小企业排排坐入局,市场赛道拥挤,这场零和博弈,没有All in的勇气,充沛的资金支撑,很大几率会成为炮灰。

\r\n

周鸿祎不愿意all in,财务投资就足够。但哪吒汽车看上去并不是一个好标的。

\r\n

头部3家企业有钱有资源,挤压着腰部企业的生存空间。哪吒汽车没有互联网基因,缺乏市场地位,品牌能力不稳固,根据未来汽车日报实地调查,哪吒汽车在北京来广营开设的全国最大汽车体验中心,因为缺乏名气,两三个月内甚至很难交付出一辆汽车。去年11月的销量,比不上蔚来的一半。

\r\n

\r\n

亮相2021上海车展的哪吒汽车

\r\n

哪吒背后还有资本隐患。根据天眼查显示,哪吒汽车母公司——浙江合众,实际控制人是房地产商王文学,华夏幸福的董事长。近几年华夏幸福经营情况一直不乐观,股价持续下跌,跌幅超过60%,企业债务危机从去年持续至今,最新数据是,公司背负债务本息加起来超过420亿。

\r\n

现在哪吒能和360一拍即合,最大可能性是,哪吒造车缺钱,周鸿祎愿意小投一把,试试水,如他所言,“即便不成功,也是为国产智能汽车产业发展作出了贡献。”双方是各取所需。

\r\n

周鸿祎爱追风口,一大原因是,作为国内首屈一指的产品经理,他已经10年没推出像样的产品。

\r\n

2011年是周鸿祎人生转折点。360靠杀毒业务抢到PC时代的最后一张船票,上市后企业有钱有流量,360导航一度超过百度hao123,周鸿祎顺利跻身企业家位置,实现财务自由。

\r\n

但随着移动互联网时代到来,周鸿祎想追风,却一次没抓住机会。这次造车之前,周鸿祎在手机、直播等业务的尝试,均告失败。

\r\n

造手机经历给周鸿祎的痛苦是深刻的,好歹让他对硬件产业有了敬畏之心。当时360入局时机不算晚,2012年正是国产智能机破旧立新的关键之年。罗永浩成立锤子,小米手机的每月发货量50万台,整个市场欣欣向荣。

\r\n

周鸿祎入局手机战场的架势,可比现在摆得足,声称要给手机圈添堵,更是放下狠话,“360要做一款秒杀雷军的手机。”

\r\n

但做手机并不像周鸿祎想得那么简单,老周做软件起家,哪吃过做硬件的苦,干脆走捷径跟华为海尔等厂商合作,推出特供机来狙击小米。这些特供机,在另一名“产品主义者”罗永浩眼里,就是华为、海尔的贴牌机。

\r\n

没有产品自主权,产品质量参差不齐,即便打着硬件免费的旗号,价格比小米低了将近50%,360推出的两款特供机AK47和超级战舰,线上销量总和没破万。

\r\n

\r\n

360特供机AK47和超级战舰

\r\n

好不容易想明白,决定自己造手机,周鸿祎投入4亿美元和酷派成立合资公司,让出大股东位置,甘居二号位。结果被对手乐视狙击,公司又陷入内斗,等他反应过来,手机业务基本黄了。

\r\n

在华米OV建立头部格局的2016年,360手机出货量500万左右,不足华为年出货量1.39亿台的零头,只能黯然退出。

\r\n

不过比起对手贾跃亭因手机引发资金链危机,身败名裂远遁美国,罗永浩丢了公司还成了“老赖”,周鸿祎的结局好多了,除了赔了些钱,损失不算大。

\r\n

他很快出现在互联网直播赛道。虽然这段经历同样是打酱油

\r\n

2015年刮起互联网直播春风,周鸿祎拍马上阵,推出花椒直播——号称集齐美人、花边新闻和生活趣闻等内容,又拒绝低俗的大杂烩直播平台。

\r\n

周鸿祎对花椒的营销,也是鲜见地用心。

\r\n

每天花5分钟在花椒上分享创业心得;把微博、朋友圈当成花椒广告位;自己宝马车自燃,不着急救火,先打开花椒直播;朋友不用花椒直播,就把他拉黑;和程维出去旅个游,看到青蛙交配,也拿出花椒直播一把;或者在花椒上推出《百万赢家》大赛,砸下103万大奖,一摞摞现金堆在现场发放.......

\r\n

\r\n

但再精准的营销也难以弥补产品价值的缺失。花椒直播从出生就透着别扭,2015年2月立项,6月仓促上线,定位一直迷茫。从模仿海外直播产品Periscope,做视频直播版的INS,到主打新闻,再到发力社交,最后落到秀场模式,更别提产品细节部分,每次开会能被周鸿祎挑出一堆毛病来。

\r\n

最后花椒变“糊椒”。没熬过3年,花椒直播和六间房合并,花椒随即被周鸿祎打入冷宫。此外赶上短视频时代,360推出过 “ 一分钟超短视频APP”快视频,上线不到半年即下架,投资了一款和抖音有相似基因,视频画面更精致的短视频社区软件“奶糖”,半年后产品下落不明。

\r\n

就这样浅尝辄止N次,360赔了钱也失去了时代机遇。企业市值跌到脚趾头,从4500亿高点一泻而下,到现在市值只有800亿人民币左右。

\r\n

造车这个时代大机遇的诱惑就摆在眼前,信奉“我命由我不由天”的周鸿祎伸手去够显然可以理解,哪怕不是真的独立造车,用造车这个市值管理利器拉升一下股价也是好事。然而,即便造车消息传出来,360的市值就稍微翻了个身,该下跌还是在下跌。

\r\n

虽然和哪吒合作,周鸿祎也给自己保留了余地,没说以后一定不会独立造车。

\r\n

合作造车的局限性在于掌控力弱。威马和百度的合作已经给周鸿祎敲响警钟,蔚来、小鹏、理想能从昔日200多家造车新势力中脱颖而出,共同点都在于掌控了造车自主权。

\r\n

但周鸿祎毕竟不是雷军,愿意下硬功夫,十年磨一剑,从0开始做手机,也愿意后半生奉献造车事业。周鸿祎也不是贾跃亭,每一把牌都是梭哈,为“梦想窒息”。

\r\n

目前360的业务聚焦在繁琐、细碎的安全业务上,从To C布局到ToB,很难分出精力在新能源车上,在硬件制造、人工智能等诸多方面从头开始。

\r\n

如果说造手机赔几个亿还在可亏损范围内,一旦入局造车,创业者背负的债务,就不会是简单的几个亿。

\r\n

几乎所有造车者,都要背负巨额成本压力。马斯克卖房卖飞机,把前2次创业的收益都砸在特斯拉上,打离婚官司还得哭穷,甚至需要向朋友借钱付房租。李斌被造车折腾得差点倾家荡产,蔚来股价一路跌到0.9美元,差点被摘牌退市,公司每天亏掉3000万,即便把之前易车、摩拜上赚到的钱全部押上,撑不住3个月;李想则是见了100多家投资机构,没为公司融到一分钱。

\r\n

到如今造车下半场,新能源车三强格局形成,小米、华为、大疆、百度、滴滴等企业相继入局,这样拥挤的赛道,一旦入局,就意味着浴血激战。

\r\n

\r\n

资源和技术上,360都比不上小米。小米触角伸到了造车全链条,拥有上百件车辆专利;前期通过顺为资本参与到蔚来、小鹏等品牌的融资。雷军所在的华夏同学会已经是造车新势力同盟,团队成员囊括李想、李斌、何小鹏,程维以及比亚迪的王传福。

\r\n

随着资本、资源趋于头部,蔚来背后站着腾讯、百度、红杉资本;理想和美团称兄道弟;小鹏背后有阿里、高瓴等资本,三家基本囊括国内顶级财团。国内的腰部造车势力,未来很长一段时间内都得活在头部的阴影之下,活着都可能是奢望。

\r\n

360想要独立造车,基本没有可能性,想依托哪吒后来居上,注定坎坷。在华为、小米、百度等公司纷纷剑指2023年,企图用品牌车重建市场格局的情况下,前不久哪吒CEO张勇接受21世纪经济报道采访,制定的5年计划只有三个字:“活下去。”

\r\n

互联网竞争以往的规则是:行业前二共存,第三最危险。到共享单车、新能源车时代,行业形成三强铁板,腰部很难再有生存空间。

\r\n

雷军拿着1080亿入局,都惴惴不安,“造车的企业那么多,全世界到底能够容得下多少家车厂?”

\r\n

而360和哪吒牵手,两家企业都在行业腰部位置,1+1的作用能有多大?即便周鸿祎主动担当哪吒汽车的产品经理,优势也不见得大——刻薄点说,也可能是增加了负担。

\r\n

过往10年,周鸿祎身上的“产品经理”标签一直在弱化。从手机到花椒直播,360系的产品雁过了无痕,没打出差异化优势,周鸿祎的定位愈发趋向于风险投资。

\r\n

“只要我还活着,我就拼命干,干不动了我做投资。”脸上露着微笑,2019年4月的“老周的朋友见面会”上,周鸿祎难得柔软,透露出把投资当退路的意思。

\r\n

\r\n

虽然他的投资成功率也不高。2005年开始做投资,羊奶上投资几百万,花几十万美元去养山羊,或者大手笔投资快播,结果快播倒闭,创始人王欣入狱。投资的前5年,10个项目里有一半项目是血本无归,几千万资金打了水漂。在移动互联网时代,周鸿祎丢了91助手,错过搜狗、58、知乎,最惨的是,B轮退出今日头条,算是丢了一座金矿。

\r\n

没人预知360这次投资哪吒效果会怎样。周鸿祎想和张勇组成产品经理CP,但他不懂硬件生产,不会开车,哪吒汽车的两大创始人都是造车行业老兵,没有让他指导的空间。

\r\n

张勇在接受采访时,给出的官方说法是:360 会从技术、营销和融资上全面支持哪吒汽车。

\r\n

周鸿祎的可发挥空间恐怕在后者。一个细节是,同样宣布造车,提到马斯克,雷军谈的是特斯拉的技术、谈马斯克造车的态度,周鸿祎看到的则是马斯克讲故事的能力。“马斯克这个人特别会传播,在特斯拉最低谷的时候,他讲了一个故事,是他造的自动化工厂多么先进,以至于他每天都要睡在厂里。”

\r\n

周鸿祎的感悟是,中美在汽车工业上相差无几,却输在表达方面,“国产汽车的大佬确实不如马斯克会说。”

\r\n

而讲故事,恰恰是周鸿祎擅长的地方。

\r\n

【参考资料】

\r\n

1、《华夏幸福王文学的出行布局》,2018年7月6日,中国企业家杂志

\r\n

2、《周鸿祎为什么做不成他想要的花椒直播?》,界面,2016年2月1日;

\r\n

3、《周鸿祎:我挣的钱有点庸俗,但用处一点不俗》,中国企业家杂志,2020年5月11日;

\r\n

4、《周鸿祎:如何做一名好的产品经理》,创业邦,2011年2月14日;

\r\n

5、《东方企业家:坏小子周鸿祎》,东方企业家,2011年1月4日;

\r\n

6、《新造车穿越生死线》,腾讯科技,2020年12月7日。

\r\n

7、《颠覆者:周鸿祎自传》,周鸿祎、范海涛著;

\r\n

8、《那些活在“新造车三剑客”阴影下的腰部新势力》,未来汽车日报,2020年12月7日。

', '1621220235', '1621220235'); +INSERT INTO `article` VALUES ('19', '23', '进击的扫地机器人,没有逃脱缺芯困局', 'https://img.36krcdn.com/20210516/v2_d2762164eaae480c8b1b31febff0bbed_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '狂欢过后,如何续热?', '

编者按:本文来自微信公众号“全天候科技”(ID:iawtmt),作者:全天候科技,36氪经授权发布。

\r\n

作者 | 于惠如 编辑 | 罗丽娟

\r\n

“买扫地机器人是交智商税吗?”

\r\n

在全天候科技发起的一项调查中,近90%的参与者认为“不是”。大部分受访者认为,扫地机器人深度解放双手,省时省力。

\r\n

\r\n

全天候科技整理

\r\n

相比洗衣机、冰箱等传统家电,扫地机诞生至今不过20年左右时间。但在2013年后,受益于物联网蓝海市场的发展,扫地机市场规模高速增长。

\r\n

近日,中国家电网发布的《2021年扫地机器人市场发展白皮书》(下称《白皮书》)显示,中国已经成为全球最大的扫地机器人市场,远超美国及欧洲等国家和地区,目前正在经历着一个超级爆发增长期。

\r\n

去年疫情加速了宅经济的崛起。人们居家时间较长,对家庭卫生、清洁消毒更加重视。扫地机器人成为小家电品类中的一匹黑马,销量迅速攀升。

\r\n

随着导航、续航、交互等技术的应用,产业链生态走向稳定,扫地机器人的成熟度已被广大消费者所接受。

\r\n

但是市场热的背后,一场由汽车、手机产业蔓延过来的芯片短缺危机,同样出现在了扫地机器人企业面前。

\r\n

受需求攀升,大部分企业开始扩产提能。去年以来,“深圳扫地机器人公司董事长蹲守上游供应链厂商打地铺抢货”的事例在行业里广为流传。

\r\n

多位行业人士对全天候科技表示,当前,芯片等原材料短缺问题已经成为行业新难题。

\r\n

一边是突然爆发的市场,一边是逐渐暴露的原材料短缺,扫地机器人“热”要如何持续?

\r\n

1

\r\n

扫地机火了

\r\n

扫地机器人最早发源于吸尘器行业。1996年,瑞典家电巨头伊莱克斯在原有吸尘器的基础上,研发出全球第一款全自动扫地机器人“三叶虫”。2001年,这款扫地机被推向市场,并成为史上第一款量产的扫地机器人。

\r\n

一年后,扫地机器人界的“苹果”iRobot公司推出了具有“三段式清扫结构”(边刷+滚刷+吸尘口)专利技术的系列扫地机器人。相较此前产品,滚刷高速旋转时可以扫起被静电吸附在地面上的灰尘,清扫能力比只有真空吸尘口的扫地机大大提高。

\r\n

这一革新技术也启发了许多同行,让扫地机器人有了更高的实用价值,开始正式商业化。

\r\n

相比发达国家,我国扫地机器人产业起步较晚。服务机器人制造商科沃斯在2009年发布国内首个扫地机器人“地宝370”,并凭借先发优势在扫地机市场连续多年稳居国内第一品牌的位置。

\r\n

但由于生活习惯和消费理念的影响,加之早期扫地机清洁程度低、经常卡机、智能程度不高等问题,消费者使用体验并不好,导致市场渗透率一直较低。

\r\n

\r\n

图片来源:山西证券研究所

\r\n

2019年,国内扫地机器人市场迎来一波寒流,市场降温明显。

\r\n

《白皮书》指出,这是由于2019年全国消费市场持续放缓,整个家电行业发展遇阻,扫地机器人市场也难以避免;其次,市场上仍存在部分采用落后技术的产品,这也导致使用了这部分产品的消费者给扫地机器人贴上“伪智能”、“不实用”的标签。同时,由于消费者教育不足,再加上产品同质化较为严重,技术上没有显著提升,产品使用体验上还有很大的提升空间。

\r\n

中怡康数据显示,2019年扫地机器人市场零售量约为533万台,同比下降7.6%,销售额78.9亿元,同比下降8.7% 。

\r\n

但情况很快有了反转。过去一年,扫地机器人成为成名速度最快的小家电之一。

\r\n

它暴得大名的直接原因有两个:一个是因疫情而热销,另一个是扫地机概念股暴涨。

\r\n

去年,为了应对疫情带来销量“意外”大增,不少扫地机代工厂通过扩充产线提高产能。

\r\n

“疫情刚开始的时候我们还在考虑要不要砍一条生产线,结果到5、6月份的时候订单量突然暴增。去年年底,我们把生产线从3条增加到了10条。”新锐智能扫地机器人品牌由利(深圳)CEO钟搏说。

\r\n

从全球来看,大约90%的扫地机器人的产地来自中国,而其中,又有80%-90%产自珠三角地区。由利的代工厂便坐落于珠三角。

\r\n

另一个扩充产线提产能的例子同样来自珠三角。一家位于江门的扫地机器人生产企业,规模不算大,主要生产贴牌产品,面向美国、德国、俄罗斯、巴西等国外市场。

\r\n

去年这家代工厂的经营状况出现了多次“反转”,从订单骤降、通过阿里国际站线上导流,到订单暴增、出货量翻番。“2019年我们的产量不到10万台,去年我们做了20万台。”该公司市场负责人蒋荨介绍说,为了抓住机遇,公司将生产车间从一层楼扩充到了两层楼。

\r\n

资本市场上,扫地机器人概念股也如同找到了财富密码,在A股市场上划出了一条完美的上升弧线。

\r\n

去年,石头科技和科沃斯股价节节攀升。前者成为A股第二只千元股,后者股价飙升8倍。

\r\n

“疫情期间,人们居家时间较长,对家庭卫生、清洁消毒也更重视,包括扫地机器人在内的小家电都实现了大幅增长。此外,新一代AI视觉技术等技术进步使扫地机器人的成熟度有了质的飞跃。”钟搏解释,双重因素的叠加使去年扫地机大火。

\r\n

2

\r\n

高增长背后

\r\n

市场调研机构中怡康的监测数据显示,在起步初期的2013年,国内扫地机器人的销售额和销售量分别仅为8.4亿元和57万台。据另一家机构奥维云网数据统计,2020年国内扫地机器人零售额94亿元,同比增长18%,零售量654万台,同比增长4.3%。

\r\n

对比上述两组数据,可见扫地机行业在数年间呈现了跨越式增长。

\r\n

广东宝乐机器人股份有限公司董事长王立磊告诉全天候科技,国内扫地机器人行业除了在2019年经历过短暂的阵痛之外,一直处于高增长状态。

\r\n

高增长背后是市场需求的支撑。随着人们消费水平的提升,且80、90后一代成为消费主力军,他们工作繁忙、时间紧张,“懒人经济”效应明显,对于扫地机器人更有着强烈需求。

\r\n

《白皮书》收集的数据显示,在820名受访者中,有62.8%的受访者表示需要扫地机器人,认为该产品能够节省他们的时间和精力。

\r\n

在全天候科技发起的调研中,有超过一半人将买扫地机的理由归结为:懒。

\r\n

技术的创新和进步也是扫地机行业高增长的重要原因。

\r\n

更早期,受技术限制,扫地机器人产品智能化程度有限。大多被消费者贴上“智障”、 “傻”、“鸡肋”、“智商税”等标签。

\r\n

近两年,在导航与避障方面,厂商陆续将AI视觉识别、dToF导航、3D结构光等技术植入到扫地机器人身上,使其变得更加聪明,解决了过去“乱撞”、“卡住”、“漏扫”等行业痛点。

\r\n

白皮书数据调查提到,2020年购买扫地机的消费者,大多数都认为产品实用性不错。

\r\n

资深用户邢力最近将家里的扫地机器人换成了科沃斯最新款,相较前一款,邢力认为“新款识别更灵敏,还能自己洗抹布。”

\r\n

随着消费者需求激增,扫地机市场也出现了明显的变化。据奥维云网数据,2019年,扫地机器人线上市场,2500-2999元价格段机型增长最快,同比提高10.34%,这意味着扫地机市场中高端化明显加速。

\r\n

在全天候科技发起的调查问卷中,不少消费者表示,希望未来扫地机器人能更智能化,例如可添加“自我清洁机体表面灰尘”,“识别地面不同污渍、采用不同方式清理”,“底盘升缩”,“语音控制”,“静音”等功能。

\r\n

哪里有市场,哪里就有竞争。扫地机器人企业已经从最初的个位数玩家,经拓展到上百个品牌。

\r\n

2020年以来,除了稳居行业前三强的科沃斯、米家、石头等头部品牌外,扫地机器人行业还杀出了不少新黑马:分别成立于2016年、2017年的云鲸和由利,作为新玩家,其线上品牌零售额均成功跻身行业前十排名;2018年成立的智能扫地机器人公司哇力在去年获得了青山资本独家投资的数千万元Pre-A轮融资。

\r\n

此外,海尔、美的、联想、360等科技巨头也在向扫地机器人市场拓展。

\r\n

现阶段,扫地机器人玩家类型主要有专业研发企业、互联网企业、传统家电企业、科技型跨界企业等诸多阵营。

\r\n

3

\r\n

缺芯的烦恼

\r\n

去年以来,“深圳扫地机器人公司董事长蹲守上游供应链厂商打地铺抢货”的事例在行业里广为流传。但这并非个案。由利方面透露,从去年起,为了确保第一时间抢到原材料,由利采购部工作人员常常跑到供应商生产线上“蹲守”原材料。

\r\n

“这个现象延续到了现在。”钟搏告诉全天候科技,当前因为备货6.18和亚马逊会员日,由利5月的出货量是往常的3-4倍,但原材料中非常重要的微控制芯片(MCU)却无法支撑出货量。“对于我们来说,扫地机器人的增长量已经远超原材料供应商给的配额了。”

\r\n

为了争取到更多的原材料,今年五一小长假后,由利采购部所有员工更改了和上游供应商按月沟通的习惯,直接“蹲守”进供应商生产线上,要求供应商每天告知“能否给到更多配额”。

\r\n

“我们现在也非常头疼,差不多发动了所有的人脉去弄一些芯片过来。”钟搏说。

\r\n

缺货最直观的体现便是涨价。

\r\n

据钟搏介绍,市场上极其紧缺的芯片价格涨了近10倍。“以前6块钱一个,现在50多,也不是所有的都涨了这么多,只是个别特别稀缺的。这也是被逼得没办法了,我们自愿出这么高的价,因为如果赶不上这一波,损失可能会比较大。”

\r\n

这场由汽车、手机产业蔓延过来的芯片短缺危机,同样出现在其它扫地机器人企业面前。

\r\n

“大家都缺,上次有个扫地机器人(公司)的来找8位MCU,但价格出不起。”电子供应链服务商芯片超人创始人姜蕾告诉全天候科技。

\r\n

“我们起码还有配额。目前来看,缺芯暂时对我们没有太大的影响,但下半年什么情况还不确定,要看销量。”王立磊说。

\r\n

而相比于规模较大的公司,中小厂商的处境则更难。

\r\n

通常情况下,企业从供应商获得供给都是按照约定好的配额。原材料涨价时,供应商会优先考虑给大公司供货,其次才是中小规模企业。

\r\n

不仅仅是芯片短缺,蒋荨所在的公司还面临马达、PCB板等原材料的短缺。

\r\n

蒋荨说:“我们这种企业就很尴尬,也没有预案,只能走一步算一步了。后面如果受影响更大,就只能控制订单数量和交期了。预留一定的利润空间,那种只能保本或利润很低的单子就不接了。”

\r\n

原材料短缺会对行业产生多大的影响?高增长还能延续吗?

\r\n

在王立磊看来,这轮波动会使资源向大公司倾斜,拥有强大品牌、自主研发能力的企业市场地位会进一步稳固,提高品牌集中度。

\r\n

钟搏则以由利为例向全天候科技解释了高速增长将会持续的原因。

\r\n

“一个扫地机器人,芯片在成本中的占比不大。我们测算今年公司整体的成本增长是3%-4%,但公司体量增长至少是在20%-30%,体量增长带来的收益远远大于芯片涨价带来的成本增加。”

\r\n

此外,他认为,即便2020年扫地机器人产线大幅增加,也不会出现明显的产能过剩现象,而其中关键因素是“市场渗透率。”

\r\n

\r\n

按照irobot披露的累计销量数据及产业调研数据,假设美国、欧洲、日本、中国分别用7年、10年、10年、15年实现渗透率50%的目标,那么测算出未来这些市场对应的复合增速分别为14.63%、17.30%、15.36%、17.05%。

\r\n

“当前国内扫地机器人的市场渗透率大概是3%-5%。对比其他家电,渗透率到5%的时候才会有一条快速的增长曲线,扫地机器人可能才刚够到这个点。”钟搏说。

\r\n

(文中蒋荨、邢力为化名)

', '1621220294', '1621220294'); +INSERT INTO `article` VALUES ('20', '23', '14.12亿人口数据,暗藏亲子游“财富密码”', 'https://img.36krcdn.com/20210515/v2_35bffe42dfe5487b9040d37cf4360e45_img_000?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '这个群体“舍得花”。', '

编者按:本文来自微信公众号“闻旅”(ID:wenlvpai),作者:朱月静,36氪经授权发布。

\r\n

5月11日,国家统计局发布了第七次人口普查数据,全国人口共14.12亿。数据表明,我国人口10年来继续保持低速增长态势。值得注意的是,我国0-14岁人口为2.53亿,占17.95%;与2010年相比,0-14岁人口比重上升1.35个百分点,意味着我国少儿人口比重回升。在此背景下,以家庭为中心的亲子游市场被看好。

\r\n

刚刚过去的五一假期,亲子出游人群的表现同样亮眼,根据相关在线旅游平台数据显示,亲子游的订单占比超过三分之一。基于火爆的假期出游趋势,交通与住宿成本激增,但父母为孩子花钱可谓非常舍得。种种迹象,亲子游成为疫情之下最具潜力的旅游细分市场之一。但也有业内人士认为,尽管机遇正在涌现,但市场对于涉及带孩子出游的品质选择愈发严格,想要吃下这块“蛋糕”,行业和企业都还需要做更多的努力与提升。

\r\n

亲子游市场呈“V”字上升

\r\n

随着Z世代群体的崛起,“80后”和“90”后正在成为亲子游市场的主力。根据本次人口普查信息显示,0-14岁人口数据为2.53亿人,比2019年上升1.35%,在业内人士看来,人口普查的结果使得大家对于亲子游这一细分市场更加看好。

\r\n

王永锋所在的绥芬河新起点国际旅行社有限公司是哈尔滨当地的一家地接社,主要经营的区域是东北三省以及呼伦贝尔大草原,让他们没有想到的是五一期间呼伦贝尔大草原的游客量上升较为明显。再加上前期对于市场的预判,公司做了相关的优惠促销活动,相较于往年不同的地方在于今年很多本地游客参与的较多。

\r\n

“我们接待的游客更多趋向于定制游,需求方面也是五花八门,也不再说之前简单的知行合一,游客更喜欢参与到生活当中去。目前亲子游上升已经呈现V字,预计未来还会继续上升,且出游的主力以老人+孩童、一家三代的形式搭配为主,对于旅游业而言,主题乐园类型的景区应该获益最大”,王永锋对闻旅讲到。

\r\n

\r\n

他还进一步谈到,目前亲子游产品除去旅游常规的要素吃住行游购娱以外,还增加了特色活动、学习体验等项目,针对某一项目会有更深入的探索,比如草原骑马不再是单纯的体验,而是深入学习,通过骑马收获勇气。公司目前亲子游产品还是以私人订制为主,设计产品会侧重“带着书本去旅行”“牧马人”等主题,今年在草原准备了亲子游蒙古包营地,“半自助式体验”旅游,产品设计也注重当地民俗特色,增加一地的深入体验,不再是走马观花赶路式旅行。

\r\n

与王永锋情况不同的是,主要业务是做定制小包团,包含亲子游业务的甘肃西北偏北旅游服务有限公司,其总经理赵克庭在接受闻旅采访时表示,最近几年随着大家对旅游认知的提升,自由行,定制小团越来越受市场亲睐,游客不再喜欢之前走马观花打卡式的旅游,而是更注重旅游体验和目的地文化,景观之间的互动,再加上受疫情影响,游客不再热衷于扎堆式的出行方式,而是更多的基于私密性、舒适性等因素的考虑,选择小团的出行方式。

\r\n

“公司五一期间主要通过自媒体和OTA平台做了一些促销活动,整体业绩较往年有显著的增长,但是亲子游产品与往年没有太多的增长。”此外他还谈到,亲子游市场现在更注重寓教以游,对产品端的诉求也比之前更高,未来做产品设计时需要考虑当地的文化、景观、地理、民俗等因素,再结合游客的需求,去定制更符合游客需求的产品。他们也会和当地的手工艺人、非遗传承人、文化学者沟通交流,以期产品更加有内涵。

\r\n

事实上,受疫情影响,2020年全国出游人次大幅下降,根据携程发布的《2020年中国亲子游消费趋势报告》显示,2020年亲子出游频次由2019年的2.7次下降至2.4次,不过相较于其他主题旅行,亲子游市场恢复程度已经十分可观,尤其是在疫情得到有效控制后,出游需求呈现V字上涨。

\r\n

\r\n

品质游更受市场青睐

\r\n

今年五一假期作为管控松绑的第一个黄金周,大众出游热度高涨,据在线旅游平台数据显示,“五一”期间,亲子游的订单占比超过三分之一。另据海昌海洋公园数据显示,五一期间,海昌海洋公园的游客近7成是80后、90后客群,Z时代年轻游客快速增长。

\r\n

此外据闻旅观察,五一期间一些孩子处于学龄前的亲子家庭,他们出游的热情更高。而且在策划出行时,还会考虑“全家一起走”,不仅是爸妈+孩子,还会带上爷爷奶奶、外公外婆一起出行,不少亲子家庭在这个“五一”假期,对行程、住宿的要求都相对较高。诸如“4口之家出游花费约2万”的消息也成为热搜话题,“舍得花”也成为“五一”全家出行亲子游家庭的标签。

\r\n

对此,海昌海洋公园营销中心&衍生消费中心高级总监郑芳表示,亲子游家庭愈来愈“舍得花”,与多方面的因素有关,首先是新一代亲子游客有更多元化的消费需求。随着80后、90后父母接棒成为贡献亲子游消费的主力人群,他们的消费需求成为决定消费趋势的重要因素。其次是后疫情时代催生出的“报复性出游”。以刚刚过去的“五一假期”为例,消费者积蓄已久的旅游出行需求得到充分释放,5天假期中,海昌海洋公园多个园区多次刷新节假日单日入园人次最高纪录。第三是以观光为主的旅游产品结构正在向复合型结构转变。文旅新业态成为旅游产业发展的高频词汇,游客的旅游目的,由以往较为单一的“游园”,正加快向“文旅+休闲+度假+IP”等复合型产品结构转变。今年“五一”期间,上海海昌海洋公园度假酒店、发现王国度假酒店等度假酒店产品均“一房难求”,“住在海昌海洋公园里”成为备受瞩目的海滨度假新体验。

\r\n

\r\n

来源上海海昌海洋公园公众号

\r\n

她还进一步谈到,海昌深入研究亲子族群的心理,从产品供给段发力,积极打造丰富多彩的品牌营销活动,从而持续提升海洋公园对亲子游客的吸引力。一是持续打造品牌年轻化,比如围绕节庆节点预热造势,深耕家庭客群释放优惠政策,开发定制游、园内消费券、儿童生日派对等。二是通过丰富的跨界联动,吸引亲子族群持续来园,诸如参与哈啰出行策划的“爸爸您辛苦了,暖心日”活动;携手爱奇艺进行多种形式的跨界联动等。三是有连贯性的品牌活动,一以贯之,海昌针对亲子客群,已连续7年举办以海洋文化为核心的“海昌小小旅行家”品牌活动,向社会传递海洋文化内涵和保护海洋环境的公益理念等。

\r\n

在业内人士看来,尽管受疫情影响,市场在一定时间内很难恢复如初,对于业者而言,抓住一次机遇可能就会迎来一次“回血”的机会。同时市场的不断变化,以及游客出游需求的变化,也对服务接待提出了更高的要求。

\r\n

王永锋也表达了相同的观点,旅游是低毛利的行业,但是亲子游利润空间要略高于常规旅游产品,同时接待标准以及细节服务成本也略高,对于服务者的要求也会更高。“拿五一小长假来说,此次出游的火热导致旅游资源价格上浮,比如黑龙江齐齐哈尔市平时100多元的酒店在5月1-4日期间已经上涨是300多元\\间\\晚。受疫情影响多数人的消费观念也有所变化,迎来报复性旅游消费也比较正常。除此之外,游客对于旅游的认知度逐渐提高,更懂舍得花才能玩得好,而且全家出游,包括老人和小孩,对于出游的需求也会更多,各方面的要求也会提升”。

\r\n

\r\n

\r\n

暑期助力迎“高光”时刻?

\r\n

随着五一小长假的结束,旅游市场热度稍微降低,错峰出行迎来正当时。一方面是性价比较高,另一方面是可以避开人潮汹涌的景区。然而对于做亲子游的业者来说,暑期的临近,无疑又是一次发力的机会。

\r\n

“从个人角度来讲,五一的旅游热度对于暑期亲子游市场是有推动作用的。而且这个暑假对于大多数旅游地区都是非常重要的机会,抓住亲子游市场有可能就占据了暑假旅游的半壁江山。对于国内旅游市场我们始终看好,疫情对旅游打击最大同时也是照妖镜,去除了很多小的个体非正规旅游公司等,公司当下也是布局资源端,抽调资金提前切房甚至承包整个酒店,以及自营车队来布局暑期市场”。王永锋如是说。

\r\n

赵克庭也表示到,今年的暑期亲子游会迎来更强劲的增长,未来亲子游市场会出现新的模式,结合度假、游学、轻户外等元素,市场会更认可有产品设计能力和优质服务能力的公司。

\r\n

近年来,随着旅游消费的增长,越来越多的居民家庭将每年暑期或寒假的亲子旅行列入家庭年度消费预算中,当下家长对于“带娃出游”的意义也不再是简单的出门游玩,而是想要“通过旅行让孩子认知世界”,寓教于乐,亲身体验。

\r\n

\r\n

根据同程旅行的《中国居民亲子旅行消费报告2020》显示,暑期是一年当中亲子旅行(交通出行)和亲子游(旅游度假)的绝对旺季,全年客流量的三成以上分布在7月和8月两个月份。子女处于小学阶段的居民家庭亲子旅行和亲子游的需求相对较高。亲子游的热门出游主题主要以主题乐园、动物园、海洋馆、城市休闲观光、水世界、博物馆、科技馆等为主,亲子游的人均门票花费相对较高。

\r\n

同时,郑芳表示,五一的热度,是疫后亲子游市场复兴的开始,对于暑期的亲子游市场,他们也抱持乐观的态度。为了迎接即将到来的暑假,海昌海洋公园将会陆续推出丰富多彩的活动,包括夜产品的全面升级上市、第8期“海昌小小旅行家”启动、世界海洋日活动、毕业季活动、建党100周年庆祝活动等。对于暑假,夜消费是海昌全力出击的方向,增加夜游产品的多元化供给,快速形成夜间旅游消费增长点已不容小觑。

\r\n

距离暑期还有不到两个月的时间,根据2016年教育部等部委联合发布的关于《关于推进中小学生研学旅行的意见》,目前一年2至4次研学旅行已经成为中小学生的刚需,一方面为亲子旅行市场贡献了巨大增量,另一方面也是一个庞大的亲子游及家庭旅游消费的市场教育计划。这也意味着暑期亲子游市场家庭市场消费存在着巨大的潜力,对于身处其中的人来说,能否迎来高光时刻,闻旅也会持续关注。

\r\n

(文中配图源于摄图网。)

', '1621220318', '1621220318'); +INSERT INTO `article` VALUES ('21', '23', '「拼多多」的农业创业记', 'https://img.36krcdn.com/20210514/v2_92ff6697c90e424a9d74f2bca38b8d05_img_jpg?x-oss-process=image/resize,m_mfit,w_600,h_400,limit_0/crop,w_600,h_400,g_center', '这是一个隐身于国内农产品消费背后的大系统,它随着前端消费模式的变化同步发生改变。透过拼多多这些年在农业领域的发展历程,我们试图勾画出这只看不见的大手的样貌。', '

编者按:本文来自微信公众号“新商业情报NBT”(ID:newbusinesstrend),作者:朱若淼,36氪经授权发布。

\r\n
\r\n

这是一个隐身于国内农产品消费背后的大系统,它随着前端消费模式的变化同步发生改变。透过拼多多这些年在农业领域的发展历程,我们试图勾画出这只看不见的大手的样貌。

\r\n
\r\n

拼多多上,生鲜电商是一门大生意,也是驱动这个年轻平台保持高增长的主要动力之一。根据拼多多最新公布的财年数据显示,2020年农产品带来的GMV达2700亿元人民币,占总GMV的16%,较上一年实现了翻倍增长。

\r\n

这部分业务帮助拼多多发展成为国内的第二大电商平台,给阿里造成不小的竞争压力。

\r\n

生鲜电商业务之所以能取得阶段性成功,得益于拼多多的创新针对着中国农业供应端的基本特征——生产环节分散、规模化程度低,流通环节层级众多、交易成本极高。通过算法上的创新,拼多多将上游分散农户的货源集中到平台上,并有效对接到下游多元的消费者,这促成了平台上大量的交易产生。

\r\n

在早前的采访中,拼多多创始人黄峥将这种模式视作是帮助中国突破产业链分散化困境的新答案。

\r\n

2021年,拼多多已经明确提出了下一阶段的目标——成为全球最大的农产品零售平台,这意味着拼多多也需要打造一个聚焦农业的物流基础设施平台。在逻辑上,拼多多的这套流通体系与其交易端的算法创新一脉相承,这套模式被总结为“农地云拼”。

\r\n

实际上,这是所有零售巨头的生鲜生意在发展到一定规模后,都会走上的道路。与所有通过销量驱动农业流通供应链改造的模式类似,拼多多介入其中的方式仍然是自下而上的。

\r\n

这是一个隐身于国内农产品消费背后的大系统,它随着前端消费模式的变化同步发生改变,我们试图透过拼多多这些年在农业领域的发展历程,初步勾画出它的样貌。

\r\n

拼购逻辑,刺激农产品销量暴增

\r\n

在中国,农产品需要通过传统的层层批发体系周转、流通。经过长年的发展,这套流通体系已经实现了稳定的流通路径,每个具体品类也形成自己的细化分工。

\r\n

但是,这套流通网络存在系统性的问题。由于中间环节众多,经手方层层加价,这套路径进化缓慢,长期以来促成农产品价格波动大,且“种菜赔,买菜贵”的产业困境。

\r\n

随着国内电商的进一步发展,最近十年各路创业者开始大量涌入生鲜点上这个领域。他们的共同逻辑在于,通过线上交易的方式,绕开中间的层层加价,实现上游种植端与下游消费端的对接,以此来降低农产品流通环节中的成本,并实现相对低的销售价格。

\r\n

在实践过程中,这条路走得异常坎坷。农产品,尤其是生鲜类农产品,迥异于标准化的工业商品。作为一种有生命的商品,它们保质期短,缺乏足够标准,流通环节的品控难做,而且运输途中的损耗极大。

\r\n

电商平台要想绕开传统批发链条,首先,要汇集到量足够大且稳定的订单;其次,还必须打造一套符合生鲜流通效率的仓配-物流网络。国内当时的供应链资源并不足以满足生鲜的流通效率,这给早期的创业者们带来巨额负担,多数创业公司陷入交易量越大,亏损就越严重的怪圈。

\r\n

2016年,第一批生鲜电商创业潮进入洗牌期,大量创业公司倒闭。这段时期,当时国内的两大电商巨头京东和阿里都试水了生鲜电商业务,也都没有取得大的成功。

\r\n

拼多多正是在这样的背景下默默成长起来,它抓住了下沉消费市场的流量和社交红利,高效率地利用“拼购”在交易端实现了订单的汇聚。这成为缩短农产品流通链路,压低销售价格的基础。

\r\n

\r\n

黄峥在早期的一次采访中解释称,拼购的优势在于,能在短时间内聚集到海量需求,这帮助上游迅速消化掉了大批量的当季农产品。在这种创新的交易模式刺激下,一些曾经陌生感强,销售市场有限的单品在拼多多上成长为了爆款。

\r\n

原产于云南的雪莲果是其中的一个典型案例。2016年,产自云南省文山地区的雪莲果,在拼多多开始走货,随着平台的精准推送和社交推荐,这个主要被广东人用来煲汤的水果需求量出现暴增,被销往全国市场。到2018年,文山雪莲果在拼多多上的销量已超过3600万斤,而在文山地区的种植面积也从2016年的6万亩,增长至2018年的9万亩。

\r\n

在这个案例中,拼多多分布式的算法推荐逻辑起到汇聚订单的关键性作用。区别于传统电商平台中心式的展示逻辑,拼多多上的农产品主要以单品形式,而非店铺形式被展现在推荐屏幕上,极易制造出超级单品,改变用户的消费行为。这样的案例还包括蒲江的猕猴桃,山东潍坊的羊角蜜瓜等等。

\r\n

拼购模式成功之后,拼多多基于“拼”的逻辑,不断在流量玩法持续创新。“多多果园”是一个成功案例。

\r\n

通过游戏方式,“多多果园”将消费者日常分散、不确定性的消费集中在了少数几类水果上,实现了计划性的销售。“多多果园”于2018年内上线不到半个月就带来近4000万的用户量,每天的使用人次超2亿人。随后,多多果园之后,美团、京东、淘宝均推出相似游戏。

\r\n

在此基础上,一些区域特色农产品产业带快速成长起来。例如,在四川会理,当地的石榴原本是个小众水果品类,此前主要依托传统渠道销售,滞销风险高,在多多果园的推荐,当地的石榴销售在获得稳定渠道之后实现了较大的增长。

\r\n

流量逻辑契合农业流通现状

\r\n

拼多多在农产品交易上取得阶段性成功还有更深层次的原因——它在需求端的创新与国内农业发展现状的深度契合。

\r\n

首先,从农产品本身的商品属性来看,国内农产品的品牌化程度极低,大量农产品甚至连属地品牌都尚未建立起来。

\r\n

直接影响是,区域特色农产品在线上的场景中销售时,很难迅速打开知名度。此外,传统电商平台的商品展示逻辑是以店铺为中心,这进一步增加了特色农产品的市场教育成本。

\r\n

在拼多多之前,爆款农产品的走红往往归功于平台编辑式的营销策划。例如2012年、2013年间爆红的褚橙、北美车厘子,背后的推手都来自于电商渠道的营销。而在拼购模式下,平台上的农产品的销售情况,经由消费者选择而出,社交流量的网络效应明显,焦点优先置于品类,也规避了品牌化缺失的先天不足。

\r\n

其次,从农产品流通体系上看,拼购模式成功实现了有效地产需对接,它符合中国农业流通环节的现状。黄峥曾在自己的公众号上将这种交易模式总结为,“用需求流通侧的半‘计划经济’来推动实现供给侧的半’市场经济‘。”

\r\n

这句话点出商品在传统流通体系中存在的固有问题——生产本身具有计划性特征,但消费需求变化莫测。由于商品的生产方与消费者之间往往存在中间环节,这直接造成上游的计划性生产与下游的实际需求脱节。而在农业流通领域,这个问题尤其严重。由于农业产业链条更长,种植分散,上下游之间的脱节较之于工业更严重。

\r\n

在《新商业情报NBT》采访报道西瓜的产业现状时,看到了农产品在传统流通链路遭遇的品控困境。西瓜的品质好坏跟浇水量和浇水时机密切相关,在产地的交易中,农户的客户是经销商,双方按斤为标准进行交易,这造成农户时常会选择在交易的前几天大量注水,以增加西瓜重量获取更多收益,而这种注水行为本身会损害西瓜的品质。

\r\n

黄峥认为,传统电商模式仅仅是将交易从线下转到线上,但并没有从根本上规避产需脱节的问题。因为“这只是把流通侧的信息高度透明化了,它加速了各类商贩之间的市场竞争,但是对传统制造业的工厂改变不多,工厂要生产多少还是要一些计划的。线上纯流通侧的极度市场化也不改变生产侧计划的滞后性和高度计划性。”

\r\n

\r\n

改变“生产侧滞后性和高度刚性计划性“的关键,仍然来自于需求侧的变革。正因如此,拼多多的推荐模式才呈现出了今天的特征。

\r\n

最大的特点是,将个性化的需求“归集成有一定时间富裕度的计划性需求。”尽管这类订单的需求量小于传统的批发商或商超渠道,但是它足以撬动上游生产要素的按需调整。

\r\n

随着国内电商业态迭代,这一点在工业生产领域已经体现了出来。以服装制造行业为例,直播电商的兴起加速了工厂端转向柔性制造模式,并进行自我变革。相较于传统批发商的订单,来自于直播间的订单每个批次的需求量低于千件,但要求的出货时间短,一般直播间在1到2天内就希望从工厂拿到货,而且根据直播销售情况的变化,这类客户随时可能向工厂追加订单。

\r\n

“小单快返”作为这类订单最显著的特征,它直接加快了工厂端的改造。例如,2020年,《新商业情报NBT》在杭州萧山女装园里接触到的工厂中,就有生产方已经根据这类订单的特点,对生产设备和管理模式做了调整,以提高工厂响应需求的能力。

\r\n

在农业领域,与柔性制造模式相对应地是订单农业模式。随着平台上农产品销量规模的增长,拼多多如今已经越来越多的释放出自下而上地改造农业上游的信号。

\r\n

订单农业模式正是它介入流通环节改造的基本逻辑之一,多多农园是典型案例。

\r\n

2019年,拼多多率先在云南多个特色产区落地多多农园,本质是以平台带来的订单,撬动农业生产环节的现代化改造,其中包括农民经营理念的现代化,也包括生产的现代化。

\r\n

以拼多多在保山建立第一个多多农园为例,平台通过溢价包销的方式,向当地农户采购咖啡豆,并以此为杠杆撬动上游的农户根据需求进行生产。

\r\n

据报道,多多农园项目为当地带去一整套产业升级体系,包括为当地农户提供种植技术指导的农研团队,派驻专门的培训团队,指导当地农民了解电商渠道及现代经营理念,并且还为产地联系专门的货车将咖啡豆运输到加工厂,以便帮助当地提高咖啡豆的商品价值。

\r\n

拼多多副总裁井然在2019年介绍多多农园时,曾提及未来五年内,这个项目将在国内甘肃、新疆、西藏等8个省及自治区落地,数量多达1000个。

\r\n

正是从这一年开始,国内各零售巨头越发强调起基地模式。其共同特点是,以订单作为撬动上游改造的基础。例如,阿里也是在2019年成立了数字农业事业群,提出建设1000个数字农业基地的计划。

\r\n

在电商平台间竞争日渐白热化的大背景下,大家争夺的焦点已经不仅仅局限于前端的流量,而是优质的供应链资源的争夺。后者成为这个阶段各零售巨头竞争的核心。

\r\n

更深一步改造农业流通供应链

\r\n

竞争的刺激下,拼多多在流通端的动作也更多地浮出水面。自2019年以来,拼多多在农产品后端的动作频频。

\r\n

相当长的一段时间之内,小规模家庭农场仍将是主要的中国农业生产主体,决定了单纯借鉴欧美那样搭建一套现代化的农产品流通体系,并不完全适用。

\r\n

农村社会经济领域学者黄宗智在《中国的新型小农经济:实践与理论》中,详细阐释了这个困境:

\r\n

“分散的小规模农场决定了中国大陆今天的农产品物流体系的基本状态,即没有组织化的小农户,加上千千万万的小商小贩,再加上没有新式设备的毛坯型批发市场的低效率、高损耗、高成本物流体系。这些基本现实也正制约着试图模仿美国模式的政策的可能作用。在如此的局面下,中国大陆的批发市场不可能具备发达国家的条件。”

\r\n

这意味着,中国大部分农产品流通,在未来很长一段时期内,仍然依赖于传统的批发链条。在流通的最上游,农产品的集中采购仍然有赖于黄宗智所指的“小商小贩”,他们夹在农户与批发商之间,常年奔波在各产区,对经手的农产品了如指掌,从分散的农户手中将货集中采购回来,再对接给一级批发商。

\r\n

对这个环节的改造是一个极为复杂的系统性工程。各利益方要想革新现有的农产品流通体系,缩短农产品的流通路径,降低损耗成本,一方面必须重新吸纳、整合上述传统的流通资源,而非对整个系统的完全否定;另一方面,需要新的基础设施建设,如冷链物流等。

\r\n

\r\n

这两方面也是拼多多近几年来加速布局的方向。

\r\n

在整合流通资源方面,拼多多通过扶持产地的电商“带头人”,吸纳、整合传统供应链资源。

\r\n

在拼多多众多新农人案例中,不乏年轻的返乡创业者,搭上平台的流量红利将自己农产品电商生意做大的故事。其中一部分人,在自家生意做到一定规模之后,转而加大供应链上的投入。他们以电商订单的需求为导向,向更上游的代办下订单,整合产地货源并扩充SKU,并根据自己的能力搭建局部的加工、仓配网络。

\r\n

此外,拼多多也在有意识的培养这类具备现代经营理念,理解供应链的新农人,帮助其组建公司,整合上游的货源。“我们的解决方案是打造建档立卡户为核心的新农商公司。”井然在两年的一次媒体沟通会上介绍了多多农园的这套培养机制。

\r\n

新农商公司由拼多多提供产业营销及相应的扶持,邀请农户作为股东的身份加入,并由政府出面确保利益分配,“关于新农商公司,其实在不少贫困地区,农民的产权意识不够,没有现代经纪人的意识,很多人不愿意再成为合作社的一员,所以我们还要想很多办法去引导农户去主动参与。”井然曾经如此提到。

\r\n

同时,这类新农商公司不局限于在拼多多上开店,“他们可以去其他平台,甚至线下经营。”

\r\n

拼多多对新农人的扶持,本质上是在上游“多对多”的农货交易环节,培养更多的新型的有机主体。他们按照自家电商生意的需求,整合传统的流通资源,搭建各自的生鲜供应网络。这些分散的供应网络又依托于电商平台被有机地组织起来,与下游消费着相连接,从而实现对传统流通链条的改造。

\r\n

在基础设施方面,拼多多也越发强调起冷链物流这类“新基建”的搭建。

\r\n

例如,冷链物流的价值正在日益凸显,但又长期以来存在先天不足,同时存在冷链资源空间分布不均,不能满足流通需求的问题。

\r\n

解决这个问题需要大量的基础设施投入。近两年来,巨头们在这个环节动作频频,表现最显眼的是阿里。2020年一年时间之内,它搭建了一套基本能服务全国的数字化农产品供应网络,其中包括5个产地仓和20多个销地仓。前者的核心功能是对农产品进行分级、包装等加工处理,后者负责农产品的流通周转。

\r\n

与此同时,拼多多也开始强调要投入建设冷链物流配送体系。2020年年底,拼多多战略副总裁David Liu就曾提及,接下来他们将在冷链相关的基础设施上进行大量投资。此外,在谈及“多多买菜”新业务时,他也特别强调了其之于拼多多搭建冷链物流配送网络的价值。

\r\n

从供应链的角度上看,多多买菜对于拼多多的价值,不仅停留于流量价值,更是拼多多接下来重投入建冷链物流体系的基础。现任CEO陈磊在去年底的财报会上,将多多买菜业务称作“加强农业基础设施建设、推动农业产业链价值升级的延伸”。

\r\n

对于拼多多这一家公司而言,拼购在流量层面带来的轻模式创新,为它实现了第一个阶段的爆发式增长。但流量创新的模仿成本低,它带来的增长优势并不稳固,也不够长远。竞争对手已经追赶过来,2020年淘宝重启特价版,瞄准的对手就是拼多多。

\r\n

竞争的核心还是要落到供应链。这些年来,拼多多的布局已经一步步转向上游,核心逻辑与分布式的流量创新逻辑一脉相承,以实现上、中、下游的“多对多”资源匹配为中心展开。

\r\n

从这个维度上看,拼多多下一阶段竞争壁垒的搭建才刚刚开始,而中国长期存在的这对小农户与大市场的关系,为平台性的公司提供着巨大的潜在机会。

\r\n

在中国农业流通体系尚未实现信息化、标准化的大背景下,平台之间的竞争并不是一场零和游戏,它们之间的相互竞争,推动了整个体系的转型、升级。

\r\n

正如黄峥在2018年所说,“在农产品这个领域,我们更期望大家去做拼购,这样才能大幅提高效率。拼多多一家的力量是不够的,农业产业特别大,很多尝试并不是立竿见影的,做的人越多越好。”

', '1621220368', '1621220368'); +INSERT INTO `article` VALUES ('22', '23', '拆解阿里2021年财报,一条主线三个点', 'https://img.36krcdn.com/20210516/v2_397b59bf8d8f4257ab7038df86d11c69_img_png', '持续资本投入,内需、云计算高科技、全球化成关键。', '

编者按:本文来自微信公众号“ 来咖智库”(ID:laikazk),作者:追辛,36氪经授权发布。

\r\n

\r\n

因垄断被罚后,阿里交出了首份财报。

\r\n

5月13日,阿里巴巴发布2021财年年度报告,2021财年整体线上实物GMV同比增长21%,公司实现营业收入7173亿元,同比增长41%;调整EBITDA为1968亿元,同比增长25%;实现归属股东的Non-GAAP净利润为1720亿元,同比增长30%。

\r\n

2021年第四季度实现营业收入1874亿元,同比增长64%;调整EBITDA为299亿元,同比增长18%;实现归属股东的Non-GAAP净利润为262亿元,同比增长18%。截至2021年3月中国零售市场移动月活用户数达到9.25亿,活跃买家数增速回升。

\r\n

“这些成绩建立于我们为消费者和商家提供的清晰价值之上。”阿里巴巴集团董事会主席兼首席执行官张勇说,“得益于生活及工作等各方面均在加速数字化,我们对中国消费驱动的经济增长充满期待。我们将继续聚焦用户体验,专注于通过创新创造客户价值,从而实践在数字时代让天下没有难做的生意之使命。”

\r\n

阿里巴巴集团首席财务官武卫表示:“我们计划将2022财年所有增量利润及额外资本投入用于支持平台商家,以及投资于新业务和关键战略领域,这将有助我们增加消费者的消费份额,并进入新的潜在市场。”

\r\n

对于这份财报所传递的核心信息,就是阿里对生态业务的持续投入力度,特别是通过强化技术来支撑不同业务领域,这包括内需(核心商业、新零售、社区服务和本地服务)、云计算高科技以及国际业务这三个关键点。而投入的结果,是希望获得用户量的增长、用户粘性的提高,以及商家从阿里的服务中获得价值。

\r\n

但接受来咖智库采访的券商人士也表示,在面对其他互联网巨头的多维度竞争中,阿里在获客拉新、产品结构、数字化运营等层面均具有较强优势,但反垄断政策执行力度超预期、疫情影响终端消费需求、电商行业竞争加剧,以及下沉发展不达预期等,也将是阿里未来经营的风险因素。

\r\n

垄断罚款计入损益,带动季度首次由盈转亏

\r\n

阿里垄断被罚的影响,直接反映在此次财报上。

\r\n

今年4月10日,市场监管总局依法对阿里巴巴实施垄断行为作出行政处罚决定,责令阿里巴巴集团停止违法行为,并处以其2019年中国境内销售额4557.12亿元4%的罚款,计182.28亿元。

\r\n

本次财报显示,阿里巴巴当季收入为1873.95亿元,同比增长64%,虽然营收增长较为亮眼,但182亿元的高额罚款一次性进入到本季度损益,也让阿里巴巴本季度直接由盈转亏,净亏损76.54亿元,这也是阿里上市以来首次季度亏损。当然,若剔除该影响及其他若干项目,Non-GAAP阿里四季度净利润仍处于增长状态,同比增长18%至262.16亿元。

\r\n

在财报发布后的分析师电话会上,张勇也首先谈及此项处罚,“2021年的4月收到国家市场监督管理总局行政处罚决定书,对此处罚公司诚恳接受,坚决服从。”他还表示,此次事件使得阿里巴巴能够更深刻审视平台经济发展和社会发展的关系,更加坚定地认识到阿里作为一个平台性企业的社会责任和担当,将利用这次处罚契机进行充分反思和调整,让阿里巴巴能够更好的服务消费者、商家和合作伙伴。

\r\n

核心商业基本盘稳固,消费端生态扩大

\r\n

在2021财年,阿里核心商业的基本盘依然稳固,GMV、营收以及用户等各项数据均创下新高。

\r\n

在GMV方面,财报数据显示,2021财年阿里巴巴中国零售平台年度GMV达到8.119万亿,较上年再增长1.066万亿,主要包括中国零售市场GMV为7.494万亿元,以及跨境及全球零售市场和本地生活服务GMV。

\r\n

此外,2021财年整体线上实物GMV(剔除未支付订单)同比增长21%,主要受到快消品和家居装饰品类所推动。3月份季度天猫线上实物GMV(剔除未支付订单)同比增长26%,高于上季度19%的增速。3月份季度整体线上实物GMV同比增长为33%,中小企业已从疫情中恢复过来而呈现更快的同比增长。

\r\n

与此同时,阿里2021财年中国零售商业的收入为4737亿元,同比增长42%,其中客户管理收入同比增长24%,主要由于包括推荐信息流在内的新变现模式的收入增长强劲,搜索变现单次点击平均单价及付费点击量的上升,以及中国零售市场线上实物商品GMV的强劲增长。经测算,阿里2021财年佣金+广告货币化率为4.08%,同比提升0.34pct。

\r\n

华泰证券报告分析认为,阿里核心商业的交易市场业务地位稳固,将保持稳健的收入和盈利增长,主因公司可以在客户触达和提升经营效率方面为商户带来较大价值,这有助于留存商户和抵抗竞争压力。阿里将商户的部分成熟营销工具由付费改为免费,这或于短期影响变现能力的提高,但认为长远来看这有望提升付费商户转化率。

\r\n

阿里巴巴在财报中还表示,中国零售市场表现稳健,四季度淘宝GMV增长加快,淘宝直播财年GMV超5000亿元。

\r\n

在用户表现方面,阿里巴巴2021财年全球活跃消费者(AAC)超过10亿,其中8.91亿来自中国零售市场、本地生活和数字媒体及娱乐平台,约2.40亿来自海外。截至3月31日止12个月期间,中国零售市场AAC为8.11亿,单季度增加3200万,季度环比为9个季度以来新高。

\r\n

阿里巴巴在财报中重申其用户增长主要来自下沉市场,2021财年大约70%的新增年度活跃消费者来自欠发达地区,其中淘宝特价版的年度活跃用户已超1.5亿。“这是一个非常好的起步。”张勇在电话会上也强调,未来在下沉市场依然存在巨大的人口空间,而淘宝特价版,恰恰是面向这部分对价格敏感的消费者,他将其视为阿里平台在中国零售市场的一个正面补充,并表态,接下来会继续加大投资,之于竞争对手的影响也会“马上到来”。

\r\n

与此同时,阿里还在进一步扩大其在消费端的生态业务。阿里巴巴在财报中透露,公司于2021年初成立了新的事业群,以整合阿里巴巴生态体系的资源和能力,加速器社区商业平台业务增长。阿里巴巴称,其社区商业平台计划在未来12个月广泛覆盖内地市场。此前多家媒体报道称,阿里成立新MMC事业群,主要聚焦社区团购业务,称投入不设上限。

\r\n

而阿里对本地生活服务的投入,则主要体现在新用户获取和提升消费者体验。去年7月,饿了么宣布从餐饮外卖平台升级为解决用户身边一切即时需求的生活服务平台,之后又推出了百亿补贴计划,为消费者省钱的同时,也为商家持续吸粉、增加用户黏性。参与百亿补贴的商家,订单增速较日常翻了一倍。第四财季,阿里巴巴本地生活服务营收72.49亿元,同比增长50%,增长较为理想。目前来看,本地生活业务依托阿里生态还可以有更大的发挥空间。

\r\n

正如张勇在电话会上指出,阿里一直在考虑如何利用技术来增强自身的竞争力,能够有如此强大的技术开发的能力,并且能够在竞争激烈的市场环境中,不停的把研发的新技术整合到实际的运营当中。在国内消费内需来讲,一个大的问题就是如何不停的获取新客,如何留住市场上的消费者,这需要依靠完全自动化的人工智能驱动的匹配技术,来不停的提高和优化转化率,进而通过满足客户多元化需求来提高交易额;另一方面就是在获得新的消费者之后,要考虑如何把每一个客户的生命周期价值最大化,通过建立用户画像以及了解用户需求,结合不同产品的特性,能够不断的为客户提供新的产品和服务以及个性化的定制。

\r\n

丢单致阿里云季度放缓,将持续在技术上投入

\r\n

在企服和技术领域,财报显示,2021财年阿里云营收达601.2亿元,比上一财年400亿元收入大幅增长50%。财报表示,阿里云收入增长主要得益于互联网、公共部门及金融行业客户收入增长推动,预计未来收入结构将进一步多样化。

\r\n

2021财年,阿里云的经营亏损为90.50亿元,经调整EBITA亏损1.66亿元,而2020财年经调整EBITA亏损14.14亿元,主要因实现规模经济效益所致。

\r\n

从2021年前三个月来看,阿里云收入同比增长37%至167.61亿元,季度收入增长放缓主要由于来自互联网行业单一头部客户的收入下降。该客户在海外拥有规模业务,过去一直采用阿里云的海外云服务,但基于非产品相关的要求,该客户决定终止其国际业务与阿里云的关系。而剔除此客户,阿里云前10位非关联公司客户的收入贡献,合计不超过阿里云2021财年总收入的8%。

\r\n

据了解,2015财年阿里巴巴首次披露云计算营收,当年阿里云全年收入为12.71亿元,到2021财年营收601.2亿元,7年间增长46倍。其中,阿里云深耕政企服务市场,政企行业收入占比持续上升。Gartner最新数据显示,全球IaaS云基础设施市场上,亚马逊、微软和阿里云为前三位,其中阿里云市场份额持续五年增长。其中,在亚太市场上,阿里云更具优势,市场份额排名第一,份额是微软和亚马逊的总和。

\r\n

在财报电话会上,张勇提到,在技术领域尤其是云计算,这是一个时代的机会,所以在核心技术上特别是云计算和大数据的上,还会增加投入,这些投入不仅涉及到云,还会在科技的投入上,对下一代的消费体验,对物流这些方面技术上我们能够进行投入,这是我们坚信这样技术上的投入会使我们内需的增长、全球化的进展都能够受益。“我们不停的投资云方面的技术,云产品不仅对标国内,也对标国际上竞争对手的核心云产品,从而确保产品处在同类产品的最好水平。”

\r\n

国际化业务强劲增长,未来消费者基数翻倍

\r\n

随着疫情的好转,阿里的国际业务也继续保持增长。

\r\n

比如在跨境及全球零售商业方面,截至2021年3月31日止三个月,跨境及全球零售商业收入为94.96亿元,较2020年同期增长77%,增长的主要原因来自Lazada、速卖通和Trendyol的收入增长,收入同比增长相对高,主要由于去年同期正值新冠肺炎疫情初期,受疫情影响经济活动严重放缓。

\r\n

其中于2021年3月31日止,主要有Lazada及速卖通组成的全球零售商业的年度活跃消费者快速增长,达到约2.4亿,并且Lazada在2021年财年及季度的订单量均实现同比三位数增长,速卖通于2021财年实现用户和GMV的强劲增长。

\r\n

而跨境及全球批发商业上,截至2021年3月31日止三个月,跨境及全球批发商业收入为39.2亿元,较2020年同期增长59%,增长的主要愿意来自Alibaba.com付费会员数量的增加和付费会员的平均收入上升,以及与跨境业务相关的增值服务收入的增长。

\r\n

与此同时,菜鸟网络多年投资打造的全球智能物流基础设施,为其财务表现强劲的关键、越来越多来自阿里快速发展的跨境业务,例如速卖通和天猫国际的商家,采用了该全球智能物流基础设施提供的“菜鸟履约”服务。2021年3月,菜鸟网络的全球包裹网络的日均包裹量超过500万件。尤其在跨境及全球零售商业业务的拉动下,菜鸟网络物流服务国际业务的订单量和单均收入上升,其第四财季收入达99.59亿元,同比大增101%。不过,这与去年疫情导致经济活动放缓也有关联。

\r\n

张勇表示,在全球化的领域现在很高兴看到在海外的AAC已经达到2.4亿,我们会继续投入,增加我们的海外消费者基数,希望能够在未来几年把这个数字翻倍。

\r\n

小结

\r\n

从上述的财报数据以及分析来看,在内需、云计算高科技、全球化三个战略领域,阿里仍然潜力巨大,并且投资于长期增长的决心依然明确。阿里也正在步入新的发展阶段,一方面通过优化和扩大消费需求,来促进消费者的成长以及消费频次的增长,另一方面,通过多个措施降低商家经营成本,为线上和线下零售商持续创造价值,借此获取增量的机会,而这些都会成为助推阿里长期收入和盈利增长的重要基石。

', '1621220399', '1621220399'); +INSERT INTO `article` VALUES ('23', '1', '11111', '', '1111111111111111', '2222211111111111111111111111111111111111111111111111111111', '1626742282', '1626742212'); +INSERT INTO `article` VALUES ('24', '21', '22222222', '', '2222222222222222222222222222222', '请输入内容...1111111111', '1626744277', '1626744277'); + +-- ---------------------------- +-- Table structure for category +-- ---------------------------- +DROP TABLE IF EXISTS `category`; +CREATE TABLE `category` ( + `category_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `category_name` varchar(45) NOT NULL COMMENT '分类名称', + `category_desc` varchar(255) NOT NULL COMMENT '分类描述', + `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '记录更新时间', + `add_time` int(11) NOT NULL COMMENT '记录增加时间', + PRIMARY KEY (`category_id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COMMENT='分类表'; + +-- ---------------------------- +-- Records of category +-- ---------------------------- +INSERT INTO `category` VALUES ('1', '科技', '前言科技观察,探索和思考。', '1621215684', '1616394376'); +INSERT INTO `category` VALUES ('21', '生活', '体验生活、热爱生活、分享周边生活趣事', '1621215756', '1621215756'); +INSERT INTO `category` VALUES ('22', '职场', '职场频道,创业,行业,高效,职场早知道,带你升值加薪。', '1621215854', '1621215854'); +INSERT INTO `category` VALUES ('23', '创新', '创新频道,新商业,新经济,创业,宠物经济,单身经济', '1621220015', '1621220015'); +INSERT INTO `category` VALUES ('24', '汽车', '汽车频道,车企动态,聚焦国家政策,无人驾驶,新能源', '1621220050', '1621220050'); + +-- ---------------------------- +-- Table structure for comment +-- ---------------------------- +DROP TABLE IF EXISTS `comment`; +CREATE TABLE `comment` ( + `comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论id', + `comment_content` varchar(800) NOT NULL COMMENT '评论内容', + `email` varchar(255) NOT NULL COMMENT '邮箱', + `article_id` int(10) unsigned NOT NULL COMMENT '文章id', + `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态,1:正常,2:移入回收站', + `nickname` varchar(50) NOT NULL COMMENT '昵称', + `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', + `add_time` int(10) unsigned NOT NULL COMMENT '增加时间', + PRIMARY KEY (`comment_id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of comment +-- ---------------------------- + +-- ---------------------------- +-- Table structure for user +-- ---------------------------- +DROP TABLE IF EXISTS `user`; +CREATE TABLE `user` ( + `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', + `user_name` varchar(255) NOT NULL COMMENT '用户名', + `user_pwd` varchar(255) NOT NULL COMMENT '用户密码', + `add_time` int(111) NOT NULL COMMENT '增加时间', + `update_time` int(111) NOT NULL COMMENT '修改时间', + PRIMARY KEY (`user_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of user +-- ---------------------------- +INSERT INTO `user` VALUES ('1', '小白', '123456', '1621216053', '1621216053'); diff --git "a/blog\345\220\216\345\217\260/docs/nginx\351\205\215\347\275\256.txt" "b/blog\345\220\216\345\217\260/docs/nginx\351\205\215\347\275\256.txt" new file mode 100644 index 0000000000000000000000000000000000000000..3737bc7fe43ac63cc3c604e5e2b7748328f25032 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/nginx\351\205\215\347\275\256.txt" @@ -0,0 +1,18 @@ + server { + listen 8901; + server_name localhost; + location / { + root html/blog/public; + index index.html index.htm index.php; + if (!-e $request_filename) { + rewrite ^(.*)$ /index.php?s=/$1 last; + } + } + location ~ \.php$ { + root html/blog/public; + fastcgi_pass 127.0.0.1:9001; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + } \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-grid.min.css" "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-grid.min.css" new file mode 100644 index 0000000000000000000000000000000000000000..63e1bc6b0cb14da5d87024aef650ca5b8ce1c26f --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-grid.min.css" @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */@-ms-viewport{width:device-width}html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-reboot.min.css" "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-reboot.min.css" new file mode 100644 index 0000000000000000000000000000000000000000..402715d5d34a1bc5790b425979cc14857ad6e5e0 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap-reboot.min.css" @@ -0,0 +1,8 @@ +/*! + * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} +/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap.min.css" "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap.min.css" new file mode 100644 index 0000000000000000000000000000000000000000..882691283ab5b356f9643f8507666d71f3372ca1 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/css/bootstrap.min.css" @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{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);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/bootstrap/js/bootstrap.bundle.min.js" "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/js/bootstrap.bundle.min.js" new file mode 100644 index 0000000000000000000000000000000000000000..72a46cf9804be7ca81635dcc2aa4d3be5c53a8e7 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/bootstrap/js/bootstrap.bundle.min.js" @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.1.3 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t(e.bootstrap={},e.jQuery)}(this,function(e,t){"use strict";function i(e,t){for(var n=0;nthis._items.length-1||e<0))if(this._isSliding)k(this._element).one(q.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n=i.clientWidth&&n>=i.clientHeight}),u=0l[e]&&!i.escapeWithReference&&(n=Math.min(u[t],l[e]-("right"===e?u.width:u.height))),Ve({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=ze({},u,f[t](e))}),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,r=e.placement.split("-")[0],o=Math.floor,s=-1!==["top","bottom"].indexOf(r),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]o(i[a])&&(e.offsets.popper[l]=o(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!pt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],o=e.offsets,s=o.popper,a=o.reference,l=-1!==["left","right"].indexOf(r),c=l?"height":"width",u=l?"Top":"Left",f=u.toLowerCase(),h=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-ps[d]&&(e.offsets.popper[f]+=a[f]+p-s[d]),e.offsets.popper=Ge(e.offsets.popper);var m=a[f]+a[c]/2-p/2,g=Pe(e.instance.popper),_=parseFloat(g["margin"+u],10),v=parseFloat(g["border"+u+"Width"],10),y=m-e.offsets.popper[f]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ve(n={},f,Math.round(y)),Ve(n,h,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(at(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=$e(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=it(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case vt:E=[_,v];break;case yt:E=_t(_);break;case Et:E=_t(_,!0);break;default:E=m.behavior}return E.forEach(function(e,t){if(_!==e||E.length===t+1)return p;_=p.placement.split("-")[0],v=it(_);var n,i=p.offsets.popper,r=p.offsets.reference,o=Math.floor,s="left"===_&&o(i.right)>o(r.left)||"right"===_&&o(i.left)o(r.top)||"bottom"===_&&o(i.top)o(g.right),c=o(i.top)o(g.bottom),f="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&u,h=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(h&&"start"===y&&a||h&&"end"===y&&l||!h&&"start"===y&&c||!h&&"end"===y&&u);(s||f||d)&&(p.flipped=!0,(s||f)&&(_=E[t+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=ze({},p.offsets.popper,rt(p.instance.popper,p.offsets.reference,p.placement)),p=st(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,r=i.popper,o=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return r[s?"left":"top"]=o[n]-(a?r[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Ge(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!pt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=ot(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottomn.right||t.top>n.bottom||t.rightdocument.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right
',trigger:"hover focus",title:"",delay:0,html:!(An={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Dn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},Nn="out",kn={HIDE:"hide"+wn,HIDDEN:"hidden"+wn,SHOW:(On="show")+wn,SHOWN:"shown"+wn,INSERTED:"inserted"+wn,CLICK:"click"+wn,FOCUSIN:"focusin"+wn,FOCUSOUT:"focusout"+wn,MOUSEENTER:"mouseenter"+wn,MOUSELEAVE:"mouseleave"+wn},xn="fade",Pn="show",Ln=".tooltip-inner",jn=".arrow",Hn="hover",Mn="focus",Fn="click",Wn="manual",Rn=function(){function i(e,t){if("undefined"==typeof Ct)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=yn(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(yn(this.getTipElement()).hasClass(Pn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),yn.removeData(this.element,this.constructor.DATA_KEY),yn(this.element).off(this.constructor.EVENT_KEY),yn(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&yn(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===yn(this.element).css("display"))throw new Error("Please use show on visible elements");var e=yn.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){yn(this.element).trigger(e);var n=yn.contains(this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=we.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&yn(i).addClass(xn);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:yn(document).find(this.config.container);yn(i).data(this.constructor.DATA_KEY,this),yn.contains(this.element.ownerDocument.documentElement,this.tip)||yn(i).appendTo(a),yn(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Ct(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:jn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),yn(i).addClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().on("mouseover",null,yn.noop);var l=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,yn(t.element).trigger(t.constructor.Event.SHOWN),e===Nn&&t._leave(null,t)};if(yn(this.tip).hasClass(xn)){var c=we.getTransitionDurationFromElement(this.tip);yn(this.tip).one(we.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},e.hide=function(e){var t=this,n=this.getTipElement(),i=yn.Event(this.constructor.Event.HIDE),r=function(){t._hoverState!==On&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute("aria-describedby"),yn(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(yn(this.element).trigger(i),!i.isDefaultPrevented()){if(yn(n).removeClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().off("mouseover",null,yn.noop),this._activeTrigger[Fn]=!1,this._activeTrigger[Mn]=!1,this._activeTrigger[Hn]=!1,yn(this.tip).hasClass(xn)){var o=we.getTransitionDurationFromElement(n);yn(n).one(we.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){yn(this.getTipElement()).addClass(Tn+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||yn(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(yn(e.querySelectorAll(Ln)),this.getTitle()),yn(e).removeClass(xn+" "+Pn)},e.setElementContent=function(e,t){var n=this.config.html;"object"==typeof t&&(t.nodeType||t.jquery)?n?yn(t).parent().is(e)||e.empty().append(t):e.text(yn(t).text()):e[n?"html":"text"](t)},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e||(e="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},e._getAttachment=function(e){return An[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)yn(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==Wn){var t=e===Hn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Hn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;yn(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}yn(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==e)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Mn:Hn]=!0),yn(t.getTipElement()).hasClass(Pn)||t._hoverState===On?t._hoverState=On:(clearTimeout(t._timeout),t._hoverState=On,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===On&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Mn:Hn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Nn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Nn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){return"number"==typeof(e=l({},this.constructor.Default,yn(this.element).data(),"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),we.typeCheckConfig(En,e,this.constructor.DefaultType),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=yn(this.getTipElement()),t=e.attr("class").match(Sn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(yn(e).removeClass(xn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=yn(this).data(bn),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),yn(this).data(bn,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return In}},{key:"NAME",get:function(){return En}},{key:"DATA_KEY",get:function(){return bn}},{key:"Event",get:function(){return kn}},{key:"EVENT_KEY",get:function(){return wn}},{key:"DefaultType",get:function(){return Dn}}]),i}(),yn.fn[En]=Rn._jQueryInterface,yn.fn[En].Constructor=Rn,yn.fn[En].noConflict=function(){return yn.fn[En]=Cn,Rn._jQueryInterface},Rn),Qi=(Bn="popover",Kn="."+(qn="bs.popover"),Qn=(Un=t).fn[Bn],Yn="bs-popover",Vn=new RegExp("(^|\\s)"+Yn+"\\S+","g"),zn=l({},Ki.Default,{placement:"right",trigger:"click",content:"",template:''}),Gn=l({},Ki.DefaultType,{content:"(string|element|function)"}),Jn="fade",Xn=".popover-header",$n=".popover-body",ei={HIDE:"hide"+Kn,HIDDEN:"hidden"+Kn,SHOW:(Zn="show")+Kn,SHOWN:"shown"+Kn,INSERTED:"inserted"+Kn,CLICK:"click"+Kn,FOCUSIN:"focusin"+Kn,FOCUSOUT:"focusout"+Kn,MOUSEENTER:"mouseenter"+Kn,MOUSELEAVE:"mouseleave"+Kn},ti=function(e){var t,n;function i(){return e.apply(this,arguments)||this}n=e,(t=i).prototype=Object.create(n.prototype),(t.prototype.constructor=t).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(e){Un(this.getTipElement()).addClass(Yn+"-"+e)},r.getTipElement=function(){return this.tip=this.tip||Un(this.config.template)[0],this.tip},r.setContent=function(){var e=Un(this.getTipElement());this.setElementContent(e.find(Xn),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find($n),t),e.removeClass(Jn+" "+Zn)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var e=Un(this.getTipElement()),t=e.attr("class").match(Vn);null!==t&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||ethis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t + + + + + + 好看的双栏博客 + + + + + + +
+
+ +
+
+ + +
+
+
+
+

“线框”在设计中有哪些妙用?

+
+
124人浏览 / 3人评论
+
+
+

在日常的设计工作中,线框是常用到的设计元素之一,在一些优秀的作品中也常常会出现,而对于一些设计师而言,懂得参考优秀作品中用的设计元素,但却不知为什么用?用的目的是什么?也有些作品整体看起来会出现散乱、区域划分不明显、缺少细节感等等的情况,那么又该从哪些方面入手解决呢?本期就与大家一起分析:线框在设计中有哪些妙用?上述问题如何通过线框得到相应的解决! +

+

+

线框在设计环节中可以看做为点状元素、亦可以看做为线状元素,在之前文章《解密设计中的点线面》中分别说过点状、线状元素的作用,而线框在设计中则可以同时兼顾这两优点,虽然是元素相同,但是用的目的不同,发挥的作用也会有所不同,比如:

+

这里出现的线框元素就起到了一定的装饰、衬托画面的作用,以点线面的角度来看则符合点状元素的特点,虽然这类元素对于作品整体而言只是次要的视觉元素,但是有与无的差别还是一目了然的,有此类元素,画面则呈现出一种更加丰富、饱满的视觉感受;而无此类元素,给人的感觉虽然画面元素依然很多,但是总带有单薄、不够饱满、缺少细节的感觉!

+

+

线框还有另一种很直观的作用,即:增强画面细节感、设计感,这一作用的线框在很多优秀的作品中都能看到,大到页面、小到优惠券、按钮。

+ +
+
+ + +
+ + +
+
+ + +
+ + +

全部评论

+
+
+ +
+
+
+
晴天下起了小雨
+
2017-10-01 18:00
+
+
很喜欢,果断关注了
+
+ + +
+ +
+
+ +
+
+
+
wjmyly7336064
+
2017-10-01 18:00
+
+
相当实用,赞美了
+ +
+ +
+
+
橘大佬
+
2017-10-01 18:00
+
+
就是有些细节再到位点就好了…
+
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+ + + + + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/calmlog-index.html" "b/blog\345\220\216\345\217\260/docs/ui/calmlog-index.html" new file mode 100644 index 0000000000000000000000000000000000000000..33c07c80ee195475eb3905ebd091b94182a55cb7 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/calmlog-index.html" @@ -0,0 +1,275 @@ + + + + + + + 好看的双栏博客 + + + + + + +
+
+ +
+
+ +
+
+
+ +
+
+ + + + +
+
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+

光是预览图就呼之欲出!十八分钟后你也会做这样的动感3D~

+

本期玩皮兔为您带来的视频翻译是:运用图层样式即可get各种风格的海报文本~!本次教程所用到的所有图片素材,玩皮兔全都有,跟着视频同步学习吧~

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ +
+
+
+
+

光是预览图就呼之欲出!十八分钟后你也会做这样的动感3D~

+

本期玩皮兔为您带来的视频翻译是:运用图层样式即可get各种风格的海报文本~!本次教程所用到的所有图片素材,玩皮兔全都有,跟着视频同步学习吧~

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ + + + + +
+ +
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/calmlog-list.html" "b/blog\345\220\216\345\217\260/docs/ui/calmlog-list.html" new file mode 100644 index 0000000000000000000000000000000000000000..864b4c1de76ea77874b84f10313d217d2291c9ed --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/calmlog-list.html" @@ -0,0 +1,233 @@ + + + + + + + 好看的双栏博客 + + + + + + +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+

光是预览图就呼之欲出!十八分钟后你也会做这样的动感3D~

+

本期玩皮兔为您带来的视频翻译是:运用图层样式即可get各种风格的海报文本~!本次教程所用到的所有图片素材,玩皮兔全都有,跟着视频同步学习吧~

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ +
+
+
+
+

光是预览图就呼之欲出!十八分钟后你也会做这样的动感3D~

+

本期玩皮兔为您带来的视频翻译是:运用图层样式即可get各种风格的海报文本~!本次教程所用到的所有图片素材,玩皮兔全都有,跟着视频同步学习吧~

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ +
+
+
+
+

主题换肤设计小结

+

项目复盘对设计师的成长来说是一件很重要的环节,不仅可以巩固自己的设计理论,同时还可以与小伙伴们分享自己的小心得~

+

阅读更多...

+
+
+
+ +
+
+
+
+

那个,摄影师你拍照为什么穿那么少?

+

今天打算穿得比较少来见你

+

阅读更多...

+
+
+
+ + + + + +
+ +
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/css/cl-css.css" "b/blog\345\220\216\345\217\260/docs/ui/css/cl-css.css" new file mode 100644 index 0000000000000000000000000000000000000000..f5caf7f85646d80b4e502545e6f9676dd57f9589 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/css/cl-css.css" @@ -0,0 +1,451 @@ +/*global*/ +body{ + background-color: #f4f4f4; +} +.cl-cantainer{ + min-height: 80vh; +} +a{ + color:#333; +} +a:hover{ + color:#FF9400; + text-decoration: none; +} +/*header*/ +.cl-header { + background-color: #fff; + /*height: 80px;*/ + /*line-height: 80px;*/ + box-shadow:0 5px 15px rgba(153, 153, 153, 0.1) +} +.header-content{ + position: relative; +} +.cl-logo{ + position: absolute; + left:0; + top:0; + height: 80px; + width: 300px; + overflow: hidden; +} +.cl-logo img{ + max-width: 100%; + max-height: 100%; +} +@media (min-width: 992px){ + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 1rem; + padding-left: 1rem; + } +} +.navbar-toggler:not(:disabled):not(.disabled):focus{ + outline: none; +} +.navbar{ + padding:0; +} +.navbar-light .navbar-nav .active>.nav-link{ + color: #FF9400; + font-weight: bold; +} +.nav .nav-item a.active{ + color: #FF9400; + font-weight: bold; +} + +.navbar .navbar-brand img{ + max-width: 100%; + max-height: 100%; +} +.recommend-index{ + margin-bottom:20px; +} + + +/*left*/ +.cl-left{ + margin:20px 0; + padding:0; +} +.recommend-top{ + margin-bottom:20px; +} + +.recommend-bottom{ + display: flex; + justify-content: space-between; +} +.recommend-item{ + width: 49%; + /*height: 170px;*/ + overflow: hidden; +} + +.cl-artical-content,.recommend-panel,.comment{ + background-color: #fff; + padding:0 20px 20px 20px; +} + +/*card*/ +.cl-card{ + background-color: #fff; + padding:1rem 1rem 0 1rem; + margin:0 0 20px 0; +} + +.cl-card .cl-card-image{ + border:1px solid #eaeaea; + overflow: hidden; + height: 150px; + padding:0; +} + +.cl-card .cl-card-image img{ + width: 100%; + max-width: 100%; +} +.cl-card .cl-card-more a{ + color:#FF9400; +} +.cl-card-main-title a:hover,.cl-card .cl-card-more a:hover{ + border-bottom:2px solid #FF9400; + padding-bottom:2px; +} +.cl-card-main-title{ + height: 2rem; + overflow: hidden; + +} +.cl-card-main-title a{ + font-size:1.4rem; + color:#333; + font-weight: normal; +} +.cl-card-main-title a:hover{ + text-decoration: underline; +} +.cl-card-main-info{ + font-size:1rem; + color:#999; + height: 3rem; + overflow: hidden; + margin:0.5rem 0 2rem 0; +} +/*page*/ +.pagination .page-item.active .page-link{ + background-color:#FF9400; + border-color:#FF9400; + color:#fff; +} +.pagination .page-item .page-link{ + color:#666; +} +.pagination{ + margin:20px 0 0 0; +} +.pagination li.disabled .page-link{ + background-color: #eee; + color:#999; +} +.pagination li.disabled{ + cursor: not-allowed; +} +/*right*/ +.cl-right{ + margin:20px 0; +} +.right-card-main{ + background-color: #fff; + margin:0 0 20px 0; +} +.cl-code{ + width: 80%; + margin:10px auto; + padding:0 0 10px 0; +} +.right-card-title{ + font-size:1.2rem; + color:#666; + font-weight: bold; + padding:20px 0 10px 10px; +} +.cl-code p{ + color:#999; + line-height: 1.2rem; + margin-top:10px; + text-align: center; +} +/*right-recommended*/ +.right-recommended{ + padding:10px; + height: 120px; + overflow: hidden; +} +.right-recommended-list{ + list-style: none; + padding:0 10px 20px 10px; + box-sizing: border-box; +} +.right-recommended-list i{ + color:#999; + margin-right:4px; +} +.right-recommended-list li{ + width: 100%; + border-bottom:1px dashed #eaeaea; + color:#666; + height: 40px; + line-height:40px; + overflow: hidden; +} +/*label*/ +.label{ + list-style: none; + display: flex; + flex-wrap: wrap; + padding:10px; + +} +.label li a{ + display: block; + border:1px solid #dbdbdb; + padding:2px 10px; + margin:0 8px 8px 0; + color:#666; +} +.label li a:hover{ + background-color: #FF9400; + border-color:#FF9400; + color:#fff; +} + + +/*footer*/ +.cl-footer{ + background-color: #fbfbfb; + text-align: center; + padding:2rem 0 1rem 0; + margin:1rem 0 0 0; + border-top:1px solid #f1f1f1; +} +.cl-footer-link a{ + font-size:20px; + padding:1rem 0; + color:#666; +} +.cl-copyright{ + color:#666; + font-size:14px; + line-height:0.8em; +} +/*artical*/ +.cl-artical-title{ + padding:20px 0 10px 0; +} +.cl-card-tag{ + color:#999; + font-size:1rem; +} +.cl-artical h1,.cl-artical h2,.cl-artical h3,.cl-artical h4,.cl-artical h5{ + padding:1.5rem 0 0.5rem 0; +} +.cl-artical h1{ + font-size:2rem; +} +.cl-artical h2{ + font-size:1.75rem; +} +.cl-artical h3{ + font-size:1.5rem; +} +.cl-artical h4{ + font-size:1.25rem; +} +.cl-artical h5{ + font-size:1rem; +} +.cl-artical{ + padding:2.5rem 0 0 0; + color:#666; +} +.cl-artical blockquote{ + font-size:18px; + padding:2rem 1rem 2rem 2rem; + border-left:4px solid #3F6600; + background-color: #f3f3f3; + /*font-style: italic;*/ + font-weight: bold; + line-height: 1.8em; +} +.cl-artical blockquote:before{ + content: " “ "; + font-size:60px; + vertical-align: bottom; + color:#3F6600; +} + +.cl-artical blockquote span{ + font-size:36px +} + +.cl-artical p img{ + vertical-align: middle; + width: 100%; + max-width: 100%; + height: auto; +} +.cl-artical p{ + padding:0.5rem 0 0.5rem 0; + line-height: 1.8rem; + font-size:18px; +} +.cl-content-info{ + color:#999; +} +/*comment panel*/ +.comment-panel{ + padding-bottom:0.5rem; + margin-top:2rem; + border-bottom:1px solid #dee2e6; + position: relative; +} +.comment-secondary-panel{ + padding-bottom:0.5rem; + margin-top:1rem; + padding-top:1rem; + background-color: #f4f4f4; + position: relative; +} +.triangle-icon{ + position: absolute; + left:50px; + top:-30px; + color:#f4f4f4; + font-size:60px; + +} +.comment-panel .comment-panel-portrait{ + position: absolute; + top: 0; + left: 0; +} + +.comment-panel-portrait img{ + width: 60px; + height: 60px; +} +.comment-panel .comment-panel-content{ + padding:0 0 0 70px; + width: 100%; +} +.comment-panel .comment-secondary-panel .comment-panel-content{ + padding:0 0 10px 20px; + width: 100%; +} +.comment-panel-content-item div{ + display: inline; + padding:0 0.5rem 0 0; + font-size:14px; + color:#999; +} +.comment-panel-content-item .comment-author{ + font-size:16px; + color:#333; + font-weight: bold; +} +.comment-panel .comment-panel-content .comment-panel-content-main{ + margin-top:0.5rem; + color:#666; +} +.comment-panel .comment-panel-secondary{ + border:1px solid #e5e5e5; + padding:0.5rem 0.5rem 0 0.5rem; + margin:0.5rem 0; + background-color: #fffffb; +} +.text-primary{ + text-align: right; +} +.text-primary a{ + font-size:14px; + color:#666; +} +@media (min-width: 576px){ + .ll-panel{ + max-width: 30%; + } +} + +/*comment form*/ +.cl-comment-from{ + padding:20px 0 0 0; + margin:20px 0; +} +.cl-comment-from div{ + height: 3rem; + border:1px solid #dfdfdf; +} + +.cl-comment-from button{ + float: right; + border:none; + background-color: #FF9400; + color:#fff; + font-size:16px; + padding:0.5rem 1rem; + cursor: pointer; + margin-top:10px; +} +.cl-comment-from button:hover{ + background-color:#f38d00 ; +} +.cl-comment-from>div>textarea{ + border:none; + width: 100%; + height: 100%; + line-height: 3rem; + padding:0 1rem; + box-sizing: border-box; +} +.cl-comment-from>div>textarea:focus,.cl-comment-from button:focus{ + outline: none; +} +/*recommend aritical*/ +.recommend-panel{ + margin:20px 0; +} +.recommend-panel a.recommend-panel-link{ + display: block; +} +.recommend-panel-bottom{ + padding:0.5rem; + font-size:14px; +} +.ll-title{ + margin:3rem 0 1rem 0; + color:#333; +} +.recommend-panel-top{ + overflow: hidden; + height: 12rem; +} + +.recommend-panel-top img,.recommend-item img,.cl-card-image img{ + width: 100%; + max-width: 100%; + transition:0.4s ease-out; + -webkit-transition:0.4s ease-out; + -moz-transition:0.4s ease-out; + -o-transition:0.4s ease-out; +} +.recommend-panel-top img:hover,.recommend-item img:hover,.cl-card-image img:hover{ + transform: scale(1.1, 1.1); + -webkit-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); +} + + + diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/css/font-awesome.min.css" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/css/font-awesome.min.css" new file mode 100644 index 0000000000000000000000000000000000000000..540440ce89f2a408aa699b65100e18f15e0f09ca --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/css/font-awesome.min.css" @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/FontAwesome.otf" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/FontAwesome.otf" new file mode 100644 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/FontAwesome.otf" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.eot" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.eot" new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.eot" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.svg" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.svg" new file mode 100644 index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.svg" @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.ttf" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.ttf" new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.ttf" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff" new file mode 100644 index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff2" "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff2" new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/font-awesome/fonts/fontawesome-webfont.woff2" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/highlight/highlight.pack.js" "b/blog\345\220\216\345\217\260/docs/ui/highlight/highlight.pack.js" new file mode 100644 index 0000000000000000000000000000000000000000..b45386be52db55e5ee39f514a00256e7e8c60712 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/highlight/highlight.pack.js" @@ -0,0 +1,2 @@ +/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(//g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(t,{i:/\n/}),a={cN:"subst",b:"{",e:"}",k:i},c=e.inherit(a,{i:/\n/}),n={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,c]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},a]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},c]});a.c=[s,n,t,e.ASM,e.QSM,e.CNM,e.CBCM],c.c=[o,n,r,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,n,t,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}}); \ No newline at end of file diff --git "a/blog\345\220\216\345\217\260/docs/ui/highlight/styles/railscasts.css" "b/blog\345\220\216\345\217\260/docs/ui/highlight/styles/railscasts.css" new file mode 100644 index 0000000000000000000000000000000000000000..008cdc5bf1487e378e549c5aabcb9314476bd434 --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/highlight/styles/railscasts.css" @@ -0,0 +1,106 @@ +/* + +Railscasts-like style (c) Visoft, Inc. (Damien White) + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #232323; + color: #e6e1dc; +} + +.hljs-comment, +.hljs-quote { + color: #bc9458; + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag { + color: #c26230; +} + +.hljs-string, +.hljs-number, +.hljs-regexp, +.hljs-variable, +.hljs-template-variable { + color: #a5c261; +} + +.hljs-subst { + color: #519f50; +} + +.hljs-tag, +.hljs-name { + color: #e8bf6a; +} + +.hljs-type { + color: #da4939; +} + + +.hljs-symbol, +.hljs-bullet, +.hljs-built_in, +.hljs-builtin-name, +.hljs-attr, +.hljs-link { + color: #6d9cbe; +} + +.hljs-params { + color: #d0d0ff; +} + +.hljs-attribute { + color: #cda869; +} + +.hljs-meta { + color: #9b859d; +} + +.hljs-title, +.hljs-section { + color: #ffc66d; +} + +.hljs-addition { + background-color: #144212; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-deletion { + background-color: #600; + color: #e6e1dc; + display: inline-block; + width: 100%; +} + +.hljs-selector-class { + color: #9b703f; +} + +.hljs-selector-id { + color: #8b98ab; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} diff --git "a/blog\345\220\216\345\217\260/docs/ui/img/default-img.jpg" "b/blog\345\220\216\345\217\260/docs/ui/img/default-img.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..c2b1fa66e38049918110887e7945f7f8d3865716 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/img/default-img.jpg" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/img/logo.jpg" "b/blog\345\220\216\345\217\260/docs/ui/img/logo.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..5f8a209e47e054529dcb73f036bfbdc12b523216 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/img/logo.jpg" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/img/portrait.png" "b/blog\345\220\216\345\217\260/docs/ui/img/portrait.png" new file mode 100644 index 0000000000000000000000000000000000000000..a8dc1e2bd80f670eaa71ddd3aca049621b039ab4 Binary files /dev/null and "b/blog\345\220\216\345\217\260/docs/ui/img/portrait.png" differ diff --git "a/blog\345\220\216\345\217\260/docs/ui/jquery/jquery.min.js" "b/blog\345\220\216\345\217\260/docs/ui/jquery/jquery.min.js" new file mode 100644 index 0000000000000000000000000000000000000000..e836475870da67f3c72f64777c6e0f37d9f4c87b --- /dev/null +++ "b/blog\345\220\216\345\217\260/docs/ui/jquery/jquery.min.js" @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("