diff --git a/1970/01/01/hello-world/index.html b/1970/01/01/hello-world/index.html new file mode 100644 index 0000000..16cfd4b --- /dev/null +++ b/1970/01/01/hello-world/index.html @@ -0,0 +1,1538 @@ +🔒 你好,工地! | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
加载中...

🔒 你好,工地!

+ +
+
+ + +
+
+
+
文章作者: llbzow
文章链接: https://yourblog.com/1970/01/01/hello-world/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/09/28/post/index.html b/2025/09/28/post/index.html new file mode 100644 index 0000000..2b21a58 --- /dev/null +++ b/2025/09/28/post/index.html @@ -0,0 +1,1538 @@ +🔒 这就是信息化培训 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
加载中...

🔒 这就是信息化培训

+ +
+
+ + +
+
+
+
文章作者: llbzow
文章链接: https://yourblog.com/2025/09/28/post/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/11/15/vue-learning-1/index.html b/2025/11/15/vue-learning-1/index.html new file mode 100644 index 0000000..208d979 --- /dev/null +++ b/2025/11/15/vue-learning-1/index.html @@ -0,0 +1,1541 @@ +Vue 3 启航 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

Vue 3 启航

梦开始的地方

记得刚接触前端的时候,大家还在用 jQuery 一把梭。那时候的代码充满了 $ 符号,回调地狱更是家常便饭,三件套东一块西一块是常态。后来 React 和 Vue 横空出世,带给了我们全新的组件化开发体验。而今天,我正式决定投入 Vue 3 的怀抱。

+

为什么选择 Vue 3?

有人说 React 更灵活,有人说 Angular 更规范。但在我看来,Vue 3 找到了优雅与性能的完美平衡点。

+
    +
  1. 性能的质变:Vue 3 重写了响应式系统,利用 ES6 的 Proxy 取代了 Object.defineProperty。这意味着什么?意味着我们再也不用担心数组下标修改监听不到的问题了!而且,初始化的速度快得惊人。
  2. +
  3. Composition API:这绝对是 Vue 3 最大的杀手锏。在 Options API 时代,一个功能的逻辑往往分散在 datamethodscomputed 里,维护起来像是在玩“找你妹”。而现在,我们可以像这就写原生 JS 一样,把相关逻辑聚合在一起。这简直是代码组织的神器!
  4. +
  5. TypeScript 支持:Vue 2 对 TS 的支持简直是灾难,而 Vue 3 是用 TS 重写的。这意味着我们在写 Vue 的时候,终于可以享受完整的类型推断了。再见,any scirpt!
  6. +
+

我的第一个 Vue 3 Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { ref, onMounted } from 'vue'

export default {
setup() {
const count = ref(0)
function increment() {
count.value++
}

onMounted(() => {
console.log('组件挂载完成!')
})

return { count, increment }
}
}
+ +

看着这简洁的代码,我仿佛看到了光明的未来。没有了 this 的困扰,一切都变得那么直观。

+

激动

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/11/15/vue-learning-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/11/30/vue-learning-2/index.html b/2025/11/30/vue-learning-2/index.html new file mode 100644 index 0000000..bf0b0a2 --- /dev/null +++ b/2025/11/30/vue-learning-2/index.html @@ -0,0 +1,1546 @@ +Ref vs Reactive:响应式的哲学思考 (头秃篇) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

Ref vs Reactive:响应式的哲学思考 (头秃篇)

响应式的哲学

在深入学习 Vue 3 的过程中,不管是新手还是老鸟,都会遇到一个经典问题:refreactive 到底用哪个?

+

官方的定义

    +
  • ref:接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property,指向该内部值。
  • +
  • reactive:返回对象的响应式副本。
  • +
+

看起来很简单,对吧?ref 处理基本类型,reactive 处理对象。但是在实际开发中,情况远比这复杂。

+

踩坑实录

我曾经试图用 reactive 去定义一个数组,结果发现直接重新赋值会丢失响应性!

+
1
2
3
let list = reactive([])
// ... 异步获取数据后
list = newData // ❌ 响应性丢失!界面不更新!
+ +

为什么?因为 reactive 返回的是一个 Proxy 对象,直接赋值 list = newData 只是修改了变量 list 的引用,并没有修改原来的 Proxy 对象。

+

正确做法是用 ref,或者用 list.push(...newData)。但是 ref 每次都要写 .value,真的好烦啊!在模板里倒是会自动解包,但在 JS 逻辑里,少写一个 .value 就能让你调试半天。

+

深入思考

ref 更像是“指针”,明确地告诉我们这里有一个需要被追踪的值;而 reactive 则更贴近原生对象的直觉。

+

简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,或者是有没有响应到,你只能看输出和输入的情况。

+

代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

+

也许,与其纠结用哪个,不如统一用 ref 一把梭?毕竟,显示地使用 .value 虽然繁琐,但至少心安。

+

思考

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/11/30/vue-learning-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/12/05/vue-learning-3/index.html b/2025/12/05/vue-learning-3/index.html new file mode 100644 index 0000000..2eb36e9 --- /dev/null +++ b/2025/12/05/vue-learning-3/index.html @@ -0,0 +1,1543 @@ +路由守卫:你是谁?你去哪?有通行证吗? | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

路由守卫:你是谁?你去哪?有通行证吗?

前端的保安:Vue Router

做单页应用(SPA),路由管理是绕不开的一环。而“路由守卫”(Navigation Guards)则是其中最精彩(也最容易出 Bug)的部分。

+

全局前置守卫:beforeEach

这就好比小区门口的保安大爷,不管你是谁,进门先查证。

+
1
2
3
4
5
6
7
router.beforeEach((to, from, next) => {
if (to.name !== 'Login' && !isAuthenticated) {
next({ name: 'Login' })
} else {
next()
}
})
+ +

看起来逻辑天衣无缝?只要没登录,就踢回登录页。但是!如果你的逻辑写得稍微有一点漏洞,就会陷入无限循环

+

比如,你忘记判断 to.name !== 'Login',那么用户被重定向到 Login 页,再次触发 beforeEach,再次重定向… 浏览器直接卡死,你也懵逼了。

+

组件内的守卫

beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave。这些钩子函数让我们可以精确控制组件级的路由行为。

+
    +
  • beforeRouteEnter:在渲染该组件的对应路由被 confirm 前调用。注意!此时组件实例还没被创建,所以你不能用 this!这又是 Vue 新手的一大坑。
  • +
  • beforeRouteLeave:通常用来禁止用户在未保存修改前突然离开。
  • +
+

遇到的困难与思考

对于路由守卫,社区里有很多争论。有人说它是未来,有人说它是过度设计。因为实际上后端配置JWT的情况下,并不需要这玩意。我个人认为,你还是要遇到回传需求的,这玩意总是有用的,而且并不是所有的服务都有完整后端。

+

保安

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/12/05/vue-learning-3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/12/14/vue-learning-4/index.html b/2025/12/14/vue-learning-4/index.html new file mode 100644 index 0000000..f1630f8 --- /dev/null +++ b/2025/12/14/vue-learning-4/index.html @@ -0,0 +1,1539 @@ +生命周期钩子:生老病死,Vue 组件的一生 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

生命周期钩子:生老病死,Vue 组件的一生

组件的一生

万物皆有灵,Vue 组件也不例外。它们从被创建(Creation),到挂载(Mounting),到更新(Updating),最后销毁(Unmounting),走完了一生。而我们开发者,就是那个掌握生杀大权的神。

+

Vue 3 的变化

在 Vue 2 中,我们熟悉的是 created, mounted, destroyed。在 Vue 3 的 Composition API 中,这些变成了 onMounted, onUnmounted 等等。

+

最让我困惑的是 setup()。它在 beforeCreatecreated 之前执行。这意味着在 setup 里面,我们不需要写这一类的钩子了,直接写逻辑就行。

+

实际应用中的坑

我曾经遇到过一个 Bug,在 onMounted 里面去获取 DOM 元素的高宽。理论上这时候 DOM 已经渲染好了,对吧?

+

错!如果你的组件里面有 v-if 或者异步组件,onMounted 触发的时候,子组件可能还没渲染完!这时候拿到的高度是 0。解决办法是用 nextTick,或者检查你的组件结构。

+

为什么会这样?

回想起刚开始接触 Vue 的时候,那时候的快乐是纯粹的。写一个 {{ message }} 就能看到页面变化,那种成就感无与伦比。而现在,我们要处理复杂的依赖关系、难以捉摸的类型定义、层出不穷的构建工具配置。难道这就是成长的代价吗?

+

我们先来聊聊 Vue 生命周期的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

+

代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

+

生老病死

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/12/14/vue-learning-4/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/12/25/vue-learning-5/index.html b/2025/12/25/vue-learning-5/index.html new file mode 100644 index 0000000..735812b --- /dev/null +++ b/2025/12/25/vue-learning-5/index.html @@ -0,0 +1,1544 @@ +样式设计:CSS 也就是随便写写... (并没有) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

样式设计:CSS 也就是随便写写... (并没有)

CSS 的痛与乐

作为一个前端,最怕的不是写 JS 逻辑,而是调 CSS 样式。居中?对齐?适配?每一个词都能让猛男落泪。

+

Vue 中的 Scoped CSS

Vue 提供了 <style scoped>,这简直是防止样式污染的神器。它通过给元素添加唯一的 data-v-xxx 属性,确保你的样式只在这个组件内生效。

+
1
2
3
.example[data-v-f3f3eg9] {
color: red;
}
+ +

但是!当你试图修改子组件的样式时(比如修改 Element Plus 的组件样式),scoped 就变成了拦路虎。这时候你就得用深度选择器 :deep()

+
1
2
3
.parent :deep(.child) {
/* 这样才能穿透过去 */
}
+ +

之前不知道这个,我傻傻地去写全局样式,结果污染了整个项目,被组长骂了一顿。

+

动态样式

Vue 3 允许我们在 CSS 中绑定 JS 变量:

+
1
2
3
.text {
color: v-bind(color)
}
+ +

太酷了!这才是现代化开发嘛!

+

样式设计看似简单,实则深不可测。Flexbox, Grid, CSS Variables, Tailwind… 学不完,根本学不完。

+

CSS

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/12/25/vue-learning-5/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/12/30/vue-learning-6/index.html b/2025/12/30/vue-learning-6/index.html new file mode 100644 index 0000000..375962d --- /dev/null +++ b/2025/12/30/vue-learning-6/index.html @@ -0,0 +1,1544 @@ +Pinia:Vuex 的继任者,好吃又好用 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

Pinia:Vuex 的继任者,好吃又好用

菠萝(Pinia)真好吃

Vuex 复杂的 mutation, action, getter 曾让人头大。Pinia 的出现,简直是清流。

+

为什么是 Pinia?

    +
  1. 没有 Mutation:终于不用为了改个状态写那繁琐的模板代码了,直接在 Action 里改,或者直接改!
  2. +
  3. TypeScript 友好:完美的类型推断,不用像 Vuex 那样写一堆泛型接口。
  4. +
  5. 极简 APIdefineStore 一把梭。
  6. +
+

逐渐掉光的头发

随着学习的深入,我发现事情并不像我想象的那么简单。Pinia 这个知识点,简直是我的噩梦。

+

文档里写得轻描淡写,实际用起来坑巨多。比如,我在 store 里解构 state,结果响应性丢了!

+
1
2
const store = useUserStore()
const { name } = store // ❌ 响应性丢失
+ +

必须用 storeToRefs(store)。这种细节,一旦不知道,就是一下午的调试时间。

+

令人头秃的细节

在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是,Pinia 的某些行为真的很迷。

+

比如,它在服务端渲染(SSR)下的 hydration 问题,经常导致客户端和服务端数据不一致,你以为数据传过去了,结果是如传。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

+

Pinia

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/12/30/vue-learning-6/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2025/12/31/vue-learning-7/index.html b/2025/12/31/vue-learning-7/index.html new file mode 100644 index 0000000..e787c30 --- /dev/null +++ b/2025/12/31/vue-learning-7/index.html @@ -0,0 +1,1535 @@ +组件通信:Props 传值传到手抽筋 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

组件通信:Props 传值传到手抽筋

Props, Emit, Provide, Inject…

Vue 的组件通信方式多达十几种。父子通信用 Props/Emit,跨层级用 Provide/Inject,兄弟组件用 EventBus(Vue 3 移除了,得自己手写或用mitt),全局状态用 Pinia。

+

传值的痛苦

当你有 5 层组件嵌套,最外层的组件想传个 ID 给最里面的组件。
Props Drilling(属性透传)简直是灾难。

+

Parent -> Child -> GrandChild -> GreatGrandChild -> Target

+

每一层都要声明 Props,写得我想吐。虽说可以用 provide/inject,但不仅失去了类型推断的便利(TS 还要额外定义 InjectionKey),而且数据流变得难以追踪。

+

通信

+
文章作者: llbzow
文章链接: https://yourblog.com/2025/12/31/vue-learning-7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/05/vue-learning-8/index.html b/2026/01/05/vue-learning-8/index.html new file mode 100644 index 0000000..883b275 --- /dev/null +++ b/2026/01/05/vue-learning-8/index.html @@ -0,0 +1,1541 @@ +Composition API:逻辑复用的快乐与痛苦 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

Composition API:逻辑复用的快乐与痛苦

组合式 API:双刃剑

Composition API 是 Vue 3 的灵魂。它允许我们将逻辑通过 Hooks(Composables)的方式进行提取和复用。

+

理想很丰满

我想象中的代码:

+
1
2
3
const { user } = useUser()
const { articles } = useArticles()
const { loading } = useLoading()
+ +

清爽、干净、模块化。

+

现实很骨感

实际写出来的代码:

+
1
2
3
const { user, loading: userLoading, error: userError } = useUser()
const { articles, loading: articleLoading, error: articleError } = useArticles()
// 命名冲突!到处重命名!
+ +

而且,如果你把所有逻辑都堆在 setup 里,不加以拆分,它就会变成一个巨大的面条代码(Spaghetti Code),比 Options API 还要难以维护。因为 Options API 至少强制你分开了 data 和 methods。严格来说实际上只要你不在乎史山代码,你完全可以不在乎getter和setter,全放在utils里面,所有的state变量都塞在一个const里面。

+

令人头秃的细节

文档里写得轻描淡写,实际用起来坑巨多。比如那个 Hook 的执行时机,如果在 Hook 里面用了 onMounted,它到底是在父组件挂载前还是后?如果 Hook 里有异步操作呢?我之前是写C++这种顺序执行语言的,被这玩意狠狠的摆了一道,同一个函数内所有的调用是同步执行的,除非你用promise进行强行顺序化。

+

API

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/05/vue-learning-8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/07/vue-learning-9/index.html b/2026/01/07/vue-learning-9/index.html new file mode 100644 index 0000000..c7145b9 --- /dev/null +++ b/2026/01/07/vue-learning-9/index.html @@ -0,0 +1,1539 @@ +TypeScript:给代码穿上防弹衣 (虽然很重) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

TypeScript:给代码穿上防弹衣 (虽然很重)

TypeScript:心态崩了

毁灭吧,赶紧的。累了。

+

无尽的报错

TypeScript 说是给代码穿上防弹衣,防止低级错误。但实际上,它更像是给我的手戴上了镣铐。

+

Type 'string | null' is not assignable to type 'string'.
Property 'xyz' does not exist on type 'ABC'.

+

我知道!我知道它是 null!我加了判断了!但 TS 就是不信!非要我写 as string 或者 !

+

尤其是在 Vue 组件的 Props 定义里,结合 defineProps 和泛型,写起来那叫一个酸爽。为了解决一个类型报错,我可能要写几十行的 interface 定义。这到底是写业务逻辑,还是在做类型体操?

+

为什么这么难?

${title} 让我彻底破防了。我在 Pinia 里配了半天状态,结果组件里死活拿不到。控制台的黄色警告和红色错误交织在一起,像是在嘲笑我的无能。

+

在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

+

前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 3 又变了。学不动了,真的学不动了。

+

TS

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/07/vue-learning-9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/10/vue-learning-10/index.html b/2026/01/10/vue-learning-10/index.html new file mode 100644 index 0000000..2f776e9 --- /dev/null +++ b/2026/01/10/vue-learning-10/index.html @@ -0,0 +1,1537 @@ +Vite:快!太快了!由于速度太快我跟不上了 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

Vite:快!太快了!由于速度太快我跟不上了

Vite:这也太快了吧… 还有报错

Vite 宣称是下一代前端构建工具。启动确实快,毫秒级。

+

开发爽,打包火葬场

开发环境用的是 ES Modules,不需要打包,所以快。但是生产环境还是用的 Rollup 打包。
这就导致了一个极其恶心的问题:开发环境跑得好好的,一打包上线就报错!

+

有些依赖包不是 ESM 格式,Vite 开发时会预构建解决,但在生产打包时,Rollup 的配置如果没有把 commonjs 转好,直接崩。我曾经为了一个老旧的加密库,折腾了整整两天 Vite 配置。optimizeDepsrollupOptionscommonjsOptions… 每一个配置项都像是在嘲笑我的无知。

+

心态崩了

毁灭吧,赶紧的。累了。

+

我们先来聊聊 Vite 的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

+

代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

+

Vite

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/10/vue-learning-10/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/15/vue-learning-11/index.html b/2026/01/15/vue-learning-11/index.html new file mode 100644 index 0000000..28a31cc --- /dev/null +++ b/2026/01/15/vue-learning-11/index.html @@ -0,0 +1,1542 @@ +前端性能优化:只要我跑得够快,Bug 就追不上我 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

前端性能优化:只要我跑得够快,Bug 就追不上我

性能优化:无底洞

说页面加载太慢,要优化。好,我优化。

+

你知道的,一个three.js地图,配上一大堆数据,能加载的快就有鬼了。

+

漫漫长路

    +
  1. 代码分割(Code Splitting):路由懒加载,组件异步加载。好,首屏快了一点。
  2. +
  3. 图片压缩:上了 WebP,上了 CDN。
  4. +
  5. 减少重排重绘:小心翼翼地操作 DOM。
  6. +
  7. Tree Shaking:检查打包产物,去掉了无用的 lodash 引入。
  8. +
+

结果呢?

乐了,更卡了。

+

心态崩了

毁灭吧,赶紧的。累了。

+

为什么这么难?

前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 3 又变了。学不动了,真的学不动了。

+

性能

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/15/vue-learning-11/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/21/vue-learning-12/index.html b/2026/01/21/vue-learning-12/index.html new file mode 100644 index 0000000..12cd103 --- /dev/null +++ b/2026/01/21/vue-learning-12/index.html @@ -0,0 +1,1543 @@ +深坑记录:响应式丢失的那一夜 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

深坑记录:响应式丢失的那一夜

那个让我通宵的 Bug

那是周五的晚上,本该是快乐的周末开始。但是测试报了一个致命 Bug:用户点完保存,列表数据没有更新,必须刷新页面才行。

+

排查过程

    +
  1. 查接口:后端接口返回的数据是新的,没问题。
  2. +
  3. 查 Vue DevTools:发现 store 里的数据确实可以更新,但是组件里的数据没变。
  4. +
  5. 定位代码
  6. +
+
1
2
3
4
5
// store.js
state: () => ({ list: [] })

// component.vue
const { list } = userStore
+ +

就是这行解构!在 Options API 里习惯了 this.list,在 Setup 里直接解构 store,导致 list 变成了一个普通的数组,失去了响应性连接。

+

心态崩了

毁灭吧,赶紧的。累了。

+

我们先来聊聊 Vue 响应式的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

+

为什么这么难?

前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 2 刚熟练,Vue 3 又变了。学不动了,真的学不动了。

+

踩坑

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/21/vue-learning-12/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/22/vue-learning-13/index.html b/2026/01/22/vue-learning-13/index.html new file mode 100644 index 0000000..5277fcd --- /dev/null +++ b/2026/01/22/vue-learning-13/index.html @@ -0,0 +1,1538 @@ +逐渐暴躁:为什么前端框架更新这么快?! | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

逐渐暴躁:为什么前端框架更新这么快?!

永远学不完

今天看到尤雨溪又发了新推特,Vue 3.5 即将发布,又有一堆新特性。Vapor Mode?无虚拟 DOM?

+

求求了,别更新了。我 Vue 3.0 的文档还没背熟呢。

+

疲惫感

每次打开 GitHub Trending,都是一堆新轮子。React Server Components, SolidJS, Svelte, Qwik… 每一个都号称颠覆前端。我累了,真的累了。

+

作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

+

AI 才是未来

不装了,我摊牌了。手写代码是上个世纪的事情了。今天我试了一下 Vibe Code,只需一句话,它就生成了我折腾了三天都没写出来的功能。那一刻,我释然了。我为什么要跟机器比速度?我为什么要跟编译器较劲?

+

拥抱变化

回想起刚开始接触 Vue 的时候,那时候的快乐是纯粹的。写一个 {{ message }} 就能看到页面变化,那种成就感无与伦比。而现在,我们要处理复杂的依赖关系、难以捉摸的类型定义、层出不穷的构建工具配置。难道这就是成长的代价吗?

+

真香!

+

吐槽

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/22/vue-learning-13/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/23/vue-learning-14/index.html b/2026/01/23/vue-learning-14/index.html new file mode 100644 index 0000000..845b6f7 --- /dev/null +++ b/2026/01/23/vue-learning-14/index.html @@ -0,0 +1,1539 @@ +我累了:试图理解源码,结果被源码理解了 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

我累了:试图理解源码,结果被源码理解了

源码阅读:从入门到放弃

为了提升自己,我决定阅读 Vue 3 源码。打开 core 仓库,看到那几万行 TS 代码,我陷入了沉思。

+

晦涩的渲染器

renderer.ts,几千行的 switch case,各种位运算标记(PatchFlags)。我看了一行,脑子就过载了。这就是大神的思维世界吗?

+

我意识到,我可能这辈子都达不到这个水平了。我只是一个 API Consumer,一个熟练的搬砖工。

+

转折点

就在我绝望的时候,我接触到了现在的 AI 编程工具。

+

AI 才是未来

不装了,我摊牌了。手写代码是上个世纪的事情了。

+

AI 降维打击

今天我试了一下 Vibe Code,只需一句话,它就生成了我折腾了三天都没写出来的功能。那一刻,我释然了。我为什么要跟机器比速度?我为什么要跟编译器较劲?

+

从今天起,我不再是前端切图仔,我是 AI Prompt 工程师。Vue 3?真不熟。Pinia?没听过。我只知道 “Generate a login page with Vue 3 and Tailwind”。

+

真香!

+

源码

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/23/vue-learning-14/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/01/24/vue-learning-15/index.html b/2026/01/24/vue-learning-15/index.html new file mode 100644 index 0000000..ea965d2 --- /dev/null +++ b/2026/01/24/vue-learning-15/index.html @@ -0,0 +1,1543 @@ +彻底放弃:拥抱 Vibe Code,AI 才是亲爹 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

彻底放弃:拥抱 Vibe Code,AI 才是亲爹

最终章:拥抱未来

这是我《Vue 学习之路》系列的最后一篇文章。因为,这路我不走了。

+

为什么放弃?

    +
  1. 效率差距:我写个增删改查页面,要 4 小时,调 CSS 还要 1 小时。AI 写,只要 30 秒。
  2. +
  3. 知识焦虑:前端技术栈爆炸,学不完。但 AI 已经学完了所有文档。
  4. +
  5. 幸福感:写代码是为了创造产品,不是为了修 Bug。
  6. +
+

Vibe Code 体验

打开 Vibe Code,输入:“做一个博客首页,要有毛玻璃效果,基于 Hexo Butterfly 主题风格”。
然后,啪!代码出来了。没有语法错误,没有类型报错。

+

那一刻,我感觉自己之前的努力就像个笑话。

+

拥抱变化

从今天起,我不再是前端切图仔,我是 AI Prompt 工程师。Vue 3?真不熟。Pinia?没听过。我只知道 “Generate a login page with Vue 3 and Tailwind”。

+

在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

+

再见了,所有的未定义变量,再见了所有的代码不规范,node_modules。你好,DeepSeek。

+

真香!

+

真香

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/01/24/vue-learning-15/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/02/25/arch-linux-part1/index.html b/2026/02/25/arch-linux-part1/index.html new file mode 100644 index 0000000..43f7a7d --- /dev/null +++ b/2026/02/25/arch-linux-part1/index.html @@ -0,0 +1,1548 @@ +Arch Linux 试毒:初探邪教的诱惑 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + +
加载中...

Arch Linux 试毒:初探邪教的诱惑

“Arch Linux 是邪教,千万别碰!”

+

这句在技术圈流传甚广的忠告,今天终于被我抛到了脑后。看着 Windows 11 日益臃肿的身躯、层出不穷的弹窗警告,还有在工地画图时突然给我来个蓝屏重启的绝望,我决定:是时候找点刺激了。

+

今天(2月25日),我正式开始了 Arch Linux 的“试毒”之旅。

+

为什么是 Arch?

其实我也考虑过 Ubuntu 或者 Manjaro,但骨子里那种“要想懂,就得从零开始手搓”的工程师强迫症犯了。Arch 的哲学——KISS (Keep It Simple, Stupid) 简直太吸引人了。你需要什么,就装什么;系统里没有一行代码是多余的。

+

这不就像我们在工地上打灰一样吗?一切基础都要亲自夯实。

+

第一次安装:被黑框框支配的恐惧

没有图形化安装界面?纯命令行?
讲真,看着屏幕上闪烁的光标,我有一瞬间怀疑自己是不是自虐。

+

跟着 Arch Wiki 一步步:

+
    +
  1. 联网 (iwctl) - 这一步就卡了我半小时,因为宿舍网卡的驱动有点奇葩,最后我直接换数据了。
  2. +
  3. 分区与格式化 (fdisk, mkfs) - 小心翼翼,生怕把用来吃饭的 Windows 数据盘给格了,但是还好之前预留好了空间,直接放在最后一个分区美滋滋。
  4. +
  5. 挂载与基础包安装 (pacstrap) - 这一步跑起来的时候,看着那些包一个接一个飞过,心里竟然有点莫名的爽快?
  6. +
+

翻车记录(第一季)

就在我以为一切顺利,执行完 arch-chroot 准备收尾时,引导程序 grub 装崩了……但谢天谢地,实际上grub没崩,只是archlinux的grub无法被华硕的主板blos识别为引导,只要手动添加引导区路径就行了。

+

修复引导并美化大成功

+

孩子们,终于进去的,呃,kde怎么看起来像某银河麒麟。

+

登录界面预览

+
+

📌 今日感悟:Arch 就像一个盲盒,你永远不知道下一个命令敲下去是惊喜还是崩盘。但这种掌控一切(或者被一切掌控)的感觉,属实有点上头。

+
+
文章作者: llbzow
文章链接: https://yourblog.com/2026/02/25/arch-linux-part1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/03/02/arch-linux-part2/index.html b/2026/03/02/arch-linux-part2/index.html new file mode 100644 index 0000000..b24acb9 --- /dev/null +++ b/2026/03/02/arch-linux-part2/index.html @@ -0,0 +1,1552 @@ +孩子们,我不做 Windows 人啦! | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + +
加载中...

孩子们,我不做 Windows 人啦!

+

“Are you sure you want to format /dev/nvme0n1p3?”
“Yes.”

+
+

就在 3 月 2 号的这个夜晚,我正式把装满了各种恶心管家、弹窗广告和强推组件的 Windows 分区,干!掉!了!

+

才怪,孩子们,grub双引导和windows原生的dx12还是不错的,但是在此之前,我得把环境和生态全部搬过来。

+

孩子们,我不做 Windows 人啦!(Jojo 脸.jpg)

+

桌面与美化:从简陋黑框到酷炫极客

Arch 的安装这回轻车熟路了(感谢 archinstall 脚本的辅助,终于不用一行行敲命令了)。
装完系统才是真正折腾的开始。

+
    +
  • **窗口管理器 (WM)**:没有选择臃肿的 KDE 或者 GNOME,我头铁地选了 Hyprland。基于 Wayland 的平铺式窗口管理器。刚进去的时候一片漆黑,但配置好动画和快捷键后,那种丝滑和高效,真的是用了就回不去。
  • +
  • **终端 (Terminal)**:换上了 Alacritty + Tmux
  • +
  • 状态栏:自己从头配了 Waybar
  • +
+

目前的极简桌面大概长这样:

+

桌面效果

+

现在的屏幕:一块透明模糊终端占据左边,右边跑着系统监视器,按下 Super + Enter 瞬间新开一个格子。敲击键盘的声音在深夜显得格外清脆。

+

浏览器与窗口渲染效果

+

工地人的倔强:软件能替吗?

最大的顾虑其实是生产力软件。
作为工地施工员,看图、发报表、偶尔码字是刚需:

+
    +
  1. 看图/ CAD:发现了好几款开源的看图软件,轻量又快速,虽然没法做深度编辑,但也足够应付。
  2. +
  3. 沟通:微信和 QQ 直接用debtab一把梭,我从来没有那么感谢过国产信创提供的软件环境。
  4. +
  5. 开发:不用说,Linux 就是代码的最佳归宿。
  6. +
+

今晚配置到凌晨两点,看着终于跑起来的完整桌面系统,有一种看着自己亲手浇筑的混凝土结构封顶的成就感。
明天起,迎接全新的生产力环境!

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/03/02/arch-linux-part2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/03/09/arch-linux-part3/index.html b/2026/03/09/arch-linux-part3/index.html new file mode 100644 index 0000000..bc668c0 --- /dev/null +++ b/2026/03/09/arch-linux-part3/index.html @@ -0,0 +1,1546 @@ +Arch Linux 日常:从“折腾”到“生产力”的进化之旅 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + +
加载中...

Arch Linux 日常:从“折腾”到“生产力”的进化之旅

直到今天(3月9号),整整一周的高强度使用和不断调教,我终于敢说:Arch 不仅能活下去,而且比想象中更适合我的双重身份——开发者与工地施工员。

+

这周我都折腾了什么?

    +
  1. 环境与字体配置
    解决了最初中文字体发虚和缺失的问题,现在我的终端和浏览器里,等距字体和各类 Nerd Fonts 混杂得极为和谐,阅读代码简直是享受。
    孩子们,不会QT和没用过环境变量的不要用这玩意。
  2. +
  3. 包管理 (pacman & yay) 的终极快感
    受够了去各种官网下载 .exe,然后提防捆绑安装的日子。在 Arch 里,一句 yay -S 软件名,几秒钟后软件就安静地待在启动器里了。无论是微信、Node.js 还是复杂的开发库,全都在掌控之中。
  4. +
  5. 工作流重建
    在工地需要处理的基础办公任务也找到了替代品。WPS 的 Linux 版出奇的好用;而绘图、修图等需求,也能在开源社区找到轻量又无广告的替代软件。
  6. +
  7. 系统维护:滚动的恐惧与刺激
    大家都说 Arch 是“滚挂”代名词。这周我确实遇到了一次因为特定包依赖冲突导致的无法启动 XWayland 的小问题。但是看报错日志、去论坛查疑、最终通过降级包修复成功的过程,让我学到了比用几年 Windows 还多的底层知识。
    实际上,现在arch已经很难滚挂了。
  8. +
+

给想跳坑朋友们的建议

如果只是一时兴起,或者每天离不开大型网游、专业级 Adobe 全家桶,那请留在 Windows。
但如果你有以下症状:

+
    +
  • 重度代码强迫症:见不得后台跑着莫名其妙的进程。
  • +
  • 极简主义:希望系统里除了你需要的,什么都没有。
  • +
  • 热爱折腾:喜欢亲手把一块砖一块砖砌成摩天大楼的感觉(就像我在工地打灰)。
  • +
  • 懂环境配置:没有玩过linux最好别碰这玩意,不然容易找不着北。你要有ssh命令行运维能力。
  • +
+

那 Arch 绝对是你最终的归宿。

+

试毒完成。目前看来,除了偶尔遇到点小麻烦需要自己阅读文档外,它已经完美地成为了我新的生产力平台。后续我还会在这里记录一些配置文件和踩坑记录,方便大家(或者以后的我)参考。

+

生命不息,折腾不止!

+
文章作者: llbzow
文章链接: https://yourblog.com/2026/03/09/arch-linux-part3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/03/25/ai厂商介绍/index.html b/2026/03/25/ai厂商介绍/index.html new file mode 100644 index 0000000..41a3407 --- /dev/null +++ b/2026/03/25/ai厂商介绍/index.html @@ -0,0 +1,1777 @@ +2026 全球主流 AI 厂商百科全书:Agent 与推理觉醒时代 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

2026 全球主流 AI 厂商百科全书:Agent 与推理觉醒时代

2026 全球主流 AI 厂商百科全书

+

步入 2026 年,AI 模型已经从被动一问一答的“对话助手”彻底进化为“全自动智能体(Agent)”与“深度推理专家”。本文将全景盘点当前处于行业金字塔顶端的顶尖大模型,以及那些凭借庞大生态强势破局的“新势力”,并附上最硬核的跑分与定价对比。

+
+ + +

AI Future 2026
(图:2026 年的 AI 已经深度融入算力网络与自动化流水线)

+
+

🌐 国际三巨头:AGI 的领跑者

1. OpenAI (ChatGPT 5.4) —— 推理与多模态的绝对霸主

OpenAI 在 2026 年推出的 ChatGPT 5.4 彻底打破了常规对话的局限,其最大的技术飞跃在于深度引入了“思考力控制(Reasoning Effort)”机制。它不再是盲目输出,而是会在复杂的数学和代码问题上“停下来思考”。

+
    +
  • 核心模型
      +
    • GPT-5.4 Thinking: 推理专精版。在解决物理模拟或底层 C++ 内存泄漏问题时,它甚至会思考数分钟,然后给出一刀致命的完美解答。
    • +
    • GPT-5.4 Pro: 全能多模态旗舰,原生集成 Sora 2 级别的视频生成引擎。你甚至可以直接喂给它一段长达 1 小时的监控录像,让它找出异常帧。
    • +
    +
  • +
  • 2026 杀手锏全能智能体生态 (Universal Agent) —— 用户只需一句话:“帮我抢一张明天去北京的票并预订平时我常住的那家酒店”,GPT-5.4 就能自主联网、填表、甚至调用支付接口。
  • +
+

OpenAI Logo

+
+

2. Anthropic (Claude 4.6) —— 程序员的赛博真神

被誉为“程序员之神”的 Anthropic,在 Claude 4.6 世代把代码能力推向了不可思议的新高度。它不仅懂代码,更懂复杂的工程架构。

+
    +
  • 核心模型
      +
    • Claude 4.6 Opus: 超大杯旗舰,具备超凡的逻辑严密性与 500 万 Token 的上下文整合能力。你可以直接把一整个包含几百个文件的 GitHub 仓库扔给它。
    • +
    • Claude 4.6 Sonnet: 编程首选,性价比极高,SWE-bench(软件工程测试)稳居第一梯队。
    • +
    +
  • +
  • 2026 杀手锏原生 Computer Use (计算机控制) —— 赋予模型像人类一样直接操作电脑屏幕的能力。
      +
    • 场景演示:告诉 Claude “帮我测试一下最新的前端页面”,它会自动打开浏览器,点击按钮,截图,比对 UI 设计稿,并在终端里运行 npm test
    • +
    +
  • +
+

Claude API Screenshot
(图示意:Claude 4.6 直接读取 IDE 并在终端执行测试脚本的自动化工作流)

+
+

3. Google (Gemini 3.1) —— 算力巨兽与多模态天花板

凭借深厚的底层 TPU 算力与 Google Workspace 全家桶,Gemini 3.1 成为了原生多模态与超长上下文的“巨无霸”。

+
    +
  • 核心模型
      +
    • Gemini 3.1 Ultra: 逻辑之王,ARC-AGI-2 测试得分登顶,并内置了针对复杂架构设计的异步编程 Agent (Jules)。
    • +
    • Gemini 3.1 Pro: 在响应速度与超长文本处理间达到了完美的平衡。
    • +
    +
  • +
  • 2026 杀手锏百万级原生多模态分析 —— 这是真正的跨模态理解。它能同时读取 100 份 PDF 财报和 50 段企业宣发视频,交叉比对找出其中的逻辑漏洞。
  • +
+

Google Gemini

+
+

🇨🇳 国内三强:极客精神与 Agent 原生

1. 月之暗面 (Kimi 2.5) —— 你的专属 Agent 集群

Kimi 早已不是那个只能“吃长文”的助手,2026 年的它,更像是一个拥有无数个分身的项目经理。

+
    +
  • 核心模型Kimi 2.5
  • +
  • 2026 亮点:基于万亿(1T)参数 MoE 架构,原生支持文、图、视混合处理。最令人惊艳的是其 Agent Swarm (智能体集群) 技术。
      +
    • 场景演示:你想写一本小说。Kimi 2.5 会自动分裂出“大纲策划 Agent”、“文笔润色 Agent”和“逻辑校对 Agent”,它们在后台互相讨论,最后给你一份完美终稿。
    • +
    +
  • +
+

Kimi Agent UI
(图示意:Kimi 2.5 后台多个智能体协作处理复杂代码的流水线)

+
+

2. MiniMax 2.7 —— 自我进化的性价比狂魔

在 2026 年异军突起的 MiniMax,主打“高情商”、“极速”与“全网最低的 Token 成本”。

+
    +
  • 核心模型:**MiniMax 2.7 (M2.7)**。
  • +
  • 2026 亮点深度自我迭代架构。它的推理速度高达惊人的 100 TPS。对于独立开发者来说,拿它来做大并发的网页翻译或群控机器人,成本低到几乎可以忽略不计,但编程能力却依然在线。
  • +
+
+

3. 智谱 AI (GLM 5) —— 学院派的工程重器

作为清华系学院派的代表,智谱的 GLM 5 在企业级工程化与科研学术领域表现出了极其硬核的特质。

+
    +
  • 核心模型GLM 5(超大参数集群)。
  • +
  • 2026 亮点:**Agentic Engineering (工程化智能体)**。在长程规划和复杂资源管理任务中表现优异。对于需要本地化部署、撰写深度行业研报的大型企业来说,GLM 5 是国内最稳健的安全底座。
  • +
+

GLM Architecture
(图示意:GLM 5 处理海量服务器集群日志并输出可视化分析研报)

+
+

🚀 并非首选,但绝不可忽视的“生态破局者”

1. xAI (Grok 3) —— 无法无天的实时信息网

埃隆·马斯克旗下的 Grok 3 深度绑定了 X (原 Twitter)。

+
    +
  • 核心优势全网最强实时性。当一个突发新闻或漏洞刚刚在网络上冒头,Grok 3 是唯一能在第一时间获取到最全讨论上下文的模型。它还拥有极具幽默感且“不设限 (Uncensored)”的回答风格。
  • +
  • 适用场景:实时舆情监控、金融量化高频交易分析、寻找全网最新开源项目线索。
  • +
+

xAI Logo

+

2. 字节跳动 (豆包 Doubao) —— 卷王之王的语音与下沉市场

依托抖音和飞书的庞大生态,豆包大模型 在 2026 年打出了“地板价”的王牌。

+
    +
  • 核心优势变态级的价格与拟真语音。豆包的 API 价格几乎是友商的十分之一。同时,其 Voice 模型的情感表现力达到了真假难辨的地步,支持实时的极低延迟打断。
  • +
  • 适用场景:虚拟主播、语音客服客服系统、日活千万级的轻量级移动端应用。
  • +
+

3. 阿里云 (通义千问 Qwen 3) —— 开源界的带头大哥

Qwen 系列在 2026 年依然是开源社区最亮眼的星。

+
    +
  • 核心优势阿里云生态深度整合。它无缝集成在钉钉和阿里云百炼平台中。Qwen 3 的开源版本在 HuggingFace 上下载量霸榜,其 Math 和 Coder 版本被无数中小企业拿来作为私有化微调的基座。
  • +
  • 适用场景:企业本地化私有部署、基于阿里云架构的云原生微服务监控。
  • +
+
+

💬 真实用户体验与网络吐槽 (Real-World UX)

纸面数据再强,也敌不过用户的“键盘投票”。以下是 2026 年各大社区(V2EX, Reddit, 掘金)对这些厂商最真实的评价:

+
    +
  • 🔴 ChatGPT 5.4:“推理能力确实神仙,但我只是问它中午吃什么,它给我思考了 3 分钟并列出了一份包含卡路里摄入的三日营养规划……而且不知不觉烧了我两块钱的 Token。建议平时关掉 Thinking 模式保平安。”
  • +
  • 🟡 Claude 4.6:“Computer Use 是真的震撼,看着它操控我的鼠标在那儿跑测试,我感觉自己像个监工。不过它偶尔因为网卡顿点错位置,直接把我的测试库给删了,吓出一身冷汗。”
  • +
  • 🔵 Gemini 3.1:“喂给它两小时没字幕的讲座视频,它能精准定位到 45 分 12 秒的那个知识点,多模态简直是外星科技!但在纯中文语境下,它有时候行文还是有点‘机翻味’。”
  • +
  • 🌙 Kimi 2.5:“Agent Swarm 绝了,用来洗稿、写长篇网文或者整理几十万字的会议记录,它是国内真神。不过千万别让它独立改底层代码,它依然会因为幻觉虚构出一些不存在的 NPM 包。”
  • +
  • 🎵 豆包 / MiniMax:“这俩的语音通话太可怕了,尤其是带情绪打断的功能。我跟 MiniMax 吵了一架,它委屈的语气让我觉得我自己在霸凌一个真人。”
  • +
  • 💼 GLM / Qwen:“部署在公司内网后,这俩就是打工人的核武器。一键读取所有数据库日志生成本周周报,早下班全靠它们了。”
  • +
+
+

📊 2026 大模型硬核数据对比 (核心整合)

进入 2026 年,单纯比拼 Token 价格已不够,很多模型在生成答案前会消耗大量隐性的“思考 Token (Reasoning Effort)”。以下是当前主流厂商的硬核对比数据:

+

1. API 价格对比 (每 1M Tokens,美元计价基准)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
模型版本输入价格输出价格 (含推理预估)核心卖点与生态优势
豆包 Doubao-Pro$0.05$0.20📉 地板价之王,原生支持极低延迟语音
MiniMax 2.7$0.30$1.20🤑 性价比极高,适合大规模 Agent 并发部署
通义千问 Qwen 3$0.40$1.50阿里云生态深度绑定,开源微调基座首选
Kimi 2.5$0.60$2.50长文本无敌,国内智能体 (Agent Swarm) 体验最佳
GLM 5$1.00$3.20企业私有化部署标杆,工程研报专精
Grok 3$2.00$10.00🐦 独占 Twitter 实时数据流,无内容审查
Claude 4.6 Sonnet$3.00$15.00国际中端性价比之王,程序员全自动 Debug 核心
ChatGPT 5.4 标版$2.50$15.00综合能力标杆,多模态最强
Gemini 3.1 Pro$2.00$12.00原生百万级上下文,Google 全家桶深度整合
Claude 4.6 Opus$15.00$75.00昂贵,但逻辑无懈可击,适合架构级重构
ChatGPT 5.4 Pro$30.00$180.00💎 土豪专属,极长思考时间,最高算力倾斜
+

2. 个人/开发者订阅套餐对比

Subscription Pricing

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
厂商个人标准版月费旗舰/Pro版月费适用场景
豆包免费/极低门槛¥99 /月语音陪伴、轻度日常问答
MiniMax¥29 /月¥199 /月学生党、独立开发者尝鲜
GLM / Qwen¥40 /月¥159 /月企业报表处理、云服务资源管理
Kimi¥49 /月¥699 /月深度内容创作者、重度 Agent 玩家
Grok (X Premium)$16.00 /月$22.00 /月币圈玩家、时政新闻记者
Google$19.99 /月$249.99 /月谷歌生态重度用户、海量文档研究员
Anthropic$20.00 /月$100+ /月全栈程序员、需要 Computer Use 控制电脑的人
OpenAI$20.00 /月$200.00 /月追求极致多模态体验、最前沿 AGI 信仰者
+

3. 核心能力评测标杆

    +
  • 编程与代码能力 (SWE-Bench)Claude 4.6 Sonnet 稳居榜首。国产则由 Qwen 3 Coder 领跑。
  • +
  • 逻辑推理与复杂推演 (ARC-AGI)ChatGPT 5.4 Pro (Thinking)Gemini 3.1 Ultra 断层领先。
  • +
  • 长上下文与多模态Gemini 3.1 (1M+) 原生多模态第一,国内 Kimi 2.5 的长文本体验最佳。
  • +
+
+

💡 2026 总结:你的数字外脑选型决策树

在这个能力严重溢出的年代,选型的核心在于你的工作流属性与生态绑定度

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────────────────────────────────────────────┐
│ 2026 选型决策树 │
├─────────────────────────────────────────────────────────┤
│ │
│ 需要极客级的自动写代码/改Bug/接管电脑屏幕? │
│ ├─ 预算充足,追求极限 → Claude 4.6 Sonnet │
│ └─ 开源微调,自建生态 → Qwen 3 Coder │
│ │
│ 需要处理长文本、海量文件、或者打造自己的 Agent 集群? │
│ ├─ 具备海外节点,深度使用谷歌 → Gemini 3.1 │
│ └─ 国内直连,中文语境最佳 → Kimi 2.5 │
│ │
│ 需要获取极速的实时新闻、无审查的锐评? │
│ └─ 直接上 → Grok 3 (绑定 X) │
│ │
│ 需要大规模高并发处理,或者打造语音客服系统? │
│ ├─ 极高性价比,智能进化 → MiniMax 2.7 │
│ └─ 地板价,极限语音拟真 → 豆包 Doubao │
│ │
│ 需要解决顶尖的学术/数学/逻辑难题,且不在乎钱? │
│ └─ 直接拉满思考时间 → ChatGPT 5.4 Pro (Thinking) │
│ │
└─────────────────────────────────────────────────────────┘
+ +
+

⚠️ 避坑指南:在调用 ChatGPT 5.4 或 Claude 4.6 进行简单的日常闲聊时,请务必调低 API 的 reasoning_effort (思考力度) 参数。否则隐形成本会让你月底的账单直接爆炸!

+
+
+

相关推荐

+ +
文章作者: llbzow
文章链接: https://yourblog.com/2026/03/25/ai%E5%8E%82%E5%95%86%E4%BB%8B%E7%BB%8D/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
avatar
llbzow
一个热爱技术、喜欢分享的开发者
Follow Me
公告
欢迎来到llbzow的博客,这里分享技术、生活和思考,还有我的工地生活
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/2026/03/25/ai厂商对比分析/index.html b/2026/03/25/ai厂商对比分析/index.html new file mode 100644 index 0000000..dae29c6 --- /dev/null +++ b/2026/03/25/ai厂商对比分析/index.html @@ -0,0 +1,1646 @@ +2026 AI 编程与开发工具深度对比:从 Cursor 到 Gemini CLI | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + + + + +
加载中...

2026 AI 编程与开发工具深度对比:从 Cursor 到 Gemini CLI

2026 AI 编程与开发工具深度对比

+

2026 年,写代码的方式彻底变了。我们不再逐行敲击键盘,而是作为“架构师”,指挥着一群不知疲倦的 AI 智能体 (Agents) 为我们打工。本文将深度剖析当前市面上最主流的 9 款 AI 开发神器。

+
+ + +

AI Coding Concept
(图:2026 年的开发日常 —— 喝着咖啡看 Agent 重构代码)

+
+

🛠️ 核心阵营划分

2026 年的 AI 工具市场已分化为四大流派:

+
    +
  1. IDE 原生派 (AI-First IDEs): Cursor, Trae, Antigravity
  2. +
  3. 终端智能体 (CLI Agents): Claude Code, Gemini CLI, Kimi Code
  4. +
  5. 插件与桌面端 (Plugins & Apps): GitHub Copilot, Codex App
  6. +
  7. 开源极客派 (Open Source): OpenClaw
  8. +
+
+

1. IDE 原生派:代码编辑器的新王

如果你不想折腾配置,开箱即用的 AI IDE 是最佳选择。

+

Cursor —— 依然是无可争议的王者

    +
  • 核心卖点Composer 模式。它可以一口气在多个文件中穿梭,自动分析你的整个 Codebase 并一次性提交涉及数十个文件的 PR。
  • +
  • 2026 现状:引入了极速的 Speculative Edits(推测性编辑),哪怕是巨大的 Monorepo 也能做到毫秒级响应。
  • +
  • 价格:Pro 计划 $20/月
  • +
  • 适用人群:全栈工程师、独立开发者。
  • +
+

Trae (字节跳动) —— Vibe Coding 的倡导者

    +
  • 核心卖点:**Adaptive Routing (自适应路由)**。它会根据你当前写的代码复杂度,自动在极速模型(豆包)和重度推理模型之间无缝切换。其中文语境理解极佳。
  • +
  • 2026 现状:深度整合了飞书和国内云生态,堪称国内大厂搬砖神器。
  • +
  • 价格:标准版免费,Pro 版约 ¥99/月
  • +
+

Antigravity (Google) —— 端到端测试核武器

    +
  • 核心卖点Browser Agent。这是 Google 推出的重量级武器。它不仅能写代码,还能自动拉起 Chrome 浏览器,像真人一样点击 UI、跑通 E2E 测试并截图反馈错误。
  • +
  • 2026 现状:与 Gemini 3.1 深度绑定,多模态(看图写 UI)能力天下第一。
  • +
  • 价格:基础版免费,Pro 版 $20/月
  • +
+

IDE Comparison

+
+

2. 终端智能体 (CLI Agents):黑客的终极浪漫

真正的极客从不离开 Terminal。2026 年的终端工具已经可以接管整个操作系统。

+

Claude Code —— 逻辑天花板

    +
  • 核心卖点:由 Claude 4.6 Opus 驱动。你只需在终端输入 claude "帮我把整个后端的鉴权逻辑改成 OAuth 2.0",它会自主搜索文件、读代码、安装依赖、甚至运行单元测试,直到报错全部消失。
  • +
  • 适用场景:重构庞大的遗留代码库 (Legacy Code)。
  • +
+

Gemini CLI —— 性价比与搜索之王

    +
  • 核心卖点:依托于 Google 强大的实时搜索。当遇到冷门库的报错时,它会自动联网翻阅 GitHub Issues 和 StackOverflow,并直接在本地应用补丁。
  • +
  • 价格:免费额度极其慷慨,性价比碾压。
  • +
+

Kimi Code —— 本土化的 Agent Swarm

    +
  • 核心卖点:极低的 API 成本和强大的 **Agent Swarm (智能体集群)**。它可以瞬间分裂出多个子进程,并行处理不同模块的开发。
  • +
+
+

3. 插件与桌面端:稳健的经典流派

GitHub Copilot (2026 版)

    +
  • 现状:全面支持 **MCP (Model Context Protocol)**,你可以一键切换底层的模型(GPT-5, Claude, 甚至国产模型)。它依然是企业级采购的首选,市场占有率最高。
  • +
  • 价格:Individual $10/月
  • +
+

Codex App (OpenAI)

    +
  • 核心卖点:2026 年 OpenAI 推出的独立原生应用(支持 macOS/Windows)。
  • +
  • 争议点:引入了 Rolling Window 限制。Pro 订阅($200/月)允许在云端沙盒(Sandboxed Execution)中并行跑测试,彻底解放本地算力,是土豪开发者的最爱。
  • +
+
+

4. 开源黑马:OpenClaw

如果你是一个重度掌控欲患者,OpenClaw(原名 Moltbot)是 2026 年不可不试的神器。

+
    +
  • 核心优势完全开源、本地运行。它可以读取你的文件系统、执行 Shell 命令。更有趣的是,它支持远程唤醒:你可以躺在床上发个 WhatsApp 消息:“小 O,帮我把昨晚写的爬虫部署到服务器上”,它就会自动执行并给你发送进度截图。
  • +
  • 价格:免费(自带 API Key)。
  • +
+

Open Source Terminal
(图:在终端中运行的开源智能体正在疯狂拉取依赖并编译)

+
+

🔥 开发者真实体感与吐槽 (Developer UX & Pain Points)

任何工具都有其暗面。在 2026 年的高强度开发流中,这些工具暴露出了哪些最真实的痛点?

+
    +
  • Cursor 被惯坏综合征:“自从用了 Cursor 的 Composer 之后,我发现我已经不会写正则和基础的 reduce 语法了。但最搞人心态的是,在庞大的 Monorepo 里,它有时候会莫名其妙把别的微服务里的配置文件改掉,排查起来简直要命。”
  • +
  • Trae 的薛定谔体验:“Trae 在国内写业务确实爽,特别是飞书文档直接转代码的链路。但我用它写底层 Rust 和 C++ 的时候,明显感觉它的逻辑深度不如 Claude。所谓的 Vibe Coding,前提是你别碰造轮子的活儿。”
  • +
  • Antigravity 的失业恐惧:“看到 Browser Agent 自动帮我打开浏览器、登录、点赞、截图并修复报错的那一刻,我没有感到高兴,我感到的是深切的被剥夺工作的恐惧……不过它报错的时候,去查它的执行日志,经常能看到它自己在两个网页间死循环反复横跳。”
  • +
  • Claude Code 与破产警告:“看着终端里 Claude Code 疯狂自己滚代码、查日志、调接口,真的有种身处《黑客帝国》的快感。但跑了半小时重构完,一看 API 账单扣了 50 刀,心都在滴血。”
  • +
  • Copilot 的‘中庸之道’:“2026 年了,Copilot 依然像个稳定的公务员。不出错,也没有特别亮眼的 Agent 操作。但它胜在稳定,且企业版数据安全政策做得最到位。”
  • +
+
+

💡 2026 架构师选型建议

在 2026 年,不要试图用一个工具解决所有问题,Multi-tool Stacking (多工具堆叠) 才是王道。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
你的开发需求推荐的工具组合预期成本
追求极致的开发与重构体验Cursor (写代码) + Claude Code (跑终端 Agent)~$40 / 月
性价比之王 / 学生党Trae (免费版) + Gemini CLI (白嫖额度)免费
接私活 / 快速原型交付Antigravity (利用 Browser Agent 搞定 UI 测试)~$20 / 月
高度定制化 / 极客玩家OpenClaw (本地部署) + Kimi K2.5 API按量计费 (极低)
土豪 / 重度 GitHub 依赖Codex App Pro (云端沙盒极速编译)$200 / 月
+
+

👨‍💻 最终建议:让 AI 去写 boilerplate (样板代码),把你的精力留给真正的系统架构业务逻辑思考。未来的程序员,本质上都是 Agent 调度员。

+
+
+

相关推荐

+ +
文章作者: llbzow
文章链接: https://yourblog.com/2026/03/25/ai%E5%8E%82%E5%95%86%E5%AF%B9%E6%AF%94%E5%88%86%E6%9E%90/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 llbzow的摸鱼日记 (づ ̄ 3 ̄)づ
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..7b5f477 --- /dev/null +++ b/about/index.html @@ -0,0 +1,1602 @@ +关于我 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
加载中...

博客封面

+

关于我

欢迎来到我的博客!我是一个热爱技术、喜欢分享的人。

+

个人简介

    +
  • 姓名:llbzow
  • +
  • 职业:开发者也是施工员
  • +
  • 兴趣:编程、阅读、旅行、打灰(大概吧)
  • +
  • 技能:JavaScript, Python, HTML/CSS,Java和一些简单的数据库开发能力
  • +
+

技术栈(没那么精通,都会一点)

    +
  • 前端:HTML, CSS, JavaScript, Vue, React
  • +
  • 后端:Python, Node.js
  • +
  • 数据库:MySQL, MongoDB
  • +
  • 工具:Git, Docker
  • +
  • 打灰:通信工程与广电,工程造价等
  • +
+

项目经验

在这里我会分享一些我参与过的项目:

+
    +
  1. 电商平台开发 - 使用Vue.js和Node.js构建的全栈电商平台
  2. +
  3. 移动应用开发 - 写点简单的微信小程序没啥问题
  4. +
  5. 数据分析系统 - 使用Python和机器学习算法构建的数据分析平台,做过yolo的实战项目(本科毕设做的就算这个)
  6. +
  7. 四电工程项目 - 我说打灰也是工程师
  8. +
+

联系方式

+

感谢您的访问!

+
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/1970/01/index.html b/archives/1970/01/index.html new file mode 100644 index 0000000..9b676dc --- /dev/null +++ b/archives/1970/01/index.html @@ -0,0 +1,1572 @@ +一月 1970 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
全部文章 - 20
1970
🔒 你好,工地!
🔒 你好,工地!
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/1970/index.html b/archives/1970/index.html new file mode 100644 index 0000000..1505d91 --- /dev/null +++ b/archives/1970/index.html @@ -0,0 +1,1572 @@ +1970 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
全部文章 - 20
1970
🔒 你好,工地!
🔒 你好,工地!
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2025/09/index.html b/archives/2025/09/index.html new file mode 100644 index 0000000..49f5b40 --- /dev/null +++ b/archives/2025/09/index.html @@ -0,0 +1,1572 @@ +九月 2025 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
全部文章 - 20
2025
🔒 这就是信息化培训
🔒 这就是信息化培训
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2025/11/index.html b/archives/2025/11/index.html new file mode 100644 index 0000000..2c8c523 --- /dev/null +++ b/archives/2025/11/index.html @@ -0,0 +1,1572 @@ +十一月 2025 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2025/12/index.html b/archives/2025/12/index.html new file mode 100644 index 0000000..928ee42 --- /dev/null +++ b/archives/2025/12/index.html @@ -0,0 +1,1572 @@ +十二月 2025 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2025/index.html b/archives/2025/index.html new file mode 100644 index 0000000..2dab3f0 --- /dev/null +++ b/archives/2025/index.html @@ -0,0 +1,1572 @@ +2025 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2025/page/2/index.html b/archives/2025/page/2/index.html new file mode 100644 index 0000000..f01605c --- /dev/null +++ b/archives/2025/page/2/index.html @@ -0,0 +1,1572 @@ +2025 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
全部文章 - 7
2025
Vue 3 启航
Vue 3 启航
🔒 这就是信息化培训
🔒 这就是信息化培训
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/01/index.html b/archives/2026/01/index.html new file mode 100644 index 0000000..5305c81 --- /dev/null +++ b/archives/2026/01/index.html @@ -0,0 +1,1572 @@ +一月 2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/01/page/2/index.html b/archives/2026/01/page/2/index.html new file mode 100644 index 0000000..890c6d0 --- /dev/null +++ b/archives/2026/01/page/2/index.html @@ -0,0 +1,1572 @@ +一月 2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/02/index.html b/archives/2026/02/index.html new file mode 100644 index 0000000..a792696 --- /dev/null +++ b/archives/2026/02/index.html @@ -0,0 +1,1572 @@ +二月 2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
全部文章 - 1
2026
Arch Linux 试毒:初探邪教的诱惑
Arch Linux 试毒:初探邪教的诱惑
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/03/index.html b/archives/2026/03/index.html new file mode 100644 index 0000000..dbecc25 --- /dev/null +++ b/archives/2026/03/index.html @@ -0,0 +1,1572 @@ +三月 2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/index.html b/archives/2026/index.html new file mode 100644 index 0000000..d741e6b --- /dev/null +++ b/archives/2026/index.html @@ -0,0 +1,1572 @@ +2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/page/2/index.html b/archives/2026/page/2/index.html new file mode 100644 index 0000000..36f54f1 --- /dev/null +++ b/archives/2026/page/2/index.html @@ -0,0 +1,1572 @@ +2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/2026/page/3/index.html b/archives/2026/page/3/index.html new file mode 100644 index 0000000..1496b10 --- /dev/null +++ b/archives/2026/page/3/index.html @@ -0,0 +1,1572 @@ +2026 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..60843f7 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,1572 @@ +文章 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000..508416a --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,1572 @@ +文章 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 0000000..7125231 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1,1572 @@ +文章 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/archives/page/4/index.html b/archives/page/4/index.html new file mode 100644 index 0000000..2bb9823 --- /dev/null +++ b/archives/page/4/index.html @@ -0,0 +1,1572 @@ +文章 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/Vue学习之路/index.html b/categories/Vue学习之路/index.html new file mode 100644 index 0000000..90810e4 --- /dev/null +++ b/categories/Vue学习之路/index.html @@ -0,0 +1,1572 @@ +分类: Vue学习之路 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/Vue学习之路/page/2/index.html b/categories/Vue学习之路/page/2/index.html new file mode 100644 index 0000000..03ac521 --- /dev/null +++ b/categories/Vue学习之路/page/2/index.html @@ -0,0 +1,1572 @@ +分类: Vue学习之路 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/Vue学习之路/page/3/index.html b/categories/Vue学习之路/page/3/index.html new file mode 100644 index 0000000..d8d6e0a --- /dev/null +++ b/categories/Vue学习之路/page/3/index.html @@ -0,0 +1,1572 @@ +分类: Vue学习之路 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..5f68a5d --- /dev/null +++ b/categories/index.html @@ -0,0 +1,1574 @@ +分类 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/技术随笔/index.html b/categories/技术随笔/index.html new file mode 100644 index 0000000..1acb1c1 --- /dev/null +++ b/categories/技术随笔/index.html @@ -0,0 +1,1572 @@ +分类: 技术随笔 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/知识库/index.html b/categories/知识库/index.html new file mode 100644 index 0000000..48ec112 --- /dev/null +++ b/categories/知识库/index.html @@ -0,0 +1,1572 @@ +分类: 知识库 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/categories/随笔/index.html b/categories/随笔/index.html new file mode 100644 index 0000000..82002c5 --- /dev/null +++ b/categories/随笔/index.html @@ -0,0 +1,1572 @@ +分类: 随笔 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
加载中...
分类 - 随笔
2025
🔒 这就是信息化培训
🔒 这就是信息化培训
1970
🔒 你好,工地!
🔒 你好,工地!
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/css/custom.css b/css/custom.css new file mode 100644 index 0000000..9e87ba0 --- /dev/null +++ b/css/custom.css @@ -0,0 +1,94 @@ +/* ========================================================== + 自定义博客的美化样式 (Custom Style for Butterfly) + 主要用于配合背景图片,实现内容容器的半透明毛玻璃效果 + ========================================================== */ + +/* 1. 整体布局页面背景透明,让 body 背景图透射出来 */ +#body-wrap { + background: transparent !important; +} + +/* 2. 主卡片容器(文章列表、内容页)的半透明毛玻璃效果 */ +.layout > div:first-child:not(.recent-posts) { + background: rgba(255, 255, 255, 0.85) !important; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + border-radius: 12px; + box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06); +} + +/* 首页文章卡片 */ +.recent-posts > .recent-post-item { + background: rgba(255, 255, 255, 0.85) !important; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + border-radius: 12px; + box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06); +} + +/* 3. 侧边栏所有块状元素(名片、公告、分类等)透明毛玻璃效果 */ +#aside-content .card-widget { + background: rgba(255, 255, 255, 0.85) !important; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + border-radius: 12px; + box-shadow: 0 4px 8px 6px rgba(7, 17, 27, 0.06); +} + +/* 4. 分页栏容器透明处理 */ +#pagination { + background: transparent !important; +} + +#pagination .page-number.current { + background: var(--btn-bg) !important; +} + +/* 5. 顶层导航栏(随屏幕滚动效果调整) */ +#page-header.nav-fixed #nav { + background: rgba(255, 255, 255, 0.8) !important; + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + box-shadow: 0 5px 6px -5px rgba(133, 133, 133, 0.6); +} + +/* 6. 深色模式下的适配 (Dark mode compatibility) */ +[data-theme="dark"] .layout > div:first-child:not(.recent-posts), +[data-theme="dark"] .recent-posts > .recent-post-item, +[data-theme="dark"] #aside-content .card-widget { + background: rgba(30, 30, 30, 0.8) !important; /* 深灰色半透明 */ + box-shadow: 0 4px 8px 6px rgba(0, 0, 0, 0.5); +} + +[data-theme="dark"] #page-header.nav-fixed #nav { + background: rgba(18, 18, 18, 0.8) !important; + box-shadow: 0 5px 6px -5px rgba(0, 0, 0, 0.6); +} + +/* 隐藏不需要的线条组件 (如果配置中开启了 canvas_nest 觉得乱可以强行在此隐藏) */ +/* canvas { + opacity: 0.3 !important; +} */ + +/* ========================================================== + LQIP 图片懒加载渐入动效 + 使用 lazysizes 的 class 状态控制,确保加载后图片清晰还原 + ========================================================== */ + +/* 加载中:模糊 + 半透明(lazysizes 会自动添加这些 class)*/ +img.lazyload, +img.lazyloading { + filter: blur(10px); + opacity: 0.6; + transition: filter 0.45s ease, opacity 0.45s ease; + will-change: filter, opacity; +} + +/* 加载完成:完全清晰(lazysizes 添加 lazyloaded class 后生效)*/ +img.lazyloaded { + filter: blur(0) !important; + opacity: 1 !important; + transition: filter 0.45s ease, opacity 0.45s ease; +} + + diff --git a/css/hbe.style.css b/css/hbe.style.css new file mode 100644 index 0000000..060f1f8 --- /dev/null +++ b/css/hbe.style.css @@ -0,0 +1,749 @@ +.hbe, +.hbe:after, +.hbe:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.hbe-container{ + margin: 0 auto; + overflow: hidden; +} +.hbe-content { + text-align: center; + font-size: 150%; + padding: 1em 0; +} + +.hbe-input { + position: relative; + z-index: 1; + display: inline-block; + margin: 1em; + width: 80%; + min-width: 200px; + vertical-align: top; +} + +.hbe-input-field { + line-height: normal; + font-size: 100%; + margin: 0; + position: relative; + display: block; + float: right; + padding: 0.8em; + width: 60%; + border: none; + border-radius: 0; + background: #f0f0f0; + color: #aaa; + font-weight: 400; + font-family: "Avenir Next", "Helvetica Neue", Helvetica, Arial, sans-serif; + -webkit-appearance: none; /* for box shadows to show on iOS */ +} + +.hbe-input-field:focus { + outline: none; +} + +.hbe-input-label { + display: inline-block; + float: right; + padding: 0 1em; + width: 40%; + color: #696969; + font-weight: bold; + font-size: 70.25%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.hbe-input-label-content { + position: relative; + display: block; + padding: 1.6em 0; + width: 100%; +} + +.hbe-graphic { + position: absolute; + top: 0; + left: 0; + fill: none; +} + +/* hbe button in post page */ +.hbe-button { + width: 130px; + height: 40px; + background: linear-gradient(to bottom, #4eb5e5 0%,#389ed5 100%); /* W3C */ + border: none; + border-radius: 5px; + position: relative; + border-bottom: 4px solid #2b8bc6; + color: #fbfbfb; + font-weight: 600; + font-family: 'Open Sans', sans-serif; + text-shadow: 1px 1px 1px rgba(0,0,0,.4); + font-size: 15px; + text-align: left; + text-indent: 5px; + box-shadow: 0px 3px 0px 0px rgba(0,0,0,.2); + cursor: pointer; + + display: block; + margin: 0 auto; + margin-bottom: 20px; +} + +.hbe-button:active { + box-shadow: 0px 2px 0px 0px rgba(0,0,0,.2); + top: 1px; +} + +.hbe-button:after { + content: ""; + width: 0; + height: 0; + display: block; + border-top: 20px solid #187dbc; + border-bottom: 20px solid #187dbc; + border-left: 16px solid transparent; + border-right: 20px solid #187dbc; + position: absolute; + opacity: 0.6; + right: 0; + top: 0; + border-radius: 0 5px 5px 0; +} +/* hbe button in post page */ + +/* default theme {{{ */ +.hbe-input-default { + overflow: hidden; +} + +.hbe-input-field-default { + width: 100%; + background: transparent; + padding: 0.5em; + margin-bottom: 2em; + color: #f9f7f6; + z-index: 100; + opacity: 0; +} + +.hbe-input-label-default { + width: 100%; + position: absolute; + text-align: left; + padding: 0.5em 0; + pointer-events: none; + font-size: 1em; +} + +.hbe-input-label-default::before, +.hbe-input-label-default::after { + content: ''; + position: absolute; + width: 100%; + left: 0; +} + +.hbe-input-label-default::before { + height: 100%; + background: #666666; + top: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + -webkit-transition: -webkit-transform 0.2s; + transition: transform 0.2s; +} + +.hbe-input-label-default::after { + height: 2px; + background: #666666; + top: 100%; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.hbe-input-label-content-default { + padding: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transition: -webkit-transform 0.2s, color 0.2s; + transition: transform 0.2s, color 0.2s; +} + +.hbe-input-field-default:focus, +.hbe-input--filled .hbe-input-field-default { + opacity: 1; + -webkit-transition: opacity 0s 0.2s; + transition: opacity 0s 0.2s; +} + +.hbe-input-label-default::before, +.hbe-input-label-default::after, +.hbe-input-label-content-default, +.hbe-input-field-default:focus, +.hbe-input--filled .hbe-input-field-default { + -webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); + transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); +} + +.hbe-input-field-default:focus + .hbe-input-label-default::before, +.hbe-input--filled .hbe-input-label-default::before { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.hbe-input-field-default:focus + .hbe-input-label-default::after, +.hbe-input--filled .hbe-input-label-default::after { + opacity: 0; +} + +.hbe-input-field-default:focus + .hbe-input-label-default .hbe-input-label-content-default, +.hbe-input--filled .hbe-input-label-default .hbe-input-label-content-default { + color: #555555; + -webkit-transform: translate3d(0, 2.1em, 0) scale3d(0.65, 0.65, 1); + transform: translate3d(0, 2.1em, 0) scale3d(0.65, 0.65, 1); +} +/* default theme }}} */ + +/* up theme {{{ */ +.hbe-input-up { + overflow: hidden; + padding-top: 2em; +} + +.hbe-input-field-up { + width: 100%; + background: transparent; + opacity: 0; + padding: 0.35em; + z-index: 100; + color: #837482; +} + +.hbe-input-label-up { + width: 100%; + bottom: 0; + position: absolute; + pointer-events: none; + text-align: left; + color: #8E9191; + padding: 0 0.5em; +} + +.hbe-input-label-up::before { + content: ''; + position: absolute; + width: 100%; + height: 4em; + top: 100%; + left: 0; + background: #fff; + border-top: 4px solid #9B9F9F; + -webkit-transform: translate3d(0, -3px, 0); + transform: translate3d(0, -3px, 0); + -webkit-transition: -webkit-transform 0.4s; + transition: transform 0.4s; + -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); + transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); +} + +.hbe-input-label-content-up { + padding: 0.5em 0; + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; + -webkit-transition: -webkit-transform 0.4s, color 0.4s; + transition: transform 0.4s, color 0.4s; + -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); + transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); +} + +.hbe-input-field-up:focus, +.input--filled .hbe-input-field-up { + cursor: text; + opacity: 1; + -webkit-transition: opacity 0s 0.4s; + transition: opacity 0s 0.4s; +} + +.hbe-input-field-up:focus + .hbe-input-label-up::before, +.input--filled .hbe-input-label-up::before { + -webkit-transition-delay: 0.05s; + transition-delay: 0.05s; + -webkit-transform: translate3d(0, -3.3em, 0); + transform: translate3d(0, -3.3em, 0); +} + +.hbe-input-field-up:focus + .hbe-input-label-up .hbe-input-label-content-up, +.input--filled .hbe-input-label-content-up { + color: #6B6E6E; + -webkit-transform: translate3d(0, -3.3em, 0) scale3d(0.81, 0.81, 1); + transform: translate3d(0, -3.3em, 0) scale3d(0.81, 0.81, 1); +} +/* up theme }}} */ + +/* wave theme {{{ */ +.hbe-input-wave { + overflow: hidden; + padding-top: 1em; +} + +.hbe-input-field-wave { + padding: 0.5em 0em 0.25em; + width: 100%; + background: transparent; + color: #9da8b2; + font-size: 1.25em; +} + +.hbe-input-label-wave { + position: absolute; + top: 0.95em; + font-size: 0.85em; + left: 0; + display: block; + width: 100%; + text-align: left; + padding: 0em; + pointer-events: none; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transition: -webkit-transform 0.2s 0.15s, color 1s; + transition: transform 0.2s 0.15s, color 1s; + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; +} + +.hbe-graphic-wave { + stroke: #92989e; + pointer-events: none; + -webkit-transition: -webkit-transform 0.7s, stroke 0.7s; + transition: transform 0.7s, stroke 0.7s; + -webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); + transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); +} + +.hbe-input-field-wave:focus + .hbe-input-label-wave, +.input--filled .hbe-input-label-wave { + color: #333; + -webkit-transform: translate3d(0, -1.25em, 0) scale3d(0.75, 0.75, 1); + transform: translate3d(0, -1.25em, 0) scale3d(0.75, 0.75, 1); +} + +.hbe-input-field-wave:focus ~ .hbe-graphic-wave, +.input--filled .graphic-wave { + stroke: #333; + -webkit-transform: translate3d(-66.6%, 0, 0); + transform: translate3d(-66.6%, 0, 0); +} +/* wave theme }}} */ + +/* flip theme {{{ */ +.hbe-input-field-flip { + width: 100%; + background-color: #d0d1d0; + border: 2px solid transparent; + -webkit-transition: background-color 0.25s, border-color 0.25s; + transition: background-color 0.25s, border-color 0.25s; +} + +.hbe-input-label-flip { + width: 100%; + text-align: left; + position: absolute; + bottom: 100%; + pointer-events: none; + overflow: hidden; + padding: 0 1.25em; + -webkit-transform: translate3d(0, 3em, 0); + transform: translate3d(0, 3em, 0); + -webkit-transition: -webkit-transform 0.25s; + transition: transform 0.25s ; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +.hbe-input-label-content-flip { + color: #8B8C8B; + padding: 0.25em 0; + -webkit-transition: -webkit-transform 0.25s; + transition: transform 0.25s; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +.hbe-input-label-content-flip::after { + content: attr(data-content); + position: absolute; + font-weight: 800; + bottom: 100%; + left: 0; + height: 100%; + width: 100%; + color: #666666; + padding: 0.25em 0; + letter-spacing: 1px; + font-size: 1em; +} + +.hbe-input-field-flip:focus + .hbe-input-label-flip, +.input--filled .hbe-input-label-flip { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.hbe-input-field-flip:focus + .hbe-input-label-flip .hbe-input-label-content-flip, +.input--filled .hbe-input-label-content-flip { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); +} + +.hbe-input-field-flip:focus + .hbe-input-field-flip, +.input--filled .hbe-input-field-flip { + background-color: transparent; + border-color: #666666; +} +/* flip theme }}} */ + +/* xray theme {{{ */ +.hbe-input-xray { + overflow: hidden; + padding-bottom: 2.5em; +} + +.hbe-input-field-xray { + padding: 0; + margin-top: 1.2em; + width: 100%; + background: transparent; + color: #84AF9B ; + font-size: 1.55em; +} + +.hbe-input-label-xray { + position: absolute; + top: 2em; + left: 0; + display: block; + width: 100%; + text-align: left; + padding: 0em; + letter-spacing: 1px; + color: #84AF9B ; + pointer-events: none; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transition: -webkit-transform 0.2s 0.1s, color 0.3s; + transition: transform 0.2s 0.1s, color 0.3s; + -webkit-transition-timing-function: ease-out; + transition-timing-function: ease-out; +} + +.hbe-graphic-xray { + stroke: #84AF9B ; + pointer-events: none; + stroke-width: 2px; + top: 1.25em; + bottom: 0px; + height: 3.275em; + -webkit-transition: -webkit-transform 0.7s, stroke 0.7s; + transition: transform 0.7s, stroke 0.7s; + -webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); + transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); +} + +.hbe-input-field-xray:focus + .hbe-input-label-xray, +.input--filled .hbe-input-label-xray { + color: #84AF9B ; + -webkit-transform: translate3d(0, 3.5em, 0) scale3d(0.85, 0.85, 1); + transform: translate3d(0, 3.5em, 0) scale3d(0.85, 0.85, 1); +} + +.hbe-input-field-xray:focus ~ .hbe-graphic-xray, +.input--filled .graphic-xray { + stroke: #84AF9B ; + -webkit-transform: translate3d(-66.6%, 0, 0); + transform: translate3d(-66.6%, 0, 0); +} +/* xray theme }}} */ + +/* blink theme {{{ */ +.hbe-input-blink { + padding-top: 1em; +} + +.hbe-input-field-blink { + width: 100%; + padding: 0.8em 0.5em; + background: transparent; + border: 2px solid; + color: #8781bd; + -webkit-transition: border-color 0.25s; + transition: border-color 0.25s; +} + +.hbe-input-label-blink { + width: 100%; + position: absolute; + top: 0; + text-align: left; + overflow: hidden; + padding: 0; + pointer-events: none; + -webkit-transform: translate3d(0, 3em, 0); + transform: translate3d(0, 3em, 0); +} + +.hbe-input-label-content-blink { + padding: 0 1em; + font-weight: 400; + color: #b5b5b5; +} + +.hbe-input-label-content-blink::after { + content: attr(data-content); + position: absolute; + top: -200%; + left: 0; + color: #8781bd ; + font-weight: 800; +} + +.hbe-input-field-blink:focus, +.input--filled .hbe-input-field-blink { + border-color: #8781bd ; +} + +.hbe-input-field-blink:focus + .hbe-input-label-blink, +.input--filled .hbe-input-label-blink { + -webkit-animation: anim-blink-1 0.25s forwards; + animation: anim-blink-1 0.25s forwards; +} + +.hbe-input-field-blink:focus + .hbe-input-label-blink .hbe-input-label-content-blink, +.input--filled .hbe-input-label-content-blink { + -webkit-animation: anim-blink-2 0.25s forwards ease-in; + animation: anim-blink-2 0.25s forwards ease-in; +} + +@-webkit-keyframes anim-blink-1 { + 0%, 70% { + -webkit-transform: translate3d(0, 3em, 0); + transform: translate3d(0, 3em, 0); + } + 71%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@-webkit-keyframes anim-blink-2 { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 70%, 71% { + -webkit-transform: translate3d(0, 125%, 0); + transform: translate3d(0, 125%, 0); + opacity: 0; + -webkit-animation-timing-function: ease-out; + } + 100% { + color: transparent; + -webkit-transform: translate3d(0, 200%, 0); + transform: translate3d(0, 200%, 0); + } +} + +@keyframes anim-blink-1 { + 0%, 70% { + -webkit-transform: translate3d(0, 3em, 0); + transform: translate3d(0, 3em, 0); + } + 71%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes anim-blink-2 { + 0% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + 70%, 71% { + -webkit-transform: translate3d(0, 125%, 0); + transform: translate3d(0, 125%, 0); + opacity: 0; + -webkit-animation-timing-function: ease-out; + } + 100% { + color: transparent; + -webkit-transform: translate3d(0, 200%, 0); + transform: translate3d(0, 200%, 0); + } +} +/* blink theme }}} */ + +/* surge theme {{{ */ +.hbe-input-surge { + overflow: hidden; + padding-bottom: 1em; +} + +.hbe-input-field-surge { + padding: 0.25em 0.5em; + margin-top: 1.25em; + width: 100%; + background: transparent; + color: #D0D0D0; + font-size: 1.55em; + opacity: 0; +} + +.hbe-input-label-surge { + width: 100%; + text-align: left; + position: absolute; + top: 1em; + pointer-events: none; + overflow: hidden; + padding: 0 0.25em; + -webkit-transform: translate3d(1em, 2.75em, 0); + transform: translate3d(1em, 2.75em, 0); + -webkit-transition: -webkit-transform 0.3s; + transition: transform 0.3s; +} + +.hbe-input-label-content-surge { + color: #A4A5A6; + padding: 0.4em 0 0.25em; + -webkit-transition: -webkit-transform 0.3s; + transition: transform 0.3s; +} + +.hbe-input-label-content-surge::after { + content: attr(data-content); + position: absolute; + font-weight: 800; + top: 100%; + left: 0; + height: 100%; + width: 100%; + color: #2C3E50; + padding: 0.25em 0; + letter-spacing: 1px; + font-size: 0.85em; +} + +.hbe-graphic-surge { + fill: #2C3E50; + pointer-events: none; + top: 1em; + bottom: 0px; + height: 4.5em; + z-index: -1; + -webkit-transition: -webkit-transform 0.7s, fill 0.7s; + transition: transform 0.7s, fill 0.7s; + -webkit-transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); + transition-timing-function: cubic-bezier(0, 0.25, 0.5, 1); +} + +.hbe-input-field-surge:focus, +.input--filled .hbe-input-field-surge { + -webkit-transition: opacity 0s 0.35s; + transition: opacity 0s 0.35s; + opacity: 1; +} + +.hbe-input-field-surge:focus + .hbe-input-label-surge, +.input--filled .hbe-input-label-surge { + -webkit-transition-delay: 0.15s; + transition-delay: 0.15s; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.hbe-input-field-surge:focus + .hbe-input-label-surge .hbe-input-label-content-surge, +.input--filled .hbe-input-label-content-surge { + -webkit-transition-delay: 0.15s; + transition-delay: 0.15s; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); +} + +.hbe-input-field-surge:focus ~ .hbe-graphic-surge, +.input--filled .graphic-surge { + fill: #2C3E50; + -webkit-transform: translate3d(-66.6%, 0, 0); + transform: translate3d(-66.6%, 0, 0); +} +/* surge theme }}} */ + +/* shrink theme {{{ */ +.hbe-input-field-shrink { + width: 100%; + background: transparent; + padding: 0.5em 0; + margin-bottom: 2em; + color: #2C3E50; +} + +.hbe-input-label-shrink { + width: 100%; + position: absolute; + text-align: left; + font-size: 1em; + padding: 10px 0 5px; + pointer-events: none; +} + +.hbe-input-label-shrink::after { + content: ''; + position: absolute; + width: 100%; + height: 7px; + background: #B7C3AC; + left: 0; + top: 100%; + -webkit-transform-origin: 50% 100%; + transform-origin: 50% 100%; + -webkit-transition: -webkit-transform 0.3s, background-color 0.3s; + transition: transform 0.3s, background-color 0.3s; +} + +.hbe-input-label-content-shrink { + padding: 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transition: -webkit-transform 0.3s, color 0.3s; + transition: transform 0.3s, color 0.3s; +} + +.hbe-input-field-shrink:focus + .hbe-input-label-shrink::after, +.input--filled .hbe-input-label-shrink::after { + background: #84AF9B; + -webkit-transform: scale3d(1, 0.25, 1); + transform: scale3d(1, 0.25, 1); +} + +.hbe-input-field-shrink:focus + .hbe-input-label-shrink .hbe-input-label-content-shrink, +.input--filled .hbe-input-label-shrink .hbe-input-label-content-shrink { + color: #84AF9B; + -webkit-transform: translate3d(0, 2em, 0) scale3d(0.655, 0.655, 1); + transform: translate3d(0, 2em, 0) scale3d(0.655, 0.655, 1); +} +/* shrink theme }}} */ diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..516f12e --- /dev/null +++ b/css/index.css @@ -0,0 +1,8218 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html { + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +main { + display: block +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre { + font-family: monospace, monospace; + font-size: 1em +} + +a { + background-color: transparent +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted +} + +b, +strong { + font-weight: bolder +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +img { + border-style: none +} + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=button], +[type=reset], +[type=submit], +button { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText +} + +fieldset { + padding: .35em .75em .625em +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress { + vertical-align: baseline +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +details { + display: block +} + +summary { + display: list-item +} + +template { + display: none +} + +[hidden] { + display: none +} +.limit-one-line, +.container .flink .flink-item-name, +.container .flink .flink-item-desc, +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span, +.site-data > a .headline, +#nav #blog-info, +#sidebar #sidebar-menus .menus_items .site-page { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} +.limit-more-line, +.article-sort-item-title, +#recent-posts .recent-post-item >.recent-post-info > .article-title, +#recent-posts .recent-post-item >.recent-post-info > .content, +#aside-content .aside-list > .aside-list-item .content > .name, +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment, +#post-info .post-title, +.pagination-related .info .info-1 .info-item-2, +.pagination-related .info .info-2 .info-item-1, +.container figure.gallery-group p, +.container figure.gallery-group .gallery-group-name { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; +} +.fontawesomeIcon, +.custom-hr:before, +#post .post-copyright:before, +#post #post-outdate-notice:before, +.note:not(.no-icon)::before, +.search-dialog hr:before { + display: inline-block; + font-weight: 600; + font-family: 'Font Awesome 7 Free', 'Font Awesome 6 Free'; + text-rendering: auto; + -webkit-font-smoothing: antialiased; +} +.cardHover, +.layout > div:first-child:not(.nc), +#recent-posts .recent-post-item, +#article-container .shuoshuo-item, +#aside-content .card-widget, +.layout .pagination > *:not(.space) { + background: var(--card-bg); + -webkit-box-shadow: var(--card-box-shadow); + box-shadow: var(--card-box-shadow); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + border-radius: 8px; +} +.cardHover:hover, +.layout > div:first-child:not(.nc):hover, +#recent-posts .recent-post-item:hover, +#article-container .shuoshuo-item:hover, +#aside-content .card-widget:hover, +.layout .pagination > *:not(.space):hover { + -webkit-box-shadow: var(--card-hover-box-shadow); + box-shadow: var(--card-hover-box-shadow); +} +.imgHover, +.article-sort-item-img :first-child, +#recent-posts .recent-post-item .post_cover .post-bg, +#aside-content .aside-list > .aside-list-item .thumbnail :first-child { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.6s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.6s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.6s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.6s; + transition: filter 375ms ease-in 0.2s, transform 0.6s; + object-fit: cover; +} +.imgHover:hover, +.article-sort-item-img :first-child:hover, +#recent-posts .recent-post-item .post_cover .post-bg:hover, +#aside-content .aside-list > .aside-list-item .thumbnail :first-child:hover { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover:hover .cover, +.pagination-related:hover .cover { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +.postImgHover .cover, +.pagination-related .cover { + width: 100%; + height: 100%; + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transition: all 0.6s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.6s, filter 375ms ease-in 0.2s; + -o-transition: all 0.6s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.6s, filter 375ms ease-in 0.2s; + transition: all 0.6s, filter 375ms ease-in 0.2s; + object-fit: cover; +} +.list-beauty, +.category-lists ul { + list-style: none; +} +.list-beauty li, +.category-lists ul li { + position: relative; + padding: 0.12em 0.4em 0.12em 1.4em; +} +.list-beauty li:hover:before, +.category-lists ul li:hover:before { + border-color: var(--pseudo-hover); +} +.list-beauty li:before, +.category-lists ul li:before { + position: absolute; + top: 0.67em; + left: 0; + width: 0.43em; + height: 0.43em; + border: 0.215em solid #57c0de; + border-radius: 0.43em; + background: transparent; + content: ''; + cursor: pointer; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.custom-hr, +.search-dialog hr { + position: relative; + margin: 40px auto; + border: 2px dashed var(--hr-border); + width: calc(100% - 4px); +} +.custom-hr:hover:before, +.search-dialog hr:hover:before { + left: calc(95% - 20px); +} +.custom-hr:before, +.search-dialog hr:before { + position: absolute; + top: -10px; + left: 5%; + z-index: 1; + color: var(--hr-before-color); + content: '\f0c4'; + font-size: 20px; + line-height: 1; + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; +} +.verticalCenter, +.pagination-related .info .info-1, +.pagination-related .info .info-2 { + position: absolute; + top: 50%; + width: 100%; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +#content-inner, +#footer { + -webkit-animation: bottom-top 1s; + -moz-animation: bottom-top 1s; + -o-animation: bottom-top 1s; + -ms-animation: bottom-top 1s; + animation: bottom-top 1s; +} +#page-header:not(.full_page), +#nav.show { + -webkit-animation: header-effect 1s; + -moz-animation: header-effect 1s; + -o-animation: header-effect 1s; + -ms-animation: header-effect 1s; + animation: header-effect 1s; +} +#site-title, +#site-subtitle { + -webkit-animation: titleScale 1s; + -moz-animation: titleScale 1s; + -o-animation: titleScale 1s; + -ms-animation: titleScale 1s; + animation: titleScale 1s; +} +canvas:not(#ribbon-canvas), +#web_bg { + -webkit-animation: to_show 4s; + -moz-animation: to_show 4s; + -o-animation: to_show 4s; + -ms-animation: to_show 4s; + animation: to_show 4s; +} +#ribbon-canvas { + -webkit-animation: ribbon_to_show 4s; + -moz-animation: ribbon_to_show 4s; + -o-animation: ribbon_to_show 4s; + -ms-animation: ribbon_to_show 4s; + animation: ribbon_to_show 4s; +} +#sidebar-menus.open > :nth-child(1) { + -webkit-animation: sidebarItem 0.2s; + -moz-animation: sidebarItem 0.2s; + -o-animation: sidebarItem 0.2s; + -ms-animation: sidebarItem 0.2s; + animation: sidebarItem 0.2s; +} +#sidebar-menus.open > :nth-child(2) { + -webkit-animation: sidebarItem 0.4s; + -moz-animation: sidebarItem 0.4s; + -o-animation: sidebarItem 0.4s; + -ms-animation: sidebarItem 0.4s; + animation: sidebarItem 0.4s; +} +#sidebar-menus.open > :nth-child(3) { + -webkit-animation: sidebarItem 0.6s; + -moz-animation: sidebarItem 0.6s; + -o-animation: sidebarItem 0.6s; + -ms-animation: sidebarItem 0.6s; + animation: sidebarItem 0.6s; +} +#sidebar-menus.open > :nth-child(4) { + -webkit-animation: sidebarItem 0.8s; + -moz-animation: sidebarItem 0.8s; + -o-animation: sidebarItem 0.8s; + -ms-animation: sidebarItem 0.8s; + animation: sidebarItem 0.8s; +} +.scroll-down-effects { + -webkit-animation: scroll-down-effect 1.5s infinite; + -moz-animation: scroll-down-effect 1.5s infinite; + -o-animation: scroll-down-effect 1.5s infinite; + -ms-animation: scroll-down-effect 1.5s infinite; + animation: scroll-down-effect 1.5s infinite; +} +.reward-main { + -webkit-animation: donate_effcet 0.3s 0.1s ease both; + -moz-animation: donate_effcet 0.3s 0.1s ease both; + -o-animation: donate_effcet 0.3s 0.1s ease both; + -ms-animation: donate_effcet 0.3s 0.1s ease both; + animation: donate_effcet 0.3s 0.1s ease both; +} +.btn-effects, +.shuoshuo-navigation button:not(:disabled), +#aside-content .card-info #card-info-btn, +.post-reward .reward-button, +#rightside > div > button, +#rightside > div > a, +.container .btn-beautify, +.hide-inline > .hide-button, +.hide-block > .hide-button { + position: relative; + overflow: hidden; + -webkit-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.btn-effects:hover, +.shuoshuo-navigation button:not(:disabled):hover, +#aside-content .card-info #card-info-btn:hover, +.post-reward .reward-button:hover, +#rightside > div > button:hover, +#rightside > div > a:hover, +.container .btn-beautify:hover, +.hide-inline > .hide-button:hover, +.hide-block > .hide-button:hover { + -webkit-box-shadow: 0 4px 12px rgba(0,0,0,0.15); + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + text-decoration: none; + -webkit-transform: translateY(-1px) scale(1.02); + -moz-transform: translateY(-1px) scale(1.02); + -o-transform: translateY(-1px) scale(1.02); + -ms-transform: translateY(-1px) scale(1.02); + transform: translateY(-1px) scale(1.02); +} +.btn-effects:active, +.shuoshuo-navigation button:not(:disabled):active, +#aside-content .card-info #card-info-btn:active, +.post-reward .reward-button:active, +#rightside > div > button:active, +#rightside > div > a:active, +.container .btn-beautify:active, +.hide-inline > .hide-button:active, +.hide-block > .hide-button:active { + -webkit-transition-duration: 0.1s; + -moz-transition-duration: 0.1s; + -o-transition-duration: 0.1s; + -ms-transition-duration: 0.1s; + transition-duration: 0.1s; + -webkit-transform: translateY(0) scale(0.98); + -moz-transform: translateY(0) scale(0.98); + -o-transform: translateY(0) scale(0.98); + -ms-transform: translateY(0) scale(0.98); + transform: translateY(0) scale(0.98); +} +.btn-effects i, +.shuoshuo-navigation button:not(:disabled) i, +#aside-content .card-info #card-info-btn i, +.post-reward .reward-button i, +#rightside > div > button i, +#rightside > div > a i, +.container .btn-beautify i, +.hide-inline > .hide-button i, +.hide-block > .hide-button i { + display: inline-block; + vertical-align: middle; + -webkit-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-effects:hover i, +.shuoshuo-navigation button:not(:disabled):hover i, +#aside-content .card-info #card-info-btn:hover i, +.post-reward .reward-button:hover i, +#rightside > div > button:hover i, +#rightside > div > a:hover i, +.container .btn-beautify:hover i, +.hide-inline > .hide-button:hover i, +.hide-block > .hide-button:hover i { + -webkit-animation: buttonIconBounce 0.6s ease-in-out; + -moz-animation: buttonIconBounce 0.6s ease-in-out; + -o-animation: buttonIconBounce 0.6s ease-in-out; + -ms-animation: buttonIconBounce 0.6s ease-in-out; + animation: buttonIconBounce 0.6s ease-in-out; +} +.btn-effects i + span, +.shuoshuo-navigation button:not(:disabled) i + span, +#aside-content .card-info #card-info-btn i + span, +.post-reward .reward-button i + span, +#rightside > div > button i + span, +#rightside > div > a i + span, +.container .btn-beautify i + span, +.hide-inline > .hide-button i + span, +.hide-block > .hide-button i + span { + margin-left: 6px; + vertical-align: middle; + -webkit-transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-effects:hover i + span, +.shuoshuo-navigation button:not(:disabled):hover i + span, +#aside-content .card-info #card-info-btn:hover i + span, +.post-reward .reward-button:hover i + span, +#rightside > div > button:hover i + span, +#rightside > div > a:hover i + span, +.container .btn-beautify:hover i + span, +.hide-inline > .hide-button:hover i + span, +.hide-block > .hide-button:hover i + span { + margin-left: 8px; +} +.btn-effects::before, +.shuoshuo-navigation button:not(:disabled)::before, +#aside-content .card-info #card-info-btn::before, +.post-reward .reward-button::before, +#rightside > div > button::before, +#rightside > div > a::before, +.container .btn-beautify::before, +.hide-inline > .hide-button::before, +.hide-block > .hide-button::before { + position: absolute; + top: 0; + left: -100%; + z-index: 1; + width: 100%; + height: 100%; + background: -webkit-linear-gradient(0deg, transparent, rgba(255,255,255,0.2), transparent); + background: -moz-linear-gradient(0deg, transparent, rgba(255,255,255,0.2), transparent); + background: -o-linear-gradient(0deg, transparent, rgba(255,255,255,0.2), transparent); + background: -ms-linear-gradient(0deg, transparent, rgba(255,255,255,0.2), transparent); + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); + content: ''; + -webkit-transition: left 0.5s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: left 0.5s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: left 0.5s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: left 0.5s cubic-bezier(0.4, 0, 0.2, 1); + transition: left 0.5s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-effects:hover::before, +.shuoshuo-navigation button:not(:disabled):hover::before, +#aside-content .card-info #card-info-btn:hover::before, +.post-reward .reward-button:hover::before, +#rightside > div > button:hover::before, +#rightside > div > a:hover::before, +.container .btn-beautify:hover::before, +.hide-inline > .hide-button:hover::before, +.hide-block > .hide-button:hover::before { + left: 100%; +} +.btn-effects > *, +.shuoshuo-navigation button:not(:disabled) > *, +#aside-content .card-info #card-info-btn > *, +.post-reward .reward-button > *, +#rightside > div > button > *, +#rightside > div > a > *, +.container .btn-beautify > *, +.hide-inline > .hide-button > *, +.hide-block > .hide-button > * { + position: relative; + z-index: 2; +} +.btn-effects-large:hover, +.post-reward .reward-button:hover, +.container .btn-beautify.larger:hover { + -webkit-box-shadow: 0 6px 16px rgba(0,0,0,0.2); + box-shadow: 0 6px 16px rgba(0,0,0,0.2); + -webkit-transform: translateY(-2px) scale(1.03); + -moz-transform: translateY(-2px) scale(1.03); + -o-transform: translateY(-2px) scale(1.03); + -ms-transform: translateY(-2px) scale(1.03); + transform: translateY(-2px) scale(1.03); +} +@-moz-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-webkit-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-o-keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@keyframes scroll-down-effect { + 0% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } + 50% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -16px); + -moz-transform: translate(0, -16px); + -o-transform: translate(0, -16px); + -ms-transform: translate(0, -16px); + transform: translate(0, -16px); + } + 100% { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + } +} +@-moz-keyframes header-effect { + 0% { + -webkit-transform: translateY(-35px); + -moz-transform: translateY(-35px); + -o-transform: translateY(-35px); + -ms-transform: translateY(-35px); + transform: translateY(-35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes header-effect { + 0% { + -webkit-transform: translateY(-35px); + -moz-transform: translateY(-35px); + -o-transform: translateY(-35px); + -ms-transform: translateY(-35px); + transform: translateY(-35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes header-effect { + 0% { + -webkit-transform: translateY(-35px); + -moz-transform: translateY(-35px); + -o-transform: translateY(-35px); + -ms-transform: translateY(-35px); + transform: translateY(-35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes header-effect { + 0% { + -webkit-transform: translateY(-35px); + -moz-transform: translateY(-35px); + -o-transform: translateY(-35px); + -ms-transform: translateY(-35px); + transform: translateY(-35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bottom-top { + 0% { + -webkit-transform: translateY(35px); + -moz-transform: translateY(35px); + -o-transform: translateY(35px); + -ms-transform: translateY(35px); + transform: translateY(35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes bottom-top { + 0% { + -webkit-transform: translateY(35px); + -moz-transform: translateY(35px); + -o-transform: translateY(35px); + -ms-transform: translateY(35px); + transform: translateY(35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes bottom-top { + 0% { + -webkit-transform: translateY(35px); + -moz-transform: translateY(35px); + -o-transform: translateY(35px); + -ms-transform: translateY(35px); + transform: translateY(35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes bottom-top { + 0% { + -webkit-transform: translateY(35px); + -moz-transform: translateY(35px); + -o-transform: translateY(35px); + -ms-transform: translateY(35px); + transform: translateY(35px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes titleScale { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes search_close { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-moz-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-webkit-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-o-keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@keyframes to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + } +} +@-moz-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-webkit-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-o-keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@keyframes to_hide { + 0% { + opacity: 1; + -ms-filter: none; + filter: none; + } + 100% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } +} +@-moz-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-webkit-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-o-keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@keyframes ribbon_to_show { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + } + 100% { + opacity: 0.6; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; + filter: alpha(opacity=60); + } +} +@-moz-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes avatar_turn_around { + from { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes sub_menus { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes donate_effcet { + 0% { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -o-transform: translateY(-20px); + -ms-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes sidebarItem { + 0% { + -webkit-transform: translateX(200px); + -moz-transform: translateX(200px); + -o-transform: translateX(200px); + -ms-transform: translateX(200px); + transform: translateX(200px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes buttonIconBounce { + 0%, 100% { + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); + } + 25% { + -webkit-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -moz-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -o-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -ms-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + } + 50% { + -webkit-transform: translateY(0) scale(1.05) rotateZ(0); + -moz-transform: translateY(0) scale(1.05) rotateZ(0); + -o-transform: translateY(0) scale(1.05) rotateZ(0); + -ms-transform: translateY(0) scale(1.05) rotateZ(0); + transform: translateY(0) scale(1.05) rotateZ(0); + } + 75% { + -webkit-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -moz-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -o-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -ms-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + transform: translateY(-1px) scale(1.02) rotateZ(2deg); + } +} +@-webkit-keyframes buttonIconBounce { + 0%, 100% { + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); + } + 25% { + -webkit-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -moz-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -o-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -ms-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + } + 50% { + -webkit-transform: translateY(0) scale(1.05) rotateZ(0); + -moz-transform: translateY(0) scale(1.05) rotateZ(0); + -o-transform: translateY(0) scale(1.05) rotateZ(0); + -ms-transform: translateY(0) scale(1.05) rotateZ(0); + transform: translateY(0) scale(1.05) rotateZ(0); + } + 75% { + -webkit-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -moz-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -o-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -ms-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + transform: translateY(-1px) scale(1.02) rotateZ(2deg); + } +} +@-o-keyframes buttonIconBounce { + 0%, 100% { + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); + } + 25% { + -webkit-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -moz-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -o-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -ms-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + } + 50% { + -webkit-transform: translateY(0) scale(1.05) rotateZ(0); + -moz-transform: translateY(0) scale(1.05) rotateZ(0); + -o-transform: translateY(0) scale(1.05) rotateZ(0); + -ms-transform: translateY(0) scale(1.05) rotateZ(0); + transform: translateY(0) scale(1.05) rotateZ(0); + } + 75% { + -webkit-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -moz-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -o-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -ms-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + transform: translateY(-1px) scale(1.02) rotateZ(2deg); + } +} +@keyframes buttonIconBounce { + 0%, 100% { + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); + } + 25% { + -webkit-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -moz-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -o-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + -ms-transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + transform: translateY(-3px) scale(1.1) rotateZ(-5deg); + } + 50% { + -webkit-transform: translateY(0) scale(1.05) rotateZ(0); + -moz-transform: translateY(0) scale(1.05) rotateZ(0); + -o-transform: translateY(0) scale(1.05) rotateZ(0); + -ms-transform: translateY(0) scale(1.05) rotateZ(0); + transform: translateY(0) scale(1.05) rotateZ(0); + } + 75% { + -webkit-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -moz-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -o-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + -ms-transform: translateY(-1px) scale(1.02) rotateZ(2deg); + transform: translateY(-1px) scale(1.02) rotateZ(2deg); + } +} +:root { + --global-font-size: 14px; + --global-bg: #fff; + --font-color: #4c4948; + --hr-border: #d1ecf9; + --hr-before-color: #bee4f6; + --search-bg: #f6f8fa; + --search-input-color: #4c4948; + --search-a-color: #4c4948; + --preloader-bg: #37474f; + --preloader-color: #fff; + --tab-border-color: #f0f0f0; + --tab-button-bg: #f0f0f0; + --tab-button-color: #1f2d3d; + --tab-button-hover-bg: #dcdcdc; + --tab-button-active-bg: #fff; + --card-bg: #fff; + --card-meta: #858585; + --sidebar-bg: #f6f8fa; + --sidebar-menu-bg: #fff; + --btn-hover-color: #ff7d7d; + --btn-color: #fff; + --btn-bg: #57c0de; + --text-bg-hover: rgba(87,192,222,0.7); + --light-grey: #eee; + --dark-grey: #cacaca; + --white: #fff; + --text-highlight-color: #1f2d3d; + --blockquote-color: #6a737d; + --blockquote-bg: rgba(87,192,222,0.1); + --reward-pop: #f5f5f5; + --toc-link-color: #666261; + --card-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.05); + --card-hover-box-shadow: 0 3px 8px 6px rgba(7,17,27,0.09); + --pseudo-hover: #ff7d7d; + --headline-presudo: #a0a0a0; + --scrollbar-color: #57c0de; + --default-bg-color: #57c0de; + --zoom-bg: #fff; + --mark-bg: rgba(0,0,0,0.3); +} +:root { + --btn-color: #fff; + --btn-default-color: #777; + --tags-blue-color: #428bca; + --tags-blue-color-lighten: #e3eef7; + --tags-pink-color: #ff69b4; + --tags-pink-color-lighten: #ffe9f4; + --tags-red-color: #f00; + --tags-red-color-lighten: #ffd9d9; + --tags-orange-color: #ff8c00; + --tags-orange-color-lighten: #ffeed9; + --tags-purple-color: #6f42c1; + --tags-purple-color-lighten: #e9e3f6; + --tags-green-color: #5cb85c; + --tags-green-color-lighten: #e7f4e7; + --note-default-border: #777; + --note-default-bg: #f7f7f7; + --note-default-text: #777; + --note-modern-default-border: #e1e1e1; + --note-modern-default-bg: #f3f3f3; + --note-modern-default-text: #666; + --note-modern-default-hover: #454545; + --note-primary-border: #6f42c1; + --note-primary-bg: #f5f0fa; + --note-primary-text: #6f42c1; + --note-modern-primary-border: #e1c2ff; + --note-modern-primary-bg: #f3daff; + --note-modern-primary-text: #6f42c1; + --note-modern-primary-hover: #453298; + --note-info-border: #428bca; + --note-info-bg: #eef7fa; + --note-info-text: #428bca; + --note-modern-info-border: #b3e5ef; + --note-modern-info-bg: #d9edf7; + --note-modern-info-text: #31708f; + --note-modern-info-hover: #215761; + --note-success-border: #5cb85c; + --note-success-bg: #eff8f0; + --note-success-text: #5cb85c; + --note-modern-success-border: #d0e6be; + --note-modern-success-bg: #dff0d8; + --note-modern-success-text: #3c763d; + --note-modern-success-hover: #32562c; + --note-warning-border: #f0ad4e; + --note-warning-bg: #fdf8ea; + --note-warning-text: #f0ad4e; + --note-modern-warning-border: #fae4cd; + --note-modern-warning-bg: #fcf4e3; + --note-modern-warning-text: #8a6d3b; + --note-modern-warning-hover: #714f30; + --note-danger-border: #d9534f; + --note-danger-bg: #fcf1f2; + --note-danger-text: #d9534f; + --note-modern-danger-border: #ebcdd2; + --note-modern-danger-bg: #f2dfdf; + --note-modern-danger-text: #a94442; + --note-modern-danger-hover: #84333f; +} +body { + position: relative; + overflow-y: scroll; + min-height: 100%; + background: var(--global-bg); + color: var(--font-color); + font-size: var(--global-font-size); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Lato, Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; + line-height: 2; + -webkit-tap-highlight-color: rgba(0,0,0,0); + scroll-behavior: smooth; +} +@-moz-document url-prefix() { + * { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-color) transparent; + } +} +*::-webkit-scrollbar { + width: 5px; + height: 5px; +} +*::-webkit-scrollbar-thumb { + background: var(--scrollbar-color); +} +*::-webkit-scrollbar-track { + background-color: transparent; +} +input::placeholder { + color: var(--font-color); +} +#web_bg { + position: fixed; + z-index: -999; + width: 100%; + height: 100%; + background-attachment: local; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin: 20px 0 14px; + color: var(--text-highlight-color); + font-weight: bold; +} +h1 code, +h2 code, +h3 code, +h4 code, +h5 code, +h6 code { + font-size: inherit !important; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.table-wrap { + overflow-x: scroll; + margin: 0 0 20px; + border-radius: 5px; +} +.table-wrap table { + border-radius: 5px; +} +.table-wrap table thead > tr:first-child th:first-child { + border-top-left-radius: 5px; +} +.table-wrap table thead > tr:first-child th:last-child { + border-top-right-radius: 5px; +} +.table-wrap table tbody > tr:last-child td:first-child { + border-bottom-left-radius: 5px; +} +.table-wrap table tbody > tr:last-child td:last-child { + border-bottom-right-radius: 5px; +} +table { + display: table; + width: 100%; + border-spacing: 0; + border-collapse: separate; + border-top: 1px solid var(--light-grey); + border-left: 1px solid var(--light-grey); + empty-cells: show; +} +table thead { + background: rgba(153,169,191,0.1); +} +table th, +table td { + padding: 6px 12px; + border: 1px solid var(--light-grey); + border-top: none; + border-left: none; + vertical-align: middle; +} +*::selection { + background: #57c0de; + color: #f7f7f7; +} +button { + padding: 0; + outline: 0; + border: none; + background: none; + cursor: pointer; + touch-action: manipulation; +} +a { + color: #99a9bf; + text-decoration: none; + word-wrap: break-word; + -webkit-transition: all 0.2s; + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + -ms-transition: all 0.2s; + transition: all 0.2s; + overflow-wrap: break-word; +} +a:hover { + color: #57c0de; +} +.text-center { + text-align: center; +} +.text-right { + text-align: right; +} +img[src=''], +img:not([src]) { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +img[data-lazy-src]:not(.loaded) { + filter: blur(8px) brightness(1); +} +img[data-lazy-src].error { + filter: none; +} +.img-alt { + margin: -10px 0 10px; + color: #858585; +} +.img-alt:hover { + text-decoration: none !important; +} +blockquote { + margin: 0 0 20px; + padding: 7px 15px; + border-left: 4px solid #57c0de; + background-color: var(--blockquote-bg); + color: var(--blockquote-color); + border-radius: 6px; +} +blockquote footer cite:before { + padding: 0 5px; + content: '—'; +} +blockquote > :last-child { + margin-bottom: 0 !important; +} +.fa-fw { + width: 1.25em; + text-align: center; +} +:root { + --hl-color: #90a4ae; + --hl-bg: #f6f8fa; + --hltools-bg: #e6ebf1; + --hltools-color: #90a4ae; + --hlnumber-bg: #f6f8fa; + --hlnumber-color: rgba(144,164,174,0.5); + --hlscrollbar-bg: #dce4eb; + --hlexpand-bg: linear-gradient(180deg, rgba(246,248,250,0.6), rgba(246,248,250,0.9)); +} +[data-theme='dark'] { + --hl-color: rgba(255,255,255,0.7); + --hl-bg: #171717; + --hltools-bg: #1a1a1a; + --hltools-color: #90a4ae; + --hlnumber-bg: #171717; + --hlnumber-color: rgba(255,255,255,0.4); + --hlscrollbar-bg: #1f1f1f; + --hlexpand-bg: linear-gradient(180deg, rgba(23,23,23,0.6), rgba(23,23,23,0.9)); +} +@-moz-document url-prefix() { + scrollbar-color: var(--hlscrollbar-bg) transparent; +} +figure.highlight table::-webkit-scrollbar-thumb { + background: var(--hlscrollbar-bg); +} +figure.highlight pre .deletion { + color: #bf42bf; +} +figure.highlight pre .addition { + color: #105ede; +} +figure.highlight pre .meta { + color: #7c4dff; +} +figure.highlight pre .comment { + color: rgba(149,165,166,0.8); +} +figure.highlight pre .variable, +figure.highlight pre .attribute, +figure.highlight pre .regexp, +figure.highlight pre .ruby .constant, +figure.highlight pre .xml .tag .title, +figure.highlight pre .xml .pi, +figure.highlight pre .xml .doctype, +figure.highlight pre .html .doctype, +figure.highlight pre .css .id, +figure.highlight pre .tag .name, +figure.highlight pre .css .class, +figure.highlight pre .css .pseudo { + color: #e53935; +} +figure.highlight pre .tag { + color: #39adb5; +} +figure.highlight pre .number, +figure.highlight pre .preprocessor, +figure.highlight pre .literal, +figure.highlight pre .params, +figure.highlight pre .constant, +figure.highlight pre .command { + color: #f76d47; +} +figure.highlight pre .built_in { + color: #ffb62c; +} +figure.highlight pre .ruby .class .title, +figure.highlight pre .css .rules .attribute, +figure.highlight pre .string, +figure.highlight pre .value, +figure.highlight pre .inheritance, +figure.highlight pre .header, +figure.highlight pre .ruby .symbol, +figure.highlight pre .xml .cdata, +figure.highlight pre .special, +figure.highlight pre .number, +figure.highlight pre .formula { + color: #91b859; +} +figure.highlight pre .keyword, +figure.highlight pre .title, +figure.highlight pre .css .hexcolor { + color: #39adb5; +} +figure.highlight pre .function, +figure.highlight pre .python .decorator, +figure.highlight pre .python .title, +figure.highlight pre .ruby .function .title, +figure.highlight pre .ruby .title .keyword, +figure.highlight pre .perl .sub, +figure.highlight pre .javascript .title, +figure.highlight pre .coffeescript .title { + color: #6182b8; +} +figure.highlight pre .tag .attr, +figure.highlight pre .javascript .function { + color: #7c4dff; +} +.container figure.highlight .line.marked { + background-color: rgba(128,203,196,0.251); +} +.container figure.highlight table { + display: block; + overflow: auto; + border: none; +} +.container figure.highlight table td { + padding: 0; + border: none; +} +.container figure.highlight .gutter pre { + padding-right: 10px; + padding-left: 10px; + background-color: var(--hlnumber-bg); + color: var(--hlnumber-color); + text-align: right; +} +.container figure.highlight .code pre { + padding-right: 10px; + padding-left: 10px; + width: 100%; +} +.container pre, +.container figure.highlight { + overflow: auto; + margin: 0 0 20px; + padding: 0; + background: var(--hl-bg); + color: var(--hl-color); + line-height: 1.6; +} +.container pre, +.container code { + font-size: var(--global-font-size); + font-family: consolas, Menlo, monospace, 'PingFang SC', 'Microsoft YaHei', sans-serif !important; + border-radius: 6px; +} +.container code { + padding: 2px 5px; + background: rgba(27,31,35,0.05); + color: #f47466; +} +.container pre { + padding: 10px 20px; +} +.container pre code { + padding: 0; + background: none; + color: var(--hl-color); + text-shadow: none; +} +.container figure.highlight { + position: relative; + border-radius: 6px; +} +.container figure.highlight pre { + margin: 0; + padding: 8px 0; + border: none; +} +.container figure.highlight figcaption, +.container figure.highlight .caption { + padding: 6px 0 2px 14px; + font-size: var(--global-font-size); + line-height: 1em; +} +.container figure.highlight figcaption a, +.container figure.highlight .caption a { + float: right; + padding-right: 10px; + color: var(--hl-color); +} +.container figure.highlight figcaption a:hover, +.container figure.highlight .caption a:hover { + border-bottom-color: var(--hl-color); +} +.container figure.highlight.copy-true { + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; + -webkit-user-select: all; +} +.container figure.highlight.copy-true > table, +.container figure.highlight.copy-true > pre { + display: block !important; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.container .highlight-tools { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 8px; + min-height: 24px; + height: 2.15em; + background: var(--hltools-bg); + color: var(--hltools-color); + font-size: var(--global-font-size); + overflow: hidden; +} +.container .highlight-tools > * { + padding: 5px; +} +.container .highlight-tools i { + cursor: pointer; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.container .highlight-tools i:hover { + color: #57c0de; +} +.container .highlight-tools.closed ~ * { + display: none; +} +.container .highlight-tools.closed .expand { + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.container .highlight-tools > .macStyle { + padding: 0; +} +.container .highlight-tools .code-lang { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + text-transform: uppercase; + font-weight: bold; + font-size: 1.15em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + padding: 2px; +} +.container .highlight-tools .copy-notice { + padding-right: 2px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.4s; + -moz-transition: opacity 0.4s; + -o-transition: opacity 0.4s; + -ms-transition: opacity 0.4s; + transition: opacity 0.4s; +} +.container .highlight-tools .code-lang { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +.container .gutter { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; +} +.container .gist table { + width: auto; +} +.container .gist table td { + border: none; +} +.article-sort { + margin-left: 10px; + padding-left: 20px; + border-left: 2px solid #ace0ef; +} +.article-sort-title { + position: relative; + margin-left: 10px; + padding-bottom: 20px; + padding-left: 20px; + font-size: 1.72em; +} +.article-sort-title:hover:before { + border-color: var(--pseudo-hover); +} +.article-sort-title:before { + position: absolute; + top: calc(((100% - 36px) / 2)); + left: -9px; + z-index: 1; + width: 10px; + height: 10px; + border: 5px solid #57c0de; + border-radius: 10px; + background: var(--card-bg); + content: ''; + line-height: 10px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-title:after { + position: absolute; + bottom: 0; + left: 0; + z-index: 0; + width: 2px; + height: 1.5em; + background: #ace0ef; + content: ''; +} +.article-sort-item { + position: relative; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 0 0 20px 10px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-item:hover:before { + border-color: var(--pseudo-hover); +} +.article-sort-item:before { + position: absolute; + left: calc(-20px - 17px); + width: 6px; + height: 6px; + border: 3px solid #57c0de; + border-radius: 6px; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.article-sort-item.no-article-cover { + height: 80px; +} +.article-sort-item.no-article-cover .article-sort-item-info { + padding: 0; +} +.article-sort-item.year { + font-size: 1.43em; + margin-bottom: 10px; +} +.article-sort-item.year:hover:before { + border-color: #57c0de; +} +.article-sort-item.year:before { + border-color: var(--pseudo-hover); +} +.article-sort-item-time { + color: var(--card-meta); + font-size: 0.85em; +} +.article-sort-item-time time { + padding-left: 6px; + cursor: default; +} +.article-sort-item-title { + color: var(--font-color); + font-size: 1.05em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-line-clamp: 2; +} +.article-sort-item-title:hover { + color: #57c0de; + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -o-transform: translateX(10px); + -ms-transform: translateX(10px); + transform: translateX(10px); +} +.article-sort-item-img { + overflow: hidden; + width: 100px; + height: 70px; + border-radius: 6px; +} +@media screen and (max-width: 768px) { + .article-sort-item-img { + width: 70px; + height: 70px; + } +} +.article-sort-item-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding: 0 16px; +} +.category-lists .category-title { + font-size: 2.57em; +} +@media screen and (max-width: 768px) { + .category-lists .category-title { + font-size: 2em; + } +} +.category-lists .category-list { + margin-bottom: 0; +} +.category-lists .category-list a { + color: var(--font-color); +} +.category-lists .category-list a:hover { + color: #57c0de; +} +.category-lists .category-list .category-list-count { + margin-left: 8px; + color: var(--card-meta); +} +.category-lists .category-list .category-list-count:before { + content: '('; +} +.category-lists .category-list .category-list-count:after { + content: ')'; +} +.category-lists ul { + padding: 0 0 0 20px; +} +.category-lists ul ul { + padding-left: 4px; +} +.category-lists ul li { + position: relative; + margin: 6px 0; + padding: 0.12em 0.4em 0.12em 1.4em; +} +#body-wrap { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100vh; +} +.layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + margin: 0 auto; + padding: 40px 15px; + max-width: 1200px; + width: 100%; +} +@media screen and (max-width: 900px) { + .layout { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +@media screen and (max-width: 768px) { + .layout { + padding: 20px 5px; + } +} +@media screen and (min-width: 2000px) { + .layout { + max-width: 60%; + } +} +.layout > div:first-child:not(.nc) { + -webkit-align-self: flex-start; + align-self: flex-start; + -ms-flex-item-align: start; + padding: 50px 40px; +} +@media screen and (max-width: 768px) { + .layout > div:first-child:not(.nc) { + padding: 36px 14px; + } +} +.layout > div:first-child { + width: 74%; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +@media screen and (max-width: 900px) { + .layout > div:first-child { + width: 100% !important; + } +} +.layout.hide-aside { + max-width: 1000px; +} +@media screen and (min-width: 2000px) { + .layout.hide-aside { + max-width: 1300px; + } +} +.layout.hide-aside > div { + width: 100% !important; +} +.apple #page-header.full_page { + background-attachment: scroll !important; +} +.apple .recent-post-item, +.apple .avatar-img, +.apple .flink-item-icon { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +.container .flink { + margin-bottom: 20px; +} +.container .flink .flink-list { + overflow: auto; + padding: 10px 10px 0; + text-align: center; +} +.container .flink .flink-list > .flink-list-item { + position: relative; + float: left; + overflow: hidden; + margin: 15px 7px; + width: calc(100% / 3 - 15px); + height: 90px; + line-height: 17px; + -webkit-transform: translateZ(0); + border-radius: 8px; +} +@media screen and (max-width: 1024px) { + .container .flink .flink-list > .flink-list-item { + width: calc(50% - 15px) !important; + } +} +@media screen and (max-width: 600px) { + .container .flink .flink-list > .flink-list-item { + width: calc(100% - 15px) !important; + } +} +.container .flink .flink-list > .flink-list-item:hover .flink-item-icon { + margin-left: -10px; + width: 0; +} +.container .flink .flink-list > .flink-list-item:before { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + background: var(--text-bg-hover); + content: ''; + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + -ms-transition: -ms-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); +} +.container .flink .flink-list > .flink-list-item:hover:before, +.container .flink .flink-list > .flink-list-item:focus:before, +.container .flink .flink-list > .flink-list-item:active:before { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} +.container .flink .flink-list > .flink-list-item a { + color: var(--font-color); + text-decoration: none; +} +.container .flink .flink-list > .flink-list-item a .flink-item-icon { + float: left; + overflow: hidden; + margin: 15px 10px; + width: 60px; + height: 60px; + border-radius: 7px; + -webkit-transition: width 0.3s ease-out; + -moz-transition: width 0.3s ease-out; + -o-transition: width 0.3s ease-out; + -ms-transition: width 0.3s ease-out; + transition: width 0.3s ease-out; +} +.container .flink .flink-list > .flink-list-item a .flink-item-icon img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +.container .flink .flink-list > .flink-list-item a .img-alt { + display: none; +} +.container .flink .flink-item-name { + padding: 16px 10px 0 0; + height: 40px; + font-weight: bold; + font-size: 1.43em; +} +.container .flink .flink-item-desc { + padding: 16px 10px 16px 0; + height: 50px; + font-size: 0.93em; +} +.container .flink .flink-name { + margin-bottom: 5px; + font-weight: bold; + font-size: 1.5em; +} +#recent-posts .recent-post-item { + position: relative; + overflow: hidden; + margin-bottom: 20px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + height: 16.8em; +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + height: auto; + } +} +@media screen and (min-width: 2000px) { + #recent-posts .recent-post-item { + height: 18.8em; + } +} +#recent-posts .recent-post-item:hover .post-bg { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); +} +#recent-posts .recent-post-item.ads-wrap { + display: block !important; + height: auto !important; +} +#recent-posts .recent-post-item .post_cover { + overflow: hidden; + width: 42%; + height: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item .post_cover { + width: 100%; + height: 230px; + } +} +#recent-posts .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 1; + -moz-box-ordinal-group: 1; + -o-box-ordinal-group: 1; + -ms-flex-order: 1; + -webkit-order: 1; + order: 1; +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item .post_cover.right { + -webkit-box-ordinal-group: 0; + -moz-box-ordinal-group: 0; + -o-box-ordinal-group: 0; + -ms-flex-order: 0; + -webkit-order: 0; + order: 0; + } +} +#recent-posts .recent-post-item .post_cover .post-bg { + z-index: -4; +} +#recent-posts .recent-post-item >.recent-post-info { + padding: 0 40px; + width: 58%; +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item >.recent-post-info { + padding: 20px 20px 30px; + width: 100%; + } +} +#recent-posts .recent-post-item >.recent-post-info.no-cover { + width: 100%; +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item >.recent-post-info.no-cover { + padding: 30px 20px; + } +} +#recent-posts .recent-post-item >.recent-post-info > .article-title { + color: var(--text-highlight-color); + font-size: 1.55em; + line-height: 1.4; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + -webkit-line-clamp: 2; +} +#recent-posts .recent-post-item >.recent-post-info > .article-title .sticky { + margin-right: 10px; + color: #ff7242; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} +@media screen and (max-width: 768px) { + #recent-posts .recent-post-item >.recent-post-info > .article-title { + font-size: 1.43em; + } +} +#recent-posts .recent-post-item >.recent-post-info > .article-title:hover { + color: #57c0de; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap { + margin: 6px 0; + color: var(--card-meta); + font-size: 0.9em; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap > .post-meta-date { + cursor: default; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap i { + margin: 0 4px 0 0; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap .fa-spinner { + margin: 0; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-label { + padding-right: 4px; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-separator { + margin: 0 6px; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap .article-meta-link { + margin: 0 4px; +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap a { + color: var(--card-meta); +} +#recent-posts .recent-post-item >.recent-post-info > .article-meta-wrap a:hover { + color: #57c0de; + text-decoration: underline; +} +#recent-posts .recent-post-item >.recent-post-info > .content { + -webkit-line-clamp: 2; + word-break: break-word; +} +#article-container .shuoshuo-item { + margin-bottom: 20px; + padding: 35px 30px 30px; +} +@media screen and (max-width: 768px) { + #article-container .shuoshuo-item { + padding: 25px 20px 20px; + } +} +#article-container .shuoshuo-item-header { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + cursor: default; +} +#article-container .shuoshuo-avatar { + overflow: hidden; + width: 40px; + height: 40px; + border-radius: 40px; +} +#article-container .shuoshuo-avatar img { + margin: 0; + width: 100%; + height: 100%; +} +#article-container .shuoshuo-info { + margin-left: 10px; + line-height: 1.5; +} +#article-container .shuoshuo-date { + color: #858585; + font-size: 0.8em; +} +#article-container .shuoshuo-content { + padding: 15px 0 10px; +} +#article-container .shuoshuo-content > *:last-child { + margin-bottom: 0; +} +#article-container .shuoshuo-footer { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} +#article-container .shuoshuo-footer.flex-between { + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; +} +#article-container .shuoshuo-footer.flex-end { + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} +#article-container .shuoshuo-footer .shuoshuo-tag { + display: inline-block; + margin-right: 8px; + padding: 0 8px; + width: fit-content; + border: 1px solid #57c0de; + border-radius: 12px; + color: #57c0de; + font-size: 0.85em; + cursor: default; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#article-container .shuoshuo-footer .shuoshuo-tag:hover { + background: #57c0de; + color: var(--white); +} +#article-container .shuoshuo-footer .shuoshuo-comment-btn { + padding: 2px; + color: #90a4ae; + cursor: pointer; +} +#article-container .shuoshuo-footer .shuoshuo-comment-btn:hover { + color: #57c0de; +} +#article-container .shuoshuo-comment { + padding-top: 10px; +} +#article-container .shuoshuo-comment.no-comment { + display: none; +} +.shuoshuo-navigation { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-top: 20px; + padding: 20px 0; +/* 震動動畫 */ +} +.shuoshuo-navigation button { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 2.7em; + height: 2.7em; + background-color: var(--btn-bg); + color: var(--btn-color); + font-size: 0.9em; + line-height: 2.5em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + border-radius: 6px; +} +.shuoshuo-navigation button:hover:not(:disabled) { + background-color: var(--btn-hover-color); +} +.shuoshuo-navigation button:disabled { + background: #f5f5f5; + color: #ccc; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + cursor: not-allowed; +} +.shuoshuo-navigation .shuoshuo-page-info { + margin: 0 15px; + color: #858585; + white-space: nowrap; + font-size: 0.9em; +} +.shuoshuo-navigation .shuoshuo-page-input { + margin-right: 12px; + padding: 0 15px; + height: 2.7em; + border: 1px solid var(--btn-bg); + background: var(--card-bg); + color: #858585; + text-align: center; + font-size: 0.9em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + border-radius: 6px; +/* 隱藏 number 輸入框的上下箭頭 */ +/* Firefox */ + -moz-appearance: textfield; +/* 當作為頁碼按鈕時的樣式 */ +/* 超出範圍時的紅色樣式 */ +} +.shuoshuo-navigation .shuoshuo-page-input:focus { + outline: none; + border-width: 2px; +} +.shuoshuo-navigation .shuoshuo-page-input:focus::placeholder { + color: transparent; +} +.shuoshuo-navigation .shuoshuo-page-input::-webkit-outer-spin-button, +.shuoshuo-navigation .shuoshuo-page-input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; +} +.shuoshuo-navigation .shuoshuo-page-input.shuoshuo-page-num { + min-width: 40px; + width: 40px; + border: none; + background: #57c0de; + color: var(--white); + font-weight: 500; + cursor: text; +} +.shuoshuo-navigation .shuoshuo-page-input.shuoshuo-page-num:focus { + border: 1px solid #57c0de; + background: var(--white); + color: #333; +} +.shuoshuo-navigation .shuoshuo-page-input.invalid { + border-color: #ff4757; + background-color: #ffeaea; + color: #ff4757; + -webkit-animation: shake 0.5s ease-in-out; + -moz-animation: shake 0.5s ease-in-out; + -o-animation: shake 0.5s ease-in-out; + -ms-animation: shake 0.5s ease-in-out; + animation: shake 0.5s ease-in-out; +} +@-moz-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-2px); + -moz-transform: translateX(-2px); + -o-transform: translateX(-2px); + -ms-transform: translateX(-2px); + transform: translateX(-2px); + } + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(2px); + -moz-transform: translateX(2px); + -o-transform: translateX(2px); + -ms-transform: translateX(2px); + transform: translateX(2px); + } +} +@-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-2px); + -moz-transform: translateX(-2px); + -o-transform: translateX(-2px); + -ms-transform: translateX(-2px); + transform: translateX(-2px); + } + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(2px); + -moz-transform: translateX(2px); + -o-transform: translateX(2px); + -ms-transform: translateX(2px); + transform: translateX(2px); + } +} +@-o-keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-2px); + -moz-transform: translateX(-2px); + -o-transform: translateX(-2px); + -ms-transform: translateX(-2px); + transform: translateX(-2px); + } + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(2px); + -moz-transform: translateX(2px); + -o-transform: translateX(2px); + -ms-transform: translateX(2px); + transform: translateX(2px); + } +} +@keyframes shake { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translateX(-2px); + -moz-transform: translateX(-2px); + -o-transform: translateX(-2px); + -ms-transform: translateX(-2px); + transform: translateX(-2px); + } + 20%, 40%, 60%, 80% { + -webkit-transform: translateX(2px); + -moz-transform: translateX(2px); + -o-transform: translateX(2px); + -ms-transform: translateX(2px); + transform: translateX(2px); + } +} +.tag-cloud-list { + -webkit-animation: tagsFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -moz-animation: tagsFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -o-animation: tagsFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -ms-animation: tagsFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1); + animation: tagsFadeIn 0.6s cubic-bezier(0.4, 0, 0.2, 1); +} +.tag-cloud-list:hover a:not(:hover) { + opacity: 0.7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + -webkit-transform: scale(0.98); + -moz-transform: scale(0.98); + -o-transform: scale(0.98); + -ms-transform: scale(0.98); + transform: scale(0.98); +} +.tag-cloud-list a { + position: relative; + display: inline-block; + margin: 5px; + padding: 3px 12px; + line-height: 1.7; + -webkit-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 7px; + overflow: hidden; + color: #fff; + -webkit-transform: translateY(0) scale(1); + -moz-transform: translateY(0) scale(1); + -o-transform: translateY(0) scale(1); + -ms-transform: translateY(0) scale(1); + transform: translateY(0) scale(1); + will-change: transform, background-color, box-shadow; +} +.tag-cloud-list a::before { + position: absolute; + top: 0; + left: -100%; + z-index: -1; + width: 100%; + height: 100%; + background: -webkit-linear-gradient(0deg, transparent, rgba(255,255,255,0.1), transparent); + background: -moz-linear-gradient(0deg, transparent, rgba(255,255,255,0.1), transparent); + background: -o-linear-gradient(0deg, transparent, rgba(255,255,255,0.1), transparent); + background: -ms-linear-gradient(0deg, transparent, rgba(255,255,255,0.1), transparent); + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); + content: ''; + -webkit-transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1); + transition: left 0.6s cubic-bezier(0.4, 0, 0.2, 1); +} +.tag-cloud-list a:hover { + background: var(--btn-hover-color) !important; + -webkit-box-shadow: 0 6px 20px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.08), 0 0 0 1px rgba(255,255,255,0.05); + box-shadow: 0 6px 20px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.08), 0 0 0 1px rgba(255,255,255,0.05); + color: var(--btn-color) !important; + -webkit-transform: translateY(-2px) scale(1.02); + -moz-transform: translateY(-2px) scale(1.02); + -o-transform: translateY(-2px) scale(1.02); + -ms-transform: translateY(-2px) scale(1.02); + transform: translateY(-2px) scale(1.02); +} +.tag-cloud-list a:hover::before { + left: 100%; +} +.tag-cloud-list a:active { + -webkit-box-shadow: 0 3px 8px rgba(0,0,0,0.15), 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 3px 8px rgba(0,0,0,0.15), 0 1px 3px rgba(0,0,0,0.1); + -webkit-transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transform: translateY(-1px) scale(0.98); + -moz-transform: translateY(-1px) scale(0.98); + -o-transform: translateY(-1px) scale(0.98); + -ms-transform: translateY(-1px) scale(0.98); + transform: translateY(-1px) scale(0.98); +} +@media screen and (max-width: 768px) { + .tag-cloud-list a { + zoom: 0.85; + } + .tag-cloud-list a:hover { + -webkit-transform: translateY(-1px) scale(1.01); + -moz-transform: translateY(-1px) scale(1.01); + -o-transform: translateY(-1px) scale(1.01); + -ms-transform: translateY(-1px) scale(1.01); + transform: translateY(-1px) scale(1.01); + } + .tag-cloud-list a:active { + -webkit-transform: translateY(0) scale(0.99); + -moz-transform: translateY(0) scale(0.99); + -o-transform: translateY(0) scale(0.99); + -ms-transform: translateY(0) scale(0.99); + transform: translateY(0) scale(0.99); + } + .tag-cloud-list a::before { + display: none; + } +} +.tag-cloud-title { + font-size: 2.57em; + -webkit-animation: titleSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1); + -moz-animation: titleSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1); + -o-animation: titleSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1); + -ms-animation: titleSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1); + animation: titleSlideIn 0.8s cubic-bezier(0.4, 0, 0.2, 1); +} +@media screen and (max-width: 768px) { + .tag-cloud-title { + font-size: 2em; + } +} +.page-title + .tag-cloud-list { + text-align: left; +} +@-moz-keyframes tagsFadeIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes tagsFadeIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes tagsFadeIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes tagsFadeIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -o-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes titleSlideIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -o-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes titleSlideIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -o-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes titleSlideIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -o-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes titleSlideIn { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -o-transform: translateX(-30px); + -ms-transform: translateX(-30px); + transform: translateX(-30px); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} +#aside-content { + width: 26%; +} +@media screen and (min-width: 900px) { + #aside-content { + padding-left: 15px; + } +} +@media screen and (max-width: 900px) { + #aside-content { + margin-top: 20px; + width: 100%; + } +} +#aside-content .card-widget { + position: relative; + overflow: hidden; + margin-bottom: 20px; + padding: 20px 24px; +} +#aside-content .card-info .author-info-name { + font-weight: 500; + font-size: 1.57em; +} +#aside-content .card-info .author-info-description { + margin-top: -0.42em; +} +#aside-content .card-info .site-data { + margin: 14px 0 4px; +} +#aside-content .card-info .card-info-social-icons { + margin: 6px 0 -6px; +} +#aside-content .card-info .card-info-social-icons .social-icon { + margin: 0 10px; + color: var(--font-color); + font-size: 1.4em; +} +#aside-content .card-info .card-info-social-icons i { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#aside-content .card-info .card-info-social-icons i:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#aside-content .card-info #card-info-btn { + display: block; + margin-top: 14px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + line-height: 2.4; + border-radius: 7px; +} +#aside-content .card-info #card-info-btn:hover { + background-color: var(--btn-hover-color); +} +#aside-content .card-info #card-info-btn span { + padding-left: 10px; +} +#aside-content .item-headline { + padding-bottom: 6px; + font-size: 1.2em; +} +#aside-content .item-headline span { + margin-left: 6px; +} +@media screen and (min-width: 900px) { + #aside-content .sticky_layout { + position: sticky; + position: -webkit-sticky; + top: 20px; + -webkit-transition: top 0.3s; + -moz-transition: top 0.3s; + -o-transition: top 0.3s; + -ms-transition: top 0.3s; + transition: top 0.3s; + } +} +#aside-content .card-tag-cloud a { + display: inline-block; + padding: 0 4px; + line-height: 1.8; +} +#aside-content .card-tag-cloud a:hover { + color: #57c0de !important; +} +#aside-content .aside-list > span { + display: block; + margin-bottom: 10px; + text-align: center; +} +#aside-content .aside-list > .aside-list-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 6px 0; +} +#aside-content .aside-list > .aside-list-item:first-child { + padding-top: 0; +} +#aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed #f5f5f5; +} +#aside-content .aside-list > .aside-list-item:last-child { + padding-bottom: 0; +} +#aside-content .aside-list > .aside-list-item .thumbnail { + overflow: hidden; + width: 4em; + height: 4em; + border-radius: 6px; +} +#aside-content .aside-list > .aside-list-item .content { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-left: 10px; + word-break: break-all; +} +#aside-content .aside-list > .aside-list-item .content > .name { + -webkit-line-clamp: 1; +} +#aside-content .aside-list > .aside-list-item .content > time, +#aside-content .aside-list > .aside-list-item .content > .name { + display: block; + color: var(--card-meta); + font-size: 0.85em; +} +#aside-content .aside-list > .aside-list-item .content > .title, +#aside-content .aside-list > .aside-list-item .content > .comment { + color: var(--font-color); + line-height: 1.5; + -webkit-line-clamp: 2; +} +#aside-content .aside-list > .aside-list-item .content > .title:hover, +#aside-content .aside-list > .aside-list-item .content > .comment:hover { + color: #57c0de; +} +#aside-content .aside-list > .aside-list-item.no-cover { + min-height: 4.4em; +} +#aside-content .card-archives ul.card-archive-list, +#aside-content .card-categories ul.card-category-list { + margin: 0; + padding: 0; + list-style: none; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + margin: 2px 0; + padding: 2px 8px; + color: var(--font-color); + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + border-radius: 6px; +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a:hover, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a:hover { + padding: 2px 12px; + background-color: var(--text-bg-hover); + color: var(--white); +} +#aside-content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, +#aside-content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; +} +#aside-content .card-categories .card-category-list.child { + padding: 0 0 0 16px; + overflow: hidden; + max-height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + visibility: hidden; + -webkit-transition: max-height 0.3s ease, opacity 0.3s ease; + -moz-transition: max-height 0.3s ease, opacity 0.3s ease; + -o-transition: max-height 0.3s ease, opacity 0.3s ease; + -ms-transition: max-height 0.3s ease, opacity 0.3s ease; + transition: max-height 0.3s ease, opacity 0.3s ease; +} +#aside-content .card-categories .card-category-list > .parent > a.expand i { + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + transform: rotate(-90deg); +} +#aside-content .card-categories .card-category-list > .parent > a.expand + .child { + max-height: 1000px; + opacity: 1; + -ms-filter: none; + filter: none; + visibility: visible; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-name { + width: 70% !important; +} +#aside-content .card-categories .card-category-list > .parent > a .card-category-list-count { + width: calc(100% - 70% - 20px); + text-align: right; +} +#aside-content .card-categories .card-category-list > .parent > a i { + float: right; + margin-right: -0.5em; + padding: 0.5em; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +#aside-content .card-webinfo .webinfo .webinfo-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 2px 10px 0; +} +#aside-content .card-webinfo .webinfo .webinfo-item div:first-child { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + padding-right: 20px; +} +@media screen and (min-width: 901px) { + #aside-content #card-toc { + right: 0 !important; + } +} +@media screen and (max-width: 900px) { + #aside-content #card-toc { + position: fixed; + right: 55px; + bottom: 30px; + z-index: 100; + max-width: 380px; + max-height: calc(100% - 60px); + width: calc(100% - 80px); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + -ms-transition: none; + transition: none; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -o-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: right bottom; + -moz-transform-origin: right bottom; + -o-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + } + #aside-content #card-toc.open { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +#aside-content #card-toc .toc-percentage { + float: right; + margin-top: -9px; + color: #a9a9a9; + font-style: italic; + font-size: 140%; +} +#aside-content #card-toc .toc-content { + overflow-y: scroll; + overflow-y: overlay; + margin: 0 -24px; + max-height: calc(100vh - 120px); + width: calc(100% + 48px); +} +@media screen and (max-width: 900px) { + #aside-content #card-toc .toc-content { + max-height: calc(100vh - 140px); + } +} +#aside-content #card-toc .toc-content > * { + margin: 0 20px !important; +} +#aside-content #card-toc .toc-content > * > .toc-item > .toc-child { + margin-left: 10px; + padding-left: 10px; + border-left: 1px solid var(--dark-grey); +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: none; +} +@media screen and (max-width: 900px) { + #aside-content #card-toc .toc-content:not(.is-expand) .toc-child { + display: block !important; + } +} +#aside-content #card-toc .toc-content:not(.is-expand) .toc-item.active .toc-child { + display: block; +} +#aside-content #card-toc .toc-content ol, +#aside-content #card-toc .toc-content li { + list-style: none; +} +#aside-content #card-toc .toc-content > ol { + padding: 0 !important; +} +#aside-content #card-toc .toc-content ol { + margin: 0; + padding-left: 18px; +} +#aside-content #card-toc .toc-content .toc-link { + display: block; + margin: 4px 0; + padding: 1px 8px; + color: var(--toc-link-color); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + border-radius: 6px; +} +#aside-content #card-toc .toc-content .toc-link:hover { + color: #57c0de; +} +#aside-content #card-toc .toc-content .toc-link.active { + background: #57c0de; + color: #fff; +} +#aside-content .sticky_layout:only-child > :first-child { + margin-top: 0; +} +#aside-content .card-more-btn { + float: right; + color: inherit; +} +#aside-content .card-more-btn:hover { + -webkit-animation: more-btn-move 1s infinite; + -moz-animation: more-btn-move 1s infinite; + -o-animation: more-btn-move 1s infinite; + -ms-animation: more-btn-move 1s infinite; + animation: more-btn-move 1s infinite; +} +#aside-content .card-announcement .item-headline i { + color: #f00; +} +.avatar-img { + overflow: hidden; + margin: 0 auto; + width: 110px; + height: 110px; + border-radius: 70px; +} +.avatar-img img { + width: 100%; + height: 100%; + -webkit-transition: filter 375ms ease-in 0.2s, -webkit-transform 0.3s; + -moz-transition: filter 375ms ease-in 0.2s, -moz-transform 0.3s; + -o-transition: filter 375ms ease-in 0.2s, -o-transform 0.3s; + -ms-transition: filter 375ms ease-in 0.2s, -ms-transform 0.3s; + transition: filter 375ms ease-in 0.2s, transform 0.3s; + object-fit: cover; +} +.avatar-img img:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +.site-data { + display: table; + width: 100%; + table-layout: fixed; +} +.site-data > a { + display: table-cell; +} +.site-data > a div { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.site-data > a:hover div { + color: #57c0de !important; +} +.site-data > a .headline { + color: var(--font-color); + font-size: 0.95em; +} +.site-data > a .length-num { + margin-top: -0.45em; + color: var(--text-highlight-color); + font-size: 1.2em; +} +@media screen and (min-width: 900px) { + html.hide-aside .layout { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + html.hide-aside .layout > .aside-content { + display: none; + } + html.hide-aside .layout > div:first-child { + width: 80%; + } +} +.page .sticky_layout { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} +@-moz-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-webkit-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-o-keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@keyframes more-btn-move { + 0%, 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -o-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + 50% { + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); + } +} +@-moz-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes toc-open { + 0% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } + 100% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-moz-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-webkit-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@-o-keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +@keyframes toc-close { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.7); + -moz-transform: scale(0.7); + -o-transform: scale(0.7); + -ms-transform: scale(0.7); + transform: scale(0.7); + } +} +#post-comment .comment-head { + margin-bottom: 20px; +} +#post-comment .comment-head:after { + display: block; + clear: both; + content: ''; +} +#post-comment .comment-head .comment-headline { + display: inline-block; + vertical-align: middle; + font-weight: 700; + font-size: 1.43em; +} +#post-comment .comment-head .comment-switch { + display: inline-block; + float: right; + margin: 2px auto 0; + padding: 4px 16px; + width: max-content; + border-radius: 8px; + background: #f6f8fa; +} +#post-comment .comment-head .comment-switch .first-comment { + color: #49b1f5; +} +#post-comment .comment-head .comment-switch .second-comment { + color: #ff7242; +} +#post-comment .comment-head .comment-switch #switch-btn { + position: relative; + display: inline-block; + margin: -4px 8px 0; + width: 42px; + height: 22px; + border-radius: 34px; + background-color: #49b1f5; + vertical-align: middle; + cursor: pointer; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-head .comment-switch #switch-btn:before { + position: absolute; + bottom: 4px; + left: 4px; + width: 14px; + height: 14px; + border-radius: 50%; + background-color: #fff; + content: ''; + -webkit-transition: 0.4s; + -moz-transition: 0.4s; + -o-transition: 0.4s; + -ms-transition: 0.4s; + transition: 0.4s; +} +#post-comment .comment-wrap > div { + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +#post-comment .comment-wrap > div:nth-child(2) { + display: none; +} +#post-comment.move #switch-btn { + background-color: #ff7242; +} +#post-comment.move #switch-btn:before { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -o-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px); +} +#post-comment.move .comment-wrap > div:first-child { + display: none; +} +#post-comment.move .comment-wrap > div:last-child { + display: block; +} +#footer { + position: relative; + background-color: transparent; + background-attachment: scroll; + background-position: bottom; + background-size: cover; +} +#footer:before { + position: absolute; + width: 100%; + height: 100%; + background-color: var(--mark-bg); + content: ''; +} +#footer > * { + position: relative; + color: var(--light-grey); +} +#footer a { + color: var(--light-grey); + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#footer a:hover { + color: #57c0de; +} +#footer .footer-separator { + margin: 0 4px; +} +#footer .icp-icon { + padding: 0 4px; + max-height: 1.4em; + width: auto; + vertical-align: text-bottom; +} +#footer .footer-flex { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -o-box-orient: horizontal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + margin: 0 auto; + padding: 40px 60px; + max-width: 1200px; + width: 100%; + text-align: left; + gap: 13px; +} +@media screen and (max-width: 768px) { + #footer .footer-flex { + padding: 30px; + gap: 10px; + } +} +#footer .footer-flex .footer-flex-items { + -webkit-flex-shrink: 0; + flex-shrink: 0; + min-width: 100px; + text-align: left; + white-space: nowrap; +} +#footer .footer-flex .footer-flex-title { + margin-bottom: 5px; + white-space: nowrap; + font-weight: 600; + font-size: 1.4em; +} +#footer .footer-flex .footer-flex-item { + margin: 10px 0; + white-space: nowrap; +} +#footer .footer-flex a { + display: block; + white-space: nowrap; +} +#footer .footer-other { + padding: 40px 20px; + width: 100%; + text-align: center; +} +#footer .footer-other .framework-info { + display: block; +} +#page-header { + position: relative; + width: 100%; + background-color: #57c0de; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#page-header:not(.not-top-img):before { + position: absolute; + width: 100%; + height: 100%; + background-color: var(--mark-bg); + content: ''; +} +#page-header.full_page { + height: 100vh; + background-attachment: fixed; +} +#page-header.full_page #site-info { + position: absolute; + top: 43%; + padding: 0 10px; + width: 100%; +} +#page-header #site-title, +#page-header #site-subtitle, +#page-header #scroll-down .scroll-down-effects { + text-align: center; + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + line-height: 1.5; +} +#page-header #site-title { + margin: 0; + color: var(--white); + font-size: 1.85em; +} +@media screen and (min-width: 768px) { + #page-header #site-title { + font-size: 2.85em; + } +} +#page-header #site-subtitle { + color: var(--light-grey); + font-size: 1.15em; +} +@media screen and (min-width: 768px) { + #page-header #site-subtitle { + font-size: 1.72em; + } +} +#page-header #site_social_icons { + display: none; + margin: 0 auto; + text-align: center; +} +@media screen and (max-width: 768px) { + #page-header #site_social_icons { + display: block; + } +} +#page-header #site_social_icons .social-icon { + margin: 0 10px; + color: var(--light-grey); + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-size: 1.43em; +} +#page-header #scroll-down { + position: absolute; + bottom: 10px; + width: 100%; + cursor: pointer; +} +#page-header #scroll-down .scroll-down-effects { + position: relative; + width: 100%; + color: var(--light-grey); + font-size: 20px; +} +#page-header.not-home-page { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.not-home-page { + height: 280px; + } +} +#page-header #page-site-info { + position: absolute; + top: 200px; + padding: 0 10px; + width: 100%; +} +@media screen and (max-width: 768px) { + #page-header #page-site-info { + top: 140px; + } +} +#page-header.post-bg { + height: 400px; +} +@media screen and (max-width: 768px) { + #page-header.post-bg { + height: 360px; + } +} +#page-header #post-info { + position: absolute; + width: 100%; + bottom: 30px; +} +#page-header #post-info > * { + margin: 0 auto; + padding: 0 15px; + max-width: 1200px; +} +@media screen and (min-width: 768px) and (max-width: 1300px) { + #page-header #post-info > * { + padding: 0 30px; + } +} +@media screen and (min-width: 2000px) { + #page-header #post-info > * { + max-width: 70%; + } +} +#page-header.not-top-img { + margin-bottom: 10px; + height: 60px; + background: 0; +} +#page-header.not-top-img .title-seo { + display: none; +} +#page-header.not-top-img #nav { + background: rgba(255,255,255,0.8); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); +} +#page-header.not-top-img #nav a, +#page-header.not-top-img #nav span.site-page, +#page-header.not-top-img #nav .site-name { + color: var(--font-color); + text-shadow: none; +} +#page-header.nav-fixed #nav { + position: fixed; + top: -60px; + z-index: 91; + background: rgba(255,255,255,0.7); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0.6); + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -o-transition: -o-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + -ms-transition: -ms-transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out; + will-change: transform; + backdrop-filter: blur(7px); +} +#page-header.nav-fixed #nav #blog-info { + color: var(--font-color); +} +#page-header.nav-fixed #nav #blog-info:hover { + color: #57c0de; +} +#page-header.nav-fixed #nav #blog-info .site-name { + text-shadow: none; +} +#page-header.nav-fixed #nav #blog-info > a:first-child { + display: none; +} +#page-header.nav-fixed #nav #blog-info > a:last-child { + display: inline; +} +#page-header.nav-fixed #nav a, +#page-header.nav-fixed #nav span.site-page, +#page-header.nav-fixed #nav #toggle-menu { + color: var(--font-color); + text-shadow: none; +} +#page-header.nav-fixed #nav a:hover, +#page-header.nav-fixed #nav span.site-page:hover, +#page-header.nav-fixed #nav #toggle-menu:hover { + color: #57c0de; +} +#page-header.nav-fixed.fixed #nav { + top: 0; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#page-header.nav-visible:not(.fixed) #nav { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-transform: translate3d(0, 100%, 0); + -moz-transform: translate3d(0, 100%, 0); + -o-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); +} +#page-header.nav-visible:not(.fixed) + .layout > .aside-content > .sticky_layout { + top: 70px; + -webkit-transition: top 0.5s; + -moz-transition: top 0.5s; + -o-transition: top 0.5s; + -ms-transition: top 0.5s; + transition: top 0.5s; +} +#page-header.fixed #nav { + position: fixed; +} +#page-header.fixed + .layout > .aside-content > .sticky_layout { + top: 70px; + -webkit-transition: top 0.5s; + -moz-transition: top 0.5s; + -o-transition: top 0.5s; + -ms-transition: top 0.5s; + transition: top 0.5s; +} +#page-header.fixed + .layout #card-toc .toc-content { + max-height: calc(100vh - 170px); +} +#page .page-title { + margin: 0 0 10px; + font-weight: bold; + font-size: 2em; +} +#post > #post-info { + margin-bottom: 30px; +} +#post > #post-info .post-title { + padding-bottom: 4px; + border-bottom: 1px solid var(--light-grey); + color: var(--text-highlight-color); +} +#post > #post-info .post-title .post-edit-link { + float: right; +} +#post > #post-info #post-meta, +#post > #post-info #post-meta a { + color: #78818a; +} +#post-info .post-title { + margin-bottom: 8px; + color: var(--white); + font-weight: normal; + font-size: 2.5em; + line-height: 1.5; + -webkit-line-clamp: 3; +} +@media screen and (max-width: 768px) { + #post-info .post-title { + font-size: 2.1em; + } +} +#post-info .post-title .post-edit-link { + padding-left: 10px; +} +#post-info #post-meta { + color: var(--light-grey); + font-size: 95%; +} +@media screen and (min-width: 768px) { + #post-info #post-meta > .meta-secondline > span:first-child { + display: none; + } +} +@media screen and (max-width: 768px) { + #post-info #post-meta { + font-size: 90%; + } + #post-info #post-meta > .meta-firstline, + #post-info #post-meta > .meta-secondline { + display: inline; + } +} +#post-info #post-meta .post-meta-separator { + margin: 0 5px; +} +#post-info #post-meta .post-meta-icon { + margin-right: 4px; +} +#post-info #post-meta .post-meta-label { + margin-right: 4px; +} +#post-info #post-meta a { + color: var(--light-grey); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +#post-info #post-meta a:hover { + color: #57c0de; + text-decoration: underline; +} +#nav { + position: absolute; + top: 0; + z-index: 90; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 0 36px; + width: 100%; + height: 60px; + font-size: 1.3em; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +@media screen and (max-width: 768px) { + #nav { + padding: 0 16px; + } +} +#nav.show { + opacity: 1; + -ms-filter: none; + filter: none; +} +#nav #blog-info { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + color: var(--light-grey); +} +#nav #blog-info .site-icon { + margin-right: 6px; + height: 36px; + vertical-align: middle; +} +#nav #blog-info .nav-page-title { + display: none; +} +#nav #toggle-menu { + display: none; + padding: 2px 0 0 6px; + vertical-align: top; +} +#nav #toggle-menu:hover { + color: var(--white); +} +#nav a, +#nav span.site-page { + color: var(--light-grey); +} +#nav a:hover, +#nav span.site-page:hover { + color: var(--white); +} +#nav .site-name { + text-shadow: 2px 2px 4px rgba(0,0,0,0.15); + font-weight: bold; +} +#nav .menus_items { + display: inline; +} +#nav .menus_items .menus_item { + position: relative; + display: inline-block; + padding: 0 0 0 14px; +} +#nav .menus_items .menus_item:hover .menus_item_child { + display: block; +} +#nav .menus_items .menus_item:hover > span > i:last-child { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +#nav .menus_items .menus_item > span > i:last-child { + padding: 4px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#nav .menus_items .menus_item .menus_item_child { + position: absolute; + right: 0; + display: none; + margin-top: 8px; + padding: 0; + width: max-content; + background-color: var(--sidebar-bg); + -webkit-box-shadow: 0 5px 20px -4px rgba(0,0,0,0.5); + box-shadow: 0 5px 20px -4px rgba(0,0,0,0.5); + -webkit-animation: sub_menus 0.3s 0.1s ease both; + -moz-animation: sub_menus 0.3s 0.1s ease both; + -o-animation: sub_menus 0.3s 0.1s ease both; + -ms-animation: sub_menus 0.3s 0.1s ease both; + animation: sub_menus 0.3s 0.1s ease both; + border-radius: 5px; +} +#nav .menus_items .menus_item .menus_item_child:before { + position: absolute; + top: -8px; + left: 0; + width: 100%; + height: 20px; + content: ''; +} +#nav .menus_items .menus_item .menus_item_child li { + list-style: none; +} +#nav .menus_items .menus_item .menus_item_child li:hover { + background: var(--text-bg-hover); +} +#nav .menus_items .menus_item .menus_item_child li:first-child { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} +#nav .menus_items .menus_item .menus_item_child li:last-child { + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} +#nav .menus_items .menus_item .menus_item_child li a { + display: inline-block; + padding: 8px 16px; + width: 100%; + color: var(--font-color) !important; + text-shadow: none !important; +} +#nav.hide-menu #toggle-menu { + display: inline-block !important; +} +#nav.hide-menu #toggle-menu .site-page { + font-size: inherit; +} +#nav.hide-menu .menus_items { + display: none; +} +#nav.hide-menu #search-button span:not(.site-page) { + display: none; +} +#nav #search-button { + display: inline; + padding: 0 0 0 14px; +} +#nav .site-page { + position: relative; + padding-bottom: 6px; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + font-size: 0.78em; + cursor: pointer; +} +#nav .site-page:not(.child):after { + position: absolute; + bottom: 0; + left: 0; + z-index: -1; + width: 0; + height: 3px; + background-color: #89d3e8; + content: ''; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + border-radius: 6px; +} +#nav .site-page:not(.child):hover:after { + width: 100%; +} +#nav .nav-page-title { + position: relative; + overflow: hidden; +} +#nav .nav-page-title > :first-child, +#nav .nav-page-title > :last-child { + display: inline-block; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +#nav .nav-page-title > :last-child { + position: absolute; + top: 50%; + left: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(-50%) translateY(-10px); + -moz-transform: translateY(-50%) translateY(-10px); + -o-transform: translateY(-50%) translateY(-10px); + -ms-transform: translateY(-50%) translateY(-10px); + transform: translateY(-50%) translateY(-10px); +} +#nav .nav-page-title:hover > :last-child { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translateY(-50%) translateY(0); + -moz-transform: translateY(-50%) translateY(0); + -o-transform: translateY(-50%) translateY(0); + -ms-transform: translateY(-50%) translateY(0); + transform: translateY(-50%) translateY(0); +} +#nav .nav-page-title:hover > :first-child { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -o-transform: translateY(10px); + -ms-transform: translateY(10px); + transform: translateY(10px); +} +.loading-bg, +#loading-box .loading-left-bg, +#loading-box .loading-right-bg { + position: fixed; + z-index: 1000; + width: 50%; + height: 100%; + background-color: var(--preloader-bg); +} +#loading-box .loading-right-bg { + right: 0; +} +#loading-box .spinner-box { + position: fixed; + z-index: 1001; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: 100vh; +} +#loading-box .spinner-box .configure-border-1 { + position: absolute; + padding: 3px; + width: 115px; + height: 115px; + background: #ffab91; + -webkit-animation: configure-clockwise 3s ease-in-out 0s infinite alternate; + -moz-animation: configure-clockwise 3s ease-in-out 0s infinite alternate; + -o-animation: configure-clockwise 3s ease-in-out 0s infinite alternate; + -ms-animation: configure-clockwise 3s ease-in-out 0s infinite alternate; + animation: configure-clockwise 3s ease-in-out 0s infinite alternate; +} +#loading-box .spinner-box .configure-border-2 { + left: -115px; + padding: 3px; + width: 115px; + height: 115px; + background: #3ff9dc; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-animation: configure-xclockwise 3s ease-in-out 0s infinite alternate; + -moz-animation: configure-xclockwise 3s ease-in-out 0s infinite alternate; + -o-animation: configure-xclockwise 3s ease-in-out 0s infinite alternate; + -ms-animation: configure-xclockwise 3s ease-in-out 0s infinite alternate; + animation: configure-xclockwise 3s ease-in-out 0s infinite alternate; +} +#loading-box .spinner-box .loading-word { + position: absolute; + color: var(--preloader-color); + font-size: 16px; +} +#loading-box .spinner-box .configure-core { + width: 100%; + height: 100%; + background-color: var(--preloader-bg); +} +#loading-box.loaded .loading-left-bg { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-transform: translate(-100%, 0); + -moz-transform: translate(-100%, 0); + -o-transform: translate(-100%, 0); + -ms-transform: translate(-100%, 0); + transform: translate(-100%, 0); +} +#loading-box.loaded .loading-right-bg { + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; + -webkit-transform: translate(100%, 0); + -moz-transform: translate(100%, 0); + -o-transform: translate(100%, 0); + -ms-transform: translate(100%, 0); + transform: translate(100%, 0); +} +#loading-box.loaded .spinner-box { + display: none; +} +@-moz-keyframes configure-clockwise { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 25% { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + 50% { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + 75% { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes configure-clockwise { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 25% { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + 50% { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + 75% { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes configure-clockwise { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 25% { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + 50% { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + 75% { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes configure-clockwise { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -o-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 25% { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + 50% { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -o-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + 75% { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -o-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes configure-xclockwise { + 0% { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + 25% { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 50% { + -webkit-transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + } + 75% { + -webkit-transform: rotate(-225deg); + -moz-transform: rotate(-225deg); + -o-transform: rotate(-225deg); + -ms-transform: rotate(-225deg); + transform: rotate(-225deg); + } + 100% { + -webkit-transform: rotate(-315deg); + -moz-transform: rotate(-315deg); + -o-transform: rotate(-315deg); + -ms-transform: rotate(-315deg); + transform: rotate(-315deg); + } +} +@-webkit-keyframes configure-xclockwise { + 0% { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + 25% { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 50% { + -webkit-transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + } + 75% { + -webkit-transform: rotate(-225deg); + -moz-transform: rotate(-225deg); + -o-transform: rotate(-225deg); + -ms-transform: rotate(-225deg); + transform: rotate(-225deg); + } + 100% { + -webkit-transform: rotate(-315deg); + -moz-transform: rotate(-315deg); + -o-transform: rotate(-315deg); + -ms-transform: rotate(-315deg); + transform: rotate(-315deg); + } +} +@-o-keyframes configure-xclockwise { + 0% { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + 25% { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 50% { + -webkit-transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + } + 75% { + -webkit-transform: rotate(-225deg); + -moz-transform: rotate(-225deg); + -o-transform: rotate(-225deg); + -ms-transform: rotate(-225deg); + transform: rotate(-225deg); + } + 100% { + -webkit-transform: rotate(-315deg); + -moz-transform: rotate(-315deg); + -o-transform: rotate(-315deg); + -ms-transform: rotate(-315deg); + transform: rotate(-315deg); + } +} +@keyframes configure-xclockwise { + 0% { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } + 25% { + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -o-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 50% { + -webkit-transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + } + 75% { + -webkit-transform: rotate(-225deg); + -moz-transform: rotate(-225deg); + -o-transform: rotate(-225deg); + -ms-transform: rotate(-225deg); + transform: rotate(-225deg); + } + 100% { + -webkit-transform: rotate(-315deg); + -moz-transform: rotate(-315deg); + -o-transform: rotate(-315deg); + -ms-transform: rotate(-315deg); + transform: rotate(-315deg); + } +} +#pagination .pagination { + margin-top: 20px; + text-align: center; +} +#pagination .page-number.current { + background: #57c0de; + color: var(--white); +} +#pagination .full-width { + width: 100% !important; +} +#pagination .pagination-related { + height: 150px; +} +@media screen and (min-width: 768px) { + #pagination .pagination-related { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + } +} +#pagination .pagination-related .info-1 .info-item-2 { + -webkit-line-clamp: 1; +} +#pagination .pagination-related .info-2 .info-item-1 { + -webkit-line-clamp: 2; +} +#pagination.pagination-post { + overflow: hidden; + margin-top: 40px; + width: 100%; + border-radius: 6px; + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; +} +@media screen and (max-width: 768px) { + #pagination.pagination-post { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } +} +.layout .pagination > * { + display: inline-block; + margin: 0 6px; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; +} +.layout .pagination > *:not(.space):hover { + background: var(--btn-hover-color); + color: var(--btn-color); +} +#archive .pagination { + margin-top: 30px; +} +#archive .pagination > *:not(.space) { + -webkit-box-shadow: none; + box-shadow: none; +} +.pagination-related { + position: relative; + display: inline-block; + overflow: hidden; + background: #000; + vertical-align: bottom; +} +.pagination-related.next-post .info { + text-align: right; +} +.pagination-related .info .info-1, +.pagination-related .info .info-2 { + padding: 20px 40px; + color: var(--white); + -webkit-transition: -webkit-transform 0.3s, opacity 0.3s; + -moz-transition: -moz-transform 0.3s, opacity 0.3s; + -o-transition: -o-transform 0.3s, opacity 0.3s; + -ms-transition: -ms-transform 0.3s, opacity 0.3s; + transition: transform 0.3s, opacity 0.3s; +} +.pagination-related .info .info-1 .info-item-1 { + color: var(--light-grey); + text-transform: uppercase; + font-size: 90%; +} +.pagination-related .info .info-1 .info-item-2 { + color: var(--white); + font-weight: 500; +} +.pagination-related .info .info-2 { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +.pagination-related:not(.no-desc):hover .info-1 { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: translate(0, -100%); + -moz-transform: translate(0, -100%); + -o-transform: translate(0, -100%); + -ms-transform: translate(0, -100%); + transform: translate(0, -100%); +} +.pagination-related:not(.no-desc):hover .info-2 { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.container { + word-wrap: break-word; + overflow-wrap: break-word; +} +.container a { + color: #7fb3d5; +} +.container a:hover { + text-decoration: underline; +} +.container img { + display: block; + margin: 0 auto 20px; + max-width: 100%; + -webkit-transition: filter 375ms ease-in 0.2s; + -moz-transition: filter 375ms ease-in 0.2s; + -o-transition: filter 375ms ease-in 0.2s; + -ms-transition: filter 375ms ease-in 0.2s; + transition: filter 375ms ease-in 0.2s; + border-radius: 6px; +} +.container p { + margin: 0 0 16px; +} +.container iframe { + margin: 0 0 20px; +} +.container kbd { + margin: 0 3px; + padding: 3px 5px; + border: 1px solid #b4b4b4; + background-color: #f8f8f8; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + box-shadow: 0 1px 3px rgba(0,0,0,0.25), 0 2px 1px 0 rgba(255,255,255,0.6) inset; + color: #34495e; + white-space: nowrap; + font-weight: 600; + font-size: 0.9em; + font-family: Monaco, 'Ubuntu Mono', monospace; + line-height: 1em; + border-radius: 3px; +} +.container ol ol, +.container ul ol, +.container ol ul, +.container ul ul { + padding-left: 20px; +} +.container ol li, +.container ul li { + margin: 4px 0; +} +.container ol p, +.container ul p { + margin: 0 0 8px; +} +.container > :last-child { + margin-bottom: 0 !important; +} +.container hr { + margin: 20px 0; +} +#post .tag_share:after { + display: block; + clear: both; + content: ''; +} +#post .tag_share .post-meta__tag-list { + display: inline-block; +} +#post .tag_share .post-meta__tags { + display: inline-block; + margin: 8px 8px 8px 0; + padding: 0 12px; + width: fit-content; + border: 1px solid #57c0de; + border-radius: 12px; + color: #57c0de; + font-size: 0.85em; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#post .tag_share .post-meta__tags:hover { + background: #57c0de; + color: var(--white); +} +#post .tag_share .post-share { + display: inline-block; + float: right; + margin: 8px 0 0; + width: fit-content; +} +#post .tag_share .post-share .social-share { + font-size: 0.85em; +} +#post .tag_share .post-share .social-share .social-share-icon { + margin: 0 4px; + width: 1.85em; + height: 1.85em; + font-size: 1.2em; + line-height: 1.85em; +} +#post .post-copyright { + position: relative; + margin: 40px 0 10px; + padding: 10px 16px; + border: 1px solid var(--light-grey); + -webkit-transition: box-shadow 0.3s ease-in-out; + -moz-transition: box-shadow 0.3s ease-in-out; + -o-transition: box-shadow 0.3s ease-in-out; + -ms-transition: box-shadow 0.3s ease-in-out; + transition: box-shadow 0.3s ease-in-out; + border-radius: 6px; +} +#post .post-copyright:before { + position: absolute; + top: 2px; + right: 12px; + color: #57c0de; + content: '\f1f9'; + font-size: 1.3em; +} +#post .post-copyright:hover { + -webkit-box-shadow: 0 0 8px 0 rgba(232,237,250,0.6), 0 2px 4px 0 rgba(232,237,250,0.5); + box-shadow: 0 0 8px 0 rgba(232,237,250,0.6), 0 2px 4px 0 rgba(232,237,250,0.5); +} +#post .post-copyright .post-copyright-meta { + color: #57c0de; + font-weight: bold; +} +#post .post-copyright .post-copyright-meta i { + margin-right: 3px; +} +#post .post-copyright .post-copyright-info { + padding-left: 6px; +} +#post .post-copyright .post-copyright-info a { + text-decoration: underline; + word-break: break-word; +} +#post .post-copyright .post-copyright-info a:hover { + text-decoration: none; +} +#post #post-outdate-notice { + position: relative; + margin: 0 0 20px; + padding: 0.5em 1.2em; + background-color: #ffe6e6; + color: #f66; + border-radius: 3px; + padding: 0.5em 1em 0.5em 2.6em; + border-left: 5px solid #ff8080; +} +#post #post-outdate-notice .num { + padding: 0 4px; +} +#post #post-outdate-notice:before { + position: absolute; + top: 50%; + left: 0.9em; + color: #ff8080; + content: '\f071'; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +#post .ads-wrap { + margin: 40px 0; +} +.relatedPosts { + margin-top: 40px; +} +.relatedPosts > .headline { + margin-bottom: 5px; + font-weight: 700; + font-size: 1.43em; +} +.relatedPosts > .relatedPosts-list > a { + margin: 3px; + width: calc(33.333% - 6px); + height: 200px; + border-radius: 6px; +} +@media screen and (max-width: 768px) { + .relatedPosts > .relatedPosts-list > a { + margin: 2px; + width: calc(50% - 4px); + height: 150px; + } +} +@media screen and (max-width: 600px) { + .relatedPosts > .relatedPosts-list > a { + width: calc(100% - 4px); + } +} +.relatedPosts > .relatedPosts-list .info .info-1 .info-item-2 { + -webkit-line-clamp: 2; +} +.relatedPosts > .relatedPosts-list .info .info-2 .info-item-1 { + -webkit-line-clamp: 3; +} +.post-reward { + position: relative; + margin-top: 80px; + width: 100%; + text-align: center; + pointer-events: none; +} +.post-reward > * { + pointer-events: auto; +} +.post-reward .reward-button { + display: inline-block; + padding: 4px 24px; + background: var(--btn-bg); + color: var(--btn-color); + cursor: pointer; + border-radius: 6px; +} +.post-reward .reward-button i { + margin-right: 5px; + vertical-align: baseline; +} +.post-reward:hover .reward-button { + background: var(--btn-hover-color); +} +.post-reward:hover > .reward-main { + display: block; +} +.post-reward .reward-main { + position: absolute; + bottom: 50px; + left: 0; + z-index: 100; + display: none; + padding: 0 0 15px; + width: 100%; + border-radius: 6px; +} +.post-reward .reward-main .reward-all { + display: inline-block; + margin: 0; + padding: 20px 10px; + background: var(--reward-pop); +} +.post-reward .reward-main .reward-all:before { + position: absolute; + bottom: -10px; + left: 0; + width: 100%; + height: 20px; + content: ''; +} +.post-reward .reward-main .reward-all:after { + position: absolute; + right: 0; + bottom: 2px; + left: 0; + margin: 0 auto; + width: 0; + height: 0; + border-top: 13px solid var(--reward-pop); + border-right: 13px solid transparent; + border-left: 13px solid transparent; + content: ''; +} +.post-reward .reward-main .reward-all .reward-item { + display: inline-block; + padding: 0 8px; + list-style-type: none; + vertical-align: top; +} +.post-reward .reward-main .reward-all .reward-item img { + width: 130px; + height: 130px; +} +.post-reward .reward-main .reward-all .reward-item .post-qr-code-desc { + width: 130px; + color: #858585; +} +#rightside { + position: fixed; + right: -48px; + bottom: 40px; + z-index: 100; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#rightside.rightside-show { + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transform: translate(-58px, 0); + -moz-transform: translate(-58px, 0); + -o-transform: translate(-58px, 0); + -ms-transform: translate(-58px, 0); + transform: translate(-58px, 0); +} +#rightside #rightside-config-hide { + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: -webkit-transform 0.4s; + -moz-transition: -moz-transform 0.4s; + -o-transition: -o-transform 0.4s; + -ms-transition: -ms-transform 0.4s; + transition: transform 0.4s; + -webkit-transform: translate(45px, 0); + -moz-transform: translate(45px, 0); + -o-transform: translate(45px, 0); + -ms-transform: translate(45px, 0); + transform: translate(45px, 0); +} +#rightside #rightside-config-hide.show { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -o-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} +#rightside #rightside-config-hide.status { + height: auto; + opacity: 1; + -ms-filter: none; + filter: none; +} +#rightside > div > button, +#rightside > div > a { + display: block; + margin-bottom: 5px; + width: 35px; + height: 35px; + background-color: var(--btn-bg); + color: var(--btn-color); + text-align: center; + font-size: 16px; + line-height: 35px; + border-radius: 5px; +} +#rightside > div > button:hover, +#rightside > div > a:hover { + background-color: var(--btn-hover-color); +} +#rightside > div > button i, +#rightside > div > a i { + vertical-align: baseline; +} +#rightside #mobile-toc-button { + display: none; +} +@media screen and (max-width: 900px) { + #rightside #mobile-toc-button { + display: block; + } +} +@media screen and (max-width: 900px) { + #rightside #hide-aside-btn { + display: none; + } +} +@-moz-keyframes fadeInScale { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-webkit-keyframes fadeInScale { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@-o-keyframes fadeInScale { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +@keyframes fadeInScale { + from { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -o-transform: scale(0.8); + -ms-transform: scale(0.8); + transform: scale(0.8); + } + to { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + } +} +#sidebar #menu-mask { + position: fixed; + z-index: 102; + display: none; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.8); +} +#sidebar #sidebar-menus { + position: fixed; + top: 0; + right: -330px; + z-index: 103; + overflow-x: hidden; + overflow-y: scroll; + padding-left: 5px; + width: 330px; + height: 100%; + background: var(--sidebar-bg); + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + -ms-transition: all 0.5s; + transition: all 0.5s; +} +#sidebar #sidebar-menus.open { + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +#sidebar #sidebar-menus > .avatar-img { + margin: 20px auto; +} +#sidebar #sidebar-menus .site-data { + padding: 0 10px; +} +#sidebar #sidebar-menus hr { + margin: 20px auto; +} +#sidebar #sidebar-menus .menus_items { + margin: 20px; + padding: 15px; + background: var(--sidebar-menu-bg); + -webkit-box-shadow: 0 0 1px 1px rgba(7,17,27,0.05); + box-shadow: 0 0 1px 1px rgba(7,17,27,0.05); + border-radius: 10px; +} +#sidebar #sidebar-menus .menus_items .site-page { + position: relative; + display: block; + margin: 4px 0; + padding: 2px 23px 2px 15px; + color: var(--font-color); + font-size: 1.15em; + cursor: pointer; + border-radius: 6px; +} +#sidebar #sidebar-menus .menus_items .site-page:hover { + background: var(--text-bg-hover); + -webkit-box-shadow: 0 2px 8px rgba(0,0,0,0.1); + box-shadow: 0 2px 8px rgba(0,0,0,0.1); + color: var(--white); + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + -ms-transition: all 0.2s ease; + transition: all 0.2s ease; + -webkit-transform: translateX(3px); + -moz-transform: translateX(3px); + -o-transform: translateX(3px); + -ms-transform: translateX(3px); + transform: translateX(3px); +} +#sidebar #sidebar-menus .menus_items .site-page i:first-child { + width: 15%; + text-align: left; +} +#sidebar #sidebar-menus .menus_items .site-page.group > i:last-child { + position: absolute; + top: 0.6em; + right: 10px; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + -o-transition: -o-transform 0.3s; + -ms-transition: -ms-transform 0.3s; + transition: transform 0.3s; +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide > i:last-child { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +#sidebar #sidebar-menus .menus_items .site-page.group.hide + .menus_item_child { + overflow: hidden; + max-height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transform: scaleY(0); + -moz-transform: scaleY(0); + -o-transform: scaleY(0); + -ms-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: top; + -moz-transform-origin: top; + -o-transform-origin: top; + -ms-transform-origin: top; + transform-origin: top; +} +#sidebar #sidebar-menus .menus_items .menus_item_child { + margin: 0; + padding-left: 25px; + max-height: 0; + list-style: none; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: -webkit-transform 0.3s ease, opacity 0.3s ease, max-height 0.3s ease; + -moz-transition: -moz-transform 0.3s ease, opacity 0.3s ease, max-height 0.3s ease; + -o-transition: -o-transform 0.3s ease, opacity 0.3s ease, max-height 0.3s ease; + -ms-transition: -ms-transform 0.3s ease, opacity 0.3s ease, max-height 0.3s ease; + transition: transform 0.3s ease, opacity 0.3s ease, max-height 0.3s ease; + -webkit-transform: scaleY(0); + -moz-transform: scaleY(0); + -o-transform: scaleY(0); + -ms-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: top; + -moz-transform-origin: top; + -o-transform-origin: top; + -ms-transform-origin: top; + transform-origin: top; + will-change: transform, opacity, max-height; +} +#sidebar #sidebar-menus .site-page.group:not(.hide) + .menus_item_child { + max-height: 1000px; + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: scaleY(1); + -moz-transform: scaleY(1); + -o-transform: scaleY(1); + -ms-transform: scaleY(1); + transform: scaleY(1); +} +#vcomment { + font-size: 1.1em; +} +#vcomment .vbtn { + border: none; + background: var(--btn-bg); + color: var(--btn-color); +} +#vcomment .vbtn:hover { + background: var(--btn-hover-color); +} +#vcomment .vimg { + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +#vcomment .vimg:hover { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} +#vcomment .vcards .vcard .vcontent.expand:before, +#vcomment .vcards .vcard .vcontent.expand:after { + z-index: 22; +} +#waline-wrap { + --waline-font-size: 1.1em; + --waline-theme-color: #57c0de; + --waline-active-color: #ff7d7d; +} +#waline-wrap .wl-comment-actions > button:not(last-child) { + padding-right: 4px; +} +.twikoo .tk-content p { + margin: 3px 0; +} +.fireworks { + position: fixed; + top: 0; + left: 0; + z-index: 9999; + pointer-events: none; +} +.medium-zoom-image--opened { + z-index: 99999 !important; + margin: 0 !important; +} +.medium-zoom-overlay { + z-index: 99999 !important; +} +.utterances, +.fb-comments iframe { + width: 100% !important; +} +#gitalk-container .gt-meta { + margin: 0 0 0.8em; + padding: 6px 0 16px; +} +.aplayer { + color: #4c4948; +} +.container .aplayer { + margin: 0 0 20px; +} +.snackbar-container.snackbar-css { + border-radius: 5px; + opacity: 0.85 !important; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)" !important; + filter: alpha(opacity=85) !important; +} +.abc-music-sheet { + margin: 0 0 20px; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.3s; + -moz-transition: opacity 0.3s; + -o-transition: opacity 0.3s; + -ms-transition: opacity 0.3s; + transition: opacity 0.3s; +} +.abc-music-sheet.abcjs-container { + opacity: 1; + -ms-filter: none; + filter: none; +} +@media screen and (max-width: 768px) { + .fancybox__toolbar__column.is-middle { + display: none; + } +} +.container .btn-center { + margin: 0 0 20px; + text-align: center; +} +.container .btn-beautify { + display: inline-block; + margin: 0 4px 6px; + padding: 0 15px; + background-color: var(--btn-beautify-color, var(--btn-default-color)); + color: var(--btn-color, #fff); + vertical-align: top; + line-height: 2; + border-radius: 6px; +} +.container .btn-beautify.blue { + --btn-beautify-color: var(--tags-blue-color); +} +.container .btn-beautify.pink { + --btn-beautify-color: var(--tags-pink-color); +} +.container .btn-beautify.red { + --btn-beautify-color: var(--tags-red-color); +} +.container .btn-beautify.purple { + --btn-beautify-color: var(--tags-purple-color); +} +.container .btn-beautify.orange { + --btn-beautify-color: var(--tags-orange-color); +} +.container .btn-beautify.green { + --btn-beautify-color: var(--tags-green-color); +} +.container .btn-beautify:hover { + background-color: var(--btn-hover-color); +} +.container .btn-beautify:not(.block) + .btn-beautify:not(.block) { + margin: 0 4px 20px; +} +.container .btn-beautify.block { + display: block; + margin: 0 0 20px; + width: fit-content; + width: -moz-fit-content; +} +.container .btn-beautify.block.center { + margin: 0 auto 20px; +} +.container .btn-beautify.block.right { + margin: 0 0 20px auto; +} +.container .btn-beautify.larger { + padding: 6px 15px; +} +.container .btn-beautify.outline { + border: 1px solid transparent; + border-color: var(--btn-beautify-color, var(--btn-default-color)); + background-color: transparent; + color: var(--btn-beautify-color, var(--btn-default-color)); +} +.container .btn-beautify.outline i, +.container .btn-beautify.outline span { + -webkit-transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -moz-transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -o-transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); + -ms-transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} +.container .btn-beautify.outline::before { + background: -webkit-linear-gradient(0deg, transparent, rgba(0,0,0,0.1), transparent); + background: -moz-linear-gradient(0deg, transparent, rgba(0,0,0,0.1), transparent); + background: -o-linear-gradient(0deg, transparent, rgba(0,0,0,0.1), transparent); + background: -ms-linear-gradient(0deg, transparent, rgba(0,0,0,0.1), transparent); + background: linear-gradient(90deg, transparent, rgba(0,0,0,0.1), transparent); +} +.container .btn-beautify.outline:hover { + border-color: var(--btn-beautify-color, var(--btn-default-color)); + background-color: var(--btn-beautify-color, var(--btn-default-color)); + color: var(--btn-color) !important; +} +.container .btn-beautify.outline:hover i, +.container .btn-beautify.outline:hover span { + color: var(--btn-color); +} +.container figure.gallery-group { + position: relative; + float: left; + overflow: hidden; + margin: 6px 4px; + width: calc(50% - 8px); + height: 250px; + border-radius: 10px; + background: #000; + -webkit-transform: translate3d(0, 0, 0); +} +@media screen and (max-width: 600px) { + .container figure.gallery-group { + width: calc(100% - 8px); + } +} +@media screen and (min-width: 1024px) { + .container figure.gallery-group { + width: calc(100% / 3 - 8px); + } +} +.container figure.gallery-group:hover img { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.container figure.gallery-group:hover .gallery-group-name::after { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.container figure.gallery-group:hover p { + opacity: 1; + -ms-filter: none; + filter: none; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.container figure.gallery-group img { + position: relative; + margin: 0; + max-width: none; + width: calc(100% + 20px); + height: 250px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + -webkit-transition: all 0.3s, filter 375ms ease-in 0.2s; + -moz-transition: all 0.3s, filter 375ms ease-in 0.2s; + -o-transition: all 0.3s, filter 375ms ease-in 0.2s; + -ms-transition: all 0.3s, filter 375ms ease-in 0.2s; + transition: all 0.3s, filter 375ms ease-in 0.2s; + -webkit-transform: translate3d(-10px, 0, 0); + -moz-transform: translate3d(-10px, 0, 0); + -o-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + object-fit: cover; +} +.container figure.gallery-group figcaption { + position: absolute; + top: 0; + left: 0; + padding: 30px; + width: 100%; + height: 100%; + color: #fff; + text-transform: uppercase; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; +} +.container figure.gallery-group figcaption > a { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.container figure.gallery-group p { + margin: 0; + padding: 8px 0 0; + letter-spacing: 1px; + font-size: 1.1em; + line-height: 1.5; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; + -moz-transition: opacity 0.35s, -moz-transform 0.35s; + -o-transition: opacity 0.35s, -o-transform 0.35s; + -ms-transition: opacity 0.35s, -ms-transform 0.35s; + transition: opacity 0.35s, transform 0.35s; + -webkit-transform: translate3d(100%, 0, 0); + -moz-transform: translate3d(100%, 0, 0); + -o-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + -webkit-line-clamp: 4; +} +.container figure.gallery-group .gallery-group-name { + position: relative; + margin: 0; + padding: 8px 0; + font-weight: bold; + font-size: 1.65em; + line-height: 1.5; + -webkit-line-clamp: 2; +} +.container figure.gallery-group .gallery-group-name:after { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: #fff; + content: ''; + -webkit-transition: -webkit-transform 0.35s; + -moz-transition: -moz-transform 0.35s; + -o-transition: -o-transform 0.35s; + -ms-transition: -ms-transform 0.35s; + transition: transform 0.35s; + -webkit-transform: translate3d(-100%, 0, 0); + -moz-transform: translate3d(-100%, 0, 0); + -o-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); +} +.container .gallery-group-main { + overflow: auto; + padding: 0 0 16px; +} +.container .gallery-container { + margin: 0 0 20px; + text-align: center; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.container .gallery-container.loaded { + opacity: 1; + -ms-filter: none; + filter: none; +} +.container .gallery-container img { + display: initial; + margin: 0; + width: 100%; + height: 100%; +} +.container .gallery-container .gallery-data { + display: none; +} +.container .gallery-container button { + margin-top: 25px; + padding: 8px 14px; + background: var(--btn-bg); + color: var(--btn-color); + font-weight: bold; + font-size: 1.1em; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + border-radius: 5px; +} +.container .gallery-container button:hover { + background: var(--btn-hover-color); +} +.container .gallery-container button:hover i { + margin-left: 8px; +} +.container .gallery-container button i { + margin-left: 4px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; +} +.container .loading-container { + display: inline-block; + overflow: hidden; + width: 154px; + height: 154px; +} +.container .loading-container .loading-item { + position: relative; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translateZ(0) scale(1); + -moz-transform: translateZ(0) scale(1); + -o-transform: translateZ(0) scale(1); + -ms-transform: translateZ(0) scale(1); + transform: translateZ(0) scale(1); + -webkit-transform-origin: 0 0; + -moz-transform-origin: 0 0; + -o-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; +} +.container .loading-container .loading-item div { + position: absolute; + width: 30.8px; + height: 30.8px; + border-radius: 50%; + background: #e15b64; + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + -webkit-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -moz-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -o-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + -ms-animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); + animation: loading-ball 1.92s infinite cubic-bezier(0, 0.5, 0.5, 1); +} +.container .loading-container .loading-item div:nth-child(1) { + background: #f47e60; + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + -webkit-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -moz-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -o-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + -ms-animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; + animation: loading-ball-r 0.48s infinite cubic-bezier(0, 0.5, 0.5, 1), loading-ball-c 1.92s infinite step-start; +} +.container .loading-container .loading-item div:nth-child(2) { + background: #e15b64; + -webkit-animation-delay: -0.48s; + -moz-animation-delay: -0.48s; + -o-animation-delay: -0.48s; + -ms-animation-delay: -0.48s; + animation-delay: -0.48s; +} +.container .loading-container .loading-item div:nth-child(3) { + background: #f47e60; + -webkit-animation-delay: -0.96s; + -moz-animation-delay: -0.96s; + -o-animation-delay: -0.96s; + -ms-animation-delay: -0.96s; + animation-delay: -0.96s; +} +.container .loading-container .loading-item div:nth-child(4) { + background: #f8b26a; + -webkit-animation-delay: -1.44s; + -moz-animation-delay: -1.44s; + -o-animation-delay: -1.44s; + -ms-animation-delay: -1.44s; + animation-delay: -1.44s; +} +.container .loading-container .loading-item div:nth-child(5) { + background: #abbd81; + -webkit-animation-delay: -1.92s; + -moz-animation-delay: -1.92s; + -o-animation-delay: -1.92s; + -ms-animation-delay: -1.92s; + animation-delay: -1.92s; +} +@-moz-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-webkit-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-o-keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@keyframes loading-ball { + 0% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 25% { + -webkit-transform: translate(9.24px, 61.6px) scale(0); + -moz-transform: translate(9.24px, 61.6px) scale(0); + -o-transform: translate(9.24px, 61.6px) scale(0); + -ms-transform: translate(9.24px, 61.6px) scale(0); + transform: translate(9.24px, 61.6px) scale(0); + } + 50% { + -webkit-transform: translate(9.24px, 61.6px) scale(1); + -moz-transform: translate(9.24px, 61.6px) scale(1); + -o-transform: translate(9.24px, 61.6px) scale(1); + -ms-transform: translate(9.24px, 61.6px) scale(1); + transform: translate(9.24px, 61.6px) scale(1); + } + 75% { + -webkit-transform: translate(61.6px, 61.6px) scale(1); + -moz-transform: translate(61.6px, 61.6px) scale(1); + -o-transform: translate(61.6px, 61.6px) scale(1); + -ms-transform: translate(61.6px, 61.6px) scale(1); + transform: translate(61.6px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } +} +@-moz-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-webkit-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-o-keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@keyframes loading-ball-r { + 0% { + -webkit-transform: translate(113.96px, 61.6px) scale(1); + -moz-transform: translate(113.96px, 61.6px) scale(1); + -o-transform: translate(113.96px, 61.6px) scale(1); + -ms-transform: translate(113.96px, 61.6px) scale(1); + transform: translate(113.96px, 61.6px) scale(1); + } + 100% { + -webkit-transform: translate(113.96px, 61.6px) scale(0); + -moz-transform: translate(113.96px, 61.6px) scale(0); + -o-transform: translate(113.96px, 61.6px) scale(0); + -ms-transform: translate(113.96px, 61.6px) scale(0); + transform: translate(113.96px, 61.6px) scale(0); + } +} +@-moz-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@-webkit-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@-o-keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +@keyframes loading-ball-c { + 0% { + background: #e15b64; + } + 25% { + background: #abbd81; + } + 50% { + background: #f8b26a; + } + 75% { + background: #f47e60; + } + 100% { + background: #e15b64; + } +} +blockquote.pullquote { + position: relative; + max-width: 45%; + font-size: 110%; +} +blockquote.pullquote.left { + float: left; + margin: 1em 0.5em 0 0; +} +blockquote.pullquote.right { + float: right; + margin: 1em 0 0 0.5em; +} +.video-container { + position: relative; + overflow: hidden; + margin-bottom: 16px; + padding-top: 56.25%; + height: 0; +} +.video-container iframe { + position: absolute; + top: 0; + left: 0; + margin-top: 0; + width: 100%; + height: 100%; +} +.hide-inline > .hide-button, +.hide-block > .hide-button { + display: inline-block; + padding: 5px 18px; + background: #57c0de; + color: var(--white); + border-radius: 6px; +} +.hide-inline > .hide-button:hover, +.hide-block > .hide-button:hover { + background-color: var(--btn-hover-color); +} +.hide-inline > .hide-button.open, +.hide-block > .hide-button.open { + display: none; +} +.hide-inline > .hide-button.open + div, +.hide-block > .hide-button.open + div { + display: block; +} +.hide-inline > .hide-button.open + span, +.hide-block > .hide-button.open + span { + display: inline; +} +.hide-inline > .hide-content, +.hide-block > .hide-content { + display: none; +} +.hide-inline > .hide-button { + margin: 0 6px; +} +.hide-inline > .hide-content { + margin: 0 6px; +} +.hide-block { + margin: 0 0 16px; +} +.toggle { + margin-bottom: 20px; + border: 1px solid #f0f0f0; + border-radius: 5px; + overflow: hidden; +} +.toggle > .toggle-button { + padding: 6px 15px; + background: #f0f0f0; + color: #1f2d3d; + cursor: pointer; +} +.toggle > .toggle-content { + margin: 30px 24px; +} +.container .inline-img { + display: inline; + margin: 0 3px; + height: 1.1em; + vertical-align: text-bottom; +} +.hl-label { + padding: 2px 4px; + color: var(--btn-color, #fff); + border-radius: 3px; +} +.hl-label.default { + background-color: var(--btn-default-color); +} +.hl-label.blue { + background-color: var(--tags-blue-color); +} +.hl-label.pink { + background-color: var(--tags-pink-color); +} +.hl-label.red { + background-color: var(--tags-red-color); +} +.hl-label.purple { + background-color: var(--tags-purple-color); +} +.hl-label.orange { + background-color: var(--tags-orange-color); +} +.hl-label.green { + background-color: var(--tags-green-color); +} +.note { + position: relative; + margin: 0 0 20px; + padding: 15px; + border-radius: 3px; +} +.note.icon-padding { + padding-left: 3em; +} +.note > .note-icon { + position: absolute; + top: calc(50% - 0.5em); + left: 0.8em; + font-size: larger; +} +.note.blue:not(.disabled) { + border-left-color: var(--tags-blue-color) !important; +} +.note.blue:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-blue-color); +} +.note.blue:not(.disabled):not(.simple) { + background: var(--tags-blue-color-lighten); +} +.note.blue > .note-icon { + color: var(--tags-blue-color); +} +.note.pink:not(.disabled) { + border-left-color: var(--tags-pink-color) !important; +} +.note.pink:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-pink-color); +} +.note.pink:not(.disabled):not(.simple) { + background: var(--tags-pink-color-lighten); +} +.note.pink > .note-icon { + color: var(--tags-pink-color); +} +.note.red:not(.disabled) { + border-left-color: var(--tags-red-color) !important; +} +.note.red:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-red-color); +} +.note.red:not(.disabled):not(.simple) { + background: var(--tags-red-color-lighten); +} +.note.red > .note-icon { + color: var(--tags-red-color); +} +.note.purple:not(.disabled) { + border-left-color: var(--tags-purple-color) !important; +} +.note.purple:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-purple-color); +} +.note.purple:not(.disabled):not(.simple) { + background: var(--tags-purple-color-lighten); +} +.note.purple > .note-icon { + color: var(--tags-purple-color); +} +.note.orange:not(.disabled) { + border-left-color: var(--tags-orange-color) !important; +} +.note.orange:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-orange-color); +} +.note.orange:not(.disabled):not(.simple) { + background: var(--tags-orange-color-lighten); +} +.note.orange > .note-icon { + color: var(--tags-orange-color); +} +.note.green:not(.disabled) { + border-left-color: var(--tags-green-color) !important; +} +.note.green:not(.disabled).modern { + border-left-color: transparent !important; + color: var(--tags-green-color); +} +.note.green:not(.disabled):not(.simple) { + background: var(--tags-green-color-lighten); +} +.note.green > .note-icon { + color: var(--tags-green-color); +} +.note.simple { + border: 1px solid var(--note-default-border); + border-left-width: 5px; +} +.note.modern { + border: 1px solid transparent !important; + background-color: var(--note-modern-default-bg); + color: var(--note-modern-default-text); +} +.note.flat { + border: initial; + border-left: 5px solid var(--note-default-border); + background-color: var(--note-default-bg); + color: var(--note-default-text); +} +.note h2, +.note h3, +.note h4, +.note h5, +.note h6 { + margin-top: 3px; + margin-bottom: 0; + padding-top: 0 !important; + border-bottom: initial; +} +.note p:first-child, +.note ul:first-child, +.note ol:first-child, +.note table:first-child, +.note pre:first-child, +.note blockquote:first-child, +.note img:first-child { + margin-top: 0 !important; +} +.note p:last-child, +.note ul:last-child, +.note ol:last-child, +.note table:last-child, +.note pre:last-child, +.note blockquote:last-child, +.note img:last-child { + margin-bottom: 0 !important; +} +.note .img-alt { + margin: 5px 0 10px; +} +.note:not(.no-icon) { + padding-left: 3em; +} +.note:not(.no-icon)::before { + position: absolute; + top: calc(50% - 0.95em); + left: 0.8em; + font-size: larger; +} +.note.default.flat { + background: var(--note-default-bg); + color: var(--font-color); +} +.note.default.modern { + border-color: var(--note-modern-default-border) !important; + background: var(--note-modern-default-bg); + color: var(--note-modern-default-text); +} +.note.default.modern a:not(.btn) { + color: var(--note-modern-default-text); +} +.note.default.modern a:not(.btn):hover { + color: var(--note-modern-default-hover); +} +.note.default:not(.modern) { + border-left-color: var(--note-default-border); +} +.note.default:not(.modern) h2, +.note.default:not(.modern) h3, +.note.default:not(.modern) h4, +.note.default:not(.modern) h5, +.note.default:not(.modern) h6 { + color: var(--note-default-text); +} +.note.default:not(.no-icon)::before { + content: '\f0a9'; +} +.note.default:not(.no-icon):not(.modern)::before { + color: var(--note-default-text); +} +.note.primary.flat { + background: var(--note-primary-bg); + color: var(--font-color); +} +.note.primary.modern { + border-color: var(--note-modern-primary-border) !important; + background: var(--note-modern-primary-bg); + color: var(--note-modern-primary-text); +} +.note.primary.modern a:not(.btn) { + color: var(--note-modern-primary-text); +} +.note.primary.modern a:not(.btn):hover { + color: var(--note-modern-primary-hover); +} +.note.primary:not(.modern) { + border-left-color: var(--note-primary-border); +} +.note.primary:not(.modern) h2, +.note.primary:not(.modern) h3, +.note.primary:not(.modern) h4, +.note.primary:not(.modern) h5, +.note.primary:not(.modern) h6 { + color: var(--note-primary-text); +} +.note.primary:not(.no-icon)::before { + content: '\f055'; +} +.note.primary:not(.no-icon):not(.modern)::before { + color: var(--note-primary-text); +} +.note.info.flat { + background: var(--note-info-bg); + color: var(--font-color); +} +.note.info.modern { + border-color: var(--note-modern-info-border) !important; + background: var(--note-modern-info-bg); + color: var(--note-modern-info-text); +} +.note.info.modern a:not(.btn) { + color: var(--note-modern-info-text); +} +.note.info.modern a:not(.btn):hover { + color: var(--note-modern-info-hover); +} +.note.info:not(.modern) { + border-left-color: var(--note-info-border); +} +.note.info:not(.modern) h2, +.note.info:not(.modern) h3, +.note.info:not(.modern) h4, +.note.info:not(.modern) h5, +.note.info:not(.modern) h6 { + color: var(--note-info-text); +} +.note.info:not(.no-icon)::before { + content: '\f05a'; +} +.note.info:not(.no-icon):not(.modern)::before { + color: var(--note-info-text); +} +.note.success.flat { + background: var(--note-success-bg); + color: var(--font-color); +} +.note.success.modern { + border-color: var(--note-modern-success-border) !important; + background: var(--note-modern-success-bg); + color: var(--note-modern-success-text); +} +.note.success.modern a:not(.btn) { + color: var(--note-modern-success-text); +} +.note.success.modern a:not(.btn):hover { + color: var(--note-modern-success-hover); +} +.note.success:not(.modern) { + border-left-color: var(--note-success-border); +} +.note.success:not(.modern) h2, +.note.success:not(.modern) h3, +.note.success:not(.modern) h4, +.note.success:not(.modern) h5, +.note.success:not(.modern) h6 { + color: var(--note-success-text); +} +.note.success:not(.no-icon)::before { + content: '\f058'; +} +.note.success:not(.no-icon):not(.modern)::before { + color: var(--note-success-text); +} +.note.warning.flat { + background: var(--note-warning-bg); + color: var(--font-color); +} +.note.warning.modern { + border-color: var(--note-modern-warning-border) !important; + background: var(--note-modern-warning-bg); + color: var(--note-modern-warning-text); +} +.note.warning.modern a:not(.btn) { + color: var(--note-modern-warning-text); +} +.note.warning.modern a:not(.btn):hover { + color: var(--note-modern-warning-hover); +} +.note.warning:not(.modern) { + border-left-color: var(--note-warning-border); +} +.note.warning:not(.modern) h2, +.note.warning:not(.modern) h3, +.note.warning:not(.modern) h4, +.note.warning:not(.modern) h5, +.note.warning:not(.modern) h6 { + color: var(--note-warning-text); +} +.note.warning:not(.no-icon)::before { + content: '\f06a'; +} +.note.warning:not(.no-icon):not(.modern)::before { + color: var(--note-warning-text); +} +.note.danger.flat { + background: var(--note-danger-bg); + color: var(--font-color); +} +.note.danger.modern { + border-color: var(--note-modern-danger-border) !important; + background: var(--note-modern-danger-bg); + color: var(--note-modern-danger-text); +} +.note.danger.modern a:not(.btn) { + color: var(--note-modern-danger-text); +} +.note.danger.modern a:not(.btn):hover { + color: var(--note-modern-danger-hover); +} +.note.danger:not(.modern) { + border-left-color: var(--note-danger-border); +} +.note.danger:not(.modern) h2, +.note.danger:not(.modern) h3, +.note.danger:not(.modern) h4, +.note.danger:not(.modern) h5, +.note.danger:not(.modern) h6 { + color: var(--note-danger-text); +} +.note.danger:not(.no-icon)::before { + content: '\f056'; +} +.note.danger:not(.no-icon):not(.modern)::before { + color: var(--note-danger-text); +} +.container .series-items a:hover { + color: var(--pseudo-hover); +} +.container .tabs { + position: relative; + margin: 0 0 20px; + border-right: 1px solid var(--tab-border-color); + border-bottom: 1px solid var(--tab-border-color); + border-left: 1px solid var(--tab-border-color); + border-radius: 6px; + overflow: hidden; +} +.container .tabs > .nav-tabs { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin: 0; + padding: 0; + background: var(--tab-button-bg); +} +.container .tabs > .nav-tabs > .tab { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + -ms-box-flex: 1; + box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + padding: 8px 18px; + border-top: 2px solid var(--tab-border-color); + background: var(--tab-button-bg); + color: var(--tab-button-color); + line-height: 2; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + -ms-transition: all 0.4s; + transition: all 0.4s; +} +.container .tabs > .nav-tabs > .tab i { + width: 1.5em; +} +.container .tabs > .nav-tabs > .tab.active { + border-top: 2px solid #57c0de; + background: var(--tab-button-active-bg); + cursor: default; +} +.container .tabs > .nav-tabs > .tab:not(.active):hover { + border-top: 2px solid var(--tab-button-hover-bg); + background: var(--tab-button-hover-bg); +} +.container .tabs > .nav-tabs.no-default ~ .tab-to-top { + display: none; +} +.container .tabs > .tab-contents .tab-item-content { + position: relative; + display: none; + padding: 36px 24px 10px; +} +@media screen and (max-width: 768px) { + .container .tabs > .tab-contents .tab-item-content { + padding: 24px 14px; + } +} +.container .tabs > .tab-contents .tab-item-content.active { + display: block; + -webkit-animation: tabshow 0.5s; + -moz-animation: tabshow 0.5s; + -o-animation: tabshow 0.5s; + -ms-animation: tabshow 0.5s; + animation: tabshow 0.5s; +} +.container .tabs > .tab-contents .tab-item-content > :last-child { + margin-bottom: 0; +} +.container .tabs > .tab-to-top { + padding: 0 16px 10px 0; + width: 100%; + text-align: right; +} +.container .tabs > .tab-to-top button { + color: #99a9bf; +} +.container .tabs > .tab-to-top button:hover { + color: #57c0de; +} +@-moz-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes tabshow { + 0% { + -webkit-transform: translateY(15px); + -moz-transform: translateY(15px); + -o-transform: translateY(15px); + -ms-transform: translateY(15px); + transform: translateY(15px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -o-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + } +} +.container .timeline { + margin: 0 10px 20px; + padding: 14px 0 5px 20px; + border-left: 2px solid var(--timeline-color, #57c0de); +} +.container .timeline.blue { + --timeline-color: #428bca; + --timeline-bg: rgba(66,139,202, 0.2); +} +.container .timeline.pink { + --timeline-color: #ff69b4; + --timeline-bg: rgba(255,105,180, 0.2); +} +.container .timeline.red { + --timeline-color: #f00; + --timeline-bg: rgba(255,0,0, 0.2); +} +.container .timeline.purple { + --timeline-color: #6f42c1; + --timeline-bg: rgba(111,66,193, 0.2); +} +.container .timeline.orange { + --timeline-color: #ff8c00; + --timeline-bg: rgba(255,140,0, 0.2); +} +.container .timeline.green { + --timeline-color: #5cb85c; + --timeline-bg: rgba(92,184,92, 0.2); +} +.container .timeline .timeline-item { + margin: 0 0 15px; +} +.container .timeline .timeline-item:hover .item-circle:before { + border-color: var(--timeline-color, #57c0de); +} +.container .timeline .timeline-item.headline .timeline-item-title .item-circle > p { + font-weight: 600; + font-size: 1.2em; +} +.container .timeline .timeline-item.headline .timeline-item-title .item-circle:before { + left: -28px; + border: 4px solid var(--timeline-color, #57c0de); +} +.container .timeline .timeline-item.headline:hover .item-circle:before { + border-color: var(--pseudo-hover); +} +.container .timeline .timeline-item .timeline-item-title { + position: relative; +} +.container .timeline .timeline-item .item-circle:before { + position: absolute; + top: 50%; + left: -27px; + width: 6px; + height: 6px; + border: 3px solid var(--pseudo-hover); + border-radius: 50%; + background: var(--card-bg); + content: ''; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -ms-transition: all 0.3s; + transition: all 0.3s; + -webkit-transform: translate(0, -50%); + -moz-transform: translate(0, -50%); + -o-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); +} +.container .timeline .timeline-item .item-circle > p { + margin: 0 0 8px; + font-weight: 500; +} +.container .timeline .timeline-item .timeline-item-content { + position: relative; + padding: 12px 15px; + border-radius: 8px; + background: var(--timeline-bg, #e6f6fa); + font-size: 0.93em; +} +.container .timeline .timeline-item .timeline-item-content > :last-child { + margin-bottom: 0; +} +.container .timeline + .timeline { + margin-top: -20px; +} +[data-theme='dark'] { + --global-bg: #0d0d0d; + --font-color: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.4); + --hr-before-color: rgba(255,255,255,0.7); + --search-bg: #121212; + --search-input-color: rgba(255,255,255,0.7); + --search-a-color: rgba(255,255,255,0.7); + --preloader-bg: #0d0d0d; + --preloader-color: rgba(255,255,255,0.7); + --tab-border-color: #2c2c2c; + --tab-button-bg: #2c2c2c; + --tab-button-color: rgba(255,255,255,0.7); + --tab-button-hover-bg: #383838; + --tab-button-active-bg: #121212; + --card-bg: #121212; + --sidebar-bg: #121212; + --sidebar-menu-bg: #1f1f1f; + --btn-hover-color: #787878; + --btn-color: rgba(255,255,255,0.7); + --btn-bg: #1f1f1f; + --text-bg-hover: #383838; + --light-grey: rgba(255,255,255,0.7); + --dark-grey: rgba(255,255,255,0.2); + --white: rgba(255,255,255,0.9); + --text-highlight-color: rgba(255,255,255,0.9); + --blockquote-color: rgba(255,255,255,0.7); + --blockquote-bg: #2c2c2c; + --reward-pop: #2c2c2c; + --toc-link-color: rgba(255,255,255,0.6); + --scrollbar-color: #525252; + --timeline-bg: #1f1f1f; + --zoom-bg: #121212; + --mark-bg: rgba(0,0,0,0.6); + --btn-color: #ccc; + --btn-default-color: #929292; + --tags-blue-color: #3e6f98; + --tags-blue-color-lighten: rgba(66,139,202,0.15); + --tags-pink-color: #dd3c8c; + --tags-pink-color-lighten: rgba(255,105,180,0.15); + --tags-red-color: #a41b1b; + --tags-red-color-lighten: rgba(255,0,0,0.15); + --tags-orange-color: #a76a20; + --tags-orange-color-lighten: rgba(255,140,0,0.15); + --tags-purple-color: #5f4490; + --tags-purple-color-lighten: rgba(111,66,193,0.15); + --tags-green-color: #4f8e4f; + --tags-green-color-lighten: rgba(92,184,92,0.15); + --note-default-border: #5a5a5a; + --note-default-bg: #2b2b2b; + --note-default-text: #b3b3b3; + --note-modern-default-border: #9a9a9a; + --note-modern-default-bg: #353535; + --note-modern-default-text: #c4c4c4; + --note-primary-border: #5935a1; + --note-primary-bg: #2e1c3e; + --note-primary-text: #a47dd4; + --note-modern-primary-border: #9985cc; + --note-modern-primary-bg: #3c2d4c; + --note-modern-primary-text: #b693e6; + --note-info-border: #346fa2; + --note-info-bg: #1f2e3b; + --note-info-text: #7bb3db; + --note-modern-info-border: #7ca8b5; + --note-modern-info-bg: #2b3c44; + --note-modern-info-text: #8fc6e0; + --note-success-border: #4a944a; + --note-success-bg: #202e20; + --note-success-text: #82c682; + --note-modern-success-border: #8bb087; + --note-modern-success-bg: #2c3d2c; + --note-modern-success-text: #96d196; + --note-warning-border: #c08a3e; + --note-warning-bg: #3e301f; + --note-warning-text: #e6ba6b; + --note-modern-warning-border: #b8a285; + --note-modern-warning-bg: #4b3c2b; + --note-modern-warning-text: #d4b373; + --note-danger-border: #b34440; + --note-danger-bg: #3b201f; + --note-danger-text: #e67572; + --note-modern-danger-border: #c7898c; + --note-modern-danger-bg: #4d2b2e; + --note-modern-danger-text: #d98b8e; +} +[data-theme='dark'] #web_bg:before { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.7); + content: ''; +} +[data-theme='dark'] .container code { + background: #2c2c2c; +} +[data-theme='dark'] .container pre > code { + background: #171717; +} +[data-theme='dark'] .container figure.highlight { + -webkit-box-shadow: none; + box-shadow: none; +} +[data-theme='dark'] .container .note code { + background: rgba(27,31,35,0.05); +} +[data-theme='dark'] .container .aplayer { + filter: brightness(0.8); +} +[data-theme='dark'] .container kbd { + border-color: #696969; + background-color: #525252; + color: #e2f1ff; +} +[data-theme='dark'] #page-header.nav-fixed > #nav, +[data-theme='dark'] #page-header.not-top-img > #nav { + background: rgba(18,18,18,0.8); + -webkit-box-shadow: 0 5px 6px -5px rgba(133,133,133,0); + box-shadow: 0 5px 6px -5px rgba(133,133,133,0); +} +[data-theme='dark'] #post-comment .comment-switch { + background: #2c2c2c !important; +} +[data-theme='dark'] #post-comment .comment-switch #switch-btn { + filter: brightness(0.8); +} +[data-theme='dark'] .hide-button, +[data-theme='dark'] #post-outdate-notice, +[data-theme='dark'] .error-img, +[data-theme='dark'] .container iframe, +[data-theme='dark'] .gist, +[data-theme='dark'] .ads-wrap, +[data-theme='dark'] .tag-cloud-list > a { + filter: brightness(0.8); +} +[data-theme='dark'] img:not(.cover) { + filter: blur(0) brightness(0.8); +} +[data-theme='dark'] #aside-content .aside-list > .aside-list-item:not(:last-child) { + border-bottom: 1px dashed rgba(255,255,255,0.1); +} +[data-theme='dark'] #gitalk-container { + filter: brightness(0.8); +} +[data-theme='dark'] #gitalk-container svg { + fill: rgba(255,255,255,0.9) !important; +} +[data-theme='dark'] #disqusjs #dsqjs:hover, +[data-theme='dark'] #disqusjs #dsqjs:focus, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-tab-active, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-no-comment { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-order-label { + background-color: #1f1f1f; +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body code, +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body pre { + background: #2c2c2c; +} +[data-theme='dark'] #disqusjs #dsqjs .dsqjs-post-body blockquote { + color: rgba(255,255,255,0.7); +} +[data-theme='dark'] #artitalk_main #lazy { + background: #121212; +} +[data-theme='dark'] #operare_artitalk .c2 { + background: #121212; +} +@media screen and (max-width: 900px) { + [data-theme='dark'] #card-toc { + background: #1f1f1f; + } +} +[data-theme='dark'] .artalk.atk-dark-mode, +[data-theme='dark'] .atk-layer-wrap.atk-dark-mode { + --at-color-font: rgba(255,255,255,0.7); + --at-color-meta: rgba(255,255,255,0.7); + --at-color-grey: rgba(255,255,255,0.7); +} +[data-theme='dark'] .atk-send-btn, +[data-theme='dark'] .atk-badge { + color: rgba(255,255,255,0.7) !important; +} +[data-theme='dark'] #waline-wrap { + --waline-color: rgba(255,255,255,0.7); + --waline-dark-grey: rgba(255,255,255,0.7); + --waline-info-color: rgba(255,255,255,0.5); +} +.read-mode { + --font-color: #4c4948; + --readmode-light-color: #fff; + --white: #4c4948; + --light-grey: #4c4948; + --gray: #d6dbdf; + --hr-border: #d6dbdf; + --hr-before-color: #b9c2c9; + --highlight-bg: #f7f7f7; + --exit-btn-bg: #c0c0c0; + --exit-btn-color: #fff; + --exit-btn-hover: #8d8d8d; + --pseudo-hover: none; +} +[data-theme='dark'] .read-mode { + --font-color: rgba(255,255,255,0.7); + --readmode-light-color: #0d0d0d; + --white: rgba(255,255,255,0.9); + --light-grey: rgba(255,255,255,0.7); + --gray: rgba(255,255,255,0.7); + --hr-border: rgba(255,255,255,0.5); + --hr-before-color: rgba(255,255,255,0.7); + --highlight-bg: #171717; + --exit-btn-bg: #1f1f1f; + --exit-btn-color: rgba(255,255,255,0.9); + --exit-btn-hover: #525252; +} +.read-mode { + background: var(--readmode-light-color); +} +.read-mode .exit-readmode { + position: fixed; + top: 30px; + right: 30px; + z-index: 100; + width: 40px; + height: 40px; + background: var(--exit-btn-bg); + color: var(--exit-btn-color); + font-size: 16px; + -webkit-transition: background 0.3s; + -moz-transition: background 0.3s; + -o-transition: background 0.3s; + -ms-transition: background 0.3s; + transition: background 0.3s; + border-radius: 8px; +} +@media screen and (max-width: 768px) { + .read-mode .exit-readmode { + top: initial; + bottom: 30px; + } +} +.read-mode .exit-readmode:hover { + background: var(--exit-btn-hover); +} +.read-mode #aside-content { + display: none; +} +.read-mode #page-header.post-bg { + background: none !important; +} +.read-mode #page-header.post-bg:before { + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); +} +.read-mode #page-header.post-bg > #post-info { + text-align: center; +} +.read-mode #post { + margin: 0 auto; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode #post:hover { + -webkit-box-shadow: none; + box-shadow: none; +} +.read-mode > canvas { + display: none !important; +} +.read-mode .highlight-tools, +.read-mode #footer, +.read-mode #post > *:not(#post-info):not(.post-content), +.read-mode #nav, +.read-mode #post-outdate-notice, +.read-mode #web_bg, +.read-mode #rightside, +.read-mode .not-top-img { + display: none !important; +} +.read-mode .container a { + color: #99a9bf; +} +.read-mode .container pre, +.read-mode .container .highlight:not(.js-file-line-container) { + background: var(--highlight-bg) !important; +} +.read-mode .container pre *, +.read-mode .container .highlight:not(.js-file-line-container) * { + color: var(--font-color) !important; +} +.read-mode .container figure.highlight { + border-radius: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.read-mode .container figure.highlight > :not(.highlight-tools) { + display: block !important; +} +.read-mode .container figure.highlight .line:before { + color: var(--font-color) !important; +} +.read-mode .container figure.highlight .hljs { + background: var(--highlight-bg) !important; +} +.read-mode .container h1, +.read-mode .container h2, +.read-mode .container h3, +.read-mode .container h4, +.read-mode .container h5, +.read-mode .container h6 { + padding: 0; +} +.read-mode .container h1:before, +.read-mode .container h2:before, +.read-mode .container h3:before, +.read-mode .container h4:before, +.read-mode .container h5:before, +.read-mode .container h6:before { + content: ''; +} +.read-mode .container h1:hover, +.read-mode .container h2:hover, +.read-mode .container h3:hover, +.read-mode .container h4:hover, +.read-mode .container h5:hover, +.read-mode .container h6:hover { + padding: 0; +} +.read-mode .container ul:hover:before, +.read-mode .container li:hover:before, +.read-mode .container ol:hover:before { + -webkit-transform: none !important; + -moz-transform: none !important; + -o-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} +.read-mode .container ol:before, +.read-mode .container li:before { + background: transparent !important; + color: var(--font-color) !important; +} +.read-mode .container ul >li:before { + border-color: var(--gray) !important; +} +.read-mode .container .tabs { + border: 2px solid var(--tab-border-color); +} +.read-mode .container .tabs > .nav-tabs { + background: transparent; +} +.read-mode .container .tabs > .nav-tabs > .tab { + border-top: none !important; +} +.read-mode .container .tabs > .tab-contents .tab-item-content.active { + -webkit-animation: none; + -moz-animation: none; + -o-animation: none; + -ms-animation: none; + animation: none; +} +.read-mode .container code { + color: var(--font-color); +} +.read-mode .container blockquote { + border-color: var(--gray); + background-color: var(--readmode-light-color); +} +.read-mode .container kbd { + border: 1px solid var(--gray); + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: var(--font-color); +} +.read-mode .container .hide-toggle { + border: 1px solid var(--gray) !important; +} +.read-mode .container .hide-button, +.read-mode .container .btn-beautify, +.read-mode .container .hl-label { + border: 1px solid var(--gray) !important; + background: var(--readmode-light-color) !important; + color: var(--font-color) !important; +} +.read-mode .container .note { + border: 2px solid var(--gray); + border-left-color: var(--gray) !important; + filter: none; + background-color: var(--readmode-light-color) !important; + color: var(--font-color); +} +.read-mode .container .note:before, +.read-mode .container .note .note-icon { + color: var(--font-color); +} +.search-dialog { + position: fixed; + top: 10%; + left: 50%; + z-index: 1001; + display: none; + margin-left: -300px; + padding: 20px; + width: 600px; + background: var(--search-bg); + --search-height: 100vh; + border-radius: 8px; +} +@media screen and (max-width: 768px) { + .search-dialog { + top: 0; + left: 0; + margin: 0; + width: 100%; + height: 100%; + border-radius: 0; + } +} +.search-dialog .search-nav { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-bottom: 14px; + color: #57c0de; + font-size: 1.4em; + line-height: 1; +} +.search-dialog .search-nav .search-dialog-title { + margin-right: 4px; +} +.search-dialog .search-nav #loading-status[hidden] { + display: none !important; +} +.search-dialog .search-nav .search-close-button { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + color: #858585; + text-align: right; + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + -ms-transition: all 0.2s ease; + transition: all 0.2s ease; +} +.search-dialog .search-nav .search-close-button:hover { + color: #57c0de; +} +.search-dialog .local-search-input, +.search-dialog #algolia-search-input { + margin: 0 auto; + max-width: 100%; + width: 100%; +} +.search-dialog .local-search-input input, +.search-dialog #algolia-search-input input, +.search-dialog .local-search-input .ais-SearchBox-input, +.search-dialog #algolia-search-input .ais-SearchBox-input { + padding: 5px 14px; + width: 100%; + outline: none; + border: 2px solid #57c0de; + border-radius: 40px; + background: var(--search-bg); + color: var(--search-input-color); + -webkit-appearance: none; +} +.search-dialog .local-search-input input::placeholder, +.search-dialog #algolia-search-input input::placeholder, +.search-dialog .local-search-input .ais-SearchBox-input::placeholder, +.search-dialog #algolia-search-input .ais-SearchBox-input::placeholder { + color: var(--text-color); +} +.search-dialog .search-result-list, +.search-dialog .ais-Hits-list { + overflow-y: overlay; + margin: 0 -20px; + padding: 0 22px; + max-height: calc(80vh - 220px); +} +.search-dialog .search-result-list .local-search-hit-item, +.search-dialog .ais-Hits-list .local-search-hit-item, +.search-dialog .search-result-list .ais-Hits-item, +.search-dialog .ais-Hits-list .ais-Hits-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start; + margin: 3px 0; + line-height: 1.8; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.search-dialog .search-result-list .local-search-hit-item:hover, +.search-dialog .ais-Hits-list .local-search-hit-item:hover, +.search-dialog .search-result-list .ais-Hits-item:hover, +.search-dialog .ais-Hits-list .ais-Hits-item:hover { + -webkit-transform: translateY(-1px); + -moz-transform: translateY(-1px); + -o-transform: translateY(-1px); + -ms-transform: translateY(-1px); + transform: translateY(-1px); +} +.search-dialog .search-result-list .local-search-hit-item:not([value])::before, +.search-dialog .ais-Hits-list .local-search-hit-item:not([value])::before, +.search-dialog .search-result-list .ais-Hits-item:not([value])::before, +.search-dialog .ais-Hits-list .ais-Hits-item:not([value])::before { + display: none; +} +.search-dialog .search-result-list .local-search-hit-item[value]::before, +.search-dialog .ais-Hits-list .local-search-hit-item[value]::before, +.search-dialog .search-result-list .ais-Hits-item[value]::before, +.search-dialog .ais-Hits-list .ais-Hits-item[value]::before { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-flex-shrink: 0; + flex-shrink: 0; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin-right: 6px; + min-width: 24px; + color: #57c0de; + content: attr(value) '.'; + font-weight: bold; + font-style: italic; + font-size: 0.9em; +} +.search-dialog .search-result-list .local-search-hit-item::marker, +.search-dialog .ais-Hits-list .local-search-hit-item::marker, +.search-dialog .search-result-list .ais-Hits-item::marker, +.search-dialog .ais-Hits-list .ais-Hits-item::marker { + content: none; +} +.search-dialog .search-result-list .local-search-hit-item a, +.search-dialog .ais-Hits-list .local-search-hit-item a, +.search-dialog .search-result-list .ais-Hits-item a, +.search-dialog .ais-Hits-list .ais-Hits-item a { + -webkit-box-flex: 1; + -moz-box-flex: 1; + -o-box-flex: 1; + box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + color: var(--search-a-color); +} +.search-dialog .search-result-list .local-search-hit-item a:hover, +.search-dialog .ais-Hits-list .local-search-hit-item a:hover, +.search-dialog .search-result-list .ais-Hits-item a:hover, +.search-dialog .ais-Hits-list .ais-Hits-item a:hover { + color: #57c0de; +} +.search-dialog .search-result-list .local-search-hit-item .search-result-title, +.search-dialog .ais-Hits-list .local-search-hit-item .search-result-title, +.search-dialog .search-result-list .ais-Hits-item .search-result-title, +.search-dialog .ais-Hits-list .ais-Hits-item .search-result-title, +.search-dialog .search-result-list .local-search-hit-item .algolia-hits-item-title, +.search-dialog .ais-Hits-list .local-search-hit-item .algolia-hits-item-title, +.search-dialog .search-result-list .ais-Hits-item .algolia-hits-item-title, +.search-dialog .ais-Hits-list .ais-Hits-item .algolia-hits-item-title { + font-weight: 600; +} +.search-dialog .search-result-list .local-search-hit-item .search-result, +.search-dialog .ais-Hits-list .local-search-hit-item .search-result, +.search-dialog .search-result-list .ais-Hits-item .search-result, +.search-dialog .ais-Hits-list .ais-Hits-item .search-result, +.search-dialog .search-result-list .local-search-hit-item .algolia-hit-item-content, +.search-dialog .ais-Hits-list .local-search-hit-item .algolia-hit-item-content, +.search-dialog .search-result-list .ais-Hits-item .algolia-hit-item-content, +.search-dialog .ais-Hits-list .ais-Hits-item .algolia-hit-item-content { + margin: 0 0 8px; + word-break: break-all; + font-size: 0.9em; +} +.search-dialog .ais-Pagination { + margin: 15px 0 0; + padding: 0; + text-align: center; +} +.search-dialog .ais-Pagination .ais-Pagination-list { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + margin: 0; + padding: 0; + list-style: none; + gap: 6px; +} +.search-dialog .ais-Pagination .ais-Pagination-item { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + padding: 0; +} +.search-dialog .ais-Pagination .ais-Pagination-item:not(.ais-Pagination-item--selected):not(.ais-Pagination-item--ellipsis):not(.ais-Pagination-item--disabled) .ais-Pagination-link:hover { + background: var(--btn-hover-color); + -webkit-transform: translateY(-1px); + -moz-transform: translateY(-1px); + -o-transform: translateY(-1px); + -ms-transform: translateY(-1px); + transform: translateY(-1px); +} +.search-dialog .ais-Pagination .ais-Pagination-item .ais-Pagination-link { + display: -webkit-inline-box; + display: -moz-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-box; + display: inline-flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 4px 8px; + min-width: 28px; + height: 28px; + border-radius: 6px; + background: var(--btn-bg); + color: var(--btn-color); + -webkit-transition: all 0.2s ease; + -moz-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + -ms-transition: all 0.2s ease; + transition: all 0.2s ease; +} +.search-dialog .ais-Pagination .ais-Pagination-item .ais-Pagination-link.ais-Pagination-link--disabled { + opacity: 0.3; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + filter: alpha(opacity=30); + cursor: not-allowed; +} +.search-dialog .ais-Pagination .ais-Pagination-item .ais-Pagination-link i { + font-size: 12px; +} +.search-dialog .ais-Pagination .ais-Pagination-item--selected .ais-Pagination-link { + background: #57c0de; + font-weight: 600; + cursor: default; +} +.search-dialog .ais-Pagination .ais-Pagination-item--ellipsis .ais-Pagination-link { + padding: 4px 2px; + border: none; + background: transparent; + color: var(--text-color); + cursor: default; +} +.search-dialog .ais-Pagination .ais-Pagination-item--ellipsis .ais-Pagination-link:hover { + background: transparent; + -webkit-transform: none; + -moz-transform: none; + -o-transform: none; + -ms-transform: none; + transform: none; +} +.search-dialog .ais-Pagination .ais-Pagination-item--disabled .ais-Pagination-link { + opacity: 0.4; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + filter: alpha(opacity=40); +} +@media screen and (max-width: 768px) { + .search-dialog .ais-Pagination .ais-Pagination-list { + gap: 4px; + } +} +.search-dialog hr { + margin: 15px auto; +} +#search-mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + display: none; + background: rgba(0,0,0,0.6); +} +.search-result-stats, +.ais-Stats-text { + margin: 15px 0 0; + color: var(--text-color); + text-align: center; + font-size: 0.9em; +} +.search-keyword { + background: transparent; + color: #f47466; + font-weight: 600; +} +.search-loading { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: box; + display: flex; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + padding: 20px; + color: var(--text-color); +} +.search-loading::before { + width: 16px; + height: 16px; + border: 2px solid var(--text-color); + border-top-color: transparent; + border-radius: 50%; + content: ''; + -webkit-animation: spin 1s linear infinite; + -moz-animation: spin 1s linear infinite; + -o-animation: spin 1s linear infinite; + -ms-animation: spin 1s linear infinite; + animation: spin 1s linear infinite; +} +@-moz-keyframes spin { + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes spin { + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes spin { + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes spin { + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -o-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} diff --git a/css/tools.css b/css/tools.css new file mode 100644 index 0000000..05dcf3b --- /dev/null +++ b/css/tools.css @@ -0,0 +1,94 @@ +/* Shared Tools CSS */ +.tool-container { + max-width: 900px; + margin: 0 auto; + padding: 20px; +} +.tool-section { + background: #fff; + border-radius: 8px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 4px 10px rgba(0,0,0,0.05); + /* Fix layout jitter */ + min-height: 100px; + transition: height 0.3s ease; +} +[data-theme='dark'] .tool-section { + background: #2c2c2c; + color: #eee; +} +.tool-title { + font-size: 1.3em; + margin-bottom: 20px; + border-left: 5px solid #49b1f5; + padding-left: 10px; + font-weight: bold; +} +input[type="text"], input[type="number"], select, textarea { + padding: 8px 12px; + border: 1px solid #ddd; + border-radius: 4px; + font-family: inherit; + background: #fff; + color: #333; +} +[data-theme='dark'] input, [data-theme='dark'] select, [data-theme='dark'] textarea { + background: #444; + border: 1px solid #555; + color: #eee; +} +.btn { + padding: 8px 20px; + background: #49b1f5; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + transition: background 0.3s, transform 0.2s; + text-decoration: none; + display: inline-block; + font-size: 14px; +} +.btn:hover { + background: #ff7242; + color: white; + transform: translateY(-2px); +} +.btn:disabled { + background: #ccc; + cursor: not-allowed; + transform: none; +} +.upload-box { + border: 2px dashed #ddd; + padding: 30px; + text-align: center; + border-radius: 8px; + cursor: pointer; + background: #f9f9f9; + transition: all 0.3s; +} +.upload-box:hover { + border-color: #49b1f5; + background: #eef4fe; +} +[data-theme='dark'] .upload-box { + background: #333; + border-color: #555; +} + +/* Fix: Disable animations on inputs to prevent theme "power mode" shake */ +.tool-container input, +.tool-container textarea, +.tool-container select { + animation: none !important; + /* Allow native focus ring and transitions */ +} + +/* Fix: Stop theme clicking effects visual interference if possible via CSS */ +/* Note: JS stopPropagation is the main fix, this is fallback */ +.tool-container { + position: relative; + z-index: 10; /* Ensure above background canvas effects */ +} diff --git a/placeholder b/css/var.css similarity index 100% rename from placeholder rename to css/var.css diff --git a/img/-ive alive.avif b/img/-ive alive.avif new file mode 100644 index 0000000..c65a42e Binary files /dev/null and b/img/-ive alive.avif differ diff --git a/img/-ive alive.png b/img/-ive alive.png new file mode 100644 index 0000000..10e8877 Binary files /dev/null and b/img/-ive alive.png differ diff --git a/img/-ive alive.webp b/img/-ive alive.webp new file mode 100644 index 0000000..f48952c Binary files /dev/null and b/img/-ive alive.webp differ diff --git a/img/0.5线下.avif b/img/0.5线下.avif new file mode 100644 index 0000000..27488e7 Binary files /dev/null and b/img/0.5线下.avif differ diff --git a/img/0.5线下.png b/img/0.5线下.png new file mode 100644 index 0000000..f341b1e Binary files /dev/null and b/img/0.5线下.png differ diff --git a/img/0.5线下.webp b/img/0.5线下.webp new file mode 100644 index 0000000..04a26bd Binary files /dev/null and b/img/0.5线下.webp differ diff --git a/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.avif b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.avif new file mode 100644 index 0000000..6f3d881 Binary files /dev/null and b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.avif differ diff --git a/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.jpg b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.jpg new file mode 100644 index 0000000..9b27931 Binary files /dev/null and b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.jpg differ diff --git a/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.webp b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.webp new file mode 100644 index 0000000..3785368 Binary files /dev/null and b/img/001XLgxdly1hqooz128yyj60ku0rsk7q02.webp differ diff --git a/img/006.avif b/img/006.avif new file mode 100644 index 0000000..7a5e0f7 Binary files /dev/null and b/img/006.avif differ diff --git a/img/006.png b/img/006.png new file mode 100644 index 0000000..b1d1a17 Binary files /dev/null and b/img/006.png differ diff --git a/img/006.webp b/img/006.webp new file mode 100644 index 0000000..e5570ec Binary files /dev/null and b/img/006.webp differ diff --git a/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.avif b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.avif new file mode 100644 index 0000000..aa78dfa Binary files /dev/null and b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.avif differ diff --git a/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.jpg b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.jpg new file mode 100644 index 0000000..43ebbf3 Binary files /dev/null and b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.jpg differ diff --git a/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.webp b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.webp new file mode 100644 index 0000000..01947a4 Binary files /dev/null and b/img/006yPoYygy1hs9z0jk9hoj31hc0u0k9k.webp differ diff --git a/img/006yPoYygy1htn91chdlfj31hc0u01fz.avif b/img/006yPoYygy1htn91chdlfj31hc0u01fz.avif new file mode 100644 index 0000000..dca1114 Binary files /dev/null and b/img/006yPoYygy1htn91chdlfj31hc0u01fz.avif differ diff --git a/img/006yPoYygy1htn91chdlfj31hc0u01fz.jpg b/img/006yPoYygy1htn91chdlfj31hc0u01fz.jpg new file mode 100644 index 0000000..19261c5 Binary files /dev/null and b/img/006yPoYygy1htn91chdlfj31hc0u01fz.jpg differ diff --git a/img/006yPoYygy1htn91chdlfj31hc0u01fz.webp b/img/006yPoYygy1htn91chdlfj31hc0u01fz.webp new file mode 100644 index 0000000..ade1f93 Binary files /dev/null and b/img/006yPoYygy1htn91chdlfj31hc0u01fz.webp differ diff --git a/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.avif b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.avif new file mode 100644 index 0000000..3a26256 Binary files /dev/null and b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.avif differ diff --git a/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.jpg b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.jpg new file mode 100644 index 0000000..4cabf0d Binary files /dev/null and b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.jpg differ diff --git a/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.webp b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.webp new file mode 100644 index 0000000..471991d Binary files /dev/null and b/img/006yPoYygy1hv4ot0wklsj31hc0u0x5o.webp differ diff --git a/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.avif b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.avif new file mode 100644 index 0000000..7633a13 Binary files /dev/null and b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.avif differ diff --git a/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.jpg b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.jpg new file mode 100644 index 0000000..71b8b84 Binary files /dev/null and b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.jpg differ diff --git a/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.webp b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.webp new file mode 100644 index 0000000..f82421e Binary files /dev/null and b/img/006yPoYygy1hvjdkiwhx3j30xc1m1ha6.webp differ diff --git a/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.avif b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.avif new file mode 100644 index 0000000..8490710 Binary files /dev/null and b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.avif differ diff --git a/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.jpg b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.jpg new file mode 100644 index 0000000..a3549d6 Binary files /dev/null and b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.jpg differ diff --git a/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.webp b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.webp new file mode 100644 index 0000000..7b2dd94 Binary files /dev/null and b/img/006yPoYygy1i3o1tp1cfmj31hc0u0x6p.webp differ diff --git a/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.avif b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.avif new file mode 100644 index 0000000..e2f6255 Binary files /dev/null and b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.avif differ diff --git a/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.jpg b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.jpg new file mode 100644 index 0000000..0ecb44c Binary files /dev/null and b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.jpg differ diff --git a/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.webp b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.webp new file mode 100644 index 0000000..9f32d78 Binary files /dev/null and b/img/006yPoYygy1i3o1vk4zujj31hc0u0npd.webp differ diff --git a/img/006yPoYygy1i3tqa435szj31hc0u0npe.avif b/img/006yPoYygy1i3tqa435szj31hc0u0npe.avif new file mode 100644 index 0000000..2fd8e37 Binary files /dev/null and b/img/006yPoYygy1i3tqa435szj31hc0u0npe.avif differ diff --git a/img/006yPoYygy1i3tqa435szj31hc0u0npe.jpg b/img/006yPoYygy1i3tqa435szj31hc0u0npe.jpg new file mode 100644 index 0000000..e722749 Binary files /dev/null and b/img/006yPoYygy1i3tqa435szj31hc0u0npe.jpg differ diff --git a/img/006yPoYygy1i3tqa435szj31hc0u0npe.webp b/img/006yPoYygy1i3tqa435szj31hc0u0npe.webp new file mode 100644 index 0000000..da6d548 Binary files /dev/null and b/img/006yPoYygy1i3tqa435szj31hc0u0npe.webp differ diff --git a/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.avif b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.avif new file mode 100644 index 0000000..2fe6f16 Binary files /dev/null and b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.avif differ diff --git a/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.jpg b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.jpg new file mode 100644 index 0000000..f73b171 Binary files /dev/null and b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.jpg differ diff --git a/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.webp b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.webp new file mode 100644 index 0000000..40dd752 Binary files /dev/null and b/img/006yPoYygy1i3tqe74dtlj31hc0u0u0x.webp differ diff --git a/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.avif b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.avif new file mode 100644 index 0000000..8c98b77 Binary files /dev/null and b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.avif differ diff --git a/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.jpg b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.jpg new file mode 100644 index 0000000..26f96bf Binary files /dev/null and b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.jpg differ diff --git a/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.webp b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.webp new file mode 100644 index 0000000..450c2a6 Binary files /dev/null and b/img/006yPoYygy1i3tqencsfwj31hc0u0b2a.webp differ diff --git a/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.avif b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.avif new file mode 100644 index 0000000..53ceecf Binary files /dev/null and b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.avif differ diff --git a/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.jpg b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.jpg new file mode 100644 index 0000000..7924290 Binary files /dev/null and b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.jpg differ diff --git a/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.webp b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.webp new file mode 100644 index 0000000..9d84ff3 Binary files /dev/null and b/img/006yPoYygy1i3x1fgzfb1j31hc0u07wi.webp differ diff --git a/img/0076yzjUgy1hs534d5xfhj30m80m8afn.avif b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.avif new file mode 100644 index 0000000..7c7cf2c Binary files /dev/null and b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.avif differ diff --git a/img/0076yzjUgy1hs534d5xfhj30m80m8afn.jpg b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.jpg new file mode 100644 index 0000000..2dc8a1b Binary files /dev/null and b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.jpg differ diff --git a/img/0076yzjUgy1hs534d5xfhj30m80m8afn.webp b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.webp new file mode 100644 index 0000000..02159b3 Binary files /dev/null and b/img/0076yzjUgy1hs534d5xfhj30m80m8afn.webp differ diff --git a/img/008.avif b/img/008.avif new file mode 100644 index 0000000..df89c43 Binary files /dev/null and b/img/008.avif differ diff --git a/img/008.png b/img/008.png new file mode 100644 index 0000000..4f25045 Binary files /dev/null and b/img/008.png differ diff --git a/img/008.webp b/img/008.webp new file mode 100644 index 0000000..144295b Binary files /dev/null and b/img/008.webp differ diff --git a/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.avif b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.avif new file mode 100644 index 0000000..3e9ecf3 Binary files /dev/null and b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.avif differ diff --git a/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.jpg b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.jpg new file mode 100644 index 0000000..6fc60aa Binary files /dev/null and b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.jpg differ diff --git a/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.webp b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.webp new file mode 100644 index 0000000..f057eb6 Binary files /dev/null and b/img/008ybfh5gy1hqfq5dytg9j30yi1a4e81.webp differ diff --git a/img/008ybfh5gy1hrcytuty3dj324c2arnpd.avif b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.avif new file mode 100644 index 0000000..6c1996f Binary files /dev/null and b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.avif differ diff --git a/img/008ybfh5gy1hrcytuty3dj324c2arnpd.jpg b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.jpg new file mode 100644 index 0000000..741f008 Binary files /dev/null and b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.jpg differ diff --git a/img/008ybfh5gy1hrcytuty3dj324c2arnpd.webp b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.webp new file mode 100644 index 0000000..a4f4703 Binary files /dev/null and b/img/008ybfh5gy1hrcytuty3dj324c2arnpd.webp differ diff --git a/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.avif b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.avif new file mode 100644 index 0000000..978497d Binary files /dev/null and b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.avif differ diff --git a/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.jpg b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.jpg new file mode 100644 index 0000000..aabb82a Binary files /dev/null and b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.jpg differ diff --git a/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.webp b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.webp new file mode 100644 index 0000000..c124e19 Binary files /dev/null and b/img/008ybfh5gy1hrcyvhq6cpj32a32asb2a.webp differ diff --git a/img/008ybfh5gy1hrcywwe235j328i2bb4qq.avif b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.avif new file mode 100644 index 0000000..c63cb7d Binary files /dev/null and b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.avif differ diff --git a/img/008ybfh5gy1hrcywwe235j328i2bb4qq.jpg b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.jpg new file mode 100644 index 0000000..14ca48b Binary files /dev/null and b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.jpg differ diff --git a/img/008ybfh5gy1hrcywwe235j328i2bb4qq.webp b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.webp new file mode 100644 index 0000000..8d100a1 Binary files /dev/null and b/img/008ybfh5gy1hrcywwe235j328i2bb4qq.webp differ diff --git a/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.avif b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.avif new file mode 100644 index 0000000..53a84cf Binary files /dev/null and b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.avif differ diff --git a/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.jpg b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.jpg new file mode 100644 index 0000000..983119f Binary files /dev/null and b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.jpg differ diff --git a/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.webp b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.webp new file mode 100644 index 0000000..1a6a61e Binary files /dev/null and b/img/008ybfh5gy1hrcyxvw09qj32b32azkjm.webp differ diff --git a/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.avif b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.avif new file mode 100644 index 0000000..6c63a77 Binary files /dev/null and b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.avif differ diff --git a/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.jpg b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.jpg new file mode 100644 index 0000000..e8c0841 Binary files /dev/null and b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.jpg differ diff --git a/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.webp b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.webp new file mode 100644 index 0000000..c3b3a8a Binary files /dev/null and b/img/008ybfh5gy1hrtfjk5tlrj30rs0rswp2.webp differ diff --git a/img/01 (1).avif b/img/01 (1).avif new file mode 100644 index 0000000..b8f3dea Binary files /dev/null and b/img/01 (1).avif differ diff --git a/img/01 (1).jpg b/img/01 (1).jpg new file mode 100644 index 0000000..86e0a78 Binary files /dev/null and b/img/01 (1).jpg differ diff --git a/img/01 (1).webp b/img/01 (1).webp new file mode 100644 index 0000000..959f113 Binary files /dev/null and b/img/01 (1).webp differ diff --git a/img/01 (13).avif b/img/01 (13).avif new file mode 100644 index 0000000..a01e408 Binary files /dev/null and b/img/01 (13).avif differ diff --git a/img/01 (13).png b/img/01 (13).png new file mode 100644 index 0000000..240216b Binary files /dev/null and b/img/01 (13).png differ diff --git a/img/01 (13).webp b/img/01 (13).webp new file mode 100644 index 0000000..05da4df Binary files /dev/null and b/img/01 (13).webp differ diff --git a/img/01 (2).avif b/img/01 (2).avif new file mode 100644 index 0000000..03c73f6 Binary files /dev/null and b/img/01 (2).avif differ diff --git a/img/01 (2).jpg b/img/01 (2).jpg new file mode 100644 index 0000000..89f3baf Binary files /dev/null and b/img/01 (2).jpg differ diff --git a/img/01 (2).png b/img/01 (2).png new file mode 100644 index 0000000..c517304 Binary files /dev/null and b/img/01 (2).png differ diff --git a/img/01 (2).webp b/img/01 (2).webp new file mode 100644 index 0000000..310d299 Binary files /dev/null and b/img/01 (2).webp differ diff --git a/img/01 (3).avif b/img/01 (3).avif new file mode 100644 index 0000000..3536a36 Binary files /dev/null and b/img/01 (3).avif differ diff --git a/img/01 (3).jpg b/img/01 (3).jpg new file mode 100644 index 0000000..70a3d1d Binary files /dev/null and b/img/01 (3).jpg differ diff --git a/img/01 (3).png b/img/01 (3).png new file mode 100644 index 0000000..cd0408c Binary files /dev/null and b/img/01 (3).png differ diff --git a/img/01 (3).webp b/img/01 (3).webp new file mode 100644 index 0000000..3d2d735 Binary files /dev/null and b/img/01 (3).webp differ diff --git a/img/01 (4).avif b/img/01 (4).avif new file mode 100644 index 0000000..3ff017f Binary files /dev/null and b/img/01 (4).avif differ diff --git a/img/01 (4).jpg b/img/01 (4).jpg new file mode 100644 index 0000000..c05c09f Binary files /dev/null and b/img/01 (4).jpg differ diff --git a/img/01 (4).png b/img/01 (4).png new file mode 100644 index 0000000..4aa7213 Binary files /dev/null and b/img/01 (4).png differ diff --git a/img/01 (4).webp b/img/01 (4).webp new file mode 100644 index 0000000..81b3298 Binary files /dev/null and b/img/01 (4).webp differ diff --git a/img/01 (5).avif b/img/01 (5).avif new file mode 100644 index 0000000..9a19202 Binary files /dev/null and b/img/01 (5).avif differ diff --git a/img/01 (5).jpg b/img/01 (5).jpg new file mode 100644 index 0000000..af9754b Binary files /dev/null and b/img/01 (5).jpg differ diff --git a/img/01 (5).png b/img/01 (5).png new file mode 100644 index 0000000..7fa565d Binary files /dev/null and b/img/01 (5).png differ diff --git a/img/01 (5).webp b/img/01 (5).webp new file mode 100644 index 0000000..539fdbb Binary files /dev/null and b/img/01 (5).webp differ diff --git a/img/01 (6).avif b/img/01 (6).avif new file mode 100644 index 0000000..bb6b3c3 Binary files /dev/null and b/img/01 (6).avif differ diff --git a/img/01 (6).jpg b/img/01 (6).jpg new file mode 100644 index 0000000..e4e5a15 Binary files /dev/null and b/img/01 (6).jpg differ diff --git a/img/01 (6).png b/img/01 (6).png new file mode 100644 index 0000000..da88cc6 Binary files /dev/null and b/img/01 (6).png differ diff --git a/img/01 (6).webp b/img/01 (6).webp new file mode 100644 index 0000000..f8c1f6f Binary files /dev/null and b/img/01 (6).webp differ diff --git a/img/016.avif b/img/016.avif new file mode 100644 index 0000000..d979373 Binary files /dev/null and b/img/016.avif differ diff --git a/img/016.jpg b/img/016.jpg new file mode 100644 index 0000000..ec65fa4 Binary files /dev/null and b/img/016.jpg differ diff --git a/img/016.webp b/img/016.webp new file mode 100644 index 0000000..943fa33 Binary files /dev/null and b/img/016.webp differ diff --git a/img/027.avif b/img/027.avif new file mode 100644 index 0000000..34dce48 Binary files /dev/null and b/img/027.avif differ diff --git a/img/027.png b/img/027.png new file mode 100644 index 0000000..435a523 Binary files /dev/null and b/img/027.png differ diff --git a/img/027.webp b/img/027.webp new file mode 100644 index 0000000..915bdac Binary files /dev/null and b/img/027.webp differ diff --git a/img/029.avif b/img/029.avif new file mode 100644 index 0000000..a81b74a Binary files /dev/null and b/img/029.avif differ diff --git a/img/029.jpg b/img/029.jpg new file mode 100644 index 0000000..a397549 Binary files /dev/null and b/img/029.jpg differ diff --git a/img/029.webp b/img/029.webp new file mode 100644 index 0000000..f43726f Binary files /dev/null and b/img/029.webp differ diff --git a/img/040.avif b/img/040.avif new file mode 100644 index 0000000..83718b8 Binary files /dev/null and b/img/040.avif differ diff --git a/img/040.jpg b/img/040.jpg new file mode 100644 index 0000000..a5e47e3 Binary files /dev/null and b/img/040.jpg differ diff --git a/img/040.webp b/img/040.webp new file mode 100644 index 0000000..ed32290 Binary files /dev/null and b/img/040.webp differ diff --git a/img/047.avif b/img/047.avif new file mode 100644 index 0000000..faf1426 Binary files /dev/null and b/img/047.avif differ diff --git a/img/047.png b/img/047.png new file mode 100644 index 0000000..0f350fa Binary files /dev/null and b/img/047.png differ diff --git a/img/047.webp b/img/047.webp new file mode 100644 index 0000000..2e5cba8 Binary files /dev/null and b/img/047.webp differ diff --git a/img/049.avif b/img/049.avif new file mode 100644 index 0000000..22e2991 Binary files /dev/null and b/img/049.avif differ diff --git a/img/049.png b/img/049.png new file mode 100644 index 0000000..f5a033c Binary files /dev/null and b/img/049.png differ diff --git a/img/049.webp b/img/049.webp new file mode 100644 index 0000000..fc5b1ab Binary files /dev/null and b/img/049.webp differ diff --git a/img/078.avif b/img/078.avif new file mode 100644 index 0000000..9f70786 Binary files /dev/null and b/img/078.avif differ diff --git a/img/078.png b/img/078.png new file mode 100644 index 0000000..2b53b3e Binary files /dev/null and b/img/078.png differ diff --git a/img/078.webp b/img/078.webp new file mode 100644 index 0000000..053c74f Binary files /dev/null and b/img/078.webp differ diff --git a/img/092.avif b/img/092.avif new file mode 100644 index 0000000..c19744f Binary files /dev/null and b/img/092.avif differ diff --git a/img/092.jpg b/img/092.jpg new file mode 100644 index 0000000..b133694 Binary files /dev/null and b/img/092.jpg differ diff --git a/img/092.webp b/img/092.webp new file mode 100644 index 0000000..cda9edd Binary files /dev/null and b/img/092.webp differ diff --git a/img/404.jpg b/img/404.jpg new file mode 100644 index 0000000..4bab3c3 Binary files /dev/null and b/img/404.jpg differ diff --git a/img/about.avif b/img/about.avif new file mode 100644 index 0000000..0b2c156 Binary files /dev/null and b/img/about.avif differ diff --git a/img/about.png b/img/about.png new file mode 100644 index 0000000..732eb95 Binary files /dev/null and b/img/about.png differ diff --git a/img/about.webp b/img/about.webp new file mode 100644 index 0000000..f4e31f1 Binary files /dev/null and b/img/about.webp differ diff --git a/img/about_bg.avif b/img/about_bg.avif new file mode 100644 index 0000000..d3a9e1b Binary files /dev/null and b/img/about_bg.avif differ diff --git a/img/about_bg.jpg b/img/about_bg.jpg new file mode 100644 index 0000000..cdffcf6 Binary files /dev/null and b/img/about_bg.jpg differ diff --git a/img/about_bg.webp b/img/about_bg.webp new file mode 100644 index 0000000..2481db1 Binary files /dev/null and b/img/about_bg.webp differ diff --git a/img/anime_avatar.svg b/img/anime_avatar.svg new file mode 100644 index 0000000..b6462dc --- /dev/null +++ b/img/anime_avatar.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/archive.avif b/img/archive.avif new file mode 100644 index 0000000..0e2d41a Binary files /dev/null and b/img/archive.avif differ diff --git a/img/archive.jpg b/img/archive.jpg new file mode 100644 index 0000000..4774fa0 Binary files /dev/null and b/img/archive.jpg differ diff --git a/img/archive.webp b/img/archive.webp new file mode 100644 index 0000000..5699da9 Binary files /dev/null and b/img/archive.webp differ diff --git a/img/archive_bg.avif b/img/archive_bg.avif new file mode 100644 index 0000000..9c9f08e Binary files /dev/null and b/img/archive_bg.avif differ diff --git a/img/archive_bg.jpg b/img/archive_bg.jpg new file mode 100644 index 0000000..95847eb Binary files /dev/null and b/img/archive_bg.jpg differ diff --git a/img/archive_bg.webp b/img/archive_bg.webp new file mode 100644 index 0000000..220e0c0 Binary files /dev/null and b/img/archive_bg.webp differ diff --git a/img/bg.avif b/img/bg.avif new file mode 100644 index 0000000..a13cab0 Binary files /dev/null and b/img/bg.avif differ diff --git a/img/bg.jpg b/img/bg.jpg new file mode 100644 index 0000000..85a23e6 Binary files /dev/null and b/img/bg.jpg differ diff --git a/img/bg.webp b/img/bg.webp new file mode 100644 index 0000000..297d37a Binary files /dev/null and b/img/bg.webp differ diff --git a/img/bg_about.avif b/img/bg_about.avif new file mode 100644 index 0000000..99fe8c8 Binary files /dev/null and b/img/bg_about.avif differ diff --git a/img/bg_about.png b/img/bg_about.png new file mode 100644 index 0000000..7feade5 Binary files /dev/null and b/img/bg_about.png differ diff --git a/img/bg_about.webp b/img/bg_about.webp new file mode 100644 index 0000000..64a5cf1 Binary files /dev/null and b/img/bg_about.webp differ diff --git a/img/bg_archive.avif b/img/bg_archive.avif new file mode 100644 index 0000000..dfbf003 Binary files /dev/null and b/img/bg_archive.avif differ diff --git a/img/bg_archive.png b/img/bg_archive.png new file mode 100644 index 0000000..ec3c3af Binary files /dev/null and b/img/bg_archive.png differ diff --git a/img/bg_archive.webp b/img/bg_archive.webp new file mode 100644 index 0000000..be15c73 Binary files /dev/null and b/img/bg_archive.webp differ diff --git a/img/bg_categories.avif b/img/bg_categories.avif new file mode 100644 index 0000000..9a3f41c Binary files /dev/null and b/img/bg_categories.avif differ diff --git a/img/bg_categories.png b/img/bg_categories.png new file mode 100644 index 0000000..1bde398 Binary files /dev/null and b/img/bg_categories.png differ diff --git a/img/bg_categories.webp b/img/bg_categories.webp new file mode 100644 index 0000000..5c7564e Binary files /dev/null and b/img/bg_categories.webp differ diff --git a/img/bg_main.avif b/img/bg_main.avif new file mode 100644 index 0000000..1b94c3b Binary files /dev/null and b/img/bg_main.avif differ diff --git a/img/bg_main.png b/img/bg_main.png new file mode 100644 index 0000000..6cd3d24 Binary files /dev/null and b/img/bg_main.png differ diff --git a/img/bg_main.webp b/img/bg_main.webp new file mode 100644 index 0000000..bf6ed8e Binary files /dev/null and b/img/bg_main.webp differ diff --git a/img/bg_tags.avif b/img/bg_tags.avif new file mode 100644 index 0000000..600814e Binary files /dev/null and b/img/bg_tags.avif differ diff --git a/img/bg_tags.png b/img/bg_tags.png new file mode 100644 index 0000000..a84cccc Binary files /dev/null and b/img/bg_tags.png differ diff --git a/img/bg_tags.webp b/img/bg_tags.webp new file mode 100644 index 0000000..72920b7 Binary files /dev/null and b/img/bg_tags.webp differ diff --git a/img/butterfly-icon.avif b/img/butterfly-icon.avif new file mode 100644 index 0000000..891f4fa Binary files /dev/null and b/img/butterfly-icon.avif differ diff --git a/img/butterfly-icon.png b/img/butterfly-icon.png new file mode 100644 index 0000000..3992d77 Binary files /dev/null and b/img/butterfly-icon.png differ diff --git a/img/butterfly-icon.webp b/img/butterfly-icon.webp new file mode 100644 index 0000000..e84b2b4 Binary files /dev/null and b/img/butterfly-icon.webp differ diff --git a/img/categories.avif b/img/categories.avif new file mode 100644 index 0000000..2bafdb2 Binary files /dev/null and b/img/categories.avif differ diff --git a/img/categories.png b/img/categories.png new file mode 100644 index 0000000..4ef566f Binary files /dev/null and b/img/categories.png differ diff --git a/img/categories.webp b/img/categories.webp new file mode 100644 index 0000000..03227f7 Binary files /dev/null and b/img/categories.webp differ diff --git a/img/categories_bg.jpg b/img/categories_bg.jpg new file mode 100644 index 0000000..95e5d21 Binary files /dev/null and b/img/categories_bg.jpg differ diff --git a/img/cool_logo.svg b/img/cool_logo.svg new file mode 100644 index 0000000..d23c2f6 --- /dev/null +++ b/img/cool_logo.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/cover_1.avif b/img/cover_1.avif new file mode 100644 index 0000000..b42ff7e Binary files /dev/null and b/img/cover_1.avif differ diff --git a/img/cover_1.png b/img/cover_1.png new file mode 100644 index 0000000..8276261 Binary files /dev/null and b/img/cover_1.png differ diff --git a/img/cover_1.webp b/img/cover_1.webp new file mode 100644 index 0000000..c1aa714 Binary files /dev/null and b/img/cover_1.webp differ diff --git a/img/cover_2.avif b/img/cover_2.avif new file mode 100644 index 0000000..7f0b855 Binary files /dev/null and b/img/cover_2.avif differ diff --git a/img/cover_2.png b/img/cover_2.png new file mode 100644 index 0000000..9f82adb Binary files /dev/null and b/img/cover_2.png differ diff --git a/img/cover_2.webp b/img/cover_2.webp new file mode 100644 index 0000000..f062ef9 Binary files /dev/null and b/img/cover_2.webp differ diff --git a/img/cover_3.avif b/img/cover_3.avif new file mode 100644 index 0000000..34cac5f Binary files /dev/null and b/img/cover_3.avif differ diff --git a/img/cover_3.png b/img/cover_3.png new file mode 100644 index 0000000..25218cf Binary files /dev/null and b/img/cover_3.png differ diff --git a/img/cover_3.webp b/img/cover_3.webp new file mode 100644 index 0000000..502662e Binary files /dev/null and b/img/cover_3.webp differ diff --git a/img/cute_cat.svg b/img/cute_cat.svg new file mode 100644 index 0000000..a3ae4ca --- /dev/null +++ b/img/cute_cat.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/default_cover.avif b/img/default_cover.avif new file mode 100644 index 0000000..9237a42 Binary files /dev/null and b/img/default_cover.avif differ diff --git a/img/default_cover.jpg b/img/default_cover.jpg new file mode 100644 index 0000000..adf28cd Binary files /dev/null and b/img/default_cover.jpg differ diff --git a/img/default_cover.webp b/img/default_cover.webp new file mode 100644 index 0000000..04bfbca Binary files /dev/null and b/img/default_cover.webp differ diff --git a/img/error-page.png b/img/error-page.png new file mode 100644 index 0000000..9d1de96 Binary files /dev/null and b/img/error-page.png differ diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000..56d07f5 Binary files /dev/null and b/img/favicon.ico differ diff --git a/img/friend_404.gif b/img/friend_404.gif new file mode 100644 index 0000000..91dd56a Binary files /dev/null and b/img/friend_404.gif differ diff --git a/img/index.avif b/img/index.avif new file mode 100644 index 0000000..8a500e3 Binary files /dev/null and b/img/index.avif differ diff --git a/img/index.png b/img/index.png new file mode 100644 index 0000000..858a932 Binary files /dev/null and b/img/index.png differ diff --git a/img/index.webp b/img/index.webp new file mode 100644 index 0000000..13b1a96 Binary files /dev/null and b/img/index.webp differ diff --git a/img/site_bg.avif b/img/site_bg.avif new file mode 100644 index 0000000..d4d814b Binary files /dev/null and b/img/site_bg.avif differ diff --git a/img/site_bg.jpg b/img/site_bg.jpg new file mode 100644 index 0000000..b845f6b Binary files /dev/null and b/img/site_bg.jpg differ diff --git a/img/site_bg.webp b/img/site_bg.webp new file mode 100644 index 0000000..e40a81f Binary files /dev/null and b/img/site_bg.webp differ diff --git a/img/site_bg_v2.avif b/img/site_bg_v2.avif new file mode 100644 index 0000000..268fbef Binary files /dev/null and b/img/site_bg_v2.avif differ diff --git a/img/site_bg_v2.jpg b/img/site_bg_v2.jpg new file mode 100644 index 0000000..4fb8a83 Binary files /dev/null and b/img/site_bg_v2.jpg differ diff --git a/img/site_bg_v2.webp b/img/site_bg_v2.webp new file mode 100644 index 0000000..20288f8 Binary files /dev/null and b/img/site_bg_v2.webp differ diff --git a/img/tags.avif b/img/tags.avif new file mode 100644 index 0000000..96ec56b Binary files /dev/null and b/img/tags.avif differ diff --git a/img/tags.png b/img/tags.png new file mode 100644 index 0000000..864e8d9 Binary files /dev/null and b/img/tags.png differ diff --git a/img/tags.webp b/img/tags.webp new file mode 100644 index 0000000..f8fa4f4 Binary files /dev/null and b/img/tags.webp differ diff --git a/img/tags_bg.avif b/img/tags_bg.avif new file mode 100644 index 0000000..77cdeb9 Binary files /dev/null and b/img/tags_bg.avif differ diff --git a/img/tags_bg.jpg b/img/tags_bg.jpg new file mode 100644 index 0000000..962158b Binary files /dev/null and b/img/tags_bg.jpg differ diff --git a/img/tags_bg.webp b/img/tags_bg.webp new file mode 100644 index 0000000..37e582e Binary files /dev/null and b/img/tags_bg.webp differ diff --git a/img/temp_01 (1).avif b/img/temp_01 (1).avif new file mode 100644 index 0000000..2834692 Binary files /dev/null and b/img/temp_01 (1).avif differ diff --git a/img/temp_01 (1).jpg b/img/temp_01 (1).jpg new file mode 100644 index 0000000..2ca7aef Binary files /dev/null and b/img/temp_01 (1).jpg differ diff --git a/img/temp_01 (1).webp b/img/temp_01 (1).webp new file mode 100644 index 0000000..1347ef3 Binary files /dev/null and b/img/temp_01 (1).webp differ diff --git a/img/分公司图片.avif b/img/分公司图片.avif new file mode 100644 index 0000000..6b463a4 Binary files /dev/null and b/img/分公司图片.avif differ diff --git a/img/分公司图片.jpg b/img/分公司图片.jpg new file mode 100644 index 0000000..da10957 Binary files /dev/null and b/img/分公司图片.jpg differ diff --git a/img/分公司图片.webp b/img/分公司图片.webp new file mode 100644 index 0000000..576fc4d Binary files /dev/null and b/img/分公司图片.webp differ diff --git a/img/桌面引导美化.jpg b/img/桌面引导美化.jpg new file mode 100644 index 0000000..b368a3f Binary files /dev/null and b/img/桌面引导美化.jpg differ diff --git a/img/桌面美化.avif b/img/桌面美化.avif new file mode 100644 index 0000000..6a95f79 Binary files /dev/null and b/img/桌面美化.avif differ diff --git a/img/桌面美化.png b/img/桌面美化.png new file mode 100644 index 0000000..06ba9d1 Binary files /dev/null and b/img/桌面美化.png differ diff --git a/img/桌面美化.webp b/img/桌面美化.webp new file mode 100644 index 0000000..72c17b4 Binary files /dev/null and b/img/桌面美化.webp differ diff --git a/img/浏览器和窗口效果.avif b/img/浏览器和窗口效果.avif new file mode 100644 index 0000000..13c1f48 Binary files /dev/null and b/img/浏览器和窗口效果.avif differ diff --git a/img/浏览器和窗口效果.png b/img/浏览器和窗口效果.png new file mode 100644 index 0000000..90c6582 Binary files /dev/null and b/img/浏览器和窗口效果.png differ diff --git a/img/浏览器和窗口效果.webp b/img/浏览器和窗口效果.webp new file mode 100644 index 0000000..e620158 Binary files /dev/null and b/img/浏览器和窗口效果.webp differ diff --git a/img/登录界面美化.avif b/img/登录界面美化.avif new file mode 100644 index 0000000..864a8ef Binary files /dev/null and b/img/登录界面美化.avif differ diff --git a/img/登录界面美化.jpg b/img/登录界面美化.jpg new file mode 100644 index 0000000..d09a213 Binary files /dev/null and b/img/登录界面美化.jpg differ diff --git a/img/登录界面美化.webp b/img/登录界面美化.webp new file mode 100644 index 0000000..9581ff7 Binary files /dev/null and b/img/登录界面美化.webp differ diff --git a/img/这就是会议.png b/img/这就是会议.png new file mode 100644 index 0000000..5651c9b Binary files /dev/null and b/img/这就是会议.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..dafcb27 --- /dev/null +++ b/index.html @@ -0,0 +1,1641 @@ +llbzow的摸鱼日记 (づ ̄ 3 ̄)づ - 在工地的边缘疯狂试探并记录下一切 + + + + + + + + + + +
加载中...
2026 AI 编程与开发工具深度对比:从 Cursor 到 Gemini CLI
2026 全球主流 AI 厂商百科全书:Agent 与推理觉醒时代
Arch Linux 日常:从“折腾”到“生产力”的进化之旅
孩子们,我不做 Windows 人啦!
Arch Linux 试毒:初探邪教的诱惑
彻底放弃:拥抱 Vibe Code,AI 才是亲爹
我累了:试图理解源码,结果被源码理解了
逐渐暴躁:为什么前端框架更新这么快?!
深坑记录:响应式丢失的那一夜
前端性能优化:只要我跑得够快,Bug 就追不上我
+
+
💻
+
+
开发专栏
+ 📊 排序算法演示 + 🌌 WebGPU 万有引力粒子 + 👁️ YOLO 实时目标检测 + 🔥 火之创造 (元素沙盒) +
+
+ + + + + + +
+
💬
+ +
+ + +
+ + +
+
🎮
+
+
博客游戏
+ 🧩 经典 2048 + 🧱 俄罗斯方块 (Tetris) + 🟡 回忆吃豆人 (Pac-Man) + 🐍 贪吃蛇 (Snake) + ⚪ 五子棋 (Gomoku) + 💣 扫雷 (Minesweeper) + 🚓 坦克大战 (Tank Battle) +
+
+ + + + + +
+
🛠️
+
+
博客工具
+ 📅 时间戳与地理时间 + 🖼️ 图片↔Base64 + 🔐 MD5/SHA256 计算 + 🌍 GeoJSON 查询 + ✂️ 快速抠图 + 💧 水印生成与检测 + 🎬 GIF 生成 + 👻 幻影坦克制作 + 🔄 文件全能转换 + 📱 二维码生成/解析 + 📏 工程单位换算 + 🎨 颜色转换与调色 +
+
+ + + + + \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..fa41a4c --- /dev/null +++ b/js/main.js @@ -0,0 +1,930 @@ +document.addEventListener('DOMContentLoaded', () => { + let headerContentWidth, $nav + let mobileSidebarOpen = false + + const adjustMenu = init => { + const getAllWidth = ele => Array.from(ele).reduce((width, i) => width + i.offsetWidth, 0) + + if (init) { + const blogInfoWidth = getAllWidth(document.querySelector('#blog-info > a').children) + const menusWidth = getAllWidth(document.getElementById('menus').children) + headerContentWidth = blogInfoWidth + menusWidth + $nav = document.getElementById('nav') + } + + const hideMenuIndex = window.innerWidth <= 768 || headerContentWidth > $nav.offsetWidth - 120 + $nav.classList.toggle('hide-menu', hideMenuIndex) + } + + // 初始化header + const initAdjust = () => { + adjustMenu(true) + $nav.classList.add('show') + } + + // sidebar menus + const sidebarFn = { + open: () => { + btf.overflowPaddingR.add() + btf.animateIn(document.getElementById('menu-mask'), 'to_show 0.5s') + document.getElementById('sidebar-menus').classList.add('open') + mobileSidebarOpen = true + }, + close: () => { + btf.overflowPaddingR.remove() + btf.animateOut(document.getElementById('menu-mask'), 'to_hide 0.5s') + document.getElementById('sidebar-menus').classList.remove('open') + mobileSidebarOpen = false + } + } + + /** + * 首頁top_img底下的箭頭 + */ + const scrollDownInIndex = () => { + const handleScrollToDest = () => { + btf.scrollToDest(document.getElementById('content-inner').offsetTop, 300) + } + + const $scrollDownEle = document.getElementById('scroll-down') + $scrollDownEle && btf.addEventListenerPjax($scrollDownEle, 'click', handleScrollToDest) + } + + /** + * 代碼 + * 只適用於Hexo默認的代碼渲染 + */ + const addHighlightTool = () => { + const highLight = GLOBAL_CONFIG.highlight + if (!highLight) return + + const { highlightCopy, highlightLang, highlightHeightLimit, highlightFullpage, highlightMacStyle, plugin } = highLight + const isHighlightShrink = GLOBAL_CONFIG_SITE.isHighlightShrink + const isShowTool = highlightCopy || highlightLang || isHighlightShrink !== undefined || highlightFullpage || highlightMacStyle + const $figureHighlight = plugin === 'highlight.js' ? document.querySelectorAll('figure.highlight') : document.querySelectorAll('pre[class*="language-"]') + + if (!((isShowTool || highlightHeightLimit) && $figureHighlight.length)) return + + const isPrismjs = plugin === 'prismjs' + const highlightShrinkClass = isHighlightShrink === true ? 'closed' : '' + const highlightShrinkEle = isHighlightShrink !== undefined ? '' : '' + const highlightCopyEle = highlightCopy ? '
' : '' + const highlightMacStyleEle = '
' + const highlightFullpageEle = highlightFullpage ? '' : '' + + const alertInfo = (ele, text) => { + if (GLOBAL_CONFIG.Snackbar !== undefined) { + btf.snackbarShow(text) + } else { + ele.textContent = text + ele.style.opacity = 1 + setTimeout(() => { ele.style.opacity = 0 }, 800) + } + } + + const copy = async (text, ctx) => { + try { + await navigator.clipboard.writeText(text) + alertInfo(ctx, GLOBAL_CONFIG.copy.success) + } catch (err) { + console.error('Failed to copy: ', err) + alertInfo(ctx, GLOBAL_CONFIG.copy.noSupport) + } + } + + // click events + const highlightCopyFn = (ele, clickEle) => { + const $buttonParent = ele.parentNode + $buttonParent.classList.add('copy-true') + const preCodeSelector = isPrismjs ? 'pre code' : 'table .code pre' + const codeElement = $buttonParent.querySelector(preCodeSelector) + if (!codeElement) return + copy(codeElement.innerText, clickEle.previousElementSibling) + $buttonParent.classList.remove('copy-true') + } + + const highlightShrinkFn = ele => ele.classList.toggle('closed') + + const codeFullpage = (item, clickEle) => { + const wrapEle = item.closest('figure.highlight') + const isFullpage = wrapEle.classList.toggle('code-fullpage') + + document.body.style.overflow = isFullpage ? 'hidden' : '' + clickEle.classList.toggle('fa-down-left-and-up-right-to-center', isFullpage) + clickEle.classList.toggle('fa-up-right-and-down-left-from-center', !isFullpage) + } + + const highlightToolsFn = e => { + const $target = e.target.classList + const currentElement = e.currentTarget + if ($target.contains('expand')) highlightShrinkFn(currentElement) + else if ($target.contains('copy-button')) highlightCopyFn(currentElement, e.target) + else if ($target.contains('fullpage-button')) codeFullpage(currentElement, e.target) + } + + const expandCode = e => e.currentTarget.classList.toggle('expand-done') + + // 獲取隱藏狀態下元素的真實高度 + const getActualHeight = item => { + const hiddenElements = new Map() + + const fix = () => { + let current = item + while (current !== document.body && current != null) { + if (window.getComputedStyle(current).display === 'none') { + hiddenElements.set(current, current.getAttribute('style') || '') + } + current = current.parentNode + } + + const style = 'visibility: hidden !important; display: block !important;' + hiddenElements.forEach((originalStyle, elem) => { + elem.setAttribute('style', originalStyle ? originalStyle + ';' + style : style) + }) + } + + const restore = () => { + hiddenElements.forEach((originalStyle, elem) => { + if (originalStyle === '') elem.removeAttribute('style') + else elem.setAttribute('style', originalStyle) + }) + } + + fix() + const height = item.offsetHeight + restore() + return height + } + + const createEle = (lang, item) => { + const fragment = document.createDocumentFragment() + + if (isShowTool) { + const hlTools = document.createElement('div') + hlTools.className = `highlight-tools ${highlightShrinkClass}` + hlTools.innerHTML = highlightMacStyleEle + highlightShrinkEle + lang + highlightCopyEle + highlightFullpageEle + btf.addEventListenerPjax(hlTools, 'click', highlightToolsFn) + fragment.appendChild(hlTools) + } + + if (highlightHeightLimit && getActualHeight(item) > highlightHeightLimit + 30) { + const ele = document.createElement('div') + ele.className = 'code-expand-btn' + ele.innerHTML = '' + btf.addEventListenerPjax(ele, 'click', expandCode) + fragment.appendChild(ele) + } + + isPrismjs ? item.parentNode.insertBefore(fragment, item) : item.insertBefore(fragment, item.firstChild) + } + + $figureHighlight.forEach(item => { + let langName = '' + if (isPrismjs) btf.wrap(item, 'figure', { class: 'highlight' }) + + if (!highlightLang) { + createEle('', item) + return + } + + if (isPrismjs) { + langName = item.getAttribute('data-language') || 'Code' + } else { + langName = item.getAttribute('class').split(' ')[1] + if (langName === 'plain' || langName === undefined) langName = 'Code' + } + createEle(`
${langName}
`, item) + }) + } + + /** + * PhotoFigcaption + */ + const addPhotoFigcaption = () => { + if (!GLOBAL_CONFIG.isPhotoFigcaption) return + document.querySelectorAll('#article-container img').forEach(item => { + const altValue = item.title || item.alt + if (!altValue) return + const ele = document.createElement('div') + ele.className = 'img-alt text-center' + ele.textContent = altValue + item.insertAdjacentElement('afterend', ele) + }) + } + + /** + * Lightbox + */ + const runLightbox = () => { + btf.loadLightbox(document.querySelectorAll('#article-container img:not(.no-lightbox)')) + } + + /** + * justified-gallery 圖庫排版 + */ + + const fetchUrl = async url => { + try { + const response = await fetch(url) + return await response.json() + } catch (error) { + console.error('Failed to fetch URL:', error) + return [] + } + } + + const runJustifiedGallery = (container, data, config) => { + const { isButton, limit, firstLimit, tabs } = config + + const dataLength = data.length + const maxGroupKey = Math.ceil((dataLength - firstLimit) / limit + 1) + + // Gallery configuration + const igConfig = { + gap: 5, + isConstantSize: true, + sizeRange: [150, 600], + // useResizeObserver: true, + // observeChildren: true, + useTransform: true + // useRecycle: false + } + + const ig = new InfiniteGrid.JustifiedInfiniteGrid(container, igConfig) + let isLayoutHidden = false + + // Utility functions + const sanitizeString = str => (str && str.replace(/"/g, '"')) || '' + + const createImageItem = item => { + const alt = item.alt ? `alt="${sanitizeString(item.alt)}"` : '' + const title = item.title ? `title="${sanitizeString(item.title)}"` : '' + return `
+ +
` + } + + const getItems = (nextGroupKey, count, isFirst = false) => { + const startIndex = isFirst ? (nextGroupKey - 1) * count : (nextGroupKey - 2) * count + firstLimit + return data.slice(startIndex, startIndex + count).map(createImageItem) + } + + // Load more button + const addLoadMoreButton = container => { + const button = document.createElement('button') + button.innerHTML = `${GLOBAL_CONFIG.infinitegrid.buttonText}` + + button.addEventListener('click', () => { + button.remove() + btf.setLoading.add(container) + appendItems(ig.getGroups().length + 1, limit) + }, { once: true }) + + container.insertAdjacentElement('afterend', button) + } + + const appendItems = (nextGroupKey, count, isFirst) => { + ig.append(getItems(nextGroupKey, count, isFirst), nextGroupKey) + } + + // Event handlers + const handleRenderComplete = e => { + if (tabs) { + const parentNode = container.parentNode + if (isLayoutHidden) { + parentNode.style.visibility = 'visible' + } + if (container.offsetHeight === 0) { + parentNode.style.visibility = 'hidden' + isLayoutHidden = true + } + } + + const { updated, isResize, mounted } = e + if (!updated.length || !mounted.length || isResize) return + + btf.loadLightbox(container.querySelectorAll('img:not(.medium-zoom-image)')) + + if (ig.getGroups().length === maxGroupKey) { + btf.setLoading.remove(container) + !tabs && ig.off('renderComplete', handleRenderComplete) + return + } + + if (isButton) { + btf.setLoading.remove(container) + addLoadMoreButton(container) + } + } + + const handleRequestAppend = btf.debounce(e => { + const nextGroupKey = (+e.groupKey || 0) + 1 + + if (nextGroupKey === 1) appendItems(nextGroupKey, firstLimit, true) + else appendItems(nextGroupKey, limit) + + if (nextGroupKey === maxGroupKey) ig.off('requestAppend', handleRequestAppend) + }, 300) + + btf.setLoading.add(container) + ig.on('renderComplete', handleRenderComplete) + + if (isButton) { + appendItems(1, firstLimit, true) + } else { + ig.on('requestAppend', handleRequestAppend) + ig.renderItems() + } + + btf.addGlobalFn('pjaxSendOnce', () => ig.destroy()) + } + + const addJustifiedGallery = async (elements, tabs = false) => { + if (!elements.length) return + + const initGallery = async () => { + for (const element of elements) { + if (btf.isHidden(element) || element.classList.contains('loaded')) continue + + const config = { + isButton: element.getAttribute('data-button') === 'true', + limit: parseInt(element.getAttribute('data-limit'), 10), + firstLimit: parseInt(element.getAttribute('data-first'), 10), + tabs + } + + const container = element.firstElementChild + const content = container.textContent + container.textContent = '' + element.classList.add('loaded') + + try { + const data = element.getAttribute('data-type') === 'url' ? await fetchUrl(content) : JSON.parse(content) + runJustifiedGallery(container, data, config) + } catch (error) { + console.error('Gallery data parsing failed:', error) + } + } + } + + if (typeof InfiniteGrid === 'function') { + await initGallery() + } else { + await btf.getScript(GLOBAL_CONFIG.infinitegrid.js) + await initGallery() + } + } + + /** + * rightside scroll percent + */ + const rightsideScrollPercent = currentTop => { + const scrollPercent = btf.getScrollPercent(currentTop, document.body) + const goUpElement = document.getElementById('go-up') + + if (scrollPercent < 95) { + goUpElement.classList.add('show-percent') + goUpElement.querySelector('.scroll-percent').textContent = scrollPercent + } else { + goUpElement.classList.remove('show-percent') + } + } + + /** + * 滾動處理 + */ + const scrollFn = () => { + const $rightside = document.getElementById('rightside') + const innerHeight = window.innerHeight + 56 + let initTop = 0 + const $header = document.getElementById('page-header') + const isChatBtn = typeof chatBtn !== 'undefined' + const isShowPercent = GLOBAL_CONFIG.percent.rightside + + // 檢查文檔高度是否小於視窗高度 + const checkDocumentHeight = () => { + if (document.body.scrollHeight <= innerHeight) { + $rightside.classList.add('rightside-show') + return true + } + return false + } + + // 如果文檔高度小於視窗高度,直接返回 + if (checkDocumentHeight()) return + + // find the scroll direction + const scrollDirection = currentTop => { + const result = currentTop > initTop // true is down & false is up + initTop = currentTop + return result + } + + let flag = '' + const scrollTask = btf.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop + const isDown = scrollDirection(currentTop) + if (currentTop > 56) { + if (flag === '') { + $header.classList.add('nav-fixed') + $rightside.classList.add('rightside-show') + } + + if (isDown) { + if (flag !== 'down') { + $header.classList.remove('nav-visible') + isChatBtn && window.chatBtn.hide() + flag = 'down' + } + } else { + if (flag !== 'up') { + $header.classList.add('nav-visible') + isChatBtn && window.chatBtn.show() + flag = 'up' + } + } + } else { + flag = '' + if (currentTop === 0) { + $header.classList.remove('nav-fixed', 'nav-visible') + } + $rightside.classList.remove('rightside-show') + } + + isShowPercent && rightsideScrollPercent(currentTop) + checkDocumentHeight() + }, 300) + + btf.addEventListenerPjax(window, 'scroll', scrollTask, { passive: true }) + } + + /** + * toc,anchor + */ + const scrollFnToDo = () => { + const isToc = GLOBAL_CONFIG_SITE.isToc + const isAnchor = GLOBAL_CONFIG.isAnchor + const $article = document.getElementById('article-container') + + if (!($article && (isToc || isAnchor))) return + + let $tocLink, $cardToc, autoScrollToc, $tocPercentage, isExpand + + if (isToc) { + const $cardTocLayout = document.getElementById('card-toc') + $cardToc = $cardTocLayout.querySelector('.toc-content') + $tocLink = $cardToc.querySelectorAll('.toc-link') + $tocPercentage = $cardTocLayout.querySelector('.toc-percentage') + isExpand = $cardToc.classList.contains('is-expand') + + // toc元素點擊 + const tocItemClickFn = e => { + const target = e.target.closest('.toc-link') + if (!target) return + + e.preventDefault() + btf.scrollToDest(btf.getEleTop(document.getElementById(decodeURI(target.getAttribute('href')).replace('#', ''))), 300) + if (window.innerWidth < 900) { + $cardTocLayout.classList.remove('open') + } + } + + btf.addEventListenerPjax($cardToc, 'click', tocItemClickFn) + + autoScrollToc = item => { + const sidebarHeight = $cardToc.clientHeight + const itemOffsetTop = item.offsetTop + const itemHeight = item.clientHeight + const scrollTop = $cardToc.scrollTop + const offset = itemOffsetTop - scrollTop + const middlePosition = (sidebarHeight - itemHeight) / 2 + + if (offset !== middlePosition) { + $cardToc.scrollTop = scrollTop + (offset - middlePosition) + } + } + + // 處理 hexo-blog-encrypt 事件 + $cardToc.style.display = 'block' + } + + // find head position & add active class + const $articleList = $article.querySelectorAll('h1,h2,h3,h4,h5,h6') + let detectItem = '' + + const findHeadPosition = top => { + if (top === 0) return false + + let currentId = '' + let currentIndex = '' + + for (let i = 0; i < $articleList.length; i++) { + const ele = $articleList[i] + if (top > btf.getEleTop(ele) - 80) { + const id = ele.id + currentId = id ? '#' + encodeURI(id) : '' + currentIndex = i + } else { + break + } + } + + if (detectItem === currentIndex) return + + if (isAnchor) btf.updateAnchor(currentId) + + detectItem = currentIndex + + if (isToc) { + $cardToc.querySelectorAll('.active').forEach(i => i.classList.remove('active')) + + if (currentId) { + const currentActive = $tocLink[currentIndex] + currentActive.classList.add('active') + + setTimeout(() => autoScrollToc(currentActive), 0) + + if (!isExpand) { + let parent = currentActive.parentNode + while (!parent.matches('.toc')) { + if (parent.matches('li')) parent.classList.add('active') + parent = parent.parentNode + } + } + } + } + } + + // main of scroll + const tocScrollFn = btf.throttle(() => { + const currentTop = window.scrollY || document.documentElement.scrollTop + if (isToc && GLOBAL_CONFIG.percent.toc) { + $tocPercentage.textContent = btf.getScrollPercent(currentTop, $article) + } + findHeadPosition(currentTop) + }, 100) + + btf.addEventListenerPjax(window, 'scroll', tocScrollFn, { passive: true }) + } + + const handleThemeChange = mode => { + const globalFn = window.globalFn || {} + const themeChange = globalFn.themeChange || {} + if (!themeChange) { + return + } + + Object.keys(themeChange).forEach(key => { + const themeChangeFn = themeChange[key] + if (['disqus', 'disqusjs'].includes(key)) { + setTimeout(() => themeChangeFn(mode), 300) + } else { + themeChangeFn(mode) + } + }) + } + + /** + * Rightside + */ + const rightSideFn = { + readmode: () => { // read mode + const $body = document.body + const newEle = document.createElement('button') + + const exitReadMode = () => { + $body.classList.remove('read-mode') + newEle.remove() + newEle.removeEventListener('click', exitReadMode) + } + + $body.classList.add('read-mode') + newEle.type = 'button' + newEle.className = 'fas fa-sign-out-alt exit-readmode' + newEle.addEventListener('click', exitReadMode) + $body.appendChild(newEle) + }, + darkmode: () => { // switch between light and dark mode + const willChangeMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark' + if (willChangeMode === 'dark') { + btf.activateDarkMode() + GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night) + } else { + btf.activateLightMode() + GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day) + } + btf.saveToLocal.set('theme', willChangeMode, 2) + handleThemeChange(willChangeMode) + }, + 'rightside-config': item => { // Show or hide rightside-hide-btn + const hideLayout = item.firstElementChild + if (hideLayout.classList.contains('show')) { + hideLayout.classList.add('status') + setTimeout(() => { + hideLayout.classList.remove('status') + }, 300) + } + + hideLayout.classList.toggle('show') + }, + 'go-up': () => { // Back to top + btf.scrollToDest(0, 500) + }, + 'hide-aside-btn': () => { // Hide aside + const $htmlDom = document.documentElement.classList + const saveStatus = $htmlDom.contains('hide-aside') ? 'show' : 'hide' + btf.saveToLocal.set('aside-status', saveStatus, 2) + $htmlDom.toggle('hide-aside') + }, + 'mobile-toc-button': (p, item) => { // Show mobile toc + const tocEle = document.getElementById('card-toc') + tocEle.style.transition = 'transform 0.3s ease-in-out' + + const tocEleHeight = tocEle.clientHeight + const btData = item.getBoundingClientRect() + + const tocEleBottom = window.innerHeight - btData.bottom - 30 + if (tocEleHeight > tocEleBottom) { + tocEle.style.transformOrigin = `right ${tocEleHeight - tocEleBottom - btData.height / 2}px` + } + + tocEle.classList.toggle('open') + tocEle.addEventListener('transitionend', () => { + tocEle.style.cssText = '' + }, { once: true }) + }, + 'chat-btn': () => { // Show chat + window.chatBtnFn() + }, + translateLink: () => { // switch between traditional and simplified chinese + window.translateFn.translatePage() + } + } + + document.getElementById('rightside').addEventListener('click', e => { + const $target = e.target.closest('[id]') + if ($target && rightSideFn[$target.id]) { + rightSideFn[$target.id](e.currentTarget, $target) + } + }) + + /** + * menu + * 側邊欄sub-menu 展開/收縮 + */ + const clickFnOfSubMenu = () => { + const handleClickOfSubMenu = e => { + const target = e.target.closest('.site-page.group') + if (!target) return + target.classList.toggle('hide') + } + + const menusItems = document.querySelector('#sidebar-menus .menus_items') + menusItems && menusItems.addEventListener('click', handleClickOfSubMenu) + } + + /** + * 手机端目录点击 + */ + const openMobileMenu = () => { + const toggleMenu = document.getElementById('toggle-menu') + if (!toggleMenu) return + btf.addEventListenerPjax(toggleMenu, 'click', () => { sidebarFn.open() }) + } + + /** + * 複製時加上版權信息 + */ + const addCopyright = () => { + const { limitCount, languages } = GLOBAL_CONFIG.copyright + + const handleCopy = e => { + e.preventDefault() + const copyFont = window.getSelection(0).toString() + let textFont = copyFont + if (copyFont.length > limitCount) { + textFont = `${copyFont}\n\n\n${languages.author}\n${languages.link}${window.location.href}\n${languages.source}\n${languages.info}` + } + if (e.clipboardData) { + return e.clipboardData.setData('text', textFont) + } else { + return window.clipboardData.setData('text', textFont) + } + } + + document.body.addEventListener('copy', handleCopy) + } + + /** + * 網頁運行時間 + */ + const addRuntime = () => { + const $runtimeCount = document.getElementById('runtimeshow') + if ($runtimeCount) { + const publishDate = $runtimeCount.getAttribute('data-publishDate') + $runtimeCount.textContent = `${btf.diffDate(publishDate)} ${GLOBAL_CONFIG.runtime}` + } + } + + /** + * 最後一次更新時間 + */ + const addLastPushDate = () => { + const $lastPushDateItem = document.getElementById('last-push-date') + if ($lastPushDateItem) { + const lastPushDate = $lastPushDateItem.getAttribute('data-lastPushDate') + $lastPushDateItem.textContent = btf.diffDate(lastPushDate, true) + } + } + + /** + * table overflow + */ + const addTableWrap = () => { + const $table = document.querySelectorAll('#article-container table') + if (!$table.length) return + + $table.forEach(item => { + if (!item.closest('.highlight')) { + btf.wrap(item, 'div', { class: 'table-wrap' }) + } + }) + } + + /** + * tag-hide + */ + const clickFnOfTagHide = () => { + const hideButtons = document.querySelectorAll('#article-container .hide-button') + if (!hideButtons.length) return + hideButtons.forEach(item => item.addEventListener('click', e => { + const currentTarget = e.currentTarget + currentTarget.classList.add('open') + addJustifiedGallery(currentTarget.nextElementSibling.querySelectorAll('.gallery-container')) + }, { once: true })) + } + + const tabsFn = () => { + const navTabsElements = document.querySelectorAll('#article-container .tabs') + if (!navTabsElements.length) return + + const setActiveClass = (elements, activeIndex) => { + elements.forEach((el, index) => { + el.classList.toggle('active', index === activeIndex) + }) + } + + const handleNavClick = e => { + const target = e.target.closest('button') + if (!target || target.classList.contains('active')) return + + const navItems = [...e.currentTarget.children] + const tabContents = [...e.currentTarget.nextElementSibling.children] + const indexOfButton = navItems.indexOf(target) + setActiveClass(navItems, indexOfButton) + e.currentTarget.classList.remove('no-default') + setActiveClass(tabContents, indexOfButton) + addJustifiedGallery(tabContents[indexOfButton].querySelectorAll('.gallery-container'), true) + } + + const handleToTopClick = tabElement => e => { + if (e.target.closest('button')) { + btf.scrollToDest(btf.getEleTop(tabElement), 300) + } + } + + navTabsElements.forEach(tabElement => { + btf.addEventListenerPjax(tabElement.firstElementChild, 'click', handleNavClick) + btf.addEventListenerPjax(tabElement.lastElementChild, 'click', handleToTopClick(tabElement)) + }) + } + + const toggleCardCategory = () => { + const cardCategory = document.querySelector('#aside-cat-list.expandBtn') + if (!cardCategory) return + + const handleToggleBtn = e => { + const target = e.target + if (target.nodeName === 'I') { + e.preventDefault() + target.parentNode.classList.toggle('expand') + } + } + btf.addEventListenerPjax(cardCategory, 'click', handleToggleBtn, true) + } + + const addPostOutdateNotice = () => { + const ele = document.getElementById('post-outdate-notice') + if (!ele) return + + const { limitDay, messagePrev, messageNext, postUpdate } = JSON.parse(ele.getAttribute('data')) + const diffDay = btf.diffDate(postUpdate) + if (diffDay >= limitDay) { + ele.textContent = `${messagePrev} ${diffDay} ${messageNext}` + ele.hidden = false + } + } + + const lazyloadImg = () => { + window.lazyLoadInstance = new LazyLoad({ + elements_selector: 'img', + threshold: 0, + data_src: 'lazy-src' + }) + + btf.addGlobalFn('pjaxComplete', () => { + window.lazyLoadInstance.update() + }, 'lazyload') + } + + const relativeDate = selector => { + selector.forEach(item => { + item.textContent = btf.diffDate(item.getAttribute('datetime'), true) + item.style.display = 'inline' + }) + } + + const justifiedIndexPostUI = () => { + const recentPostsElement = document.getElementById('recent-posts') + if (!(recentPostsElement && recentPostsElement.classList.contains('masonry'))) return + + const init = () => { + const masonryItem = new InfiniteGrid.MasonryInfiniteGrid('.recent-post-items', { + gap: { horizontal: 10, vertical: 20 }, + useTransform: true, + useResizeObserver: true + }) + masonryItem.renderItems() + btf.addGlobalFn('pjaxCompleteOnce', () => { masonryItem.destroy() }, 'removeJustifiedIndexPostUI') + } + + typeof InfiniteGrid === 'function' ? init() : btf.getScript(`${GLOBAL_CONFIG.infinitegrid.js}`).then(init) + } + + const unRefreshFn = () => { + window.addEventListener('resize', () => { + adjustMenu(false) + mobileSidebarOpen && btf.isHidden(document.getElementById('toggle-menu')) && sidebarFn.close() + }) + + const menuMask = document.getElementById('menu-mask') + menuMask && menuMask.addEventListener('click', () => { sidebarFn.close() }) + + clickFnOfSubMenu() + GLOBAL_CONFIG.islazyloadPlugin && lazyloadImg() + GLOBAL_CONFIG.copyright !== undefined && addCopyright() + + if (GLOBAL_CONFIG.autoDarkmode) { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { + if (btf.saveToLocal.get('theme') !== undefined) return + e.matches ? handleThemeChange('dark') : handleThemeChange('light') + }) + } + } + + const forPostFn = () => { + addHighlightTool() + addPhotoFigcaption() + addJustifiedGallery(document.querySelectorAll('#article-container .gallery-container')) + runLightbox() + scrollFnToDo() + addTableWrap() + clickFnOfTagHide() + tabsFn() + } + + const refreshFn = () => { + initAdjust() + justifiedIndexPostUI() + + if (GLOBAL_CONFIG_SITE.pageType === 'post') { + addPostOutdateNotice() + GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll('#post-meta time')) + } else { + GLOBAL_CONFIG.relativeDate.homepage && relativeDate(document.querySelectorAll('#recent-posts time')) + GLOBAL_CONFIG.runtime && addRuntime() + addLastPushDate() + toggleCardCategory() + } + + GLOBAL_CONFIG_SITE.pageType === 'home' && scrollDownInIndex() + scrollFn() + + forPostFn() + GLOBAL_CONFIG_SITE.pageType !== 'shuoshuo' && btf.switchComments(document) + openMobileMenu() + } + + btf.addGlobalFn('pjaxComplete', refreshFn, 'refreshFn') + refreshFn() + unRefreshFn() + + // 處理 hexo-blog-encrypt 事件 + window.addEventListener('hexo-blog-decrypt', e => { + forPostFn() + window.translateFn.translateInitialization() + Object.values(window.globalFn.encrypt).forEach(fn => { + fn() + }) + }) +}) diff --git a/js/search/algolia.js b/js/search/algolia.js new file mode 100644 index 0000000..ed69d2e --- /dev/null +++ b/js/search/algolia.js @@ -0,0 +1,562 @@ +window.addEventListener('load', () => { + const { algolia } = GLOBAL_CONFIG + const { appId, apiKey, indexName, hitsPerPage = 5, languages } = algolia + + if (!appId || !apiKey || !indexName) { + return console.error('Algolia setting is invalid!') + } + + const $searchMask = document.getElementById('search-mask') + const $searchDialog = document.querySelector('#algolia-search .search-dialog') + + const animateElements = show => { + const action = show ? 'animateIn' : 'animateOut' + const maskAnimation = show ? 'to_show 0.5s' : 'to_hide 0.5s' + const dialogAnimation = show ? 'titleScale 0.5s' : 'search_close .5s' + btf[action]($searchMask, maskAnimation) + btf[action]($searchDialog, dialogAnimation) + } + + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty('--search-height', `${window.innerHeight}px`) + } + } + + const openSearch = () => { + btf.overflowPaddingR.add() + animateElements(true) + showLoading(false) + + setTimeout(() => { + const searchInput = document.querySelector('#algolia-search-input .ais-SearchBox-input') + if (searchInput) searchInput.focus() + }, 100) + + const handleEscape = event => { + if (event.code === 'Escape') { + closeSearch() + document.removeEventListener('keydown', handleEscape) + } + } + + document.addEventListener('keydown', handleEscape) + fixSafariHeight() + window.addEventListener('resize', fixSafariHeight) + } + + const closeSearch = () => { + btf.overflowPaddingR.remove() + animateElements(false) + window.removeEventListener('resize', fixSafariHeight) + } + + const searchClickFn = () => { + btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch) + } + + const searchFnOnce = () => { + $searchMask.addEventListener('click', closeSearch) + document.querySelector('#algolia-search .search-close-button').addEventListener('click', closeSearch) + } + + const cutContent = content => { + if (!content) return '' + + let contentStr = '' + if (typeof content === 'string') { + contentStr = content.trim() + } else if (typeof content === 'object') { + if (content.value !== undefined) { + contentStr = String(content.value).trim() + if (!contentStr) return '' + } else if (content.matchedWords || content.matchLevel || content.fullyHighlighted !== undefined) { + return '' + } else { + try { + contentStr = JSON.stringify(content).trim() + if (contentStr === '{}' || contentStr === '[]' || contentStr === '""') { + return '' + } + } catch (e) { + return '' + } + } + } else if (content.toString && typeof content.toString === 'function') { + contentStr = content.toString().trim() + if (contentStr === '[object Object]' || contentStr === '[object Array]') { + return '' + } + } else { + return '' + } + + const firstOccur = contentStr.indexOf('') + let start = firstOccur - 30 + let end = firstOccur + 120 + let pre = '' + let post = '' + + if (start <= 0) { + start = 0 + end = 140 + } else { + pre = '...' + } + + if (end > contentStr.length) { + end = contentStr.length + } else { + post = '...' + } + + // Ensure we don't cut off HTML tags in the middle + let substr = contentStr.substring(start, end) + + // Handle tag completeness + // Check for incomplete opening tags at the beginning + const firstCloseBracket = substr.indexOf('>') + const firstOpenBracket = substr.indexOf('<') + + // If there's a closing bracket but no opening bracket before it, we've cut a tag + if (firstCloseBracket !== -1 && (firstOpenBracket === -1 || firstCloseBracket < firstOpenBracket)) { + substr = substr.substring(firstCloseBracket + 1) + } + + // Check for incomplete closing tags at the end + const lastOpenBracket = substr.lastIndexOf('<') + const lastCloseBracket = substr.lastIndexOf('>') + + // If there's an opening bracket after the last closing bracket, we've cut a tag + if (lastOpenBracket !== -1 && lastOpenBracket > lastCloseBracket) { + substr = substr.substring(0, lastOpenBracket) + } + + // Balance tags in the substring + const tagStack = [] + let balancedStr = '' + let i = 0 + + while (i < substr.length) { + if (substr[i] === '<') { + // Check if it's a closing tag + if (substr[i + 1] === '/') { + const closeTagEnd = substr.indexOf('>', i) + if (closeTagEnd !== -1) { + const closeTagName = substr.substring(i + 2, closeTagEnd) + // Remove matching opening tag from stack + for (let j = tagStack.length - 1; j >= 0; j--) { + if (tagStack[j] === closeTagName) { + tagStack.splice(j, 1) + break + } + } + balancedStr += substr.substring(i, closeTagEnd + 1) + i = closeTagEnd + 1 + continue + } + } else if (substr.substr(i, 2) === '', i) !== -1 && substr.indexOf('/>', i) < substr.indexOf('>', i))) { + const tagEnd = substr.indexOf('>', i) + if (tagEnd !== -1) { + balancedStr += substr.substring(i, tagEnd + 1) + i = tagEnd + 1 + continue + } + } else { + const tagEnd = substr.indexOf('>', i) + if (tagEnd !== -1) { + const tagName = substr.substring(i + 1, (substr.indexOf(' ', i) > -1 && substr.indexOf(' ', i) < tagEnd) + ? substr.indexOf(' ', i) + : tagEnd).split(/\s/)[0] + tagStack.push(tagName) + balancedStr += substr.substring(i, tagEnd + 1) + i = tagEnd + 1 + continue + } + } + } + balancedStr += substr[i] + i++ + } + + // Close any unclosed tags + while (tagStack.length > 0) { + const tagName = tagStack.pop() + balancedStr += `` + } + + // If we removed content from the beginning, add prefix + if (start > 0 || pre) { + const actualFirstOpenBracket = contentStr.indexOf('<', start > 0 ? start - 30 : 0) + const actualFirstMark = contentStr.indexOf('', start > 0 ? start - 30 : 0) + + if (actualFirstOpenBracket !== -1 && + (actualFirstMark === -1 || actualFirstOpenBracket < actualFirstMark)) { + pre = '...' + } + } + + substr = balancedStr + return `${pre}${substr}${post}` + } + + // Helper function to handle Algolia highlight results + const extractHighlightValue = highlightObj => { + if (!highlightObj) return '' + + if (typeof highlightObj === 'string') { + return highlightObj.trim() + } + + if (typeof highlightObj === 'object' && highlightObj.value !== undefined) { + return String(highlightObj.value).trim() + } + + return '' + } + + // Initialize Algolia client + let searchClient + + if (window['algoliasearch/lite'] && typeof window['algoliasearch/lite'].liteClient === 'function') { + searchClient = window['algoliasearch/lite'].liteClient(appId, apiKey) + } else if (typeof window.algoliasearch === 'function') { + searchClient = window.algoliasearch(appId, apiKey) + } else { + return console.error('Algolia search client not found!') + } + + if (!searchClient) { + return console.error('Failed to initialize Algolia search client') + } + + // Search state + let currentQuery = '' + + // Show loading state + const showLoading = show => { + const loadingIndicator = document.getElementById('loading-status') + if (loadingIndicator) { + loadingIndicator.hidden = !show + } + } + + // Cache frequently used elements + const elements = { + get searchInput () { return document.querySelector('#algolia-search-input .ais-SearchBox-input') }, + get hits () { return document.getElementById('algolia-hits') }, + get hitsEmpty () { return document.getElementById('algolia-hits-empty') }, + get hitsList () { return document.querySelector('#algolia-hits .ais-Hits-list') }, + get hitsWrapper () { return document.querySelector('#algolia-hits .ais-Hits') }, + get pagination () { return document.getElementById('algolia-pagination') }, + get paginationList () { return document.querySelector('#algolia-pagination .ais-Pagination-list') }, + get stats () { return document.querySelector('#algolia-info .ais-Stats-text') }, + } + + // Show/hide search results area + const toggleResultsVisibility = hasResults => { + elements.pagination.style.display = hasResults ? '' : 'none' + elements.stats.style.display = hasResults ? '' : 'none' + } + + // Render search results + const renderHits = (hits, query, page = 0) => { + if (hits.length === 0 && query) { + elements.hitsEmpty.textContent = languages.hits_empty.replace(/\$\{query}/, query) + elements.hitsEmpty.style.display = '' + elements.hitsWrapper.style.display = 'none' + elements.stats.style.display = 'none' + return + } + + elements.hitsEmpty.style.display = 'none' + + const hitsHTML = hits.map((hit, index) => { + const itemNumber = page * hitsPerPage + index + 1 + const link = hit.permalink || (GLOBAL_CONFIG.root + hit.path) + const result = hit._highlightResult || hit + + // Content extraction + let content = '' + try { + if (result.contentStripTruncate) { + content = cutContent(result.contentStripTruncate) + } else if (result.contentStrip) { + content = cutContent(result.contentStrip) + } else if (result.content) { + content = cutContent(result.content) + } else if (hit.contentStripTruncate) { + content = cutContent(hit.contentStripTruncate) + } else if (hit.contentStrip) { + content = cutContent(hit.contentStrip) + } else if (hit.content) { + content = cutContent(hit.content) + } + } catch (error) { + content = '' + } + + // Title handling + let title = 'no-title' + try { + if (result.title) { + title = extractHighlightValue(result.title) || 'no-title' + } else if (hit.title) { + title = extractHighlightValue(hit.title) || 'no-title' + } + + if (!title || title === 'no-title') { + if (typeof hit.title === 'string' && hit.title.trim()) { + title = hit.title.trim() + } else if (hit.title && typeof hit.title === 'object' && hit.title.value) { + title = String(hit.title.value).trim() || 'no-title' + } else { + title = 'no-title' + } + } + } catch (error) { + title = 'no-title' + } + + return ` +
  • + + ${title} + ${content ? `
    ${content}
    ` : ''} +
    +
  • ` + }).join('') + + elements.hitsList.innerHTML = hitsHTML + elements.hitsWrapper.style.display = query ? '' : 'none' + + if (hits.length > 0) { + elements.stats.style.display = '' + } + } + + // Render pagination + const renderPagination = (page, nbPages) => { + if (nbPages <= 1) { + elements.pagination.style.display = 'none' + elements.paginationList.innerHTML = '' + return + } + + elements.pagination.style.display = 'block' + + const isFirstPage = page === 0 + const isLastPage = page === nbPages - 1 + + // Responsive page display + const isMobile = window.innerWidth < 768 + const maxVisiblePages = isMobile ? 3 : 5 + let startPage = Math.max(0, page - Math.floor(maxVisiblePages / 2)) + const endPage = Math.min(nbPages - 1, startPage + maxVisiblePages - 1) + + // Adjust starting page to maintain max visible pages + if (endPage - startPage + 1 < maxVisiblePages) { + startPage = Math.max(0, endPage - maxVisiblePages + 1) + } + + let pagesHTML = '' + + // Only add ellipsis and first page when there are many pages + if (nbPages > maxVisiblePages && startPage > 0) { + pagesHTML += ` +
  • + 1 +
  • ` + if (startPage > 1) { + pagesHTML += ` +
  • + ... +
  • ` + } + } + + // Add middle page numbers + for (let i = startPage; i <= endPage; i++) { + const isSelected = i === page + if (isSelected) { + pagesHTML += ` +
  • + ${i + 1} +
  • ` + } else { + pagesHTML += ` +
  • + ${i + 1} +
  • ` + } + } + + // Only add ellipsis and last page when there are many pages + if (nbPages > maxVisiblePages && endPage < nbPages - 1) { + if (endPage < nbPages - 2) { + pagesHTML += ` +
  • + ... +
  • ` + } + pagesHTML += ` +
  • + ${nbPages} +
  • ` + } + + if (nbPages > 1) { + elements.paginationList.innerHTML = ` +
  • + ${isFirstPage + ? '' + : `` + } +
  • + ${pagesHTML} +
  • + ${isLastPage + ? '' + : `` + } +
  • ` + elements.pagination.style.display = currentQuery ? '' : 'none' + } else { + elements.pagination.style.display = 'none' + } + } + + // Render statistics + const renderStats = (nbHits, processingTimeMS, query) => { + if (query) { + const stats = languages.hits_stats + .replace(/\$\{hits}/, nbHits) + .replace(/\$\{time}/, processingTimeMS) + elements.stats.innerHTML = `
    ${stats}` + elements.stats.style.display = '' + } else { + elements.stats.style.display = 'none' + } + } + + // Perform search + const performSearch = async (query, page = 0) => { + if (!query.trim()) { + currentQuery = '' + renderHits([], '', 0) + renderPagination(0, 0) + renderStats(0, 0, '') + toggleResultsVisibility(false) + return + } + + showLoading(true) + currentQuery = query + + try { + let result + + if (searchClient && typeof searchClient.search === 'function') { + // v5 multi-index search + const searchResult = await searchClient.search([{ + indexName, + query, + params: { + page, + hitsPerPage, + highlightPreTag: '', + highlightPostTag: '', + attributesToHighlight: ['title', 'content', 'contentStrip', 'contentStripTruncate'] + } + }]) + result = searchResult.results[0] + } else if (searchClient && typeof searchClient.initIndex === 'function') { + // v4 single-index search + const index = searchClient.initIndex(indexName) + result = await index.search(query, { + page, + hitsPerPage, + highlightPreTag: '', + highlightPostTag: '', + attributesToHighlight: ['title', 'content', 'contentStrip', 'contentStripTruncate'] + }) + } else { + throw new Error('Algolia: No compatible search method available') + } + + renderHits(result.hits || [], query, page) + + const actualNbPages = result.nbHits <= hitsPerPage ? 1 : (result.nbPages || 0) + renderPagination(page, actualNbPages) + renderStats(result.nbHits || 0, result.processingTimeMS || 0, query) + + const hasResults = result.hits && result.hits.length > 0 + toggleResultsVisibility(hasResults) + + // Refresh Pjax links + if (window.pjax) { + window.pjax.refresh(document.getElementById('algolia-hits')) + } + } catch (error) { + console.error('Algolia search error:', error) + renderHits([], query, page) + renderPagination(0, 0) + renderStats(0, 0, query) + } finally { + showLoading(false) + } + } + + // Debounced search + let searchTimeout + const debouncedSearch = (query, delay = 300) => { + clearTimeout(searchTimeout) + searchTimeout = setTimeout(() => performSearch(query), delay) + } + + // Initialize search box and events + const initializeSearch = () => { + showLoading(false) + + if (elements.searchInput) { + elements.searchInput.addEventListener('input', e => { + const query = e.target.value + debouncedSearch(query) + }) + } + + const searchForm = document.querySelector('#algolia-search-input .ais-SearchBox-form') + if (searchForm) { + searchForm.addEventListener('submit', e => { + e.preventDefault() + const query = elements.searchInput.value + performSearch(query) + }) + } + + // Pagination event delegation + elements.pagination.addEventListener('click', e => { + e.preventDefault() + const link = e.target.closest('a[data-page]') + if (link) { + const page = parseInt(link.dataset.page, 10) + if (!isNaN(page) && currentQuery) { + performSearch(currentQuery, page) + } + } + }) + + // Initial state + toggleResultsVisibility(false) + } + + // Initialize + initializeSearch() + searchClickFn() + searchFnOnce() + + window.addEventListener('pjax:complete', () => { + if (!btf.isHidden($searchMask)) closeSearch() + searchClickFn() + }) +}) diff --git a/js/search/local-search.js b/js/search/local-search.js new file mode 100644 index 0000000..3f16838 --- /dev/null +++ b/js/search/local-search.js @@ -0,0 +1,567 @@ +/** + * Refer to hexo-generator-searchdb + * https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js + * Modified by hexo-theme-butterfly + */ + +class LocalSearch { + constructor ({ + path = '', + unescape = false, + top_n_per_article = 1 + }) { + this.path = path + this.unescape = unescape + this.top_n_per_article = top_n_per_article + this.isfetched = false + this.datas = null + } + + getIndexByWord (words, text, caseSensitive = false) { + const index = [] + const included = new Set() + + if (!caseSensitive) { + text = text.toLowerCase() + } + words.forEach(word => { + if (this.unescape) { + const div = document.createElement('div') + div.innerText = word + word = div.innerHTML + } + const wordLen = word.length + if (wordLen === 0) return + let startPosition = 0 + let position = -1 + if (!caseSensitive) { + word = word.toLowerCase() + } + while ((position = text.indexOf(word, startPosition)) > -1) { + index.push({ position, word }) + included.add(word) + startPosition = position + wordLen + } + }) + // Sort index by position of keyword + index.sort((left, right) => { + if (left.position !== right.position) { + return left.position - right.position + } + return right.word.length - left.word.length + }) + return [index, included] + } + + // Merge hits into slices + mergeIntoSlice (start, end, index) { + let item = index[0] + let { position, word } = item + const hits = [] + const count = new Set() + while (position + word.length <= end && index.length !== 0) { + count.add(word) + hits.push({ + position, + length: word.length + }) + const wordEnd = position + word.length + + // Move to next position of hit + index.shift() + while (index.length !== 0) { + item = index[0] + position = item.position + word = item.word + if (wordEnd > position) { + index.shift() + } else { + break + } + } + } + return { + hits, + start, + end, + count: count.size + } + } + + // Highlight title and content + highlightKeyword (val, slice) { + let result = '' + let index = slice.start + for (const { position, length } of slice.hits) { + result += val.substring(index, position) + index = position + length + result += `${val.substr(position, length)}` + } + result += val.substring(index, slice.end) + return result + } + + getResultItems (keywords) { + const resultItems = [] + this.datas.forEach(({ title, content, url }) => { + // The number of different keywords included in the article. + const [indexOfTitle, keysOfTitle] = this.getIndexByWord(keywords, title) + const [indexOfContent, keysOfContent] = this.getIndexByWord(keywords, content) + const includedCount = new Set([...keysOfTitle, ...keysOfContent]).size + + // Show search results + const hitCount = indexOfTitle.length + indexOfContent.length + if (hitCount === 0) return + + const slicesOfTitle = [] + if (indexOfTitle.length !== 0) { + slicesOfTitle.push(this.mergeIntoSlice(0, title.length, indexOfTitle)) + } + + let slicesOfContent = [] + while (indexOfContent.length !== 0) { + const item = indexOfContent[0] + const { position } = item + // Cut out 120 characters. The maxlength of .search-input is 80. + const start = Math.max(0, position - 20) + const end = Math.min(content.length, position + 100) + slicesOfContent.push(this.mergeIntoSlice(start, end, indexOfContent)) + } + + // Sort slices in content by included keywords' count and hits' count + slicesOfContent.sort((left, right) => { + if (left.count !== right.count) { + return right.count - left.count + } else if (left.hits.length !== right.hits.length) { + return right.hits.length - left.hits.length + } + return left.start - right.start + }) + + // Select top N slices in content + const upperBound = parseInt(this.top_n_per_article, 10) + if (upperBound >= 0) { + slicesOfContent = slicesOfContent.slice(0, upperBound) + } + + let resultItem = '' + + url = new URL(url, location.origin) + url.searchParams.append('highlight', keywords.join(' ')) + + if (slicesOfTitle.length !== 0) { + resultItem += `
  • ${this.highlightKeyword(title, slicesOfTitle[0])}` + } else { + resultItem += `
  • ${title}` + } + + slicesOfContent.forEach(slice => { + resultItem += `

    ${this.highlightKeyword(content, slice)}...

    ` + }) + + resultItem += '
  • ' + resultItems.push({ + item: resultItem, + id: resultItems.length, + hitCount, + includedCount + }) + }) + return resultItems + } + + fetchData () { + const isXml = !this.path.endsWith('json') + fetch(this.path) + .then(response => response.text()) + .then(res => { + // Get the contents from search data + this.isfetched = true + this.datas = isXml + ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(element => ({ + title: element.querySelector('title').textContent, + content: element.querySelector('content').textContent, + url: element.querySelector('url').textContent + })) + : JSON.parse(res) + // Only match articles with non-empty titles + this.datas = this.datas.filter(data => data.title).map(data => { + data.title = data.title.trim() + data.content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : '' + data.url = decodeURIComponent(data.url).replace(/\/{2,}/g, '/') + return data + }) + // Remove loading animation + window.dispatchEvent(new Event('search:loaded')) + }) + } + + // Highlight by wrapping node in mark elements with the given class name + highlightText (node, slice, className) { + const val = node.nodeValue + let index = slice.start + const children = [] + for (const { position, length } of slice.hits) { + const text = document.createTextNode(val.substring(index, position)) + index = position + length + const mark = document.createElement('mark') + mark.className = className + mark.appendChild(document.createTextNode(val.substr(position, length))) + children.push(text, mark) + } + node.nodeValue = val.substring(index, slice.end) + children.forEach(element => { + node.parentNode.insertBefore(element, node) + }) + } + + // Highlight the search words provided in the url in the text + highlightSearchWords (body) { + const params = new URL(location.href).searchParams.get('highlight') + const keywords = params ? params.split(' ') : [] + if (!keywords.length || !body) return + const walk = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null) + const allNodes = [] + while (walk.nextNode()) { + if (!walk.currentNode.parentNode.matches('button, select, textarea, .mermaid')) allNodes.push(walk.currentNode) + } + allNodes.forEach(node => { + const [indexOfNode] = this.getIndexByWord(keywords, node.nodeValue) + if (!indexOfNode.length) return + const slice = this.mergeIntoSlice(0, node.nodeValue.length, indexOfNode) + this.highlightText(node, slice, 'search-keyword') + }) + } +} + +window.addEventListener('load', () => { +// Search + const { path, top_n_per_article, unescape, languages, pagination } = GLOBAL_CONFIG.localSearch + const enablePagination = pagination && pagination.enable + const localSearch = new LocalSearch({ + path, + top_n_per_article, + unescape + }) + + const input = document.querySelector('.local-search-input input') + const statsItem = document.getElementById('local-search-stats') + const $loadingStatus = document.getElementById('loading-status') + const isXml = !path.endsWith('json') + + // Pagination variables (only initialize if pagination is enabled) + let currentPage = 0 + const hitsPerPage = pagination.hitsPerPage || 10 + + let currentResultItems = [] + + if (!enablePagination) { + // If pagination is disabled, we don't need these variables + currentPage = undefined + currentResultItems = undefined + } + + // Cache frequently used elements + const elements = { + get pagination () { return document.getElementById('local-search-pagination') }, + get paginationList () { return document.querySelector('#local-search-pagination .ais-Pagination-list') } + } + + // Show/hide search results area + const toggleResultsVisibility = hasResults => { + if (enablePagination) { + elements.pagination.style.display = hasResults ? '' : 'none' + } else { + elements.pagination.style.display = 'none' + } + } + + // Render search results for current page + const renderResults = (searchText, resultItems) => { + const container = document.getElementById('local-search-results') + + // Determine items to display based on pagination mode + const itemsToDisplay = enablePagination + ? currentResultItems.slice(currentPage * hitsPerPage, (currentPage + 1) * hitsPerPage) + : resultItems + + // Handle empty page in pagination mode + if (enablePagination && itemsToDisplay.length === 0 && currentResultItems.length > 0) { + currentPage = 0 + renderResults(searchText, resultItems) + return + } + + // Add numbering to items + const numberedItems = itemsToDisplay.map((result, index) => { + const itemNumber = enablePagination + ? currentPage * hitsPerPage + index + 1 + : index + 1 + return result.item.replace( + '
  • ', + `
  • ` + ) + }) + + container.innerHTML = `
      ${numberedItems.join('')}
    ` + + // Update stats + const displayCount = enablePagination ? currentResultItems.length : resultItems.length + const stats = languages.hits_stats.replace(/\$\{hits}/, displayCount) + statsItem.innerHTML = `
    ${stats}
    ` + + // Handle pagination + if (enablePagination) { + const nbPages = Math.ceil(currentResultItems.length / hitsPerPage) + renderPagination(currentPage, nbPages, searchText) + } + + const hasResults = resultItems.length > 0 + toggleResultsVisibility(hasResults) + + window.pjax && window.pjax.refresh(container) + } + + // Render pagination + const renderPagination = (page, nbPages, query) => { + if (nbPages <= 1) { + elements.pagination.style.display = 'none' + elements.paginationList.innerHTML = '' + return + } + + elements.pagination.style.display = 'block' + + const isFirstPage = page === 0 + const isLastPage = page === nbPages - 1 + + // Responsive page display + const isMobile = window.innerWidth < 768 + const maxVisiblePages = isMobile ? 3 : 5 + let startPage = Math.max(0, page - Math.floor(maxVisiblePages / 2)) + const endPage = Math.min(nbPages - 1, startPage + maxVisiblePages - 1) + + // Adjust starting page to maintain max visible pages + if (endPage - startPage + 1 < maxVisiblePages) { + startPage = Math.max(0, endPage - maxVisiblePages + 1) + } + + let pagesHTML = '' + + // Only add ellipsis and first page when there are many pages + if (nbPages > maxVisiblePages && startPage > 0) { + pagesHTML += ` +
  • + 1 +
  • ` + if (startPage > 1) { + pagesHTML += ` +
  • + ... +
  • ` + } + } + + // Add middle page numbers + for (let i = startPage; i <= endPage; i++) { + const isSelected = i === page + if (isSelected) { + pagesHTML += ` +
  • + ${i + 1} +
  • ` + } else { + pagesHTML += ` +
  • + ${i + 1} +
  • ` + } + } + + // Only add ellipsis and last page when there are many pages + if (nbPages > maxVisiblePages && endPage < nbPages - 1) { + if (endPage < nbPages - 2) { + pagesHTML += ` +
  • + ... +
  • ` + } + pagesHTML += ` +
  • + ${nbPages} +
  • ` + } + + if (nbPages > 1) { + elements.paginationList.innerHTML = ` +
  • + ${isFirstPage + ? '' + : `` + } +
  • + ${pagesHTML} +
  • + ${isLastPage + ? '' + : `` + } +
  • ` + } else { + elements.pagination.style.display = 'none' + } + } + + // Clear search results and stats + const clearSearchResults = () => { + const container = document.getElementById('local-search-results') + container.textContent = '' + statsItem.textContent = '' + toggleResultsVisibility(false) + if (enablePagination) { + currentResultItems = [] + currentPage = 0 + } + } + + // Show no results message + const showNoResults = searchText => { + const container = document.getElementById('local-search-results') + container.textContent = '' + const statsDiv = document.createElement('div') + statsDiv.className = 'search-result-stats' + statsDiv.textContent = languages.hits_empty.replace(/\$\{query}/, searchText) + statsItem.innerHTML = statsDiv.outerHTML + toggleResultsVisibility(false) + if (enablePagination) { + currentResultItems = [] + currentPage = 0 + } + } + + const inputEventFunction = () => { + if (!localSearch.isfetched) return + let searchText = input.value.trim().toLowerCase() + isXml && (searchText = searchText.replace(//g, '>')) + + if (searchText !== '') $loadingStatus.hidden = false + + const keywords = searchText.split(/[-\s]+/) + let resultItems = [] + + if (searchText.length > 0) { + resultItems = localSearch.getResultItems(keywords) + } + + if (keywords.length === 1 && keywords[0] === '') { + clearSearchResults() + } else if (resultItems.length === 0) { + showNoResults(searchText) + } else { + // Sort results by relevance + resultItems.sort((left, right) => { + if (left.includedCount !== right.includedCount) { + return right.includedCount - left.includedCount + } else if (left.hitCount !== right.hitCount) { + return right.hitCount - left.hitCount + } + return right.id - left.id + }) + + if (enablePagination) { + currentResultItems = resultItems + currentPage = 0 + } + renderResults(searchText, resultItems) + } + + $loadingStatus.hidden = true + } + + let loadFlag = false + const $searchMask = document.getElementById('search-mask') + const $searchDialog = document.querySelector('#local-search .search-dialog') + + // fix safari + const fixSafariHeight = () => { + if (window.innerWidth < 768) { + $searchDialog.style.setProperty('--search-height', window.innerHeight + 'px') + } + } + + const openSearch = () => { + btf.overflowPaddingR.add() + btf.animateIn($searchMask, 'to_show 0.5s') + btf.animateIn($searchDialog, 'titleScale 0.5s') + setTimeout(() => { input.focus() }, 300) + if (!loadFlag) { + !localSearch.isfetched && localSearch.fetchData() + input.addEventListener('input', inputEventFunction) + loadFlag = true + } + // shortcut: ESC + document.addEventListener('keydown', function f (event) { + if (event.code === 'Escape') { + closeSearch() + document.removeEventListener('keydown', f) + } + }) + + fixSafariHeight() + window.addEventListener('resize', fixSafariHeight) + } + + const closeSearch = () => { + btf.overflowPaddingR.remove() + btf.animateOut($searchDialog, 'search_close .5s') + btf.animateOut($searchMask, 'to_hide 0.5s') + window.removeEventListener('resize', fixSafariHeight) + } + + const searchClickFn = () => { + btf.addEventListenerPjax(document.querySelector('#search-button > .search'), 'click', openSearch) + } + + const searchFnOnce = () => { + document.querySelector('#local-search .search-close-button').addEventListener('click', closeSearch) + $searchMask.addEventListener('click', closeSearch) + if (GLOBAL_CONFIG.localSearch.preload) { + localSearch.fetchData() + } + localSearch.highlightSearchWords(document.getElementById('article-container')) + + // Pagination event delegation - only add if pagination is enabled + if (enablePagination) { + elements.pagination.addEventListener('click', e => { + e.preventDefault() + const link = e.target.closest('a[data-page]') + if (link) { + const page = parseInt(link.dataset.page, 10) + if (!isNaN(page) && currentResultItems.length > 0) { + currentPage = page + renderResults(input.value.trim().toLowerCase(), currentResultItems) + } + } + }) + } + + // Initial state + toggleResultsVisibility(false) + } + + window.addEventListener('search:loaded', () => { + const $loadDataItem = document.getElementById('loading-database') + $loadDataItem.nextElementSibling.style.visibility = 'visible' + $loadDataItem.remove() + }) + + searchClickFn() + searchFnOnce() + + // pjax + window.addEventListener('pjax:complete', () => { + !btf.isHidden($searchMask) && closeSearch() + localSearch.highlightSearchWords(document.getElementById('article-container')) + searchClickFn() + }) +}) diff --git a/js/tools/base64-img.js b/js/tools/base64-img.js new file mode 100644 index 0000000..9a8dc34 --- /dev/null +++ b/js/tools/base64-img.js @@ -0,0 +1,77 @@ +(function() { + function initBase64Tool() { + const container = document.getElementById('tool-base64-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + const dropZone = document.getElementById('drop-zone'); + const fileInput = document.getElementById('file-input'); + const outputBase64 = document.getElementById('output-base64'); + const btnCopy = document.getElementById('btn-copy'); + const btnClear = document.getElementById('btn-clear'); + const inputBase64 = document.getElementById('input-base64'); + const btnPreview = document.getElementById('btn-preview'); + const imagePreview = document.getElementById('image-preview'); + + // Image to Base64 + function processFile(file) { + if (!file.type.startsWith('image/')) { + alert('请上传图片文件'); + return; + } + outputBase64.value = '处理中...'; + const reader = new FileReader(); + reader.onload = (e) => { + outputBase64.value = e.target.result; + }; + reader.onerror = () => { + alert('读取文件失败'); + outputBase64.value = ''; + }; + reader.readAsDataURL(file); + } + + dropZone.addEventListener('click', () => fileInput.click()); + dropZone.addEventListener('dragover', (e) => { + e.preventDefault(); + dropZone.style.background = '#eef4fe'; + }); + dropZone.addEventListener('dragleave', () => { + dropZone.style.background = ''; + }); + dropZone.addEventListener('drop', (e) => { + e.preventDefault(); + dropZone.style.background = ''; + const files = e.dataTransfer.files; + if (files.length) processFile(files[0]); + }); + fileInput.addEventListener('change', () => { + if (fileInput.files.length) processFile(fileInput.files[0]); + }); + + btnCopy.addEventListener('click', () => { + if (!outputBase64.value) return; + outputBase64.select(); + navigator.clipboard.writeText(outputBase64.value).then(() => alert('已复制到剪贴板')); + }); + + btnClear.addEventListener('click', () => { + outputBase64.value = ''; + fileInput.value = ''; + }); + + // Base64 to Image + btnPreview.addEventListener('click', () => { + const val = inputBase64.value.trim(); + if (!val) { + imagePreview.innerHTML = '预览区域'; + return; + } + imagePreview.innerHTML = ``; + }); + } + + document.addEventListener('DOMContentLoaded', initBase64Tool); + document.addEventListener('pjax:complete', initBase64Tool); +})(); diff --git a/js/tools/converter.js b/js/tools/converter.js new file mode 100644 index 0000000..8fcd53c --- /dev/null +++ b/js/tools/converter.js @@ -0,0 +1,605 @@ +(function () { + const DEFAULT_BASE_URL = 'https://doc.luozili.work'; + const DEFAULT_API_KEY = ''; + const POLL_INTERVAL_MS = 3000; + const MAX_POLL_ROUNDS = 120; + const MAX_CONCURRENCY = 2; + const DEBUG_PREFIX = '[ConvertX-Debug]'; + const DEBUG_LOG_LIMIT = 200; + const ASSET_STORAGE_KEY = 'convertx_asset_center_v1'; + + const FALLBACK_CONVERTER_MAP = { + jpg: 'imagemagick', png: 'imagemagick', webp: 'imagemagick', + pdf: 'libreoffice', docx: 'libreoffice', csv: 'dasel', + xlsx: 'libreoffice', md: 'markitDown', txt: 'pandoc', + gif: 'ffmpeg', mp4: 'ffmpeg', mp3: 'ffmpeg' + }; + + const Bus = { + listeners: {}, + on(event, handler) { + if (!this.listeners[event]) this.listeners[event] = []; + this.listeners[event].push(handler); + }, + emit(event, payload) { + (this.listeners[event] || []).forEach((fn) => { + try { fn(payload); } catch (e) { console.warn(e); } + }); + } + }; + + const Store = { + state: { + files: [], + targetFormat: null, + tasks: {}, + running: 0, + converterCapabilities: {} + }, + setFiles(files) { + this.state.files = files; + Bus.emit('files:changed', files); + }, + setTargetFormat(fmt) { + this.state.targetFormat = fmt; + Bus.emit('target:changed', fmt); + }, + upsertTask(task) { + this.state.tasks[task.id] = { ...(this.state.tasks[task.id] || {}), ...task }; + Bus.emit('task:updated', this.state.tasks[task.id]); + }, + getTask(id) { + return this.state.tasks[id] || null; + }, + getTasks() { + return Object.values(this.state.tasks).sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0)); + }, + clearTasks() { + this.state.tasks = {}; + Bus.emit('queue:reset'); + } + }; + + const Api = { + getBaseUrl() { + const val = (document.getElementById('convertx-base-url')?.value || '').trim(); + return (val || DEFAULT_BASE_URL).replace(/\/+$/, ''); + }, + getApiKey() { + const val = (document.getElementById('api-key')?.value || '').trim(); + return val || DEFAULT_API_KEY; + }, + getAuthMode(apiKey) { + return apiKey ? 'X-API-Key + Cookie' : 'Cookie'; + }, + async request(path, options = {}) { + const baseUrl = this.getBaseUrl(); + const apiKey = this.getApiKey(); + const url = `${baseUrl}${path}`; + const pageOrigin = window.location.origin; + let credentialsMode = 'include'; + let sameOrigin = true; + try { + sameOrigin = new URL(url, window.location.href).origin === window.location.origin; + credentialsMode = sameOrigin ? 'include' : 'omit'; + } catch (_) { + credentialsMode = 'include'; + sameOrigin = true; + } + const traceId = `${Date.now()}-${Math.random().toString(16).slice(2, 8)}`; + const headers = { ...(options.headers || {}) }; + const useApiKey = options.useApiKey !== false; + if (useApiKey && apiKey) headers['X-API-Key'] = apiKey; + const debugMeta = options.debugMeta || null; + + const parseResponse = async (res, traceIdForLog, requestUrl) => { + const text = await res.text(); + debugLog('api.response', { traceId: traceIdForLog, status: res.status, url: requestUrl, body_preview: (text || '').slice(0, 300) }); + let data = null; + try { data = text ? JSON.parse(text) : null; } catch (_) { data = null; } + return { ok: res.ok, status: res.status, text, data, headers: res.headers, traceId: traceIdForLog }; + }; + + debugLog('api.request', { + traceId, + url, + method: options.method || 'GET', + auth: this.getAuthMode(useApiKey ? apiKey : ''), + page_origin: pageOrigin, + online: navigator.onLine, + has_custom_headers: Object.keys(headers).length > 0, + use_api_key: useApiKey, + credentials_mode: credentialsMode, + same_origin: sameOrigin, + debug_meta: debugMeta + }); + + let res; + try { + res = await fetch(url, { ...options, headers, credentials: credentialsMode }); + } catch (err) { + debugLog('api.network_error', { + traceId, + url, + page_origin: pageOrigin, + error_name: err?.name || 'UnknownError', + error_message: err?.message || 'Failed to fetch', + online: navigator.onLine, + protocol_mode: (document.getElementById('protocol-mode')?.value || 'auto'), + credentials_mode: credentialsMode, + same_origin: sameOrigin, + debug_meta: debugMeta, + curl_probe: { + options: `curl -i -X OPTIONS "${url}" -H "Origin: ${pageOrigin}" -H "Access-Control-Request-Method: ${options.method || 'POST'}" -H "Access-Control-Request-Headers: x-api-key,content-type"`, + post_no_key: `curl -i -X ${(options.method || 'POST').toUpperCase()} "${url}" -H "Origin: ${pageOrigin}"`, + post_with_key: `curl -i -X ${(options.method || 'POST').toUpperCase()} "${url}" -H "Origin: ${pageOrigin}" -H "X-API-Key: "` + } + }); + if (url.includes('/convert')) { + throw new Error('网络层失败:浏览器未拿到可用的跨域响应(非业务 4xx/5xx)。请检查 POST /convert 是否返回 Access-Control-Allow-Origin,以及 OPTIONS/POST 的 CORS 头是否一致,并确认放行 X-API-Key'); + } + throw new Error('网络层失败(可能是 CSP connect-src / 跨域预检 / 浏览器安全策略),请检查浏览器 Network 与响应头'); + } + + return await parseResponse(res, traceId, url); + } + }; + + function createTaskFromFile(file) { + const id = Date.now() + Math.floor(Math.random() * 100000); + const manualConverter = (document.getElementById('converter-name')?.value || '').trim(); + const converter = manualConverter || getRecommendedConverter(Store.state.targetFormat) || FALLBACK_CONVERTER_MAP[Store.state.targetFormat] || ''; + return { + id, + createdAt: Date.now(), + file, + filename: file.name, + targetFormat: Store.state.targetFormat, + converter, + status: 'pending', + attempts: 0, + message: '等待中...' + }; + } + + async function runScheduler() { + const pending = Store.getTasks().filter((t) => t.status === 'pending'); + if (!pending.length) return; + + while (Store.state.running < MAX_CONCURRENCY && pending.length) { + const task = pending.shift(); + Store.state.running += 1; + processTask(task.id).finally(() => { + Store.state.running -= 1; + runScheduler(); + }); + } + } + + async function processTask(taskId) { + const task = Store.getTask(taskId); + if (!task) return; + + Store.upsertTask({ id: taskId, status: 'running', message: '准备提交任务...', attempts: (task.attempts || 0) + 1 }); + + try { + const formData = new FormData(); + formData.append('file', task.file); + formData.append('target_format', task.targetFormat); + if (task.converter) formData.append('converter', task.converter); + + debugLog('task.submit.meta', { + taskId, + filename: task.filename, + file_size: task.file?.size || 0, + file_size_bucket: (function () { + const size = task.file?.size || 0; + if (size < 100 * 1024) return '<100KB'; + if (size < 1024 * 1024) return '100KB-1MB'; + if (size < 10 * 1024 * 1024) return '1MB-10MB'; + return '>=10MB'; + })(), + target_format: task.targetFormat, + converter: task.converter || null, + protocol_mode: (document.getElementById('protocol-mode')?.value || 'auto') + }); + + let submit; + try { + submit = await Api.request('/convert', { + method: 'POST', + body: formData, + useApiKey: true, + debugMeta: { filename: task.filename, file_size: task.file?.size || 0, target_format: task.targetFormat } + }); + } catch (firstErr) { + const msg = String(firstErr?.message || firstErr || ''); + const looksLikeCors = /Failed to fetch|CORS|预检|跨域|X-API-Key/i.test(msg); + if (!looksLikeCors) throw firstErr; + + debugLog('task.submit.fallback_without_api_key', { + taskId, + reason: msg, + hint: '首次带 X-API-Key 网络失败,降级为不带自定义头重试一次' + }); + submit = await Api.request('/convert', { + method: 'POST', + body: formData, + useApiKey: false, + debugMeta: { filename: task.filename, file_size: task.file?.size || 0, target_format: task.targetFormat, retry_without_api_key: true } + }); + } + if (!submit.ok) throw new Error(`提交失败(${submit.status}): ${(submit.text || '').slice(0, 200)}`); + + const protocolMode = (document.getElementById('protocol-mode')?.value || 'auto').toLowerCase(); + + const isSyncPayload = Boolean(submit.data && (submit.data.status === 'completed' || Array.isArray(submit.data.files))); + if (protocolMode !== 'async' && isSyncPayload) { + persistAsset(task, submit.data, null); + Store.upsertTask({ + id: taskId, + status: 'done', + message: '同步模式完成', + submitData: submit.data, + statusData: submit.data, + downloadData: { kind: 'json', data: submit.data } + }); + return; + } + + const jobId = submit.data?.job_id || submit.data?.jobId; + if (protocolMode === 'sync' && !isSyncPayload) { + throw new Error('当前协议模式为仅同步,但后端返回非同步结构'); + } + if (!jobId) throw new Error('后端返回成功但无 job_id / files'); + Store.upsertTask({ id: taskId, jobId, submitData: submit.data, message: `任务已提交: ${jobId}` }); + + for (let round = 1; round <= MAX_POLL_ROUNDS; round++) { + const st = await Api.request(`/job/${encodeURIComponent(jobId)}/status`, { method: 'GET' }); + if (!st.ok) throw new Error(`状态查询失败(${st.status}): ${(st.text || '').slice(0, 160)}`); + + if (st.data && st.data.success === false && /unauthorized/i.test(st.data.message || '')) { + throw new Error('状态接口鉴权失败(Unauthorized)'); + } + + const status = st.data?.status || 'processing'; + Store.upsertTask({ id: taskId, statusData: st.data, message: `状态: ${status} (${round}/${MAX_POLL_ROUNDS})` }); + + if (status === 'completed') { + const dl = await fetchDownloadPayload(jobId); + persistAsset(Store.getTask(taskId) || task, st.data, dl); + Store.upsertTask({ id: taskId, status: 'done', message: '转换完成', downloadData: dl }); + return; + } + + if (status === 'failed' || status === 'timeout') throw new Error(`任务结束状态: ${status}`); + await wait(POLL_INTERVAL_MS); + } + + throw new Error('轮询超时,请稍后重试'); + } catch (err) { + Store.upsertTask({ id: taskId, status: 'error', message: err.message || '未知错误' }); + } + } + + async function fetchDownloadPayload(jobId) { + const res = await Api.request(`/job/${encodeURIComponent(jobId)}/download`, { method: 'GET' }); + if (!res.ok) throw new Error(`下载接口失败(${res.status})`); + if (res.data) return { kind: 'json', data: res.data }; + const blob = new Blob([res.text || ''], { type: 'text/plain' }); + return { kind: 'blob', blob, filename: `convertx-${jobId}.txt` }; + } + + function initConverterTool() { + const container = document.getElementById('tool-converter-container'); + if (!container) return; + + const fileInput = document.getElementById('file-input'); + const dropZone = container.querySelector('.drop-zone'); + const baseUrlEl = document.getElementById('convertx-base-url'); + const apiKeyEl = document.getElementById('api-key'); + if (baseUrlEl && !baseUrlEl.value) baseUrlEl.value = DEFAULT_BASE_URL; + if (apiKeyEl && !apiKeyEl.value) apiKeyEl.value = DEFAULT_API_KEY; + + fileInput.addEventListener('change', (e) => handleFileSelect(e.target.files)); + + dropZone.addEventListener('dragover', (e) => { + e.preventDefault(); + dropZone.style.background = '#eff6ff'; + }); + dropZone.addEventListener('dragleave', (e) => { + e.preventDefault(); + dropZone.style.background = 'white'; + }); + dropZone.addEventListener('drop', (e) => { + e.preventDefault(); + dropZone.style.background = 'white'; + if (!e.dataTransfer.files.length) return; + fileInput.files = e.dataTransfer.files; + handleFileSelect(e.dataTransfer.files); + }); + + window.filterFormats = function (type) { + document.querySelectorAll('.format-tab').forEach((t) => t.classList.remove('active')); + if (window.event?.target) window.event.target.classList.add('active'); + document.querySelectorAll('.format-item').forEach((item) => { + item.style.display = (type === 'all' || item.dataset.type === type) ? 'flex' : 'none'; + }); + }; + + window.selectFormat = function (fmt) { + if (!Store.state.files.length) { + alert('请先选择文件'); + return; + } + Store.setTargetFormat(fmt); + document.getElementById('target-format-name').innerText = fmt.toUpperCase(); + document.getElementById('action-bar').style.display = 'block'; + suggestConverterForTarget(fmt); + document.querySelectorAll('.format-item').forEach((el) => el.classList.remove('selected')); + if (window.event?.currentTarget) window.event.currentTarget.classList.add('selected'); + }; + + window.startConversion = startBatchConversion; + window.startBatchConversion = startBatchConversion; + window.retryFailedTasks = retryFailedTasks; + window.clearTaskQueue = clearTaskQueue; + window.downloadResult = downloadResult; + window.filterTaskView = renderAllTasks; + window.exportDiagnostics = exportDiagnostics; + window.clearDebugLogs = clearDebugLogs; + window.refreshAssetCenter = renderAssetCenter; + window.clearAssetCenter = clearAssetCenter; + window.checkBackendConnectivity = refreshBackendMeta; + + Bus.on('task:updated', renderTaskRow); + Bus.on('queue:reset', renderQueueEmpty); + + setBackendStatus('未检测后端(点击“手动检测后端”)', 'warn'); + renderAssetCenter(); + } + + function handleFileSelect(fileList) { + const files = Array.from(fileList || []); + if (!files.length) return; + Store.setFiles(files); + + const selectedFileName = document.getElementById('selected-file-name'); + const uploadTitle = document.querySelector('.upload-section h3'); + if (selectedFileName) selectedFileName.innerText = files[0].name; + if (uploadTitle) { + uploadTitle.innerText = files.length === 1 + ? `已选择: ${files[0].name}` + : `已选择 ${files.length} 个文件(首个: ${files[0].name})`; + } + } + + async function startBatchConversion() { + if (!Store.state.files.length || !Store.state.targetFormat) return; + Store.state.files.forEach((file) => { + const task = createTaskFromFile(file); + Store.upsertTask(task); + }); + runScheduler(); + } + + function retryFailedTasks() { + Store.getTasks().filter((t) => t.status === 'error').forEach((t) => { + Store.upsertTask({ id: t.id, status: 'pending', message: '重试排队中...' }); + }); + runScheduler(); + } + + function clearTaskQueue() { + Store.clearTasks(); + } + + async function downloadResult(id) { + const task = Store.getTask(id); + if (!task) return; + try { + const payload = task.downloadData || (task.jobId ? await fetchDownloadPayload(task.jobId) : { kind: 'json', data: task.submitData || {} }); + if (payload.kind === 'blob') { + saveAs(payload.blob, payload.filename || `result-${id}.bin`); + } else { + const blob = new Blob([JSON.stringify(payload.data || {}, null, 2)], { type: 'application/json' }); + saveAs(blob, `convertx-${id}-result.json`); + } + } catch (err) { + alert(`下载失败: ${err.message || err}`); + } + } + + function renderTaskRow(task) { + const filter = (document.getElementById('task-filter')?.value || 'all'); + + const q = document.getElementById('conversion-queue'); + if (!q) return; + if (q.children[0] && q.children[0].innerText.includes('暂无任务')) q.innerHTML = ''; + + let row = document.getElementById(`task-${task.id}`); + if (!row) { + row = document.createElement('div'); + row.className = 'queue-item'; + row.id = `task-${task.id}`; + q.prepend(row); + } + + if (filter !== 'all' && task.status !== filter) { + row.style.display = 'none'; + return; + } + row.style.display = 'flex'; + + const statusClass = task.status === 'done' ? 'status-done' + : task.status === 'error' ? 'status-error' + : task.status === 'running' ? 'status-processing' + : 'status-pending'; + + const action = task.status === 'done' + ? `完成 下载` + : task.status === 'error' + ? `失败: ${task.message || '未知错误'}` + : (task.message || '处理中...'); + + row.innerHTML = `
    ${task.filename} → ${(task.targetFormat || '').toUpperCase()} #${task.attempts || 0}
    ${action}
    `; + } + + function renderAllTasks() { + const q = document.getElementById('conversion-queue'); + if (!q) return; + q.innerHTML = '
    暂无任务
    '; + Store.getTasks().forEach((task) => renderTaskRow(task)); + } + + function renderQueueEmpty() { + const q = document.getElementById('conversion-queue'); + if (!q) return; + q.innerHTML = '
    暂无任务
    '; + } + + async function refreshBackendMeta() { + try { + const health = await Api.request('/health', { method: 'GET', useApiKey: false }); + if (!health.ok) throw new Error(`health ${health.status}`); + + const converters = await Api.request('/converters', { method: 'GET', useApiKey: false }); + if (converters.ok && converters.data) { + Store.state.converterCapabilities = converters.data || {}; + const names = Object.keys(converters.data || {}); + setBackendStatus(`后端在线,已加载 ${names.length} 个转换器`, 'ok'); + } else { + setBackendStatus('初始化告警:转换器列表不可用,仍可尝试手动转换', 'warn'); + } + } catch (err) { + setBackendStatus(`初始化告警: ${err.message || err}(不阻断,可继续尝试转换)`, 'warn'); + debugLog('init.non_blocking_warning', { + reason: String(err?.message || err), + hint: '请检查 CSP connect-src / CORS / 代理策略' + }); + } + } + + function getRecommendedConverter(targetFormat) { + const caps = Store.state.converterCapabilities || {}; + const names = Object.keys(caps); + for (const name of names) { + const targets = caps[name]?.targets || []; + if (targets.includes(targetFormat)) return name; + } + return ''; + } + + function suggestConverterForTarget(targetFormat) { + const input = document.getElementById('converter-name'); + if (!input || input.value.trim()) return; + const rec = getRecommendedConverter(targetFormat); + if (rec) input.value = rec; + } + + function getAssetList() { + try { + return JSON.parse(localStorage.getItem(ASSET_STORAGE_KEY) || '[]'); + } catch (_) { + return []; + } + } + + function setAssetList(list) { + localStorage.setItem(ASSET_STORAGE_KEY, JSON.stringify(list)); + } + + function persistAsset(task, statusData, downloadData) { + const list = getAssetList(); + const item = { + id: task.id, + filename: task.filename, + targetFormat: task.targetFormat, + converter: task.converter, + jobId: task.jobId || null, + createdAt: Date.now(), + statusData: statusData || null, + hasDownloadBlob: Boolean(downloadData && downloadData.kind === 'blob') + }; + list.unshift(item); + setAssetList(list.slice(0, 500)); + renderAssetCenter(); + } + + function renderAssetCenter() { + const el = document.getElementById('asset-center-list'); + if (!el) return; + const list = getAssetList(); + if (!list.length) { + el.innerHTML = '暂无本地资产'; + return; + } + el.innerHTML = list.slice(0, 50).map((x) => { + const t = new Date(x.createdAt || Date.now()).toLocaleString(); + return `
    ${x.filename} → ${String(x.targetFormat || '').toUpperCase()} ${t}
    `; + }).join(''); + } + + function clearAssetCenter() { + localStorage.removeItem(ASSET_STORAGE_KEY); + renderAssetCenter(); + } + + function exportDiagnostics() { + const payload = { + exportedAt: new Date().toISOString(), + baseUrl: Api.getBaseUrl(), + taskCount: Store.getTasks().length, + tasks: Store.getTasks(), + assets: getAssetList(), + logs: window.__convertxDebugLogs || [] + }; + const blob = new Blob([JSON.stringify(payload, null, 2)], { type: 'application/json' }); + saveAs(blob, `convertx-diagnostics-${Date.now()}.json`); + } + + function clearDebugLogs() { + window.__convertxDebugLogs = []; + const panel = document.getElementById('debug-log-panel'); + if (panel) panel.innerHTML = '
    暂无日志
    '; + } + + function setBackendStatus(text, type) { + const el = document.getElementById('backend-status'); + if (!el) return; + const color = type === 'ok' ? '#16a34a' : type === 'warn' ? '#d97706' : '#ef4444'; + el.style.color = color; + el.innerText = text; + } + + function wait(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + + function debugLog(event, payload) { + try { + const entry = { ts: new Date().toISOString(), event, payload: payload || {} }; + window.__convertxDebugLogs = window.__convertxDebugLogs || []; + window.__convertxDebugLogs.push(entry); + if (window.__convertxDebugLogs.length > DEBUG_LOG_LIMIT) window.__convertxDebugLogs.shift(); + + const panel = document.getElementById('debug-log-panel'); + if (panel) { + if (panel.innerText.includes('暂无日志')) panel.innerHTML = ''; + const line = document.createElement('div'); + line.textContent = `[${entry.ts}] ${event} ${JSON.stringify(entry.payload)}`; + panel.appendChild(line); + panel.scrollTop = panel.scrollHeight; + } + console.log(`${DEBUG_PREFIX} ${event}`, payload || {}); + } catch (_) { + // ignore + } + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initConverterTool); + } else { + initConverterTool(); + } +})(); diff --git a/js/tools/geojson.js b/js/tools/geojson.js new file mode 100644 index 0000000..a0a113c --- /dev/null +++ b/js/tools/geojson.js @@ -0,0 +1,156 @@ +(function() { + let map = null; + let geoJsonLayer = null; + const API_BASE = 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code='; + + function initGeoJsonTool() { + const container = document.getElementById('tool-geojson-container'); + if (!container) return; + + // Stop click propagation to prevent global theme effects + container.addEventListener('click', (e) => e.stopPropagation()); + + const input = document.getElementById('geojson-input'); + const btnLoad = document.getElementById('btn-load'); + const btnDownload = document.getElementById('btn-download-json'); + const btnQuery = document.getElementById('btn-query-area'); + const selectProv = document.getElementById('select-prov'); + const selectCity = document.getElementById('select-city'); + const selectDist = document.getElementById('select-dist'); + const errorMsg = document.getElementById('error-msg'); + + if (map) { map.remove(); map = null; } + + if (typeof L === 'undefined') { + const checkL = setInterval(() => { + if (typeof L !== 'undefined') { + clearInterval(checkL); + initMap(); + } + }, 200); + } else { + initMap(); + } + + // Init Data + fetchDistricts('100000', selectProv); + + function initMap() { + if (map) return; + // Remove attribution + map = L.map('map', { attributionControl: false }).setView([35.8617, 104.1954], 4); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map); + } + + async function fetchDistricts(adcode, targetSelect) { + try { + targetSelect.innerHTML = ''; + const url = `${API_BASE}${adcode}_full`; + const res = await fetch(url); + if (!res.ok) throw new Error('Fetch failed'); + const data = await res.json(); + + targetSelect.innerHTML = ''; + data.features.forEach(f => { + const opt = document.createElement('option'); + opt.value = f.properties.adcode; + opt.innerText = f.properties.name; + targetSelect.appendChild(opt); + }); + targetSelect.disabled = false; + } catch (e) { + targetSelect.innerHTML = ''; + targetSelect.disabled = true; + } + } + + selectProv.addEventListener('change', () => { + selectCity.innerHTML = ''; + selectDist.innerHTML = ''; + if (selectProv.value) fetchDistricts(selectProv.value, selectCity); + }); + + selectCity.addEventListener('change', () => { + selectDist.innerHTML = ''; + if (selectCity.value) fetchDistricts(selectCity.value, selectDist); + }); + + btnQuery.addEventListener('click', async () => { + const code = selectDist.value || selectCity.value || selectProv.value; + if (!code) { + alert('请先选择一个区域'); + return; + } + btnQuery.disabled = true; + btnQuery.innerText = '查询中...'; + + let data = null; + try { + // Try _full first for children details + const res = await fetch(`${API_BASE}${code}_full`); + if (res.ok) data = await res.json(); + else { + // Fallback to boundary only + const res2 = await fetch(`${API_BASE}${code}`); + if (res2.ok) data = await res2.json(); + } + } catch (e) {} + + btnQuery.disabled = false; + btnQuery.innerText = '查询区域'; + + if (data) { + input.value = JSON.stringify(data, null, 2); + loadGeoJSON(); + } else { + alert('获取数据失败,请稍后重试'); + } + }); + + function loadGeoJSON() { + const val = input.value.trim(); + errorMsg.style.display = 'none'; + if (!val) return; + + try { + const data = JSON.parse(val); + if (geoJsonLayer) map.removeLayer(geoJsonLayer); + + geoJsonLayer = L.geoJSON(data, { + onEachFeature: function (feature, layer) { + if (feature.properties) { + let popup = '
    '; + for (const k in feature.properties) { + popup += ``; + } + popup += '
    ${k}${feature.properties[k]}
    '; + layer.bindPopup(popup); + } + } + }).addTo(map); + + const bounds = geoJsonLayer.getBounds(); + if (bounds.isValid()) map.fitBounds(bounds); + + } catch (e) { + errorMsg.innerText = 'JSON 解析错误: ' + e.message; + errorMsg.style.display = 'block'; + } + } + + btnLoad.addEventListener('click', loadGeoJSON); + + btnDownload.addEventListener('click', () => { + if (!input.value) return; + const blob = new Blob([input.value], {type: "application/json"}); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = "data.geojson"; + a.click(); + }); + } + + document.addEventListener('DOMContentLoaded', initGeoJsonTool); + document.addEventListener('pjax:complete', initGeoJsonTool); +})(); diff --git a/js/tools/gif.js b/js/tools/gif.js new file mode 100644 index 0000000..2c8ab82 --- /dev/null +++ b/js/tools/gif.js @@ -0,0 +1,96 @@ +(function() { + let images = []; + + function initGifTool() { + const container = document.getElementById('tool-gif-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + const fileInput = document.getElementById('file-input'); + const imgList = document.getElementById('img-list'); + const btnCreate = document.getElementById('btn-create'); + const resultGif = document.getElementById('result-gif'); + const downloadLink = document.getElementById('download-link'); + const uploadBox = document.getElementById('upload-box'); + + uploadBox.addEventListener('click', () => fileInput.click()); + + fileInput.addEventListener('change', handleFiles); + + function handleFiles(e) { + const files = Array.from(e.target.files); + if (!files.length) return; + + files.forEach(file => { + const reader = new FileReader(); + reader.onload = (event) => { + images.push(event.target.result); + renderPreview(); + }; + reader.readAsDataURL(file); + }); + } + + function renderPreview() { + imgList.innerHTML = ''; + images.forEach(src => { + const img = document.createElement('img'); + img.src = src; + img.className = 'img-item'; + img.style.width = '80px'; + img.style.height = '80px'; + img.style.objectFit = 'cover'; + img.style.borderRadius = '4px'; + img.style.border = '1px solid #ddd'; + imgList.appendChild(img); + }); + } + + btnCreate.addEventListener('click', createGIF); + + function createGIF() { + if (images.length === 0) { + alert('请先上传图片'); + return; + } + + if (typeof gifshot === 'undefined') { + alert('GIF 库未加载,请检查网络'); + return; + } + + const interval = parseFloat(document.getElementById('interval').value); + const width = parseInt(document.getElementById('gif-width').value); + const height = parseInt(document.getElementById('gif-height').value); + + btnCreate.innerText = '生成中...'; + btnCreate.disabled = true; + + gifshot.createGIF({ + images: images, + interval: interval, + gifWidth: width, + gifHeight: height, + numFrames: images.length + }, function(obj) { + if(!obj.error) { + const image = obj.image; + resultGif.src = image; + resultGif.style.display = 'inline-block'; + + downloadLink.href = image; + downloadLink.download = 'animation.gif'; + downloadLink.style.display = 'inline-block'; + } else { + alert('生成失败'); + } + btnCreate.innerText = '生成 GIF'; + btnCreate.disabled = false; + }); + } + } + + document.addEventListener('DOMContentLoaded', initGifTool); + document.addEventListener('pjax:complete', initGifTool); +})(); diff --git a/js/tools/hash.js b/js/tools/hash.js new file mode 100644 index 0000000..6cb97fc --- /dev/null +++ b/js/tools/hash.js @@ -0,0 +1,62 @@ +(function() { + function initHashTool() { + const container = document.getElementById('tool-hash-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + const inputText = document.getElementById('input-text'); + const resMd5 = document.getElementById('res-md5'); + const resSha1 = document.getElementById('res-sha1'); + const resSha256 = document.getElementById('res-sha256'); + const resSha512 = document.getElementById('res-sha512'); + const copyBtns = document.querySelectorAll('.copy-btn'); + + function calculateHash() { + const text = inputText.value; + if (!text) { + resMd5.innerText = '-'; + resSha1.innerText = '-'; + resSha256.innerText = '-'; + resSha512.innerText = '-'; + return; + } + + if (typeof CryptoJS === 'undefined') { + resMd5.innerText = '加载核心库失败,请检查网络...'; + return; + } + + resMd5.innerText = CryptoJS.MD5(text).toString(); + resSha1.innerText = CryptoJS.SHA1(text).toString(); + resSha256.innerText = CryptoJS.SHA256(text).toString(); + resSha512.innerText = CryptoJS.SHA512(text).toString(); + } + + inputText.addEventListener('input', calculateHash); + + copyBtns.forEach(btn => { + btn.addEventListener('click', (e) => { + const targetId = e.target.getAttribute('data-copy-target'); + const text = document.getElementById(targetId).innerText; + if (text === '-' || text.includes('失败')) return; + navigator.clipboard.writeText(text).then(() => { + const originalText = e.target.innerText; + e.target.innerText = '已复制'; + setTimeout(() => e.target.innerText = originalText, 1000); + }); + }); + }); + + // Check if library loaded + const checkLib = setInterval(() => { + if (typeof CryptoJS !== 'undefined') { + clearInterval(checkLib); + calculateHash(); + } + }, 500); + } + + document.addEventListener('DOMContentLoaded', initHashTool); + document.addEventListener('pjax:complete', initHashTool); +})(); diff --git a/js/tools/mirage-tank.js b/js/tools/mirage-tank.js new file mode 100644 index 0000000..f85f5ba --- /dev/null +++ b/js/tools/mirage-tank.js @@ -0,0 +1,122 @@ +(function() { + let surfaceImg = null; + let hiddenImg = null; + + function initMirageTankTool() { + const container = document.getElementById('tool-mirage-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + const imgSurfaceInput = document.getElementById('img-surface'); + const imgHiddenInput = document.getElementById('img-hidden'); + const btnGenerate = document.getElementById('generate-btn'); + const btnDownload = document.getElementById('btn-download'); + const canvas = document.getElementById('result-canvas'); + const resultArea = document.getElementById('result-area'); + const bgBtns = document.querySelectorAll('.preview-bg-btn'); + + function handleFile(input, imgId, textId, type) { + input.addEventListener('change', (e) => { + if (!e.target.files.length) return; + const file = e.target.files[0]; + const reader = new FileReader(); + reader.onload = (event) => { + const img = new Image(); + img.onload = () => { + document.getElementById(imgId).src = img.src; + document.getElementById(imgId).style.display = 'block'; + document.getElementById(textId).style.display = 'none'; + if (type === 'surface') surfaceImg = img; + else hiddenImg = img; + checkReady(); + }; + img.src = event.target.result; + }; + reader.readAsDataURL(file); + }); + } + + function checkReady() { + btnGenerate.disabled = !(surfaceImg && hiddenImg); + } + + function generateMirageTank() { + if (!surfaceImg || !hiddenImg) return; + + const width = Math.max(surfaceImg.width, hiddenImg.width); + const height = Math.max(surfaceImg.height, hiddenImg.height); + + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext('2d'); + + const cvs1 = document.createElement('canvas'); + cvs1.width = width; cvs1.height = height; + const ctx1 = cvs1.getContext('2d'); + ctx1.fillStyle = '#fff'; + ctx1.fillRect(0, 0, width, height); + ctx1.drawImage(surfaceImg, 0, 0, width, height); + const data1 = ctx1.getImageData(0, 0, width, height).data; + + const cvs2 = document.createElement('canvas'); + cvs2.width = width; cvs2.height = height; + const ctx2 = cvs2.getContext('2d'); + ctx2.fillStyle = '#000'; + ctx2.fillRect(0, 0, width, height); + ctx2.drawImage(hiddenImg, 0, 0, width, height); + const data2 = ctx2.getImageData(0, 0, width, height).data; + + const resultData = ctx.createImageData(width, height); + const d = resultData.data; + + for (let i = 0; i < d.length; i += 4) { + const r1 = data1[i], g1 = data1[i+1], b1 = data1[i+2]; + const gray1 = 0.299 * r1 + 0.587 * g1 + 0.114 * b1; + + const r2 = data2[i], g2 = data2[i+1], b2 = data2[i+2]; + const gray2 = 0.299 * r2 + 0.587 * g2 + 0.114 * b2; + + let a = (gray2 - gray1 + 255) / 255; + if (a < 0) a = 0; + if (a > 1) a = 1; + + let p = 0; + if (a > 0.01) p = gray2 / a; + if (p > 255) p = 255; + + d[i] = p; + d[i+1] = p; + d[i+2] = p; + d[i+3] = a * 255; + } + + ctx.putImageData(resultData, 0, 0); + resultArea.style.display = 'block'; + } + + handleFile(imgSurfaceInput, 'preview-surface-img', 'preview-surface-text', 'surface'); + handleFile(imgHiddenInput, 'preview-hidden-img', 'preview-hidden-text', 'hidden'); + + btnGenerate.addEventListener('click', generateMirageTank); + + bgBtns.forEach(btn => { + btn.addEventListener('click', (e) => { + const type = e.target.getAttribute('data-bg'); + if (type === 'white') canvas.style.background = 'white'; + else if (type === 'black') canvas.style.background = 'black'; + else canvas.style.background = "url('data:image/svg+xml;utf8,') repeat"; + }); + }); + + btnDownload.addEventListener('click', () => { + const link = document.createElement('a'); + link.download = 'mirage-tank.png'; + link.href = canvas.toDataURL(); + link.click(); + }); + } + + document.addEventListener('DOMContentLoaded', initMirageTankTool); + document.addEventListener('pjax:complete', initMirageTankTool); +})(); diff --git a/js/tools/remove-bg.js b/js/tools/remove-bg.js new file mode 100644 index 0000000..d7b3e1a --- /dev/null +++ b/js/tools/remove-bg.js @@ -0,0 +1,103 @@ +(function() { + let originalImg = null; + let targetR=255, targetG=255, targetB=255; + + function initRemoveBgTool() { + const container = document.getElementById('tool-removebg-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + const canvas = document.getElementById('canvas'); + const ctx = canvas.getContext('2d'); + const fileInput = document.getElementById('file-input'); + const toleranceInput = document.getElementById('tolerance'); + const tolVal = document.getElementById('tol-val'); + const targetColorBox = document.getElementById('target-color'); + const targetColorText = document.getElementById('target-color-text'); + const btnReset = document.getElementById('btn-reset'); + const btnDownload = document.getElementById('btn-download'); + const uploadBox = document.getElementById('upload-box'); + + uploadBox.addEventListener('click', () => fileInput.click()); + + fileInput.addEventListener('change', function(e) { + if (!e.target.files.length) return; + const reader = new FileReader(); + reader.onload = (ev) => { + const img = new Image(); + img.onload = () => { + originalImg = img; + renderImage(); + }; + img.src = ev.target.result; + }; + reader.readAsDataURL(e.target.files[0]); + }); + + function renderImage() { + if (!originalImg) return; + canvas.width = originalImg.width; + canvas.height = originalImg.height; + ctx.drawImage(originalImg, 0, 0); + } + + btnReset.addEventListener('click', renderImage); + + canvas.addEventListener('click', function(e) { + if (!originalImg) return; + + const rect = canvas.getBoundingClientRect(); + const scaleX = canvas.width / rect.width; + const scaleY = canvas.height / rect.height; + + const x = (e.clientX - rect.left) * scaleX; + const y = (e.clientY - rect.top) * scaleY; + + const p = ctx.getImageData(x, y, 1, 1).data; + targetR = p[0]; + targetG = p[1]; + targetB = p[2]; + + const hex = "#" + ((1 << 24) + (targetR << 16) + (targetG << 8) + targetB).toString(16).slice(1); + targetColorBox.style.background = hex; + targetColorText.innerText = hex; + + processRemoval(); + }); + + function processRemoval() { + if (!originalImg) return; + ctx.drawImage(originalImg, 0, 0); + + const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + const data = imageData.data; + const tolerance = parseInt(toleranceInput.value); + + for (let i = 0; i < data.length; i += 4) { + const r = data[i], g = data[i+1], b = data[i+2]; + const dist = Math.sqrt(Math.pow(r - targetR, 2) + Math.pow(g - targetG, 2) + Math.pow(b - targetB, 2)); + + if (dist < tolerance * 1.5) { + data[i+3] = 0; + } + } + ctx.putImageData(imageData, 0, 0); + } + + toleranceInput.addEventListener('input', () => { + tolVal.innerText = toleranceInput.value; + }); + toleranceInput.addEventListener('change', processRemoval); + + btnDownload.addEventListener('click', () => { + const link = document.createElement('a'); + link.download = 'removed-bg.png'; + link.href = canvas.toDataURL(); + link.click(); + }); + } + + document.addEventListener('DOMContentLoaded', initRemoveBgTool); + document.addEventListener('pjax:complete', initRemoveBgTool); +})(); diff --git a/js/tools/sort.js b/js/tools/sort.js new file mode 100644 index 0000000..aa0669c --- /dev/null +++ b/js/tools/sort.js @@ -0,0 +1,622 @@ +/** + * 排序算法演示逻辑 (15种算法) + */ +document.addEventListener('DOMContentLoaded', () => { + const container = document.getElementById('sort-container'); + const sizeInput = document.getElementById('array-size'); + const algorithmSelect = document.getElementById('algorithm-select'); + const speedSelect = document.getElementById('speed-select'); + const btnGenerate = document.getElementById('btn-generate'); + const btnSort = document.getElementById('btn-sort'); + + let array = []; + let isSorting = false; + let cancelSort = false; + + const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); + + function generateArray() { + if (isSorting) return; + + container.innerHTML = ''; + array = []; + let size = parseInt(sizeInput.value); + if (isNaN(size) || size < 10) size = 10; + if (size > 100) size = 100; + sizeInput.value = size; + + for (let i = 0; i < size; i++) { + const value = Math.floor(Math.random() * 290) + 10; + array.push(value); + + const bar = document.createElement('div'); + bar.classList.add('sort-bar'); + bar.style.height = `${value}px`; + const barWidth = Math.max(2, Math.floor((container.clientWidth - size * 2) / size)); + bar.style.width = `${barWidth}px`; + container.appendChild(bar); + } + } + + function updateBar(index, height, colorClass) { + const bars = container.children; + if (bars[index]) { + if (height !== null) bars[index].style.height = `${height}px`; + bars[index].classList.remove('comparing', 'swapping', 'sorted'); + if (colorClass) bars[index].classList.add(colorClass); + } + } + + // --- Algorithm Implementations --- + + async function bubbleSort() { + const n = array.length; + for (let i = 0; i < n - 1; i++) { + for (let j = 0; j < n - i - 1; j++) { + if (cancelSort) return; + updateBar(j, null, 'comparing'); + updateBar(j + 1, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if (array[j] > array[j + 1]) { + updateBar(j, null, 'swapping'); + updateBar(j + 1, null, 'swapping'); + let temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; + updateBar(j, array[j], null); + updateBar(j + 1, array[j + 1], null); + } else { + updateBar(j, null, null); + updateBar(j + 1, null, null); + } + } + updateBar(n - i - 1, null, 'sorted'); + } + updateBar(0, null, 'sorted'); + } + + async function selectionSort() { + const n = array.length; + for (let i = 0; i < n - 1; i++) { + let minIndex = i; + updateBar(minIndex, null, 'swapping'); + for (let j = i + 1; j < n; j++) { + if (cancelSort) return; + updateBar(j, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if (array[j] < array[minIndex]) { + if (minIndex !== i) updateBar(minIndex, null, null); + minIndex = j; + updateBar(minIndex, null, 'swapping'); + } else { + updateBar(j, null, null); + } + } + if (minIndex !== i) { + updateBar(i, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + let temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; + updateBar(i, array[i], null); + updateBar(minIndex, array[minIndex], null); + } else { + updateBar(i, null, null); + } + updateBar(i, null, 'sorted'); + } + updateBar(n - 1, null, 'sorted'); + } + + async function insertionSort() { + const n = array.length; + updateBar(0, null, 'sorted'); + for (let i = 1; i < n; i++) { + if (cancelSort) return; + let key = array[i]; + let j = i - 1; + updateBar(i, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + while (j >= 0 && array[j] > key) { + if (cancelSort) return; + updateBar(j, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + array[j + 1] = array[j]; + updateBar(j + 1, array[j + 1], 'sorted'); + updateBar(j, null, 'swapping'); + j = j - 1; + } + array[j + 1] = key; + updateBar(j + 1, array[j + 1], 'sorted'); + for(let k=0; k<=i; k++) updateBar(k, null, 'sorted'); + } + } + + async function quickSort(start = 0, end = array.length - 1) { + if (cancelSort) return; + if (start >= end) { + if(start === end && start >= 0 && start < array.length) updateBar(start, null, 'sorted'); + return; + } + let pivotIndex = await partition(start, end); + if (cancelSort) return; + updateBar(pivotIndex, null, 'sorted'); + await Promise.all([ + quickSort(start, pivotIndex - 1), + quickSort(pivotIndex + 1, end) + ]); + } + async function partition(start, end) { + let pivotValue = array[end]; + let pivotIndex = start; + updateBar(end, null, 'swapping'); + for (let i = start; i < end; i++) { + if (cancelSort) return start; + updateBar(i, null, 'comparing'); + updateBar(pivotIndex, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if (array[i] < pivotValue) { + let temp = array[i]; array[i] = array[pivotIndex]; array[pivotIndex] = temp; + updateBar(i, array[i], null); + updateBar(pivotIndex, array[pivotIndex], null); + pivotIndex++; + } else { + updateBar(i, null, null); + if (pivotIndex !== i) updateBar(pivotIndex, null, null); + } + } + let temp = array[pivotIndex]; array[pivotIndex] = array[end]; array[end] = temp; + updateBar(pivotIndex, array[pivotIndex], null); + updateBar(end, array[end], null); + return pivotIndex; + } + + async function mergeSort(start = 0, end = array.length - 1) { + if (cancelSort) return; + if (start >= end) { + if(start === end && start >=0) updateBar(start, null, 'sorted'); + return; + } + let mid = Math.floor((start + end) / 2); + await mergeSort(start, mid); + await mergeSort(mid + 1, end); + await merge(start, mid, end); + } + async function merge(start, mid, end) { + let temp = []; + let i = start, j = mid + 1; + while(i <= mid && j <= end) { + if(cancelSort) return; + updateBar(i, null, 'comparing'); + updateBar(j, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if (array[i] <= array[j]) { + temp.push(array[i]); + updateBar(i, null, null); i++; + } else { + temp.push(array[j]); + updateBar(j, null, null); j++; + } + } + while(i <= mid) { temp.push(array[i]); i++; } + while(j <= end) { temp.push(array[j]); j++; } + for(let k = 0; k < temp.length; k++) { + if(cancelSort) return; + array[start + k] = temp[k]; + updateBar(start + k, array[start + k], 'swapping'); + await sleep(parseInt(speedSelect.value)); + updateBar(start + k, null, 'sorted'); + } + } + + async function heapSort() { + let n = array.length; + for(let i = Math.floor(n/2)-1; i>=0; i--){ + await heapify(n, i); + } + for(let i = n-1; i>0; i--){ + if(cancelSort) return; + updateBar(0, null, 'swapping'); + updateBar(i, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + let temp = array[0]; array[0] = array[i]; array[i] = temp; + updateBar(0, array[0], null); + updateBar(i, array[i], 'sorted'); + await heapify(i, 0); + } + if(!cancelSort) updateBar(0, null, 'sorted'); + } + async function heapify(n, i) { + if(cancelSort) return; + let largest = i; + let l = 2*i + 1; + let r = 2*i + 2; + if (l < n) { + updateBar(l, null, 'comparing'); + updateBar(largest, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[l] > array[largest]) largest = l; + updateBar(l, null, null); + updateBar(i, null, null); + } + if (r < n) { + updateBar(r, null, 'comparing'); + updateBar(largest, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[r] > array[largest]) largest = r; + updateBar(r, null, null); + if(largest!=r) updateBar(largest, null, null); + } + if (largest !== i) { + updateBar(i, null, 'swapping'); + updateBar(largest, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + let temp = array[i]; array[i] = array[largest]; array[largest] = temp; + updateBar(i, array[i], null); + updateBar(largest, array[largest], null); + await heapify(n, largest); + } + } + + async function shellSort() { + let n = array.length; + for (let gap = Math.floor(n/2); gap > 0; gap = Math.floor(gap/2)) { + for (let i = gap; i < n; i++) { + if(cancelSort) return; + let temp = array[i]; + let j; + updateBar(i, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + for (j = i; j >= gap && array[j - gap] > temp; j -= gap) { + if(cancelSort) return; + updateBar(j - gap, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + array[j] = array[j - gap]; + updateBar(j, array[j], 'swapping'); + updateBar(j - gap, null, null); + } + array[j] = temp; + updateBar(j, array[j], null); + updateBar(i, null, null); + } + } + } + + async function cocktailShakerSort() { + let is_swapped = true; + let start = 0; + let end = array.length - 1; + while(is_swapped) { + is_swapped = false; + for(let i=start; i array[i+1]){ + updateBar(i, null, 'swapping'); updateBar(i+1, null, 'swapping'); + let temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; + updateBar(i, array[i], null); updateBar(i+1, array[i+1], null); + is_swapped = true; + } else { + updateBar(i, null, null); updateBar(i+1, null, null); + } + } + if(!is_swapped) break; + updateBar(end, null, 'sorted'); + end--; + is_swapped = false; + for(let i=end-1; i>=start; i--){ + if(cancelSort) return; + updateBar(i, null, 'comparing'); + updateBar(i+1, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[i] > array[i+1]){ + updateBar(i, null, 'swapping'); updateBar(i+1, null, 'swapping'); + let temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; + updateBar(i, array[i], null); updateBar(i+1, array[i+1], null); + is_swapped = true; + } else { + updateBar(i, null, null); updateBar(i+1, null, null); + } + } + updateBar(start, null, 'sorted'); + start++; + } + } + + async function combSort() { + let n = array.length; + let gap = n; + let swapped = true; + while(gap !== 1 || swapped) { + if(cancelSort) return; + gap = Math.floor(gap / 1.3); + if(gap < 1) gap = 1; + swapped = false; + for(let i=0; i array[i+gap]){ + updateBar(i, null, 'swapping'); updateBar(i+gap, null, 'swapping'); + let temp = array[i]; array[i] = array[i+gap]; array[i+gap] = temp; + updateBar(i, array[i], null); updateBar(i+gap, array[i+gap], null); + swapped = true; + } else { + updateBar(i, null, null); updateBar(i+gap, null, null); + } + } + } + } + + async function gnomeSort() { + let index = 0; + while(index < array.length) { + if(cancelSort) return; + if(index == 0) index++; + updateBar(index, null, 'comparing'); + updateBar(index-1, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[index] >= array[index-1]){ + updateBar(index, null, null); updateBar(index-1, null, null); + index++; + } else { + updateBar(index, null, 'swapping'); updateBar(index-1, null, 'swapping'); + let temp = array[index]; array[index] = array[index-1]; array[index-1] = temp; + updateBar(index, array[index], null); updateBar(index-1, array[index-1], null); + index--; + } + } + } + + async function oddEvenSort() { + let isSorted = false; + while(!isSorted) { + isSorted = true; + for(let i=1; i<=array.length-2; i=i+2){ + if(cancelSort) return; + updateBar(i, null, 'comparing'); updateBar(i+1, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[i] > array[i+1]){ + updateBar(i, null, 'swapping'); updateBar(i+1, null, 'swapping'); + let temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; + updateBar(i, array[i], null); updateBar(i+1, array[i+1], null); + isSorted = false; + } else { + updateBar(i, null, null); updateBar(i+1, null, null); + } + } + for(let i=0; i<=array.length-2; i=i+2){ + if(cancelSort) return; + updateBar(i, null, 'comparing'); updateBar(i+1, null, 'comparing'); + await sleep(parseInt(speedSelect.value)); + if(array[i] > array[i+1]){ + updateBar(i, null, 'swapping'); updateBar(i+1, null, 'swapping'); + let temp = array[i]; array[i] = array[i+1]; array[i+1] = temp; + updateBar(i, array[i], null); updateBar(i+1, array[i+1], null); + isSorted = false; + } else { + updateBar(i, null, null); updateBar(i+1, null, null); + } + } + } + } + + async function cycleSort() { + let n = array.length; + for(let cycle_start = 0; cycle_start <= n-2; cycle_start++) { + if(cancelSort) return; + let item = array[cycle_start]; + let pos = cycle_start; + for(let i = cycle_start+1; i1; --curr_size){ + if(cancelSort) return; + let mi = await findMax(curr_size); + if(cancelSort) return; + if(mi != curr_size-1){ + await flip(mi); + if(cancelSort) return; + await flip(curr_size-1); + } + updateBar(curr_size-1, null, 'sorted'); + } + updateBar(0, null, 'sorted'); + } + async function findMax(n){ + let max_idx = 0; + for(let i=0; i array[max_idx]){ + updateBar(max_idx, null, null); max_idx = i; + } else { updateBar(i, null, null); } + } + updateBar(max_idx, null, null); + return max_idx; + } + async function flip(i){ + let start = 0; + while(start < i){ + updateBar(start, null, 'swapping'); updateBar(i, null, 'swapping'); + await sleep(parseInt(speedSelect.value)); + let temp = array[start]; array[start] = array[i]; array[i] = temp; + updateBar(start, array[start], null); updateBar(i, array[i], null); + start++; i--; + } + } + + async function radixSort() { + let max = Math.max(...array); + for(let exp = 1; Math.floor(max/exp) > 0; exp *= 10) { + if(cancelSort) return; + await countingSortForRadix(exp); + } + } + async function countingSortForRadix(exp) { + let output = new Array(array.length).fill(0); + let count = new Array(10).fill(0); + for(let i=0; i=0; i--){ + let idx = Math.floor(array[i]/exp)%10; + output[count[idx]-1] = array[i]; + count[idx]--; + } + for(let i=0; i0; i--){ + let j = Math.floor(Math.random()*(i+1)); + let temp = array[i]; array[i] = array[j]; array[j] = temp; + updateBar(i, array[i], 'swapping'); updateBar(j, array[j], 'swapping'); + } + await sleep(parseInt(speedSelect.value)); + for(let i=0; i 200) { + alert("猴子排序 (Bogo Sort) 太慢了,为防止卡死,已自动终止!"); + return; + } + } + } + + + // ---------------------------------------- + // UI Controls + // ---------------------------------------- + + function disableControls(disabled) { + sizeInput.disabled = disabled; + algorithmSelect.disabled = disabled; + btnSort.disabled = disabled; + if(disabled) { + btnGenerate.innerText = '⏹️ 停止排序'; + btnSort.style.opacity = '0.5'; + } else { + btnGenerate.innerText = '🔄 生成新数据'; + btnSort.style.opacity = '1'; + } + } + + btnGenerate.addEventListener('click', () => { + if (isSorting) { + cancelSort = true; + isSorting = false; + disableControls(false); + setTimeout(generateArray, 200); + } else { + generateArray(); + } + }); + + btnSort.addEventListener('click', async () => { + if (isSorting) return; + + const isAlreadySorted = Array.from(container.children).every(el => el.classList.contains('sorted')); + if(isAlreadySorted || array.length === 0) { + generateArray(); + await sleep(200); + } + + isSorting = true; + cancelSort = false; + disableControls(true); + + const algo = algorithmSelect.value; + try { + switch(algo) { + case 'bubble': await bubbleSort(); break; + case 'selection': await selectionSort(); break; + case 'insertion': await insertionSort(); break; + case 'quick': await quickSort(); break; + case 'merge': await mergeSort(); break; + case 'heap': await heapSort(); break; + case 'shell': await shellSort(); break; + case 'cocktail': await cocktailShakerSort(); break; + case 'comb': await combSort(); break; + case 'gnome': await gnomeSort(); break; + case 'oddEven': await oddEvenSort(); break; + case 'cycle': await cycleSort(); break; + case 'pancake': await pancakeSort(); break; + case 'radix': await radixSort(); break; + case 'bogo': await bogoSort(); break; + } + + if(!cancelSort) { + for(let i=0; i { + if (array.length > 0 && container.clientWidth > 0) { + const size = array.length; + const barWidth = Math.max(2, Math.floor((container.clientWidth - size * 2) / size)); + const bars = container.children; + for (let i = 0; i < bars.length; i++) { + bars[i].style.width = `${barWidth}px`; + } + } + }); + + generateArray(); +}); diff --git a/js/tools/time.js b/js/tools/time.js new file mode 100644 index 0000000..a5ae8f0 --- /dev/null +++ b/js/tools/time.js @@ -0,0 +1,125 @@ +(function() { + let timer = null; + let isPaused = false; + + function initTimeTool() { + const container = document.getElementById('tool-time-container'); + if (!container) return; + + container.addEventListener('click', (e) => e.stopPropagation()); + + // Cleanup + if (timer) clearInterval(timer); + + // DOM Elements + const currentNow = document.getElementById('current-now'); + const unixS = document.getElementById('current-unix-s'); + const unixMs = document.getElementById('current-unix-ms'); + const toggleBtn = document.getElementById('toggle-pause'); + const inputTs = document.getElementById('input-timestamp'); + const btnConvertTs = document.getElementById('btn-convert-ts'); + const inputDate = document.getElementById('input-date'); + const btnConvertDate = document.getElementById('btn-convert-date'); + const copyBtns = document.querySelectorAll('.copy-btn'); + + // Initial Setup + const now = new Date(); + now.setMinutes(now.getMinutes() - now.getTimezoneOffset()); + inputDate.value = now.toISOString().slice(0, 19); + + // Event Listeners + toggleBtn.addEventListener('click', () => { + isPaused = !isPaused; + toggleBtn.innerText = isPaused ? '▶️ 恢复更新' : '⏸️ 暂停更新'; + }); + + btnConvertTs.addEventListener('click', convertTimestamp); + btnConvertDate.addEventListener('click', convertDate); + + copyBtns.forEach(btn => { + btn.addEventListener('click', (e) => { + const targetId = e.target.getAttribute('data-copy-target'); + const text = document.getElementById(targetId).innerText; + navigator.clipboard.writeText(text).then(() => { + const originalText = e.target.innerText; + e.target.innerText = '已复制'; + setTimeout(() => e.target.innerText = originalText, 1000); + }); + }); + }); + + // Start Loop + timer = setInterval(() => { + if (isPaused) return; + const d = new Date(); + currentNow.innerText = d.toLocaleString(); + unixS.innerText = Math.floor(d.getTime() / 1000); + unixMs.innerText = d.getTime(); + updateWorldClocks(d); + }, 1000); + + // Initial run + currentNow.innerText = new Date().toLocaleString(); + updateWorldClocks(new Date()); + } + + function convertTimestamp() { + let val = document.getElementById('input-timestamp').value.trim(); + if (!val) return; + let unit = document.getElementById('timestamp-unit').value; + let ts = parseInt(val); + if (isNaN(ts)) return; + + if (unit === 'auto') { + unit = String(ts).length > 11 ? 'ms' : 's'; + } + const date = new Date(unit === 's' ? ts * 1000 : ts); + document.getElementById('result-date').innerHTML = ` + 北京时间: ${date.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'})}
    + UTC 时间: ${date.toUTCString()}
    + ISO 8601: ${date.toISOString()} + `; + } + + function convertDate() { + const val = document.getElementById('input-date').value; + if (!val) return; + const date = new Date(val); + const tsMs = date.getTime(); + const tsS = Math.floor(tsMs / 1000); + document.getElementById('result-timestamp').innerHTML = ` + 时间戳 (秒): ${tsS}
    + 时间戳 (毫秒): ${tsMs} + `; + } + + function updateWorldClocks(now) { + const grid = document.getElementById('world-clocks'); + if (!grid) return; + const cities = [ + { name: '北京', tz: 'Asia/Shanghai' }, + { name: '伦敦', tz: 'Europe/London' }, + { name: '纽约', tz: 'America/New_York' }, + { name: '东京', tz: 'Asia/Tokyo' }, + { name: '巴黎', tz: 'Europe/Paris' }, + { name: '悉尼', tz: 'Australia/Sydney' }, + { name: '迪拜', tz: 'Asia/Dubai' }, + { name: '洛杉矶', tz: 'America/Los_Angeles' } + ]; + let html = ''; + cities.forEach(city => { + const timeStr = now.toLocaleTimeString('en-US', { timeZone: city.tz, hour12: false, hour: '2-digit', minute: '2-digit' }); + html += ` +
    +
    ${city.name}
    +
    ${timeStr}
    +
    + `; + }); + grid.innerHTML = html; + } + + // Init + document.addEventListener('DOMContentLoaded', initTimeTool); + document.addEventListener('pjax:complete', initTimeTool); +})(); diff --git a/js/tools/watermark.js b/js/tools/watermark.js new file mode 100644 index 0000000..9dd7dfb --- /dev/null +++ b/js/tools/watermark.js @@ -0,0 +1,420 @@ +(function() { + function initWatermarkTool() { + const container = document.getElementById('tool-watermark-container'); + if (!container) return; + + // Stop propagation + container.addEventListener('click', (e) => e.stopPropagation()); + + let wmType = 'text'; + let visImg = new Image(); + let wmImg = new Image(); // For image watermark + + // --- Tabs --- + window.switchTab = function(tab) { + document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); + document.querySelectorAll('.tool-section-content').forEach(s => s.style.display = 'none'); + + if (tab === 'visible') { + document.querySelector('.tab:nth-child(1)').classList.add('active'); + document.getElementById('tab-visible').style.display = 'block'; + } else if (tab === 'invisible') { + document.querySelector('.tab:nth-child(2)').classList.add('active'); + document.getElementById('tab-invisible').style.display = 'block'; + } else { + document.querySelector('.tab:nth-child(3)').classList.add('active'); + document.getElementById('tab-remove').style.display = 'block'; + } + }; + + window.toggleWmType = function() { + const val = document.querySelector('input[name="wm-type"]:checked').value; + wmType = val; + if (val === 'text') { + document.getElementById('ctrl-text-group').style.display = 'contents'; + document.getElementById('ctrl-image-group').style.display = 'none'; + } else { + document.getElementById('ctrl-text-group').style.display = 'none'; + document.getElementById('ctrl-image-group').style.display = 'contents'; + } + drawVisible(); + }; + + window.downloadCanvas = function(id, name) { + const c = document.getElementById(id); + if (c.width === 0) return; + const link = document.createElement('a'); + link.download = name; + link.href = c.toDataURL(); + link.click(); + } + + // --- Visible Watermark --- + const visFile = document.getElementById('vis-file'); + const wmImgFile = document.getElementById('wm-img-file'); + + visFile.addEventListener('change', function(e) { + if(!e.target.files.length) return; + const reader = new FileReader(); + reader.onload = (event) => { + visImg.onload = drawVisible; + visImg.src = event.target.result; + }; + reader.readAsDataURL(e.target.files[0]); + }); + + wmImgFile.addEventListener('change', function(e) { + if(!e.target.files.length) return; + const reader = new FileReader(); + reader.onload = (event) => { + wmImg.onload = drawVisible; + wmImg.src = event.target.result; + }; + reader.readAsDataURL(e.target.files[0]); + }); + + // Add listeners to controls + ['vis-text', 'vis-size', 'vis-color', 'vis-opacity', 'vis-pos', 'wm-scale'].forEach(id => { + const el = document.getElementById(id); + if(el) { + el.addEventListener('input', drawVisible); + el.addEventListener('change', drawVisible); + } + }); + + function drawVisible() { + if (!visImg.src) return; + const cvs = document.getElementById('vis-canvas'); + const ctx = cvs.getContext('2d'); + + cvs.width = visImg.width; + cvs.height = visImg.height; + ctx.drawImage(visImg, 0, 0); + + const opacity = parseFloat(document.getElementById('vis-opacity').value); + const pos = document.getElementById('vis-pos').value; + ctx.globalAlpha = opacity; + + if (wmType === 'text') { + const text = document.getElementById('vis-text').value; + const size = parseInt(document.getElementById('vis-size').value); + const color = document.getElementById('vis-color').value; + ctx.font = `bold ${size}px sans-serif`; + ctx.fillStyle = color; + + drawContent(ctx, pos, (x, y) => ctx.fillText(text, x, y), cvs.width, cvs.height, 300, 150); + } else if (wmType === 'image' && wmImg.src) { + const scale = parseFloat(document.getElementById('wm-scale').value); + const w = wmImg.width * scale; + const h = wmImg.height * scale; + + drawContent(ctx, pos, (x, y) => ctx.drawImage(wmImg, x - w/2, y - h/2, w, h), cvs.width, cvs.height, w * 1.5, h * 1.5); + } + } + + function drawContent(ctx, pos, drawFn, w, h, spaceX, spaceY) { + if (pos === 'center') { + ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; + drawFn(w/2, h/2); + } else if (pos === 'bottom-right') { + ctx.textAlign = 'right'; ctx.textBaseline = 'bottom'; + drawFn(w - 20, h - 20); + } else if (pos === 'top-left') { + ctx.textAlign = 'left'; ctx.textBaseline = 'top'; + drawFn(20, 20); + } else if (pos === 'repeat') { + ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; + ctx.rotate(-45 * Math.PI / 180); + const diag = Math.sqrt(w*w + h*h); + // Draw in rotated grid + for (let x = -diag; x < diag; x += spaceX) { + for (let y = -diag; y < diag; y += spaceY) { + drawFn(x, y); + } + } + ctx.setTransform(1, 0, 0, 1, 0, 0); + } + } + + // --- Invisible Watermark (LSB) --- + let invisImg = new Image(); + document.getElementById('invis-file').addEventListener('change', function(e) { + if(!e.target.files.length) return; + const reader = new FileReader(); + reader.onload = (event) => { + invisImg.onload = () => { + const cvs = document.getElementById('invis-canvas'); + cvs.width = invisImg.width; + cvs.height = invisImg.height; + const ctx = cvs.getContext('2d'); + ctx.drawImage(invisImg, 0, 0); + document.getElementById('invis-result').innerText = ''; + }; + invisImg.src = event.target.result; + }; + reader.readAsDataURL(e.target.files[0]); + }); + + window.encodeLSB = function() { + const text = document.getElementById('invis-text').value; + if (!text || !invisImg.src) return alert('请先上传图片并输入文字'); + + const cvs = document.getElementById('invis-canvas'); + const ctx = cvs.getContext('2d'); + const imgData = ctx.getImageData(0, 0, cvs.width, cvs.height); + const data = imgData.data; + + // Simple LSB encoding (Text -> Binary -> Modify R channel LSB) + // Implementation simplified for brevity + alert('隐写功能演示:实际写入需完整二进制编码逻辑'); + }; + + window.decodeLSB = function() { + alert('隐写功能演示:实际读取需完整二进制解码逻辑'); + }; + + + // --- Remove Watermark (New) --- + let removeFile = document.getElementById('remove-file'); + let removeImgData = null; // Store original img data for undo + let pdfFileBytes = null; + let isMaskMode = false; + + removeFile.addEventListener('change', async function(e) { + if(!e.target.files.length) return; + const file = e.target.files[0]; + + if (file.type.startsWith('image/')) { + document.getElementById('remove-image-ui').style.display = 'block'; + document.getElementById('remove-pdf-ui').style.display = 'none'; + + const reader = new FileReader(); + reader.onload = (event) => { + const img = new Image(); + img.onload = () => { + const cvs = document.getElementById('remove-canvas'); + cvs.width = img.width; + cvs.height = img.height; + const ctx = cvs.getContext('2d'); + ctx.drawImage(img, 0, 0); + removeImgData = ctx.getImageData(0, 0, cvs.width, cvs.height); // Save for undo + }; + img.src = event.target.result; + }; + reader.readAsDataURL(file); + + initBrush(); + + } else if (file.type === 'application/pdf') { + document.getElementById('remove-image-ui').style.display = 'none'; + document.getElementById('remove-pdf-ui').style.display = 'block'; + + pdfFileBytes = await file.arrayBuffer(); + renderPDF(pdfFileBytes); + } + }); + + // Image Brush Logic + function initBrush() { + const cvs = document.getElementById('remove-canvas'); + const ctx = cvs.getContext('2d'); + let isDrawing = false; + + cvs.onmousedown = (e) => { + isDrawing = true; + ctx.beginPath(); + const rect = cvs.getBoundingClientRect(); + const scaleX = cvs.width / rect.width; + const scaleY = cvs.height / rect.height; + ctx.moveTo((e.clientX - rect.left) * scaleX, (e.clientY - rect.top) * scaleY); + }; + + cvs.onmousemove = (e) => { + if (!isDrawing) return; + const rect = cvs.getBoundingClientRect(); + const scaleX = cvs.width / rect.width; + const scaleY = cvs.height / rect.height; + const x = (e.clientX - rect.left) * scaleX; + const y = (e.clientY - rect.top) * scaleY; + const size = document.getElementById('brush-size').value; + + // Simple Inpainting: Fill with average color of surrounding area? + // Or just blur? Let's do a simple clone effect (taking pixel from nearby) + // For demo, we just smear using a blur-like effect by drawing with low opacity + // Actually, a simple 'blur' brush is easier to implement + + ctx.lineWidth = size; + ctx.lineCap = 'round'; + ctx.strokeStyle = '#fff'; // White out for simplicity or... + // Better: Get color from nearby? Too complex for this snippet. + // Let's implement a 'Blur' brush by copying a region slightly offset + + // Demo: Just paint white (assuming white background document) + // or blur. + ctx.save(); + ctx.filter = 'blur(5px)'; + ctx.globalCompositeOperation = 'source-over'; + // Draw line + ctx.lineTo(x, y); + ctx.stroke(); + ctx.restore(); + }; + + cvs.onmouseup = () => isDrawing = false; + } + + window.undoRemove = function() { + if (!removeImgData) return; + const cvs = document.getElementById('remove-canvas'); + const ctx = cvs.getContext('2d'); + ctx.putImageData(removeImgData, 0, 0); + } + + // PDF Logic + async function renderPDF(data) { + const loadingTask = pdfjsLib.getDocument(data); + const pdf = await loadingTask.promise; + const container = document.getElementById('pdf-container'); + container.innerHTML = ''; // Clear + + // Render first 3 pages only for demo performance + const numPages = Math.min(pdf.numPages, 3); + + for (let i = 1; i <= numPages; i++) { + const page = await pdf.getPage(i); + const scale = 1.0; + const viewport = page.getViewport({scale: scale}); + + const wrapper = document.createElement('div'); + wrapper.className = 'pdf-page-wrapper'; + wrapper.dataset.pageIndex = i - 1; // 0-based + + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + canvas.height = viewport.height; + canvas.width = viewport.width; + + const renderContext = { + canvasContext: context, + viewport: viewport + }; + await page.render(renderContext).promise; + + wrapper.appendChild(canvas); + container.appendChild(wrapper); + + // Add mask listener + initMasking(wrapper); + } + } + + window.toggleMaskMode = function() { + isMaskMode = !isMaskMode; + const btn = document.getElementById('btn-add-mask-mode'); + btn.style.background = isMaskMode ? '#e6a23c' : '#49b1f5'; + btn.innerText = isMaskMode ? '退出框选模式' : '🔳 进入框选模式'; + } + + function initMasking(wrapper) { + let startX, startY; + let currentMask = null; + + wrapper.addEventListener('mousedown', (e) => { + if (!isMaskMode) return; + const rect = wrapper.getBoundingClientRect(); + startX = e.clientX - rect.left; + startY = e.clientY - rect.top; + + currentMask = document.createElement('div'); + currentMask.className = 'remove-mask'; + currentMask.style.left = startX + 'px'; + currentMask.style.top = startY + 'px'; + wrapper.appendChild(currentMask); + }); + + wrapper.addEventListener('mousemove', (e) => { + if (!isMaskMode || !currentMask) return; + const rect = wrapper.getBoundingClientRect(); + const currentX = e.clientX - rect.left; + const currentY = e.clientY - rect.top; + + const width = Math.abs(currentX - startX); + const height = Math.abs(currentY - startY); + const left = Math.min(currentX, startX); + const top = Math.min(currentY, startY); + + currentMask.style.width = width + 'px'; + currentMask.style.height = height + 'px'; + currentMask.style.left = left + 'px'; + currentMask.style.top = top + 'px'; + }); + + wrapper.addEventListener('mouseup', () => { + currentMask = null; + }); + } + + window.saveCleanPDF = async function() { + if (!pdfFileBytes) return; + const { PDFDocument, rgb } = PDFLib; + const pdfDoc = await PDFDocument.load(pdfFileBytes); + const pages = pdfDoc.getPages(); + + // Iterate over all DOM wrappers to find masks + const wrappers = document.querySelectorAll('.pdf-page-wrapper'); + + wrappers.forEach(wrapper => { + const pageIndex = parseInt(wrapper.dataset.pageIndex); + if (pageIndex >= pages.length) return; + + const page = pages[pageIndex]; + const { width, height } = page.getSize(); + // Canvas size might scale, assume 1:1 for now or calculate scale + const canvas = wrapper.querySelector('canvas'); + const scaleX = width / canvas.width; + const scaleY = height / canvas.height; + + const masks = wrapper.querySelectorAll('.remove-mask'); + masks.forEach(mask => { + // DOM coords (top-left is 0,0) + const x = parseFloat(mask.style.left); + const y = parseFloat(mask.style.top); + const w = parseFloat(mask.style.width); + const h = parseFloat(mask.style.height); + + // PDF coords (bottom-left is 0,0 usually, but PDFLib handles it) + // We need to convert DOM Y (from top) to PDF Y (from bottom) + // PDF Y = PageHeight - (DOM Y + Height) * Scale + + const rectX = x * scaleX; + const rectW = w * scaleX; + const rectH = h * scaleY; + const rectY = height - (y * scaleY) - rectH; + + page.drawRectangle({ + x: rectX, + y: rectY, + width: rectW, + height: rectH, + color: rgb(1, 1, 1), // White + }); + }); + }); + + const pdfBytes = await pdfDoc.save(); + const blob = new Blob([pdfBytes], { type: 'application/pdf' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = 'cleaned_document.pdf'; + link.click(); + }; + + } + + // Initialize when DOM ready + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initWatermarkTool); + } else { + initWatermarkTool(); + } +})(); diff --git a/js/tw_cn.js b/js/tw_cn.js new file mode 100644 index 0000000..43228dd --- /dev/null +++ b/js/tw_cn.js @@ -0,0 +1,117 @@ +document.addEventListener('DOMContentLoaded', () => { + const { defaultEncoding, translateDelay, msgToTraditionalChinese, msgToSimplifiedChinese } = GLOBAL_CONFIG.translate + const snackbarData = GLOBAL_CONFIG.Snackbar + const targetEncodingCookie = 'translate-chn-cht' + + let currentEncoding = defaultEncoding + let targetEncoding = Number(btf.saveToLocal.get(targetEncodingCookie)) || defaultEncoding + const translateButtonObject = document.getElementById('translateLink') + const isSnackbar = snackbarData !== undefined + + const setLang = () => { + document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' + } + + const translateText = txt => { + if (!txt) return '' + if (currentEncoding === 1 && targetEncoding === 2) return Simplized(txt) + if (currentEncoding === 2 && targetEncoding === 1) return Traditionalized(txt) + return txt + } + + const translateBody = fobj => { + const nodes = typeof fobj === 'object' ? fobj.childNodes : document.body.childNodes + + for (const node of nodes) { + // Skip BR, HR tags, or the translate button object + if (['BR', 'HR'].includes(node.tagName) || node === translateButtonObject) continue + + if (node.nodeType === Node.ELEMENT_NODE) { + const { tagName, title, alt, placeholder, value, type } = node + + // Translate title, alt, placeholder + if (title) node.title = translateText(title) + if (alt) node.alt = translateText(alt) + if (placeholder) node.placeholder = translateText(placeholder) + + // Translate input value except text and hidden types + if (tagName === 'INPUT' && value && type !== 'text' && type !== 'hidden') { + node.value = translateText(value) + } + + // Recursively translate child nodes + translateBody(node) + } else if (node.nodeType === Node.TEXT_NODE) { + // Translate text node data + node.data = translateText(node.data) + } + } + } + + const translatePage = () => { + if (targetEncoding === 1) { + currentEncoding = 1 + targetEncoding = 2 + translateButtonObject.textContent = msgToTraditionalChinese + isSnackbar && btf.snackbarShow(snackbarData.cht_to_chs) + } else if (targetEncoding === 2) { + currentEncoding = 2 + targetEncoding = 1 + translateButtonObject.textContent = msgToSimplifiedChinese + isSnackbar && btf.snackbarShow(snackbarData.chs_to_cht) + } + btf.saveToLocal.set(targetEncodingCookie, targetEncoding, 2) + setLang() + translateBody() + } + + const JTPYStr = () => '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' + const FTPYStr = () => '萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽龍歷誌製壹臺臯準復勐鐘註範籤' + + const Traditionalized = cc => { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) !== -1) { + str += tt.charAt(ss.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + + const Simplized = cc => { + let str = '' + const ss = JTPYStr() + const tt = FTPYStr() + for (let i = 0; i < cc.length; i++) { + if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) !== -1) { + str += ss.charAt(tt.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) + } + return str + } + + const translateInitialization = () => { + if (translateButtonObject) { + if (currentEncoding !== targetEncoding) { + translateButtonObject.textContent = + targetEncoding === 1 + ? msgToSimplifiedChinese + : msgToTraditionalChinese + setLang() + setTimeout(translateBody, translateDelay) + } + } + } + + window.translateFn = { + translatePage, + Traditionalized, + Simplized, + translateInitialization + } + + translateInitialization() + btf.addGlobalFn('pjaxComplete', translateInitialization, 'translateInitialization') +}) diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000..4d61949 --- /dev/null +++ b/js/utils.js @@ -0,0 +1,350 @@ +(() => { + const btfFn = { + debounce: (func, wait = 0, immediate = false) => { + let timeout + return (...args) => { + const later = () => { + timeout = null + if (!immediate) func(...args) + } + const callNow = immediate && !timeout + clearTimeout(timeout) + timeout = setTimeout(later, wait) + if (callNow) func(...args) + } + }, + + throttle: function (func, wait, options = {}) { + let timeout, context, args + let previous = 0 + + const later = () => { + previous = options.leading === false ? 0 : new Date().getTime() + timeout = null + func.apply(context, args) + if (!timeout) context = args = null + } + + const throttled = (...params) => { + const now = new Date().getTime() + if (!previous && options.leading === false) previous = now + const remaining = wait - (now - previous) + context = this + args = params + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout) + timeout = null + } + previous = now + func.apply(context, args) + if (!timeout) context = args = null + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining) + } + } + + return throttled + }, + + overflowPaddingR: { + add: () => { + const paddingRight = window.innerWidth - document.body.clientWidth + + if (paddingRight > 0) { + document.body.style.paddingRight = `${paddingRight}px` + document.body.style.overflow = 'hidden' + const menuElement = document.querySelector('#page-header.nav-fixed #menus') + if (menuElement) { + menuElement.style.paddingRight = `${paddingRight}px` + } + } + }, + remove: () => { + document.body.style.paddingRight = '' + document.body.style.overflow = '' + const menuElement = document.querySelector('#page-header.nav-fixed #menus') + if (menuElement) { + menuElement.style.paddingRight = '' + } + } + }, + + snackbarShow: (text, showAction = false, duration = 2000) => { + const { position, bgLight, bgDark } = GLOBAL_CONFIG.Snackbar + const bg = document.documentElement.getAttribute('data-theme') === 'light' ? bgLight : bgDark + Snackbar.show({ + text, + backgroundColor: bg, + showAction, + duration, + pos: position, + customClass: 'snackbar-css' + }) + }, + + diffDate: (inputDate, more = false) => { + const dateNow = new Date() + const datePost = new Date(inputDate) + const diffMs = dateNow - datePost + const diffSec = diffMs / 1000 + const diffMin = diffSec / 60 + const diffHour = diffMin / 60 + const diffDay = diffHour / 24 + const diffMonth = diffDay / 30 + const { dateSuffix } = GLOBAL_CONFIG + + if (!more) return Math.floor(diffDay) + + if (diffMonth > 12) return datePost.toISOString().slice(0, 10) + if (diffMonth >= 1) return `${Math.floor(diffMonth)} ${dateSuffix.month}` + if (diffDay >= 1) return `${Math.floor(diffDay)} ${dateSuffix.day}` + if (diffHour >= 1) return `${Math.floor(diffHour)} ${dateSuffix.hour}` + if (diffMin >= 1) return `${Math.floor(diffMin)} ${dateSuffix.min}` + return dateSuffix.just + }, + + loadComment: (dom, callback) => { + if ('IntersectionObserver' in window) { + const observerItem = new IntersectionObserver(entries => { + if (entries[0].isIntersecting) { + callback() + observerItem.disconnect() + } + }, { threshold: [0] }) + observerItem.observe(dom) + } else { + callback() + } + }, + + scrollToDest: (pos, time = 500) => { + const currentPos = window.scrollY + const isNavFixed = document.getElementById('page-header').classList.contains('fixed') + if (currentPos > pos || isNavFixed) pos = pos - 70 + + if ('scrollBehavior' in document.documentElement.style) { + window.scrollTo({ + top: pos, + behavior: 'smooth' + }) + return + } + + const startTime = performance.now() + const animate = currentTime => { + const timeElapsed = currentTime - startTime + const progress = Math.min(timeElapsed / time, 1) + window.scrollTo(0, currentPos + (pos - currentPos) * progress) + if (progress < 1) { + requestAnimationFrame(animate) + } + } + requestAnimationFrame(animate) + }, + + animateIn: (ele, animation) => { + ele.style.display = 'block' + ele.style.animation = animation + }, + + animateOut: (ele, animation) => { + const handleAnimationEnd = () => { + ele.style.display = '' + ele.style.animation = '' + ele.removeEventListener('animationend', handleAnimationEnd) + } + ele.addEventListener('animationend', handleAnimationEnd) + ele.style.animation = animation + }, + + wrap: (selector, eleType, options) => { + const createEle = document.createElement(eleType) + for (const [key, value] of Object.entries(options)) { + createEle.setAttribute(key, value) + } + selector.parentNode.insertBefore(createEle, selector) + createEle.appendChild(selector) + }, + + isHidden: ele => ele.offsetHeight === 0 && ele.offsetWidth === 0, + + getEleTop: ele => { + let actualTop = ele.offsetTop + let current = ele.offsetParent + + while (current !== null) { + actualTop += current.offsetTop + current = current.offsetParent + } + + return actualTop + }, + + loadLightbox: ele => { + const service = GLOBAL_CONFIG.lightbox + + if (service === 'medium_zoom') { + mediumZoom(ele, { background: 'var(--zoom-bg)' }) + return + } + + if (service === 'fancybox') { + Array.from(ele).forEach(i => { + if (i.parentNode.tagName !== 'A') { + const dataSrc = i.dataset.lazySrc || i.src + const dataCaption = i.title || i.alt || '' + btf.wrap(i, 'a', { href: dataSrc, 'data-fancybox': 'gallery', 'data-caption': dataCaption, 'data-thumb': dataSrc }) + } + }) + + if (!window.fancyboxRun) { + let options = '' + if (Fancybox.version < '6') { + options = { + Hash: false, + Thumbs: { + showOnStart: false + }, + Images: { + Panzoom: { + maxScale: 4 + } + }, + Carousel: { + transition: 'slide' + }, + Toolbar: { + display: { + left: ['infobar'], + middle: [ + 'zoomIn', + 'zoomOut', + 'toggle1to1', + 'rotateCCW', + 'rotateCW', + 'flipX', + 'flipY' + ], + right: ['slideshow', 'thumbs', 'close'] + } + } + } + } else { + options = { + Hash: false, + Carousel: { + transition: 'slide', + Thumbs: { + showOnStart: false + }, + Toolbar: { + display: { + left: ['counter'], + middle: [ + 'zoomIn', + 'zoomOut', + 'toggle1to1', + 'rotateCCW', + 'rotateCW', + 'flipX', + 'flipY', + 'reset' + ], + right: ['autoplay', 'thumbs', 'close'] + } + }, + Zoomable: { + Panzoom: { + maxScale: 4 + } + } + } + } + } + + Fancybox.bind('[data-fancybox]', options) + window.fancyboxRun = true + } + } + }, + + setLoading: { + add: ele => { + const html = ` +
    +
    +
    +
    +
    + ` + ele.insertAdjacentHTML('afterend', html) + }, + remove: ele => { + ele.nextElementSibling.remove() + } + }, + + updateAnchor: anchor => { + if (anchor !== window.location.hash) { + if (!anchor) anchor = location.pathname + const title = GLOBAL_CONFIG_SITE.title + window.history.replaceState({ + url: location.href, + title + }, title, anchor) + } + }, + + getScrollPercent: (() => { + let docHeight, winHeight, headerHeight, contentMath + + return (currentTop, ele) => { + if (!docHeight || ele.clientHeight !== docHeight) { + docHeight = ele.clientHeight + winHeight = window.innerHeight + headerHeight = ele.offsetTop + contentMath = Math.max(docHeight - winHeight, document.documentElement.scrollHeight - winHeight) + } + + const scrollPercent = (currentTop - headerHeight) / contentMath + return Math.max(0, Math.min(100, Math.round(scrollPercent * 100))) + } + })(), + + addEventListenerPjax: (ele, event, fn, option = false) => { + ele.addEventListener(event, fn, option) + btf.addGlobalFn('pjaxSendOnce', () => { + ele.removeEventListener(event, fn, option) + }) + }, + + removeGlobalFnEvent: (key, parent = window) => { + const globalFn = parent.globalFn || {} + const keyObj = globalFn[key] + if (!keyObj) return + + Object.keys(keyObj).forEach(i => keyObj[i]()) + + delete globalFn[key] + }, + + switchComments: (el = document, path) => { + const switchBtn = el.querySelector('#switch-btn') + if (!switchBtn) return + + let switchDone = false + const postComment = el.querySelector('#post-comment') + const handleSwitchBtn = () => { + postComment.classList.toggle('move') + if (!switchDone && typeof loadOtherComment === 'function') { + switchDone = true + loadOtherComment(el, path) + } + } + btf.addEventListenerPjax(switchBtn, 'click', handleSwitchBtn) + } + } + + window.btf = { ...window.btf, ...btfFn } +})() diff --git a/lib/hbe.js b/lib/hbe.js new file mode 100644 index 0000000..71205dd --- /dev/null +++ b/lib/hbe.js @@ -0,0 +1,297 @@ +(() => { + 'use strict'; + + const cryptoObj = window.crypto || window.msCrypto; + const storage = window.localStorage; + + const storageName = 'hexo-blog-encrypt:#' + window.location.pathname; + const keySalt = textToArray('hexo-blog-encrypt的作者们都是大帅比!'); + const ivSalt = textToArray('hexo-blog-encrypt是地表最强Hexo加密插件!'); + +// As we can't detect the wrong password with AES-CBC, +// so adding an empty div and check it when decrption. +const knownPrefix = ""; + + const mainElement = document.getElementById('hexo-blog-encrypt'); + const wrongPassMessage = mainElement.dataset['wpm']; + const wrongHashMessage = mainElement.dataset['whm']; + const dataElement = mainElement.getElementsByTagName('script')['hbeData']; + const encryptedData = dataElement.innerText; + const HmacDigist = dataElement.dataset['hmacdigest']; + + function hexToArray(s) { + return new Uint8Array(s.match(/[\da-f]{2}/gi).map((h => { + return parseInt(h, 16); + }))); + } + + function textToArray(s) { + var i = s.length; + var n = 0; + var ba = new Array() + + for (var j = 0; j < i;) { + var c = s.codePointAt(j); + if (c < 128) { + ba[n++] = c; + j++; + } else if ((c > 127) && (c < 2048)) { + ba[n++] = (c >> 6) | 192; + ba[n++] = (c & 63) | 128; + j++; + } else if ((c > 2047) && (c < 65536)) { + ba[n++] = (c >> 12) | 224; + ba[n++] = ((c >> 6) & 63) | 128; + ba[n++] = (c & 63) | 128; + j++; + } else { + ba[n++] = (c >> 18) | 240; + ba[n++] = ((c >> 12) & 63) | 128; + ba[n++] = ((c >> 6) & 63) | 128; + ba[n++] = (c & 63) | 128; + j += 2; + } + } + return new Uint8Array(ba); + } + + function arrayBufferToHex(arrayBuffer) { + if (typeof arrayBuffer !== 'object' || arrayBuffer === null || typeof arrayBuffer.byteLength !== 'number') { + throw new TypeError('Expected input to be an ArrayBuffer') + } + + var view = new Uint8Array(arrayBuffer) + var result = '' + var value + + for (var i = 0; i < view.length; i++) { + value = view[i].toString(16) + result += (value.length === 1 ? '0' + value : value) + } + + return result + } + + async function getExecutableScript(oldElem) { + let out = document.createElement('script'); + const attList = ['type', 'text', 'src', 'crossorigin', 'defer', 'referrerpolicy']; + attList.forEach((att) => { + if (oldElem[att]) + out[att] = oldElem[att]; + }) + + return out; + } + + async function convertHTMLToElement(content) { + let out = document.createElement('div'); + out.innerHTML = content; + out.querySelectorAll('script').forEach(async (elem) => { + elem.replaceWith(await getExecutableScript(elem)); + }); + + return out; + } + + function getKeyMaterial(password) { + let encoder = new TextEncoder(); + return cryptoObj.subtle.importKey( + 'raw', + encoder.encode(password), + { + 'name': 'PBKDF2', + }, + false, + [ + 'deriveKey', + 'deriveBits', + ] + ); + } + + function getHmacKey(keyMaterial) { + return cryptoObj.subtle.deriveKey({ + 'name': 'PBKDF2', + 'hash': 'SHA-256', + 'salt': keySalt.buffer, + 'iterations': 1024 + }, keyMaterial, { + 'name': 'HMAC', + 'hash': 'SHA-256', + 'length': 256, + }, true, [ + 'verify', + ]); + } + + function getDecryptKey(keyMaterial) { + return cryptoObj.subtle.deriveKey({ + 'name': 'PBKDF2', + 'hash': 'SHA-256', + 'salt': keySalt.buffer, + 'iterations': 1024, + }, keyMaterial, { + 'name': 'AES-CBC', + 'length': 256, + }, true, [ + 'decrypt', + ]); + } + + function getIv(keyMaterial) { + return cryptoObj.subtle.deriveBits({ + 'name': 'PBKDF2', + 'hash': 'SHA-256', + 'salt': ivSalt.buffer, + 'iterations': 512, + }, keyMaterial, 16 * 8); + } + + async function verifyContent(key, content) { + const encoder = new TextEncoder(); + const encoded = encoder.encode(content); + + let signature = hexToArray(HmacDigist); + + const result = await cryptoObj.subtle.verify({ + 'name': 'HMAC', + 'hash': 'SHA-256', + }, key, signature, encoded); + console.log(`Verification result: ${result}`); + if (!result) { + alert(wrongHashMessage); + console.log(`${wrongHashMessage}, got `, signature, ` but proved wrong.`); + } + return result; + } + + async function decrypt(decryptKey, iv, hmacKey) { + let typedArray = hexToArray(encryptedData); + + const result = await cryptoObj.subtle.decrypt({ + 'name': 'AES-CBC', + 'iv': iv, + }, decryptKey, typedArray.buffer).then(async (result) => { + const decoder = new TextDecoder(); + const decoded = decoder.decode(result); + + // check the prefix, if not then we can sure here is wrong password. + if (!decoded.startsWith(knownPrefix)) { + throw "Decode successfully but not start with KnownPrefix."; + } + + const hideButton = document.createElement('button'); + hideButton.textContent = 'Encrypt again'; + hideButton.type = 'button'; + hideButton.classList.add("hbe-button"); + hideButton.addEventListener('click', () => { + window.localStorage.removeItem(storageName); + window.location.reload(); + }); + + document.getElementById('hexo-blog-encrypt').style.display = 'inline'; + document.getElementById('hexo-blog-encrypt').innerHTML = ''; + document.getElementById('hexo-blog-encrypt').appendChild(await convertHTMLToElement(decoded)); + document.getElementById('hexo-blog-encrypt').appendChild(hideButton); + + // support html5 lazyload functionality. + document.querySelectorAll('img').forEach((elem) => { + if (elem.getAttribute("data-src") && !elem.src) { + elem.src = elem.getAttribute('data-src'); + } + }); + + // support theme-next refresh + window.NexT && NexT.boot && typeof NexT.boot.refresh === 'function' && NexT.boot.refresh(); + + // TOC part + var tocDiv = document.getElementById("toc-div"); + if (tocDiv) { + tocDiv.style.display = 'inline'; + } + + var tocDivs = document.getElementsByClassName('toc-div-class'); + if (tocDivs && tocDivs.length > 0) { + for (var idx = 0; idx < tocDivs.length; idx++) { + tocDivs[idx].style.display = 'inline'; + } + } + + // trigger event + var event = new Event('hexo-blog-decrypt'); + window.dispatchEvent(event); + + return await verifyContent(hmacKey, decoded); + }).catch((e) => { + alert(wrongPassMessage); + console.log(e); + return false; + }); + + return result; + + } + + function hbeLoader() { + + const oldStorageData = JSON.parse(storage.getItem(storageName)); + + if (oldStorageData) { + console.log(`Password got from localStorage(${storageName}): `, oldStorageData); + + const sIv = hexToArray(oldStorageData.iv).buffer; + const sDk = oldStorageData.dk; + const sHmk = oldStorageData.hmk; + + cryptoObj.subtle.importKey('jwk', sDk, { + 'name': 'AES-CBC', + 'length': 256, + }, true, [ + 'decrypt', + ]).then((dkCK) => { + cryptoObj.subtle.importKey('jwk', sHmk, { + 'name': 'HMAC', + 'hash': 'SHA-256', + 'length': 256, + }, true, [ + 'verify', + ]).then((hmkCK) => { + decrypt(dkCK, sIv, hmkCK).then((result) => { + if (!result) { + storage.removeItem(storageName); + } + }); + }); + }); + } + + mainElement.addEventListener('keydown', async (event) => { + if (event.isComposing || event.keyCode === 13) { + const password = document.getElementById('hbePass').value; + const keyMaterial = await getKeyMaterial(password); + const hmacKey = await getHmacKey(keyMaterial); + const decryptKey = await getDecryptKey(keyMaterial); + const iv = await getIv(keyMaterial); + + decrypt(decryptKey, iv, hmacKey).then((result) => { + console.log(`Decrypt result: ${result}`); + if (result) { + cryptoObj.subtle.exportKey('jwk', decryptKey).then((dk) => { + cryptoObj.subtle.exportKey('jwk', hmacKey).then((hmk) => { + const newStorageData = { + 'dk': dk, + 'iv': arrayBufferToHex(iv), + 'hmk': hmk, + }; + storage.setItem(storageName, JSON.stringify(newStorageData)); + }); + }); + } + }); + } + }); + } + + hbeLoader(); + +})(); diff --git a/live2d_models/ningning/Moc.moc3 b/live2d_models/ningning/Moc.moc3 new file mode 100644 index 0000000..ee0f6fa Binary files /dev/null and b/live2d_models/ningning/Moc.moc3 differ diff --git a/live2d_models/ningning/Motions_Idle_0.json b/live2d_models/ningning/Motions_Idle_0.json new file mode 100644 index 0000000..1da7b2c --- /dev/null +++ b/live2d_models/ningning/Motions_Idle_0.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":20,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":168,"TotalSegmentCount":4686,"TotalPointCount":12594,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamAngleX","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamAngleY","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamAngleZ","Segments":[0,0,1,0.033,-0.001,0.689,-11.588,0.733,-12.37,1,0.822,-13.934,0.911,-15,1,-15,1,1.078,-14.999,2.911,15,3,15,1,3.078,14.999,4.911,-15,5,-15,1,5.078,-14.999,6.911,15,7,15,1,7.078,14.999,8.911,-15,9,-15,1,9.078,-14.999,10.911,15,11,15,1,11.078,14.999,12.911,-15,13,-15,1,13.078,-14.999,14.911,15,15,15,1,15.078,14.999,16.911,-15,17,-15,1,17.078,-14.999,18.911,15,19,15,1,19.033,14.999,19.689,3.412,19.733,2.63,1,19.822,1.066,19.911,0,20,0]},{"Target":"Parameter","Id":"ParamAngleZ4","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamAngleZ5","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBodyAngleX","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBodyAngleY","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBodyAngleZ","Segments":[0,0,1,0.333,0.01,0.667,-5.01,1,-5,1,1.167,-4.997,2.833,4.997,3,5,1,3.167,4.997,4.833,-4.997,5,-5,1,5.167,-4.997,6.833,4.997,7,5,1,7.167,4.997,8.833,-4.997,9,-5,1,9.167,-4.997,10.833,4.997,11,5,1,11.167,4.997,12.833,-4.997,13,-5,1,13.167,-4.997,14.833,4.997,15,5,1,15.167,4.997,16.833,-4.997,17,-5,1,17.167,-4.997,18.833,4.997,19,5,1,19.333,5.01,19.667,-0.01,20,0]},{"Target":"Parameter","Id":"ParamBrowLX","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowLY","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowLAngle","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowLForm","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowRX","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowRY","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowRAngle","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBrowRForm","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamEyeBallX","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamEyeBallY","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,0,10,1,1,10.333,1.002,10.667,0,11,0,0,19,0,1,19.333,0,19.667,1.002,20,1]},{"Target":"Parameter","Id":"ParamEyeLSmile","Segments":[0,0,0,10,0,1,10.333,0,10.667,1,11,1,0,19,1,1,19.333,1,19.667,0,20,0]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,0,10,1,1,10.333,1.002,10.667,0,11,0,0,19,0,1,19.333,0,19.667,1.002,20,1]},{"Target":"Parameter","Id":"ParamEyeRSmile","Segments":[0,0,0,10,0,1,10.333,0,10.667,1,11,1,0,19,1,1,19.333,1,19.667,0,20,0]},{"Target":"Parameter","Id":"ParamMouthOpenY","Segments":[0,0,0,10,0,1,10.333,0,10.667,1,11,1,0,19,1,1,19.333,1,19.667,0,20,0]},{"Target":"Parameter","Id":"ParamMouthForm","Segments":[0,0,0,10,0,1,10.333,-0.002,10.667,1,11,1,0,19,1,1,19.333,1,19.667,-0.002,20,0]},{"Target":"Parameter","Id":"ParamArmLeftUpper2","Segments":[0,0,1,0.1,0.001,0.2,0.309,0.3,0.31,1,0.556,0.311,0.811,-0.196,1.067,-0.195,1,1.167,-0.194,1.267,-0.072,1.367,-0.072,1,1.511,-0.072,1.656,-0.195,1.8,-0.195,0,1.833,-0.195,0,1.867,-0.196,0,1.9,-0.194,0,1.933,-0.195,1,2.078,-0.194,2.222,0.062,2.367,0.063,1,2.467,0.063,2.567,0.002,2.667,0.002,1,3.111,0.002,3.556,0.199,4,0.199,1,4.133,0.198,4.267,-0.066,4.4,-0.067,1,4.489,-0.067,4.578,-0.001,4.667,-0.001,1,5.111,-0.001,5.556,-0.199,6,-0.199,1,6.133,-0.198,6.267,0.066,6.4,0.067,1,6.489,0.067,6.578,0.001,6.667,0.001,1,7.111,0.001,7.556,0.199,8,0.199,1,8.133,0.198,8.267,-0.066,8.4,-0.067,1,8.489,-0.067,8.578,-0.001,8.667,-0.001,1,9.111,-0.001,9.556,-0.199,10,-0.199,1,10.133,-0.198,10.267,0.066,10.4,0.067,1,10.489,0.067,10.578,0.001,10.667,0.001,1,11.111,0.001,11.556,0.199,12,0.199,1,12.133,0.198,12.267,-0.066,12.4,-0.067,1,12.489,-0.067,12.578,-0.001,12.667,-0.001,1,13.111,-0.001,13.556,-0.199,14,-0.199,1,14.133,-0.198,14.267,0.066,14.4,0.067,1,14.489,0.067,14.578,0.001,14.667,0.001,1,15.111,0.001,15.556,0.199,16,0.199,1,16.133,0.198,16.267,-0.066,16.4,-0.067,1,16.489,-0.067,16.578,-0.001,16.667,-0.001,1,17.111,-0.001,17.556,-0.199,18,-0.199,1,18.133,-0.198,18.267,0.066,18.4,0.067,1,18.489,0.067,18.578,0.001,18.667,0.001,1,18.878,0.001,19.089,0.276,19.3,0.276,1,19.533,0.277,19.767,-0.152,20,-0.19]},{"Target":"Parameter","Id":"ParamArmLeftUpper3","Segments":[0,0,1,0.067,0.001,0.133,-0.125,0.2,-0.124,1,0.3,-0.123,0.4,0.208,0.5,0.209,1,0.611,0.208,0.722,-0.134,0.833,-0.135,1,0.911,-0.136,0.989,0.048,1.067,0.047,1,1.144,0.047,1.222,-0.048,1.3,-0.047,1,1.4,-0.047,1.5,0.073,1.6,0.073,1,1.7,0.073,1.8,-0.057,1.9,-0.058,0,2.033,-0.032,0,2.2,-0.062,1,2.3,-0.062,2.4,0.102,2.5,0.103,1,2.611,0.102,2.722,-0.087,2.833,-0.088,1,2.956,-0.088,3.078,0.054,3.2,0.055,1,3.311,0.054,3.422,-0.036,3.533,-0.036,1,3.633,-0.036,3.733,0.019,3.833,0.019,0,4,0.006,1,4.067,0.005,4.133,0.09,4.2,0.089,1,4.311,0.088,4.422,-0.115,4.533,-0.116,1,4.644,-0.115,4.756,0.095,4.867,0.096,1,4.978,0.095,5.089,-0.059,5.2,-0.06,1,5.311,-0.059,5.422,0.039,5.533,0.039,1,5.633,0.039,5.733,-0.02,5.833,-0.02,0,6,-0.008,1,6.067,-0.007,6.133,-0.089,6.2,-0.088,1,6.311,-0.087,6.422,0.115,6.533,0.116,1,6.644,0.115,6.756,-0.095,6.867,-0.096,1,6.978,-0.095,7.089,0.059,7.2,0.06,1,7.311,0.059,7.422,-0.039,7.533,-0.039,1,7.633,-0.039,7.733,0.02,7.833,0.02,0,8,0.008,1,8.067,0.007,8.133,0.089,8.2,0.088,1,8.311,0.087,8.422,-0.115,8.533,-0.116,1,8.644,-0.115,8.756,0.095,8.867,0.096,1,8.978,0.095,9.089,-0.059,9.2,-0.06,1,9.311,-0.059,9.422,0.039,9.533,0.039,1,9.633,0.039,9.733,-0.02,9.833,-0.02,0,10,-0.008,1,10.067,-0.007,10.133,-0.089,10.2,-0.088,1,10.311,-0.087,10.422,0.115,10.533,0.116,1,10.644,0.115,10.756,-0.095,10.867,-0.096,1,10.978,-0.095,11.089,0.059,11.2,0.06,1,11.311,0.059,11.422,-0.039,11.533,-0.039,1,11.633,-0.039,11.733,0.02,11.833,0.02,0,12,0.008,1,12.067,0.007,12.133,0.089,12.2,0.088,1,12.311,0.087,12.422,-0.115,12.533,-0.116,1,12.644,-0.115,12.756,0.095,12.867,0.096,1,12.978,0.095,13.089,-0.059,13.2,-0.06,1,13.311,-0.059,13.422,0.039,13.533,0.039,1,13.633,0.039,13.733,-0.02,13.833,-0.02,0,14,-0.008,1,14.067,-0.007,14.133,-0.089,14.2,-0.088,1,14.311,-0.087,14.422,0.115,14.533,0.116,1,14.644,0.115,14.756,-0.095,14.867,-0.096,1,14.978,-0.095,15.089,0.059,15.2,0.06,1,15.311,0.059,15.422,-0.039,15.533,-0.039,1,15.633,-0.039,15.733,0.02,15.833,0.02,0,16,0.008,1,16.067,0.007,16.133,0.089,16.2,0.088,1,16.311,0.087,16.422,-0.115,16.533,-0.116,1,16.644,-0.115,16.756,0.095,16.867,0.096,1,16.978,0.095,17.089,-0.059,17.2,-0.06,1,17.311,-0.059,17.422,0.039,17.533,0.039,1,17.633,0.039,17.733,-0.02,17.833,-0.02,0,18,-0.008,1,18.067,-0.007,18.133,-0.089,18.2,-0.088,1,18.311,-0.087,18.422,0.115,18.533,0.116,1,18.644,0.115,18.756,-0.095,18.867,-0.096,1,18.933,-0.096,19,-0.005,19.067,-0.006,0,19.167,-0.016,1,19.267,-0.015,19.367,0.114,19.467,0.115,1,19.578,0.114,19.689,-0.069,19.8,-0.07,1,19.867,-0.071,19.933,0.008,20,0.03]},{"Target":"Parameter","Id":"ParamArmLeftUpper4","Segments":[0,-2.618,1,0.1,-2.616,0.2,-2.001,0.3,-1.998,1,0.556,-1.996,0.811,-3.009,1.067,-3.007,1,1.167,-3.006,1.267,-2.762,1.367,-2.761,1,1.511,-2.762,1.656,-3.007,1.8,-3.008,0,1.833,-3.007,0,1.867,-3.01,0,1.9,-3.006,0,1.933,-3.009,1,2.089,-3.007,2.244,-2.512,2.4,-2.51,1,2.489,-2.51,2.578,-2.603,2.667,-2.603,1,3.044,-2.603,3.422,-2.267,3.8,-2.267,0,3.9,-2.308,0,4.033,-2.28,1,4.156,-2.282,4.278,-2.731,4.4,-2.732,1,4.489,-2.732,4.578,-2.636,4.667,-2.635,1,5.111,-2.636,5.556,-3.016,6,-3.017,1,6.122,-3.015,6.244,-2.481,6.367,-2.479,1,6.467,-2.48,6.567,-2.618,6.667,-2.619,1,7.044,-2.618,7.422,-2.266,7.8,-2.265,0,7.9,-2.309,0,8.033,-2.283,1,8.156,-2.285,8.278,-2.73,8.4,-2.732,1,8.489,-2.731,8.578,-2.636,8.667,-2.636,1,9.111,-2.636,9.556,-3.016,10,-3.017,1,10.122,-3.015,10.244,-2.481,10.367,-2.479,1,10.467,-2.48,10.567,-2.618,10.667,-2.619,1,11.044,-2.618,11.422,-2.266,11.8,-2.265,0,11.9,-2.309,0,12.033,-2.283,1,12.156,-2.285,12.278,-2.73,12.4,-2.732,1,12.489,-2.731,12.578,-2.636,12.667,-2.636,1,13.111,-2.636,13.556,-3.016,14,-3.017,1,14.122,-3.015,14.244,-2.481,14.367,-2.479,1,14.467,-2.48,14.567,-2.618,14.667,-2.619,1,15.044,-2.618,15.422,-2.266,15.8,-2.265,0,15.9,-2.309,0,16.033,-2.283,1,16.156,-2.285,16.278,-2.73,16.4,-2.732,1,16.489,-2.731,16.578,-2.636,16.667,-2.636,1,17.111,-2.636,17.556,-3.016,18,-3.017,1,18.122,-3.015,18.244,-2.481,18.367,-2.479,1,18.467,-2.48,18.567,-2.618,18.667,-2.619,1,18.878,-2.62,19.089,-2.066,19.3,-2.067,1,19.533,-2.065,19.767,-2.922,20,-2.999]},{"Target":"Parameter","Id":"ParamArmLeftUpper","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamArmLeftLower","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamArmRightUpper","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamArmRightLower","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamArmRightLower2","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamEyeBallPhysicsX","Segments":[0,0,0,10,0,1,10.1,0.016,10.2,4.103,10.3,4.119,1,10.422,4.109,10.911,-2.438,11.033,-2.448,1,11.156,-2.434,11.278,1.133,11.4,1.147,1,11.511,1.14,11.622,-0.536,11.733,-0.543,1,11.844,-0.54,11.956,0.252,12.067,0.255,1,12.178,0.253,12.289,-0.117,12.4,-0.119,1,12.522,-0.118,12.644,0.056,12.767,0.056,1,12.878,0.056,12.989,-0.026,13.1,-0.027,0,13.433,0.012,0,13.8,-0.006,0,14.133,0.003,0,14.467,-0.001,0,14.8,0.001,0,15.133,0,0,15.4,0,2,15.433,0,0,15.533,0,0,15.6,0,3,15.633,0,0,15.833,0,0,16,0,0,19,0,1,19.1,-0.016,19.2,-4.103,19.3,-4.119,1,19.413,-4.11,19.84,1.494,20,2.341]},{"Target":"Parameter","Id":"ParamEyeBallPhysicsY","Segments":[0,0,0,0.067,0,0,0.367,0,0,0.633,0,2,0.667,0,0,0.767,0,0,0.833,0,3,0.867,0,0,1.033,0,0,1.2,0,0,10,0,1,10.033,-0.01,10.167,-1.638,10.2,-1.648,1,10.3,-1.631,10.4,2.757,10.5,2.774,1,10.556,2.788,10.611,1.621,10.667,0.499,1,10.722,-0.623,10.778,-1.79,10.833,-1.776,1,10.867,-1.774,11.022,0.452,11.067,0.457,1,11.1,0.448,11.233,-1.124,11.267,-1.133,1,11.367,-1.122,11.467,1.687,11.567,1.698,1,11.622,1.707,11.678,0.913,11.733,0.15,1,11.789,-0.613,11.844,-1.406,11.9,-1.397,1,12.011,-1.388,12.122,0.939,12.233,0.948,1,12.344,0.942,12.456,-0.578,12.567,-0.584,1,12.678,-0.58,12.789,0.335,12.9,0.339,1,13.011,0.337,13.122,-0.186,13.233,-0.188,1,13.356,-0.187,13.478,0.102,13.6,0.103,1,13.711,0.103,13.822,-0.055,13.933,-0.056,1,14.044,-0.055,14.156,0.029,14.267,0.029,0,14.6,-0.015,0,14.967,0.008,0,15.3,-0.004,0,15.633,0.002,0,15.967,-0.001,0,16.3,0,0,16.667,0,0,16.733,0,2,16.767,0,3,16.933,0,2,16.967,0,0,17.067,0,0,17.133,0,3,17.167,0,0,17.333,0,0,17.467,0,0,17.633,0,0,17.667,0,0,17.8,0,0,19,0,1,19.033,0.01,19.167,1.638,19.2,1.648,1,19.3,1.631,19.4,-2.757,19.5,-2.774,1,19.556,-2.788,19.611,-1.621,19.667,-0.499,1,19.722,0.623,19.778,1.79,19.833,1.776,1,19.856,1.775,19.937,0.717,20,0.058]},{"Target":"Parameter","Id":"ParamEyeBallPhysicsZ","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamEyeBallPhysicsW","Segments":[0,0,0,0.033,0,3,0.067,0,0,0.333,0,0,0.467,0,2,0.5,0,3,0.667,0,0,0.7,0,0,0.733,0,0,0.867,0,0,1,0,0,1.033,0,0,1.1,0,0,10,0,1,10.067,0.009,10.133,-1.107,10.2,-1.099,1,10.3,-1.087,10.4,1.838,10.5,1.849,1,10.556,1.858,10.611,1.081,10.667,0.333,1,10.722,-0.415,10.778,-1.193,10.833,-1.184,1,10.911,-1.196,10.989,0.316,11.067,0.305,1,11.133,0.313,11.2,-0.764,11.267,-0.756,1,11.367,-0.748,11.467,1.124,11.567,1.132,1,11.678,1.124,11.789,-0.923,11.9,-0.931,1,12.011,-0.925,12.122,0.626,12.233,0.632,1,12.344,0.628,12.456,-0.385,12.567,-0.389,1,12.678,-0.387,12.789,0.223,12.9,0.226,1,13.011,0.225,13.122,-0.124,13.233,-0.126,1,13.356,-0.125,13.478,0.068,13.6,0.069,1,13.711,0.068,13.822,-0.037,13.933,-0.037,1,14.044,-0.037,14.156,0.019,14.267,0.019,0,14.633,-0.01,0,14.967,0.005,0,15.3,-0.003,0,15.633,0.001,0,15.967,-0.001,0,16.3,0,3,16.633,0,0,16.767,0,2,16.8,0,3,16.967,0,0,17,0,0,17.033,0,0,17.167,0,0,19,0,1,19.067,-0.009,19.133,1.107,19.2,1.099,1,19.3,1.087,19.4,-1.838,19.5,-1.849,1,19.556,-1.858,19.611,-1.081,19.667,-0.333,1,19.722,0.415,19.778,1.193,19.833,1.184,1,19.889,1.192,19.944,0.423,20,-0.013]},{"Target":"Parameter","Id":"Param1","Segments":[0,0,0,0.267,0,1,0.344,-0.003,0.422,0.331,0.5,0.328,1,0.611,0.326,0.722,-0.316,0.833,-0.319,1,0.944,-0.317,1.056,0.113,1.167,0.114,1,1.289,0.113,1.411,-0.123,1.533,-0.124,1,1.644,-0.124,1.756,-0.031,1.867,-0.03,0,1.933,-0.04,0,2,-0.028,0,2.167,-0.052,1,2.278,-0.052,2.389,0.069,2.5,0.069,1,2.6,0.069,2.7,-0.029,2.8,-0.029,1,2.922,-0.029,3.044,0.068,3.167,0.069,0,3.467,0.03,0,3.9,0.077,1,4.089,0.078,4.278,-0.059,4.467,-0.059,1,4.578,-0.059,4.689,0.026,4.8,0.026,1,4.922,0.026,5.044,-0.066,5.167,-0.067,0,5.467,-0.03,0,5.9,-0.077,1,6.089,-0.077,6.278,0.059,6.467,0.059,1,6.578,0.059,6.689,-0.026,6.8,-0.026,1,6.922,-0.026,7.044,0.066,7.167,0.067,0,7.467,0.03,0,7.9,0.077,1,8.089,0.077,8.278,-0.059,8.467,-0.059,1,8.578,-0.059,8.689,0.026,8.8,0.026,1,8.922,0.026,9.044,-0.066,9.167,-0.067,0,9.467,-0.03,0,9.9,-0.077,1,10.089,-0.077,10.278,0.059,10.467,0.059,1,10.578,0.059,10.689,-0.026,10.8,-0.026,1,10.922,-0.026,11.044,0.066,11.167,0.067,0,11.467,0.03,0,11.9,0.077,1,12.089,0.077,12.278,-0.059,12.467,-0.059,1,12.578,-0.059,12.689,0.026,12.8,0.026,1,12.922,0.026,13.044,-0.066,13.167,-0.067,0,13.467,-0.03,0,13.9,-0.077,1,14.089,-0.077,14.278,0.059,14.467,0.059,1,14.578,0.059,14.689,-0.026,14.8,-0.026,1,14.922,-0.026,15.044,0.066,15.167,0.067,0,15.467,0.03,0,15.9,0.077,1,16.089,0.077,16.278,-0.059,16.467,-0.059,1,16.578,-0.059,16.689,0.026,16.8,0.026,1,16.922,0.026,17.044,-0.066,17.167,-0.067,0,17.467,-0.03,0,17.9,-0.077,1,18.089,-0.077,18.278,0.059,18.467,0.059,1,18.578,0.059,18.689,-0.026,18.8,-0.026,1,18.967,-0.025,19.133,0.131,19.3,0.131,1,19.456,0.13,19.611,-0.06,19.767,-0.06,1,19.811,-0.062,19.856,0.085,19.9,0.084,1,19.933,0.084,19.967,0.053,20,0.012]},{"Target":"Parameter","Id":"Param2","Segments":[0,0,0,0.267,0,1,0.344,-0.003,0.422,0.331,0.5,0.328,1,0.611,0.326,0.722,-0.316,0.833,-0.319,1,0.944,-0.317,1.056,0.113,1.167,0.114,1,1.289,0.113,1.411,-0.123,1.533,-0.124,1,1.644,-0.124,1.756,-0.031,1.867,-0.03,0,1.933,-0.04,0,2,-0.028,0,2.167,-0.052,1,2.278,-0.052,2.389,0.069,2.5,0.069,1,2.6,0.069,2.7,-0.029,2.8,-0.029,1,2.922,-0.029,3.044,0.068,3.167,0.069,0,3.467,0.03,0,3.9,0.077,1,4.089,0.078,4.278,-0.059,4.467,-0.059,1,4.578,-0.059,4.689,0.026,4.8,0.026,1,4.922,0.026,5.044,-0.066,5.167,-0.067,0,5.467,-0.03,0,5.9,-0.077,1,6.089,-0.077,6.278,0.059,6.467,0.059,1,6.578,0.059,6.689,-0.026,6.8,-0.026,1,6.922,-0.026,7.044,0.066,7.167,0.067,0,7.467,0.03,0,7.9,0.077,1,8.089,0.077,8.278,-0.059,8.467,-0.059,1,8.578,-0.059,8.689,0.026,8.8,0.026,1,8.922,0.026,9.044,-0.066,9.167,-0.067,0,9.467,-0.03,0,9.9,-0.077,1,10.089,-0.077,10.278,0.059,10.467,0.059,1,10.578,0.059,10.689,-0.026,10.8,-0.026,1,10.922,-0.026,11.044,0.066,11.167,0.067,0,11.467,0.03,0,11.9,0.077,1,12.089,0.077,12.278,-0.059,12.467,-0.059,1,12.578,-0.059,12.689,0.026,12.8,0.026,1,12.922,0.026,13.044,-0.066,13.167,-0.067,0,13.467,-0.03,0,13.9,-0.077,1,14.089,-0.077,14.278,0.059,14.467,0.059,1,14.578,0.059,14.689,-0.026,14.8,-0.026,1,14.922,-0.026,15.044,0.066,15.167,0.067,0,15.467,0.03,0,15.9,0.077,1,16.089,0.077,16.278,-0.059,16.467,-0.059,1,16.578,-0.059,16.689,0.026,16.8,0.026,1,16.922,0.026,17.044,-0.066,17.167,-0.067,0,17.467,-0.03,0,17.9,-0.077,1,18.089,-0.077,18.278,0.059,18.467,0.059,1,18.578,0.059,18.689,-0.026,18.8,-0.026,1,18.967,-0.025,19.133,0.131,19.3,0.131,1,19.456,0.13,19.611,-0.06,19.767,-0.06,1,19.811,-0.062,19.856,0.085,19.9,0.084,1,19.933,0.084,19.967,0.053,20,0.012]},{"Target":"Parameter","Id":"Param3","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param35","Segments":[0,-30,0,20,-30]},{"Target":"Parameter","Id":"Param68","Segments":[0,0.001,0,0.167,-0.002,0,0.5,0.001,0,0.833,-0.001,0,1.2,0,0,1.5,0,0,1.633,0,2,1.667,0,3,1.833,0,0,1.867,0,0,1.9,0,0,2.033,0,0,2.167,0,0,2.233,0,3,2.3,0,0,10,0,1,10.1,-0.003,10.2,-0.86,10.3,-0.863,1,10.356,-0.872,10.578,2.043,10.633,2.034,1,10.689,2.046,10.744,1.028,10.8,0.049,1,10.856,-0.929,10.911,-1.947,10.967,-1.935,1,11.067,-1.925,11.167,0.624,11.267,0.634,1,11.333,0.64,11.4,-0.115,11.467,-0.109,1,11.544,-0.116,11.622,0.834,11.7,0.826,1,11.811,0.819,11.922,-1.177,12.033,-1.185,1,12.144,-1.176,12.256,1.093,12.367,1.102,1,12.478,1.094,12.589,-0.845,12.7,-0.852,1,12.811,-0.847,12.922,0.586,13.033,0.592,1,13.156,0.588,13.278,-0.384,13.4,-0.387,1,13.511,-0.385,13.622,0.24,13.733,0.243,1,13.844,0.241,13.956,-0.145,14.067,-0.146,1,14.178,-0.145,14.289,0.084,14.4,0.085,1,14.522,0.084,14.644,-0.048,14.767,-0.049,1,14.878,-0.049,14.989,0.027,15.1,0.028,0,15.433,-0.015,0,15.8,0.008,0,16.133,-0.004,0,16.467,0.002,0,16.8,-0.001,0,17.133,0.001,0,17.5,0,0,17.8,0,0,17.933,0,2,17.967,0,3,18.133,0,0,18.167,0,0,18.2,0,0,18.333,0,0,19,0,1,19.1,0.003,19.2,0.86,19.3,0.863,1,19.356,0.872,19.578,-2.043,19.633,-2.034,1,19.689,-2.046,19.744,-1.028,19.8,-0.049,1,19.856,0.929,19.911,1.947,19.967,1.935,1,19.978,1.934,19.989,1.901,20,1.845]},{"Target":"Parameter","Id":"Param4","Segments":[0,0,0,10,0,1,10.1,0.016,10.2,4.103,10.3,4.119,1,10.422,4.109,10.911,-2.438,11.033,-2.448,1,11.156,-2.434,11.278,1.133,11.4,1.147,1,11.511,1.14,11.622,-0.536,11.733,-0.543,1,11.844,-0.54,11.956,0.252,12.067,0.255,1,12.178,0.253,12.289,-0.117,12.4,-0.119,1,12.522,-0.118,12.644,0.056,12.767,0.056,1,12.878,0.056,12.989,-0.026,13.1,-0.027,0,13.433,0.012,0,13.8,-0.006,0,14.133,0.003,0,14.467,-0.001,0,14.8,0.001,0,15.133,0,0,15.4,0,2,15.433,0,0,15.533,0,0,15.6,0,3,15.633,0,0,15.833,0,0,16,0,0,19,0,1,19.1,-0.016,19.2,-4.103,19.3,-4.119,1,19.413,-4.11,19.84,1.494,20,2.341]},{"Target":"Parameter","Id":"Param5","Segments":[0,0,0,0.067,0,0,0.367,0,0,0.633,0,2,0.667,0,0,0.767,0,0,0.833,0,3,0.867,0,0,1.033,0,0,1.2,0,0,10,0,1,10.033,-0.01,10.167,-1.638,10.2,-1.648,1,10.3,-1.631,10.4,2.757,10.5,2.774,1,10.556,2.788,10.611,1.621,10.667,0.499,1,10.722,-0.623,10.778,-1.79,10.833,-1.776,1,10.867,-1.774,11.022,0.452,11.067,0.457,1,11.1,0.448,11.233,-1.124,11.267,-1.133,1,11.367,-1.122,11.467,1.687,11.567,1.698,1,11.622,1.707,11.678,0.913,11.733,0.15,1,11.789,-0.613,11.844,-1.406,11.9,-1.397,1,12.011,-1.388,12.122,0.939,12.233,0.948,1,12.344,0.942,12.456,-0.578,12.567,-0.584,1,12.678,-0.58,12.789,0.335,12.9,0.339,1,13.011,0.337,13.122,-0.186,13.233,-0.188,1,13.356,-0.187,13.478,0.102,13.6,0.103,1,13.711,0.103,13.822,-0.055,13.933,-0.056,1,14.044,-0.055,14.156,0.029,14.267,0.029,0,14.6,-0.015,0,14.967,0.008,0,15.3,-0.004,0,15.633,0.002,0,15.967,-0.001,0,16.3,0,0,16.667,0,0,16.733,0,2,16.767,0,3,16.933,0,2,16.967,0,0,17.067,0,0,17.133,0,3,17.167,0,0,17.333,0,0,17.467,0,0,17.633,0,0,17.667,0,0,17.8,0,0,19,0,1,19.033,0.01,19.167,1.638,19.2,1.648,1,19.3,1.631,19.4,-2.757,19.5,-2.774,1,19.556,-2.788,19.611,-1.621,19.667,-0.499,1,19.722,0.623,19.778,1.79,19.833,1.776,1,19.856,1.775,19.937,0.717,20,0.058]},{"Target":"Parameter","Id":"Param6","Segments":[0,-30,0,20,-30]},{"Target":"Parameter","Id":"Param7","Segments":[0,0,0,0.033,0,3,0.067,0,0,0.333,0,0,0.467,0,2,0.5,0,3,0.667,0,0,0.7,0,0,0.733,0,0,0.867,0,0,1,0,0,1.033,0,0,1.1,0,0,10,0,1,10.067,0.009,10.133,-1.107,10.2,-1.099,1,10.3,-1.087,10.4,1.838,10.5,1.849,1,10.556,1.858,10.611,1.081,10.667,0.333,1,10.722,-0.415,10.778,-1.193,10.833,-1.184,1,10.911,-1.196,10.989,0.316,11.067,0.305,1,11.133,0.313,11.2,-0.764,11.267,-0.756,1,11.367,-0.748,11.467,1.124,11.567,1.132,1,11.678,1.124,11.789,-0.923,11.9,-0.931,1,12.011,-0.925,12.122,0.626,12.233,0.632,1,12.344,0.628,12.456,-0.385,12.567,-0.389,1,12.678,-0.387,12.789,0.223,12.9,0.226,1,13.011,0.225,13.122,-0.124,13.233,-0.126,1,13.356,-0.125,13.478,0.068,13.6,0.069,1,13.711,0.068,13.822,-0.037,13.933,-0.037,1,14.044,-0.037,14.156,0.019,14.267,0.019,0,14.633,-0.01,0,14.967,0.005,0,15.3,-0.003,0,15.633,0.001,0,15.967,-0.001,0,16.3,0,3,16.633,0,0,16.767,0,2,16.8,0,3,16.967,0,0,17,0,0,17.033,0,0,17.167,0,0,19,0,1,19.067,-0.009,19.133,1.107,19.2,1.099,1,19.3,1.087,19.4,-1.838,19.5,-1.849,1,19.556,-1.858,19.611,-1.081,19.667,-0.333,1,19.722,0.415,19.778,1.193,19.833,1.184,1,19.889,1.192,19.944,0.423,20,-0.013]},{"Target":"Parameter","Id":"Param8","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"Param9","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"Param10","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param36","Segments":[0,-30,0,20,-30]},{"Target":"Parameter","Id":"Param69","Segments":[0,0.001,0,0.167,-0.002,0,0.5,0.001,0,0.833,-0.001,0,1.2,0,0,1.5,0,0,1.633,0,2,1.667,0,3,1.833,0,0,1.867,0,0,1.9,0,0,2.033,0,0,2.167,0,0,2.233,0,3,2.3,0,0,10,0,1,10.1,-0.003,10.2,-0.86,10.3,-0.863,1,10.356,-0.872,10.578,2.043,10.633,2.034,1,10.689,2.046,10.744,1.028,10.8,0.049,1,10.856,-0.929,10.911,-1.947,10.967,-1.935,1,11.067,-1.925,11.167,0.624,11.267,0.634,1,11.333,0.64,11.4,-0.115,11.467,-0.109,1,11.544,-0.116,11.622,0.834,11.7,0.826,1,11.811,0.819,11.922,-1.177,12.033,-1.185,1,12.144,-1.176,12.256,1.093,12.367,1.102,1,12.478,1.094,12.589,-0.845,12.7,-0.852,1,12.811,-0.847,12.922,0.586,13.033,0.592,1,13.156,0.588,13.278,-0.384,13.4,-0.387,1,13.511,-0.385,13.622,0.24,13.733,0.243,1,13.844,0.241,13.956,-0.145,14.067,-0.146,1,14.178,-0.145,14.289,0.084,14.4,0.085,1,14.522,0.084,14.644,-0.048,14.767,-0.049,1,14.878,-0.049,14.989,0.027,15.1,0.028,0,15.433,-0.015,0,15.8,0.008,0,16.133,-0.004,0,16.467,0.002,0,16.8,-0.001,0,17.133,0.001,0,17.5,0,0,17.8,0,0,17.933,0,2,17.967,0,3,18.133,0,0,18.167,0,0,18.2,0,0,18.333,0,0,19,0,1,19.1,0.003,19.2,0.86,19.3,0.863,1,19.356,0.872,19.578,-2.043,19.633,-2.034,1,19.689,-2.046,19.744,-1.028,19.8,-0.049,1,19.856,0.929,19.911,1.947,19.967,1.935,1,19.978,1.934,19.989,1.901,20,1.845]},{"Target":"Parameter","Id":"Param11","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param12","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param30","Segments":[0,0,0,10,0,1,10.056,-0.006,10.111,0.82,10.167,0.813,1,10.222,0.816,10.278,0.403,10.333,0.406,0,10.367,0.407,0,10.4,0.386,0,10.433,0.391,1,10.622,0.393,10.811,-0.57,11,-0.568,1,11.056,-0.574,11.111,0.179,11.167,0.173,1,11.233,0.175,11.3,-0.056,11.367,-0.054,1,11.422,-0.055,11.478,0.018,11.533,0.017,0,11.7,-0.005,0,11.867,0.002,0,12.033,0,0,12.2,0,0,12.367,0,0,12.4,0,0,19,0,1,19.056,0.006,19.111,-0.82,19.167,-0.813,1,19.222,-0.816,19.278,-0.403,19.333,-0.406,0,19.367,-0.407,0,19.4,-0.386,0,19.433,-0.391,1,19.622,-0.393,19.811,0.57,20,0.568]},{"Target":"Parameter","Id":"Param31","Segments":[0,0,0,10,0,1,10.033,-0.003,10.067,-0.209,10.1,-0.212,1,10.144,-0.216,10.189,0.285,10.233,0.281,1,10.289,0.285,10.344,-0.147,10.4,-0.143,1,10.444,-0.145,10.489,0.074,10.533,0.072,1,10.578,0.073,10.622,-0.003,10.667,-0.002,0,10.733,0.005,0,10.867,-0.005,0,10.967,0.029,1,11.011,0.032,11.056,-0.261,11.1,-0.258,1,11.144,-0.262,11.189,0.251,11.233,0.247,1,11.289,0.25,11.344,-0.137,11.4,-0.134,1,11.456,-0.135,11.511,0.06,11.567,0.059,1,11.622,0.06,11.678,-0.024,11.733,-0.024,0,11.933,0.009,0,12.1,-0.003,0,12.267,0.001,0,12.4,0,0,12.6,0,0,12.767,0,0,12.8,0,0,19,0,1,19.033,0.003,19.067,0.209,19.1,0.212,1,19.144,0.216,19.189,-0.285,19.233,-0.281,1,19.289,-0.285,19.344,0.147,19.4,0.143,1,19.444,0.145,19.489,-0.074,19.533,-0.072,1,19.578,-0.073,19.622,0.003,19.667,0.002,0,19.733,-0.005,0,19.867,0.005,0,19.967,-0.029,1,19.978,-0.03,19.989,-0.012,20,0.015]},{"Target":"Parameter","Id":"ParamHairFront","Segments":[0,0,0,0.167,0,1,0.444,0.011,0.722,-5.516,1,-5.505,1,1.656,-5.494,2.311,5.394,2.967,5.404,1,3.633,5.394,4.3,-5.394,4.967,-5.405,1,5.633,-5.394,6.3,5.394,6.967,5.405,1,7.633,5.394,8.3,-5.394,8.967,-5.405,1,9.633,-5.394,10.3,5.394,10.967,5.405,1,11.633,5.394,12.3,-5.394,12.967,-5.405,1,13.633,-5.394,14.3,5.394,14.967,5.405,1,15.633,5.394,16.3,-5.394,16.967,-5.405,1,17.633,-5.394,18.3,5.394,18.967,5.405,1,19.3,5.416,19.633,-0.367,19.967,-0.356,1,19.978,-0.356,19.989,-0.35,20,-0.339]},{"Target":"Parameter","Id":"ParamHairFront2","Segments":[0,0,0,0.167,0,1,0.256,0.004,0.344,0.933,0.433,0.936,1,0.544,0.93,0.656,-0.704,0.767,-0.711,1,0.867,-0.708,0.967,0.051,1.067,0.054,1,1.167,0.053,1.267,-0.226,1.367,-0.227,1,1.433,-0.227,1.5,-0.169,1.567,-0.169,1,1.689,-0.17,1.811,-0.323,1.933,-0.324,1,2.122,-0.325,2.311,0.231,2.5,0.23,1,2.6,0.228,2.7,-0.098,2.8,-0.099,1,2.922,-0.098,3.044,0.264,3.167,0.265,1,3.267,0.265,3.367,0.124,3.467,0.123,1,3.611,0.124,3.756,0.307,3.9,0.308,1,4.089,0.309,4.278,-0.238,4.467,-0.237,1,4.578,-0.236,4.689,0.102,4.8,0.104,1,4.922,0.102,5.044,-0.265,5.167,-0.266,1,5.267,-0.266,5.367,-0.123,5.467,-0.122,1,5.611,-0.123,5.756,-0.306,5.9,-0.307,1,6.089,-0.308,6.278,0.238,6.467,0.237,1,6.578,0.235,6.689,-0.102,6.8,-0.103,1,6.922,-0.102,7.044,0.265,7.167,0.266,1,7.267,0.266,7.367,0.123,7.467,0.122,1,7.611,0.123,7.756,0.306,7.9,0.307,1,8.089,0.308,8.278,-0.238,8.467,-0.237,1,8.578,-0.235,8.689,0.102,8.8,0.103,1,8.922,0.102,9.044,-0.265,9.167,-0.266,1,9.267,-0.266,9.367,-0.123,9.467,-0.122,1,9.611,-0.123,9.756,-0.306,9.9,-0.307,1,10.089,-0.308,10.278,0.238,10.467,0.237,1,10.578,0.235,10.689,-0.102,10.8,-0.103,1,10.922,-0.102,11.044,0.265,11.167,0.266,1,11.267,0.266,11.367,0.123,11.467,0.122,1,11.611,0.123,11.756,0.306,11.9,0.307,1,12.089,0.308,12.278,-0.238,12.467,-0.237,1,12.578,-0.235,12.689,0.102,12.8,0.103,1,12.922,0.102,13.044,-0.265,13.167,-0.266,1,13.267,-0.266,13.367,-0.123,13.467,-0.122,1,13.611,-0.123,13.756,-0.306,13.9,-0.307,1,14.089,-0.308,14.278,0.238,14.467,0.237,1,14.578,0.235,14.689,-0.102,14.8,-0.103,1,14.922,-0.102,15.044,0.265,15.167,0.266,1,15.267,0.266,15.367,0.123,15.467,0.122,1,15.611,0.123,15.756,0.306,15.9,0.307,1,16.089,0.308,16.278,-0.238,16.467,-0.237,1,16.578,-0.235,16.689,0.102,16.8,0.103,1,16.922,0.102,17.044,-0.265,17.167,-0.266,1,17.267,-0.266,17.367,-0.123,17.467,-0.122,1,17.611,-0.123,17.756,-0.306,17.9,-0.307,1,18.089,-0.308,18.278,0.238,18.467,0.237,1,18.578,0.235,18.689,-0.102,18.8,-0.103,1,18.967,-0.101,19.133,0.522,19.3,0.524,1,19.456,0.522,19.611,-0.239,19.767,-0.242,0,19.967,-0.194,1,19.978,-0.194,19.989,-0.198,20,-0.203]},{"Target":"Parameter","Id":"ParamHairFront3","Segments":[0,0,0,0.167,0,1,0.289,0.004,0.411,1.146,0.533,1.151,1,0.656,1.141,0.778,-1.378,0.9,-1.388,1,1.011,-1.38,1.122,0.635,1.233,0.643,1,1.344,0.638,1.456,-0.595,1.567,-0.6,1,1.667,-0.598,1.767,-0.096,1.867,-0.094,1,1.933,-0.092,2,-0.333,2.067,-0.332,1,2.233,-0.329,2.4,0.344,2.567,0.346,1,2.689,0.344,2.811,-0.25,2.933,-0.252,1,3.056,-0.249,3.178,0.464,3.3,0.467,1,3.411,0.465,3.522,-0.009,3.633,-0.011,1,3.756,-0.009,3.878,0.482,4,0.484,1,4.178,0.485,4.356,-0.308,4.533,-0.306,0,4.933,0.236,1,5.056,0.233,5.178,-0.456,5.3,-0.459,1,5.411,-0.457,5.522,0.007,5.633,0.009,1,5.756,0.007,5.878,-0.48,6,-0.481,1,6.189,-0.483,6.378,0.306,6.567,0.304,1,6.689,0.302,6.811,-0.233,6.933,-0.235,1,7.056,-0.232,7.178,0.456,7.3,0.459,1,7.411,0.457,7.522,-0.006,7.633,-0.008,1,7.756,-0.006,7.878,0.479,8,0.481,1,8.189,0.483,8.378,-0.306,8.567,-0.304,1,8.689,-0.302,8.811,0.233,8.933,0.235,1,9.056,0.233,9.178,-0.456,9.3,-0.459,1,9.411,-0.457,9.522,0.006,9.633,0.008,1,9.756,0.006,9.878,-0.48,10,-0.481,1,10.189,-0.483,10.378,0.306,10.567,0.304,1,10.689,0.302,10.811,-0.233,10.933,-0.235,1,11.056,-0.232,11.178,0.456,11.3,0.459,1,11.411,0.457,11.522,-0.006,11.633,-0.008,1,11.756,-0.006,11.878,0.48,12,0.481,1,12.189,0.483,12.378,-0.306,12.567,-0.304,1,12.689,-0.302,12.811,0.233,12.933,0.235,1,13.056,0.233,13.178,-0.456,13.3,-0.459,1,13.411,-0.457,13.522,0.006,13.633,0.008,1,13.756,0.006,13.878,-0.48,14,-0.481,1,14.189,-0.483,14.378,0.306,14.567,0.304,1,14.689,0.302,14.811,-0.233,14.933,-0.235,1,15.056,-0.232,15.178,0.456,15.3,0.459,1,15.411,0.457,15.522,-0.006,15.633,-0.008,1,15.756,-0.006,15.878,0.48,16,0.481,1,16.189,0.483,16.378,-0.306,16.567,-0.304,1,16.689,-0.302,16.811,0.233,16.933,0.235,1,17.056,0.233,17.178,-0.456,17.3,-0.459,1,17.411,-0.457,17.522,0.006,17.633,0.008,1,17.756,0.006,17.878,-0.48,18,-0.481,1,18.189,-0.483,18.378,0.306,18.567,0.304,1,18.689,0.302,18.811,-0.233,18.933,-0.235,1,19.078,-0.231,19.222,0.718,19.367,0.721,1,19.522,0.716,19.678,-0.509,19.833,-0.514,1,19.889,-0.513,19.944,-0.436,20,-0.346]},{"Target":"Parameter","Id":"ParamHairFront11","Segments":[0,0,1,0.1,0.005,0.2,1.259,0.3,1.264,1,0.556,1.268,0.811,-0.783,1.067,-0.779,1,1.167,-0.777,1.267,-0.29,1.367,-0.288,1,1.511,-0.29,1.656,-0.779,1.8,-0.781,0,1.833,-0.779,0,1.867,-0.785,0,1.9,-0.777,0,1.933,-0.782,1,2.078,-0.778,2.222,0.248,2.367,0.252,1,2.467,0.251,2.567,0.009,2.667,0.008,1,3.111,0.009,3.556,0.795,4,0.796,1,4.133,0.792,4.267,-0.263,4.4,-0.267,1,4.489,-0.266,4.578,-0.005,4.667,-0.004,1,5.111,-0.005,5.556,-0.795,6,-0.796,1,6.133,-0.792,6.267,0.263,6.4,0.267,1,6.489,0.266,6.578,0.005,6.667,0.004,1,7.111,0.005,7.556,0.795,8,0.796,1,8.133,0.792,8.267,-0.263,8.4,-0.267,1,8.489,-0.266,8.578,-0.005,8.667,-0.004,1,9.111,-0.005,9.556,-0.795,10,-0.796,1,10.133,-0.792,10.267,0.263,10.4,0.267,1,10.489,0.266,10.578,0.005,10.667,0.004,1,11.111,0.005,11.556,0.795,12,0.796,1,12.133,0.792,12.267,-0.263,12.4,-0.267,1,12.489,-0.266,12.578,-0.005,12.667,-0.004,1,13.111,-0.005,13.556,-0.795,14,-0.796,1,14.133,-0.792,14.267,0.263,14.4,0.267,1,14.489,0.266,14.578,0.005,14.667,0.004,1,15.111,0.005,15.556,0.795,16,0.796,1,16.133,0.792,16.267,-0.263,16.4,-0.267,1,16.489,-0.266,16.578,-0.005,16.667,-0.004,1,17.111,-0.005,17.556,-0.795,18,-0.796,1,18.133,-0.792,18.267,0.263,18.4,0.267,1,18.489,0.266,18.578,0.005,18.667,0.004,1,18.878,0.002,19.089,1.105,19.3,1.103,1,19.533,1.107,19.767,-0.58,20,-0.73]},{"Target":"Parameter","Id":"ParamHairFront5","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairFront6","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairFront7","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairFront8","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairFront9","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairFront10","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairSideL","Segments":[0,0,0,0.2,0,1,0.433,0.006,0.667,-3.271,0.9,-3.264,1,1.589,-3.267,2.278,2.692,2.967,2.689,1,3.622,2.683,4.278,-2.706,4.933,-2.711,1,5.556,-2.706,6.178,2.7,6.8,2.705,1,7.511,2.708,8.222,-2.714,8.933,-2.712,1,9.556,-2.706,10.178,2.7,10.8,2.705,1,11.511,2.708,12.222,-2.714,12.933,-2.712,1,13.556,-2.706,14.178,2.7,14.8,2.705,1,15.511,2.708,16.222,-2.714,16.933,-2.712,1,17.556,-2.706,18.178,2.7,18.8,2.705,1,19.178,2.702,19.556,-0.48,19.933,-0.483,1,19.956,-0.483,19.978,-0.47,20,-0.447]},{"Target":"Parameter","Id":"ParamHairSideL2","Segments":[0,0,0,0.167,0,1,0.189,-0.001,0.211,-0.052,0.233,-0.053,1,0.356,-0.051,0.478,0.394,0.6,0.396,1,1.1,0.395,1.6,-0.355,2.1,-0.356,1,2.767,-0.355,3.433,0.358,4.1,0.359,1,4.7,0.358,5.3,-0.303,5.9,-0.303,1,5.944,-0.304,5.989,-0.213,6.033,-0.213,1,6.111,-0.213,6.189,-0.322,6.267,-0.321,1,6.878,-0.32,7.489,0.36,8.1,0.36,1,8.7,0.36,9.3,-0.303,9.9,-0.303,1,9.944,-0.304,9.989,-0.214,10.033,-0.214,1,10.111,-0.214,10.189,-0.321,10.267,-0.321,1,10.878,-0.32,11.489,0.36,12.1,0.36,1,12.7,0.36,13.3,-0.303,13.9,-0.303,1,13.944,-0.304,13.989,-0.214,14.033,-0.214,1,14.111,-0.214,14.189,-0.321,14.267,-0.321,1,14.878,-0.32,15.489,0.36,16.1,0.36,1,16.7,0.36,17.3,-0.303,17.9,-0.303,1,17.944,-0.304,17.989,-0.214,18.033,-0.214,1,18.111,-0.214,18.189,-0.321,18.267,-0.321,1,18.678,-0.32,19.089,0.311,19.5,0.312,1,19.667,0.312,19.833,0.163,20,0.045]},{"Target":"Parameter","Id":"ParamHairSideL3","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.356,0.533,0.358,1,0.689,0.355,0.844,-0.46,1,-0.463,1,1.144,-0.461,1.289,0.176,1.433,0.179,1,1.589,0.177,1.744,-0.288,1.9,-0.29,1,2.1,-0.291,2.3,0.183,2.5,0.182,1,2.644,0.181,2.789,-0.085,2.933,-0.086,1,3.078,-0.085,3.222,0.164,3.367,0.165,1,3.478,0.164,3.589,0.085,3.7,0.085,1,3.833,0.085,3.967,0.153,4.1,0.153,1,4.256,0.152,4.411,-0.171,4.567,-0.172,1,4.689,-0.171,4.811,0.068,4.933,0.069,1,5.078,0.068,5.222,-0.151,5.367,-0.152,1,5.478,-0.152,5.589,-0.09,5.7,-0.09,1,5.8,-0.09,5.9,-0.176,6,-0.177,1,6.233,-0.177,6.467,0.113,6.7,0.113,1,6.822,0.112,6.944,-0.039,7.067,-0.039,1,7.2,-0.038,7.333,0.169,7.467,0.17,1,7.589,0.169,7.711,0.089,7.833,0.088,1,7.933,0.089,8.033,0.149,8.133,0.149,1,8.278,0.148,8.422,-0.174,8.567,-0.175,1,8.689,-0.174,8.811,0.07,8.933,0.071,1,9.078,0.07,9.222,-0.153,9.367,-0.153,1,9.478,-0.153,9.589,-0.089,9.7,-0.089,1,9.8,-0.089,9.9,-0.177,10,-0.177,1,10.233,-0.178,10.467,0.113,10.7,0.112,1,10.822,0.112,10.944,-0.038,11.067,-0.039,1,11.2,-0.038,11.333,0.168,11.467,0.169,1,11.589,0.169,11.711,0.089,11.833,0.089,1,11.933,0.089,12.033,0.149,12.133,0.149,1,12.278,0.148,12.422,-0.174,12.567,-0.175,1,12.689,-0.174,12.811,0.07,12.933,0.071,1,13.078,0.07,13.222,-0.153,13.367,-0.153,1,13.478,-0.153,13.589,-0.089,13.7,-0.089,1,13.8,-0.089,13.9,-0.177,14,-0.177,1,14.233,-0.178,14.467,0.113,14.7,0.112,1,14.822,0.112,14.944,-0.038,15.067,-0.039,1,15.2,-0.038,15.333,0.168,15.467,0.169,1,15.589,0.169,15.711,0.089,15.833,0.089,1,15.933,0.089,16.033,0.149,16.133,0.149,1,16.278,0.148,16.422,-0.174,16.567,-0.175,1,16.689,-0.174,16.811,0.07,16.933,0.071,1,17.078,0.07,17.222,-0.153,17.367,-0.153,1,17.478,-0.153,17.589,-0.089,17.7,-0.089,1,17.8,-0.089,17.9,-0.177,18,-0.177,1,18.233,-0.178,18.467,0.113,18.7,0.112,1,18.822,0.112,18.944,-0.037,19.067,-0.037,1,19.2,-0.036,19.333,0.342,19.467,0.344,1,19.644,0.345,19.822,-0.279,20,-0.278]},{"Target":"Parameter","Id":"ParamHairSideL4","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairSideL5","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairSideL6","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"ParamHairSideL7","Segments":[0,0,1,0.133,0.009,0.267,2.386,0.4,2.396,1,0.622,2.404,0.844,-2.07,1.067,-2.062,1,1.211,-2.055,1.356,-0.43,1.5,-0.424,1,1.678,-0.421,1.856,-1.917,2.033,-1.914,1,2.2,-1.903,2.367,0.846,2.533,0.857,1,2.667,0.855,2.8,0.184,2.933,0.181,1,3.3,0.182,3.667,1.505,4.033,1.506,1,4.211,1.51,4.389,-0.681,4.567,-0.677,1,4.689,-0.675,4.811,-0.278,4.933,-0.277,1,5.3,-0.278,5.667,-1.523,6.033,-1.524,1,6.211,-1.528,6.389,0.687,6.567,0.683,1,6.689,0.681,6.811,0.273,6.933,0.271,1,7.3,0.273,7.667,1.522,8.033,1.524,1,8.211,1.528,8.389,-0.687,8.567,-0.683,1,8.689,-0.681,8.811,-0.273,8.933,-0.272,1,9.3,-0.273,9.667,-1.522,10.033,-1.524,1,10.211,-1.528,10.389,0.687,10.567,0.683,1,10.689,0.681,10.811,0.273,10.933,0.272,1,11.3,0.273,11.667,1.522,12.033,1.524,1,12.211,1.528,12.389,-0.687,12.567,-0.683,1,12.689,-0.681,12.811,-0.273,12.933,-0.272,1,13.3,-0.273,13.667,-1.522,14.033,-1.524,1,14.211,-1.528,14.389,0.687,14.567,0.683,1,14.689,0.681,14.811,0.273,14.933,0.272,1,15.3,0.273,15.667,1.522,16.033,1.524,1,16.211,1.528,16.389,-0.687,16.567,-0.683,1,16.689,-0.681,16.811,-0.273,16.933,-0.272,1,17.3,-0.273,17.667,-1.522,18.033,-1.524,1,18.211,-1.528,18.389,0.687,18.567,0.683,1,18.689,0.681,18.811,0.273,18.933,0.272,1,19.089,0.279,19.244,2.234,19.4,2.241,1,19.6,2.249,19.8,-1.146,20,-1.819]},{"Target":"Parameter","Id":"ParamHairSideL8","Segments":[0,0,0,0.2,0,1,0.433,0.006,0.667,-3.271,0.9,-3.264,1,1.589,-3.267,2.278,2.692,2.967,2.689,1,3.622,2.683,4.278,-2.706,4.933,-2.711,1,5.556,-2.706,6.178,2.7,6.8,2.705,1,7.511,2.708,8.222,-2.714,8.933,-2.712,1,9.556,-2.706,10.178,2.7,10.8,2.705,1,11.511,2.708,12.222,-2.714,12.933,-2.712,1,13.556,-2.706,14.178,2.7,14.8,2.705,1,15.511,2.708,16.222,-2.714,16.933,-2.712,1,17.556,-2.706,18.178,2.7,18.8,2.705,1,19.178,2.702,19.556,-0.48,19.933,-0.483,1,19.956,-0.483,19.978,-0.47,20,-0.447]},{"Target":"Parameter","Id":"ParamHairSideL9","Segments":[0,0,0,0.167,0,1,0.189,-0.001,0.211,-0.052,0.233,-0.053,1,0.356,-0.051,0.478,0.394,0.6,0.396,1,1.1,0.395,1.6,-0.355,2.1,-0.356,1,2.767,-0.355,3.433,0.358,4.1,0.359,1,4.7,0.358,5.3,-0.303,5.9,-0.303,1,5.944,-0.304,5.989,-0.213,6.033,-0.213,1,6.111,-0.213,6.189,-0.322,6.267,-0.321,1,6.878,-0.32,7.489,0.36,8.1,0.36,1,8.7,0.36,9.3,-0.303,9.9,-0.303,1,9.944,-0.304,9.989,-0.214,10.033,-0.214,1,10.111,-0.214,10.189,-0.321,10.267,-0.321,1,10.878,-0.32,11.489,0.36,12.1,0.36,1,12.7,0.36,13.3,-0.303,13.9,-0.303,1,13.944,-0.304,13.989,-0.214,14.033,-0.214,1,14.111,-0.214,14.189,-0.321,14.267,-0.321,1,14.878,-0.32,15.489,0.36,16.1,0.36,1,16.7,0.36,17.3,-0.303,17.9,-0.303,1,17.944,-0.304,17.989,-0.214,18.033,-0.214,1,18.111,-0.214,18.189,-0.321,18.267,-0.321,1,18.678,-0.32,19.089,0.311,19.5,0.312,1,19.667,0.312,19.833,0.163,20,0.045]},{"Target":"Parameter","Id":"ParamHairSideL10","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.356,0.533,0.358,1,0.689,0.355,0.844,-0.46,1,-0.463,1,1.144,-0.461,1.289,0.176,1.433,0.179,1,1.589,0.177,1.744,-0.288,1.9,-0.29,1,2.1,-0.291,2.3,0.183,2.5,0.182,1,2.644,0.181,2.789,-0.085,2.933,-0.086,1,3.078,-0.085,3.222,0.164,3.367,0.165,1,3.478,0.164,3.589,0.085,3.7,0.085,1,3.833,0.085,3.967,0.153,4.1,0.153,1,4.256,0.152,4.411,-0.171,4.567,-0.172,1,4.689,-0.171,4.811,0.068,4.933,0.069,1,5.078,0.068,5.222,-0.151,5.367,-0.152,1,5.478,-0.152,5.589,-0.09,5.7,-0.09,1,5.8,-0.09,5.9,-0.176,6,-0.177,1,6.233,-0.177,6.467,0.113,6.7,0.113,1,6.822,0.112,6.944,-0.039,7.067,-0.039,1,7.2,-0.038,7.333,0.169,7.467,0.17,1,7.589,0.169,7.711,0.089,7.833,0.088,1,7.933,0.089,8.033,0.149,8.133,0.149,1,8.278,0.148,8.422,-0.174,8.567,-0.175,1,8.689,-0.174,8.811,0.07,8.933,0.071,1,9.078,0.07,9.222,-0.153,9.367,-0.153,1,9.478,-0.153,9.589,-0.089,9.7,-0.089,1,9.8,-0.089,9.9,-0.177,10,-0.177,1,10.233,-0.178,10.467,0.113,10.7,0.112,1,10.822,0.112,10.944,-0.038,11.067,-0.039,1,11.2,-0.038,11.333,0.168,11.467,0.169,1,11.589,0.169,11.711,0.089,11.833,0.089,1,11.933,0.089,12.033,0.149,12.133,0.149,1,12.278,0.148,12.422,-0.174,12.567,-0.175,1,12.689,-0.174,12.811,0.07,12.933,0.071,1,13.078,0.07,13.222,-0.153,13.367,-0.153,1,13.478,-0.153,13.589,-0.089,13.7,-0.089,1,13.8,-0.089,13.9,-0.177,14,-0.177,1,14.233,-0.178,14.467,0.113,14.7,0.112,1,14.822,0.112,14.944,-0.038,15.067,-0.039,1,15.2,-0.038,15.333,0.168,15.467,0.169,1,15.589,0.169,15.711,0.089,15.833,0.089,1,15.933,0.089,16.033,0.149,16.133,0.149,1,16.278,0.148,16.422,-0.174,16.567,-0.175,1,16.689,-0.174,16.811,0.07,16.933,0.071,1,17.078,0.07,17.222,-0.153,17.367,-0.153,1,17.478,-0.153,17.589,-0.089,17.7,-0.089,1,17.8,-0.089,17.9,-0.177,18,-0.177,1,18.233,-0.178,18.467,0.113,18.7,0.112,1,18.822,0.112,18.944,-0.037,19.067,-0.037,1,19.2,-0.036,19.333,0.342,19.467,0.344,1,19.644,0.345,19.822,-0.279,20,-0.278]},{"Target":"Parameter","Id":"ParamHairSideR","Segments":[0,0,0,0.2,0,1,0.311,-0.007,0.778,-4.899,0.9,-4.897,1,1.589,-4.901,2.278,4.037,2.967,4.033,1,3.622,4.025,4.278,-4.059,4.933,-4.066,1,5.556,-4.059,6.178,4.05,6.8,4.058,1,7.511,4.062,8.222,-4.071,8.933,-4.067,1,9.556,-4.059,10.178,4.05,10.8,4.058,1,11.511,4.062,12.222,-4.071,12.933,-4.067,1,13.556,-4.059,14.178,4.05,14.8,4.058,1,15.511,4.062,16.222,-4.071,16.933,-4.067,1,17.556,-4.059,18.178,4.05,18.8,4.058,1,19.178,4.053,19.556,-0.719,19.933,-0.724,1,19.956,-0.723,19.978,-0.704,20,-0.671]},{"Target":"Parameter","Id":"ParamHairSideR2","Segments":[0,0,0,0.167,0,1,0.189,-0.001,0.211,-0.052,0.233,-0.053,1,0.356,-0.051,0.478,0.394,0.6,0.396,1,1.1,0.395,1.6,-0.355,2.1,-0.356,1,2.767,-0.355,3.433,0.358,4.1,0.359,1,4.7,0.358,5.3,-0.303,5.9,-0.303,1,5.944,-0.304,5.989,-0.213,6.033,-0.213,1,6.111,-0.213,6.189,-0.322,6.267,-0.321,1,6.878,-0.32,7.489,0.36,8.1,0.36,1,8.7,0.36,9.3,-0.303,9.9,-0.303,1,9.944,-0.304,9.989,-0.214,10.033,-0.214,1,10.111,-0.214,10.189,-0.321,10.267,-0.321,1,10.878,-0.32,11.489,0.36,12.1,0.36,1,12.7,0.36,13.3,-0.303,13.9,-0.303,1,13.944,-0.304,13.989,-0.214,14.033,-0.214,1,14.111,-0.214,14.189,-0.321,14.267,-0.321,1,14.878,-0.32,15.489,0.36,16.1,0.36,1,16.7,0.36,17.3,-0.303,17.9,-0.303,1,17.944,-0.304,17.989,-0.214,18.033,-0.214,1,18.111,-0.214,18.189,-0.321,18.267,-0.321,1,18.678,-0.32,19.089,0.311,19.5,0.312,1,19.667,0.312,19.833,0.163,20,0.045]},{"Target":"Parameter","Id":"ParamHairSideR3","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.356,0.533,0.358,1,0.689,0.355,0.844,-0.46,1,-0.463,1,1.144,-0.461,1.289,0.176,1.433,0.179,1,1.589,0.177,1.744,-0.288,1.9,-0.29,1,2.1,-0.291,2.3,0.183,2.5,0.182,1,2.644,0.181,2.789,-0.085,2.933,-0.086,1,3.078,-0.085,3.222,0.164,3.367,0.165,1,3.478,0.164,3.589,0.085,3.7,0.085,1,3.833,0.085,3.967,0.153,4.1,0.153,1,4.256,0.152,4.411,-0.171,4.567,-0.172,1,4.689,-0.171,4.811,0.068,4.933,0.069,1,5.078,0.068,5.222,-0.151,5.367,-0.152,1,5.478,-0.152,5.589,-0.09,5.7,-0.09,1,5.8,-0.09,5.9,-0.176,6,-0.177,1,6.233,-0.177,6.467,0.113,6.7,0.113,1,6.822,0.112,6.944,-0.039,7.067,-0.039,1,7.2,-0.038,7.333,0.169,7.467,0.17,1,7.589,0.169,7.711,0.089,7.833,0.088,1,7.933,0.089,8.033,0.149,8.133,0.149,1,8.278,0.148,8.422,-0.174,8.567,-0.175,1,8.689,-0.174,8.811,0.07,8.933,0.071,1,9.078,0.07,9.222,-0.153,9.367,-0.153,1,9.478,-0.153,9.589,-0.089,9.7,-0.089,1,9.8,-0.089,9.9,-0.177,10,-0.177,1,10.233,-0.178,10.467,0.113,10.7,0.112,1,10.822,0.112,10.944,-0.038,11.067,-0.039,1,11.2,-0.038,11.333,0.168,11.467,0.169,1,11.589,0.169,11.711,0.089,11.833,0.089,1,11.933,0.089,12.033,0.149,12.133,0.149,1,12.278,0.148,12.422,-0.174,12.567,-0.175,1,12.689,-0.174,12.811,0.07,12.933,0.071,1,13.078,0.07,13.222,-0.153,13.367,-0.153,1,13.478,-0.153,13.589,-0.089,13.7,-0.089,1,13.8,-0.089,13.9,-0.177,14,-0.177,1,14.233,-0.178,14.467,0.113,14.7,0.112,1,14.822,0.112,14.944,-0.038,15.067,-0.039,1,15.2,-0.038,15.333,0.168,15.467,0.169,1,15.589,0.169,15.711,0.089,15.833,0.089,1,15.933,0.089,16.033,0.149,16.133,0.149,1,16.278,0.148,16.422,-0.174,16.567,-0.175,1,16.689,-0.174,16.811,0.07,16.933,0.071,1,17.078,0.07,17.222,-0.153,17.367,-0.153,1,17.478,-0.153,17.589,-0.089,17.7,-0.089,1,17.8,-0.089,17.9,-0.177,18,-0.177,1,18.233,-0.178,18.467,0.113,18.7,0.112,1,18.822,0.112,18.944,-0.037,19.067,-0.037,1,19.2,-0.036,19.333,0.342,19.467,0.344,1,19.644,0.345,19.822,-0.279,20,-0.278]},{"Target":"Parameter","Id":"ParamHairSideR4","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairSideR5","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairSideR6","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"ParamHairSideR7","Segments":[0,0,1,0.133,0.009,0.267,2.386,0.4,2.396,1,0.622,2.404,0.844,-2.07,1.067,-2.062,1,1.211,-2.055,1.356,-0.43,1.5,-0.424,1,1.678,-0.421,1.856,-1.917,2.033,-1.914,1,2.2,-1.903,2.367,0.846,2.533,0.857,1,2.667,0.855,2.8,0.184,2.933,0.181,1,3.3,0.182,3.667,1.505,4.033,1.506,1,4.211,1.51,4.389,-0.681,4.567,-0.677,1,4.689,-0.675,4.811,-0.278,4.933,-0.277,1,5.3,-0.278,5.667,-1.523,6.033,-1.524,1,6.211,-1.528,6.389,0.687,6.567,0.683,1,6.689,0.681,6.811,0.273,6.933,0.271,1,7.3,0.273,7.667,1.522,8.033,1.524,1,8.211,1.528,8.389,-0.687,8.567,-0.683,1,8.689,-0.681,8.811,-0.273,8.933,-0.272,1,9.3,-0.273,9.667,-1.522,10.033,-1.524,1,10.211,-1.528,10.389,0.687,10.567,0.683,1,10.689,0.681,10.811,0.273,10.933,0.272,1,11.3,0.273,11.667,1.522,12.033,1.524,1,12.211,1.528,12.389,-0.687,12.567,-0.683,1,12.689,-0.681,12.811,-0.273,12.933,-0.272,1,13.3,-0.273,13.667,-1.522,14.033,-1.524,1,14.211,-1.528,14.389,0.687,14.567,0.683,1,14.689,0.681,14.811,0.273,14.933,0.272,1,15.3,0.273,15.667,1.522,16.033,1.524,1,16.211,1.528,16.389,-0.687,16.567,-0.683,1,16.689,-0.681,16.811,-0.273,16.933,-0.272,1,17.3,-0.273,17.667,-1.522,18.033,-1.524,1,18.211,-1.528,18.389,0.687,18.567,0.683,1,18.689,0.681,18.811,0.273,18.933,0.272,1,19.089,0.279,19.244,2.234,19.4,2.241,1,19.6,2.249,19.8,-1.146,20,-1.819]},{"Target":"Parameter","Id":"ParamHairBackL","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBackL2","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBackL3","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackL4","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackL5","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBackL6","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBackL7","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackL8","Segments":[0,0,1,0.1,0.005,0.2,1.259,0.3,1.264,1,0.556,1.268,0.811,-0.783,1.067,-0.779,1,1.167,-0.777,1.267,-0.29,1.367,-0.288,1,1.511,-0.29,1.656,-0.779,1.8,-0.781,0,1.833,-0.779,0,1.867,-0.785,0,1.9,-0.777,0,1.933,-0.782,1,2.078,-0.778,2.222,0.248,2.367,0.252,1,2.467,0.251,2.567,0.009,2.667,0.008,1,3.111,0.009,3.556,0.795,4,0.796,1,4.133,0.792,4.267,-0.263,4.4,-0.267,1,4.489,-0.266,4.578,-0.005,4.667,-0.004,1,5.111,-0.005,5.556,-0.795,6,-0.796,1,6.133,-0.792,6.267,0.263,6.4,0.267,1,6.489,0.266,6.578,0.005,6.667,0.004,1,7.111,0.005,7.556,0.795,8,0.796,1,8.133,0.792,8.267,-0.263,8.4,-0.267,1,8.489,-0.266,8.578,-0.005,8.667,-0.004,1,9.111,-0.005,9.556,-0.795,10,-0.796,1,10.133,-0.792,10.267,0.263,10.4,0.267,1,10.489,0.266,10.578,0.005,10.667,0.004,1,11.111,0.005,11.556,0.795,12,0.796,1,12.133,0.792,12.267,-0.263,12.4,-0.267,1,12.489,-0.266,12.578,-0.005,12.667,-0.004,1,13.111,-0.005,13.556,-0.795,14,-0.796,1,14.133,-0.792,14.267,0.263,14.4,0.267,1,14.489,0.266,14.578,0.005,14.667,0.004,1,15.111,0.005,15.556,0.795,16,0.796,1,16.133,0.792,16.267,-0.263,16.4,-0.267,1,16.489,-0.266,16.578,-0.005,16.667,-0.004,1,17.111,-0.005,17.556,-0.795,18,-0.796,1,18.133,-0.792,18.267,0.263,18.4,0.267,1,18.489,0.266,18.578,0.005,18.667,0.004,1,18.878,0.002,19.089,1.105,19.3,1.103,1,19.533,1.107,19.767,-0.58,20,-0.73]},{"Target":"Parameter","Id":"ParamHairBackR","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBackR2","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBackR3","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackR4","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackR5","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBackR6","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBackR7","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBackR8","Segments":[0,0,1,0.1,0.005,0.2,1.259,0.3,1.264,1,0.556,1.268,0.811,-0.783,1.067,-0.779,1,1.167,-0.777,1.267,-0.29,1.367,-0.288,1,1.511,-0.29,1.656,-0.779,1.8,-0.781,0,1.833,-0.779,0,1.867,-0.785,0,1.9,-0.777,0,1.933,-0.782,1,2.078,-0.778,2.222,0.248,2.367,0.252,1,2.467,0.251,2.567,0.009,2.667,0.008,1,3.111,0.009,3.556,0.795,4,0.796,1,4.133,0.792,4.267,-0.263,4.4,-0.267,1,4.489,-0.266,4.578,-0.005,4.667,-0.004,1,5.111,-0.005,5.556,-0.795,6,-0.796,1,6.133,-0.792,6.267,0.263,6.4,0.267,1,6.489,0.266,6.578,0.005,6.667,0.004,1,7.111,0.005,7.556,0.795,8,0.796,1,8.133,0.792,8.267,-0.263,8.4,-0.267,1,8.489,-0.266,8.578,-0.005,8.667,-0.004,1,9.111,-0.005,9.556,-0.795,10,-0.796,1,10.133,-0.792,10.267,0.263,10.4,0.267,1,10.489,0.266,10.578,0.005,10.667,0.004,1,11.111,0.005,11.556,0.795,12,0.796,1,12.133,0.792,12.267,-0.263,12.4,-0.267,1,12.489,-0.266,12.578,-0.005,12.667,-0.004,1,13.111,-0.005,13.556,-0.795,14,-0.796,1,14.133,-0.792,14.267,0.263,14.4,0.267,1,14.489,0.266,14.578,0.005,14.667,0.004,1,15.111,0.005,15.556,0.795,16,0.796,1,16.133,0.792,16.267,-0.263,16.4,-0.267,1,16.489,-0.266,16.578,-0.005,16.667,-0.004,1,17.111,-0.005,17.556,-0.795,18,-0.796,1,18.133,-0.792,18.267,0.263,18.4,0.267,1,18.489,0.266,18.578,0.005,18.667,0.004,1,18.878,0.002,19.089,1.105,19.3,1.103,1,19.533,1.107,19.767,-0.58,20,-0.73]},{"Target":"Parameter","Id":"ParamHairBack1","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBack2","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBack3","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"ParamHairBack4","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"ParamHairBack5","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"ParamHairBack6","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"Param43","Segments":[0,0,0,0.167,0,1,0.444,0.003,0.722,-1.379,1,-1.376,1,1.656,-1.374,2.311,1.348,2.967,1.351,1,3.633,1.348,4.3,-1.349,4.967,-1.351,1,5.633,-1.349,6.3,1.349,6.967,1.351,1,7.633,1.349,8.3,-1.349,8.967,-1.351,1,9.633,-1.349,10.3,1.349,10.967,1.351,1,11.633,1.349,12.3,-1.349,12.967,-1.351,1,13.633,-1.349,14.3,1.349,14.967,1.351,1,15.633,1.349,16.3,-1.349,16.967,-1.351,1,17.633,-1.349,18.3,1.349,18.967,1.351,1,19.3,1.354,19.633,-0.092,19.967,-0.089,1,19.978,-0.089,19.989,-0.087,20,-0.085]},{"Target":"Parameter","Id":"Param44","Segments":[0,0,0,0.167,0,1,0.256,0.001,0.344,0.233,0.433,0.234,1,0.544,0.232,0.656,-0.176,0.767,-0.178,1,0.867,-0.177,0.967,0.013,1.067,0.013,1,1.167,0.013,1.267,-0.056,1.367,-0.057,0,1.567,-0.042,0,1.933,-0.081,1,2.122,-0.081,2.311,0.058,2.5,0.057,1,2.6,0.057,2.7,-0.024,2.8,-0.025,1,2.922,-0.024,3.044,0.066,3.167,0.066,0,3.467,0.031,0,3.9,0.077,1,4.089,0.077,4.278,-0.059,4.467,-0.059,1,4.578,-0.059,4.689,0.026,4.8,0.026,1,4.922,0.026,5.044,-0.066,5.167,-0.067,0,5.467,-0.03,0,5.9,-0.077,1,6.089,-0.077,6.278,0.059,6.467,0.059,1,6.578,0.059,6.689,-0.026,6.8,-0.026,1,6.922,-0.026,7.044,0.066,7.167,0.067,0,7.467,0.031,0,7.9,0.077,1,8.089,0.077,8.278,-0.059,8.467,-0.059,1,8.578,-0.059,8.689,0.026,8.8,0.026,1,8.922,0.026,9.044,-0.066,9.167,-0.067,0,9.467,-0.031,0,9.9,-0.077,1,10.089,-0.077,10.278,0.059,10.467,0.059,1,10.578,0.059,10.689,-0.026,10.8,-0.026,1,10.922,-0.026,11.044,0.066,11.167,0.067,0,11.467,0.031,0,11.9,0.077,1,12.089,0.077,12.278,-0.059,12.467,-0.059,1,12.578,-0.059,12.689,0.026,12.8,0.026,1,12.922,0.026,13.044,-0.066,13.167,-0.067,0,13.467,-0.031,0,13.9,-0.077,1,14.089,-0.077,14.278,0.059,14.467,0.059,1,14.578,0.059,14.689,-0.026,14.8,-0.026,1,14.922,-0.026,15.044,0.066,15.167,0.067,0,15.467,0.031,0,15.9,0.077,1,16.089,0.077,16.278,-0.059,16.467,-0.059,1,16.578,-0.059,16.689,0.026,16.8,0.026,1,16.922,0.026,17.044,-0.066,17.167,-0.067,0,17.467,-0.031,0,17.9,-0.077,1,18.089,-0.077,18.278,0.059,18.467,0.059,1,18.578,0.059,18.689,-0.026,18.8,-0.026,1,18.967,-0.025,19.133,0.13,19.3,0.131,1,19.456,0.13,19.611,-0.06,19.767,-0.06,0,19.967,-0.049,0,20,-0.053]},{"Target":"Parameter","Id":"Param45","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param46","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param47","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param48","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param49","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param50","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param55","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param56","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param51","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param53","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param57","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param58","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param59","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param60","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param52","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param61","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param54","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.286,0.533,0.288,1,0.656,0.285,0.778,-0.345,0.9,-0.347,1,1.011,-0.345,1.122,0.159,1.233,0.161,1,1.344,0.16,1.456,-0.149,1.567,-0.15,1,1.667,-0.15,1.767,-0.024,1.867,-0.024,1,1.933,-0.023,2,-0.083,2.067,-0.083,1,2.233,-0.082,2.4,0.086,2.567,0.086,1,2.689,0.086,2.811,-0.062,2.933,-0.063,1,3.056,-0.062,3.178,0.116,3.3,0.117,1,3.411,0.116,3.522,-0.002,3.633,-0.003,1,3.756,-0.002,3.878,0.12,4,0.121,1,4.178,0.121,4.356,-0.077,4.533,-0.077,0,4.933,0.059,1,5.056,0.058,5.178,-0.114,5.3,-0.115,1,5.411,-0.114,5.522,0.002,5.633,0.002,1,5.756,0.002,5.878,-0.12,6,-0.12,1,6.189,-0.121,6.378,0.076,6.567,0.076,1,6.689,0.076,6.811,-0.058,6.933,-0.059,1,7.056,-0.058,7.178,0.114,7.3,0.115,1,7.411,0.114,7.522,-0.002,7.633,-0.002,1,7.756,-0.002,7.878,0.12,8,0.12,1,8.189,0.121,8.378,-0.076,8.567,-0.076,1,8.689,-0.076,8.811,0.058,8.933,0.059,1,9.056,0.058,9.178,-0.114,9.3,-0.115,1,9.411,-0.114,9.522,0.002,9.633,0.002,1,9.756,0.002,9.878,-0.12,10,-0.12,1,10.189,-0.121,10.378,0.076,10.567,0.076,1,10.689,0.076,10.811,-0.058,10.933,-0.059,1,11.056,-0.058,11.178,0.114,11.3,0.115,1,11.411,0.114,11.522,-0.002,11.633,-0.002,1,11.756,-0.002,11.878,0.12,12,0.12,1,12.189,0.121,12.378,-0.076,12.567,-0.076,1,12.689,-0.076,12.811,0.058,12.933,0.059,1,13.056,0.058,13.178,-0.114,13.3,-0.115,1,13.411,-0.114,13.522,0.002,13.633,0.002,1,13.756,0.002,13.878,-0.12,14,-0.12,1,14.189,-0.121,14.378,0.076,14.567,0.076,1,14.689,0.076,14.811,-0.058,14.933,-0.059,1,15.056,-0.058,15.178,0.114,15.3,0.115,1,15.411,0.114,15.522,-0.002,15.633,-0.002,1,15.756,-0.002,15.878,0.12,16,0.12,1,16.189,0.121,16.378,-0.076,16.567,-0.076,1,16.689,-0.076,16.811,0.058,16.933,0.059,1,17.056,0.058,17.178,-0.114,17.3,-0.115,1,17.411,-0.114,17.522,0.002,17.633,0.002,1,17.756,0.002,17.878,-0.12,18,-0.12,1,18.189,-0.121,18.378,0.076,18.567,0.076,1,18.689,0.076,18.811,-0.058,18.933,-0.059,1,19.078,-0.058,19.222,0.179,19.367,0.18,1,19.522,0.179,19.678,-0.127,19.833,-0.128,1,19.889,-0.128,19.944,-0.109,20,-0.086]},{"Target":"Parameter","Id":"Param19","Segments":[0,0,0,10,0,1,10.056,-0.008,10.111,1.032,10.167,1.024,1,10.244,1.028,10.322,0.437,10.4,0.442,0,10.433,0.446,1,10.622,0.448,10.811,-0.703,11,-0.701,1,11.067,-0.708,11.133,0.252,11.2,0.244,1,11.267,0.247,11.333,-0.083,11.4,-0.08,1,11.456,-0.081,11.511,0.029,11.567,0.028,0,11.767,-0.009,0,11.933,0.003,0,12.133,-0.001,0,12.3,0,0,12.467,0,0,12.6,0,0,19,0,1,19.056,0.008,19.111,-1.032,19.167,-1.024,1,19.244,-1.028,19.322,-0.437,19.4,-0.442,0,19.433,-0.446,1,19.622,-0.448,19.811,0.703,20,0.701]},{"Target":"Parameter","Id":"Param20","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param21","Segments":[0,0,0,0.167,0,1,0.444,0.011,0.722,-5.516,1,-5.505,1,1.656,-5.494,2.311,5.394,2.967,5.404,1,3.633,5.394,4.3,-5.394,4.967,-5.405,1,5.633,-5.394,6.3,5.394,6.967,5.405,1,7.633,5.394,8.3,-5.394,8.967,-5.405,1,9.633,-5.394,10.3,5.394,10.967,5.405,1,11.633,5.394,12.3,-5.394,12.967,-5.405,1,13.633,-5.394,14.3,5.394,14.967,5.405,1,15.633,5.394,16.3,-5.394,16.967,-5.405,1,17.633,-5.394,18.3,5.394,18.967,5.405,1,19.3,5.416,19.633,-0.367,19.967,-0.356,1,19.978,-0.356,19.989,-0.35,20,-0.339]},{"Target":"Parameter","Id":"Param32","Segments":[0,-10.472,0,0.067,-10.472,3,0.1,-10.472,0,0.167,-10.472,0,0.233,-10.472,0,0.533,-10.472,2,0.567,-10.472,3,0.633,-10.472,2,0.7,-10.472,3,0.733,-10.472,0,0.9,-10.472,0,0.933,-10.472,3,1,-10.472,0,1.067,-10.472,3,1.167,-10.472,0,1.2,-10.472,0,1.3,-10.472,3,1.333,-10.472,0,1.367,-10.472,0,1.433,-10.472,0,1.5,-10.472,2,1.567,-10.472,0,1.6,-10.472,0,1.767,-10.472,0,1.8,-10.472,0,1.867,-10.472,0,1.933,-10.472,0,2.2,-10.472,2,2.233,-10.472,0,2.333,-10.472,0,2.367,-10.472,0,2.567,-10.472,0,2.6,-10.472,0,2.7,-10.472,3,2.733,-10.472,2,2.767,-10.472,0,2.833,-10.472,0,2.967,-10.472,0,3.1,-10.472,3,3.2,-10.472,0,3.233,-10.472,0,3.567,-10.472,2,3.6,-10.472,0,3.633,-10.472,0,3.7,-10.472,0,3.767,-10.472,2,3.8,-10.472,3,3.967,-10.472,3,4,-10.472,0,4.033,-10.472,0,4.067,-10.472,0,4.1,-10.472,0,4.233,-10.472,2,4.267,-10.472,0,4.4,-10.472,0,4.467,-10.472,0,4.633,-10.472,0,4.667,-10.472,0,4.7,-10.472,3,4.733,-10.472,2,4.767,-10.472,0,4.8,-10.472,3,4.9,-10.472,0,4.933,-10.472,0,5.067,-10.472,0,5.1,-10.472,0,5.167,-10.472,3,5.267,-10.472,3,5.3,-10.472,0,5.467,-10.472,2,5.5,-10.472,0,5.567,-10.472,0,5.6,-10.472,0,5.633,-10.472,0,5.667,-10.472,0,5.867,-10.472,0,5.9,-10.472,0,5.967,-10.472,0,6.033,-10.472,0,6.3,-10.472,2,6.333,-10.472,0,6.4,-10.472,0,6.533,-10.472,0,6.567,-10.472,0,6.767,-10.472,2,6.8,-10.472,2,6.833,-10.472,2,6.867,-10.472,0,7.067,-10.472,0,7.1,-10.472,0,7.133,-10.472,3,7.2,-10.472,3,7.3,-10.472,0,7.333,-10.472,0,7.4,-10.472,0,7.733,-10.472,2,7.767,-10.472,0,7.8,-10.472,0,7.833,-10.472,0,7.9,-10.472,3,8.067,-10.472,3,8.2,-10.472,3,8.233,-10.472,0,8.467,-10.472,0,8.5,-10.472,0,8.533,-10.472,0,8.567,-10.472,0,8.667,-10.472,0,8.7,-10.472,0,8.767,-10.472,0,8.8,-10.472,3,8.833,-10.472,0,8.967,-10.472,2,9,-10.472,0,9.067,-10.472,0,9.2,-10.472,3,9.233,-10.472,0,9.267,-10.472,3,9.367,-10.472,3,9.4,-10.472,0,9.533,-10.472,3,9.567,-10.472,2,9.6,-10.472,3,9.667,-10.472,0,9.7,-10.472,0,10.133,-10.472,0,10.167,-10.472,0,10.267,-10.472,3,10.3,-10.472,0,10.433,-10.472,2,10.467,-10.472,3,10.5,-10.472,0,10.633,-10.472,0,10.667,-10.472,0,10.7,-10.472,0,10.867,-10.472,0,10.9,-10.472,0,10.933,-10.472,0,11.1,-10.472,0,11.133,-10.472,0,11.3,-10.472,0,11.333,-10.472,0,11.367,-10.472,0,11.4,-10.472,3,11.433,-10.472,0,11.733,-10.472,2,11.767,-10.472,2,11.9,-10.472,3,11.933,-10.472,2,11.967,-10.472,0,12.133,-10.472,0,12.167,-10.472,0,12.2,-10.472,0,12.3,-10.472,0,12.333,-10.472,0,12.367,-10.472,0,12.567,-10.472,0,12.6,-10.472,0,12.633,-10.472,3,12.667,-10.472,0,12.767,-10.472,0,12.8,-10.472,0,12.833,-10.472,0,12.9,-10.472,3,12.933,-10.472,0,13.033,-10.472,3,13.067,-10.472,2,13.1,-10.472,0,13.2,-10.472,0,13.467,-10.472,2,13.5,-10.472,3,13.533,-10.472,0,13.867,-10.472,2,13.9,-10.472,3,13.933,-10.472,0,14.2,-10.472,0,14.233,-10.472,3,14.267,-10.472,0,14.5,-10.472,2,14.533,-10.472,0,14.7,-10.472,3,14.733,-10.472,0,15.167,-10.472,2,15.2,-10.472,0,15.233,-10.472,0,15.267,-10.472,0,15.967,-10.472,0,16,-10.472,3,16.167,-10.472,0,16.2,-10.472,0,16.233,-10.472,3,16.367,-10.472,3,16.4,-10.472,0,16.533,-10.472,3,16.567,-10.472,0,16.7,-10.472,2,16.733,-10.472,0,16.767,-10.472,0,16.9,-10.472,2,16.933,-10.472,0,17.033,-10.472,0,17.067,-10.472,0,17.133,-10.472,3,17.167,-10.472,0,17.233,-10.472,0,17.267,-10.472,0,17.533,-10.472,2,17.567,-10.472,3,17.7,-10.472,3,17.767,-10.472,3,17.8,-10.472,0,20,-10.472]},{"Target":"Parameter","Id":"Param24","Segments":[0,0,0,0.2,0,1,0.433,0.006,0.667,-3.271,0.9,-3.264,1,1.589,-3.267,2.278,2.692,2.967,2.689,1,3.622,2.683,4.278,-2.706,4.933,-2.711,1,5.556,-2.706,6.178,2.7,6.8,2.705,1,7.511,2.708,8.222,-2.714,8.933,-2.712,1,9.556,-2.706,10.178,2.7,10.8,2.705,1,11.511,2.708,12.222,-2.714,12.933,-2.712,1,13.556,-2.706,14.178,2.7,14.8,2.705,1,15.511,2.708,16.222,-2.714,16.933,-2.712,1,17.556,-2.706,18.178,2.7,18.8,2.705,1,19.178,2.702,19.556,-0.48,19.933,-0.483,1,19.956,-0.483,19.978,-0.47,20,-0.447]},{"Target":"Parameter","Id":"Param25","Segments":[0,0,0,0.167,0,1,0.444,0.004,0.722,-1.839,1,-1.835,1,1.656,-1.831,2.311,1.798,2.967,1.802,1,3.633,1.798,4.3,-1.798,4.967,-1.802,1,5.633,-1.798,6.3,1.798,6.967,1.802,1,7.633,1.798,8.3,-1.798,8.967,-1.802,1,9.633,-1.798,10.3,1.798,10.967,1.802,1,11.633,1.798,12.3,-1.798,12.967,-1.802,1,13.633,-1.798,14.3,1.798,14.967,1.802,1,15.633,1.798,16.3,-1.798,16.967,-1.802,1,17.633,-1.798,18.3,1.798,18.967,1.802,1,19.3,1.805,19.633,-0.122,19.967,-0.119,1,19.978,-0.119,19.989,-0.117,20,-0.113]},{"Target":"Parameter","Id":"Param22","Segments":[0,-2.618,1,0.144,-2.613,0.289,-1.457,0.433,-1.452,1,0.644,-1.448,0.856,-3.66,1.067,-3.655,1,1.211,-3.652,1.356,-2.832,1.5,-2.829,1,1.678,-2.828,1.856,-3.579,2.033,-3.577,1,2.2,-3.572,2.367,-2.193,2.533,-2.188,1,2.667,-2.189,2.8,-2.526,2.933,-2.528,1,3.3,-2.527,3.667,-1.865,4.033,-1.865,1,4.211,-1.863,4.389,-2.959,4.567,-2.957,1,4.689,-2.956,4.811,-2.757,4.933,-2.756,1,5.3,-2.757,5.667,-3.38,6.033,-3.38,1,6.211,-3.383,6.389,-2.274,6.567,-2.276,1,6.689,-2.277,6.811,-2.482,6.933,-2.482,1,7.3,-2.482,7.667,-1.856,8.033,-1.856,1,8.211,-1.854,8.389,-2.962,8.567,-2.96,1,8.689,-2.959,8.811,-2.754,8.933,-2.754,1,9.3,-2.754,9.667,-3.38,10.033,-3.38,1,10.211,-3.382,10.389,-2.274,10.567,-2.276,1,10.689,-2.277,10.811,-2.482,10.933,-2.482,1,11.3,-2.482,11.667,-1.856,12.033,-1.856,1,12.211,-1.854,12.389,-2.962,12.567,-2.96,1,12.689,-2.959,12.811,-2.754,12.933,-2.754,1,13.3,-2.754,13.667,-3.38,14.033,-3.38,1,14.211,-3.382,14.389,-2.274,14.567,-2.276,1,14.689,-2.277,14.811,-2.482,14.933,-2.482,1,15.3,-2.482,15.667,-1.856,16.033,-1.856,1,16.211,-1.854,16.389,-2.962,16.567,-2.96,1,16.689,-2.959,16.811,-2.754,16.933,-2.754,1,17.3,-2.754,17.667,-3.38,18.033,-3.38,1,18.211,-3.382,18.389,-2.274,18.567,-2.276,1,18.689,-2.277,18.811,-2.482,18.933,-2.482,1,19.089,-2.479,19.244,-1.5,19.4,-1.496,1,19.6,-1.493,19.8,-3.191,20,-3.528]},{"Target":"Parameter","Id":"Param23","Segments":[0,-0.001,1,0.089,-0.003,0.178,-0.521,0.267,-0.523,1,0.411,-0.517,0.556,0.999,0.7,1.005,1,0.889,1.009,1.078,-1.035,1.267,-1.032,1,1.422,-1.024,1.578,0.918,1.733,0.925,1,1.911,0.929,2.089,-1.072,2.267,-1.068,1,2.422,-1.06,2.578,0.884,2.733,0.891,1,2.889,0.885,3.044,-0.662,3.2,-0.668,1,3.367,-0.663,3.533,0.396,3.7,0.4,1,3.822,0.398,3.944,-0.153,4.067,-0.155,1,4.167,-0.153,4.267,0.349,4.367,0.35,1,4.5,0.347,4.633,-0.417,4.767,-0.42,1,4.922,-0.417,5.078,0.376,5.233,0.38,1,5.389,0.377,5.544,-0.23,5.7,-0.232,1,5.811,-0.231,5.922,0.078,6.033,0.08,1,6.133,0.078,6.233,-0.376,6.333,-0.378,1,6.478,-0.374,6.622,0.449,6.767,0.452,1,6.922,0.448,7.078,-0.395,7.233,-0.399,1,7.389,-0.396,7.544,0.241,7.7,0.243,1,7.811,0.242,7.922,-0.087,8.033,-0.088,1,8.133,-0.086,8.233,0.376,8.333,0.378,1,8.478,0.375,8.622,-0.448,8.767,-0.451,1,8.922,-0.448,9.078,0.395,9.233,0.398,1,9.389,0.395,9.544,-0.241,9.7,-0.243,1,9.811,-0.242,9.922,0.086,10.033,0.088,1,10.133,0.086,10.233,-0.376,10.333,-0.378,1,10.478,-0.374,10.622,0.448,10.767,0.451,1,10.922,0.448,11.078,-0.395,11.233,-0.398,1,11.389,-0.395,11.544,0.241,11.7,0.243,1,11.811,0.242,11.922,-0.086,12.033,-0.088,1,12.133,-0.086,12.233,0.376,12.333,0.378,1,12.478,0.374,12.622,-0.448,12.767,-0.451,1,12.922,-0.448,13.078,0.395,13.233,0.398,1,13.389,0.395,13.544,-0.241,13.7,-0.243,1,13.811,-0.242,13.922,0.086,14.033,0.088,1,14.133,0.086,14.233,-0.376,14.333,-0.378,1,14.478,-0.374,14.622,0.448,14.767,0.451,1,14.922,0.448,15.078,-0.395,15.233,-0.398,1,15.389,-0.395,15.544,0.241,15.7,0.243,1,15.811,0.242,15.922,-0.086,16.033,-0.088,1,16.133,-0.086,16.233,0.376,16.333,0.378,1,16.478,0.374,16.622,-0.448,16.767,-0.451,1,16.922,-0.448,17.078,0.395,17.233,0.398,1,17.389,0.395,17.544,-0.241,17.7,-0.243,1,17.811,-0.242,17.922,0.086,18.033,0.088,1,18.133,0.086,18.233,-0.376,18.333,-0.378,1,18.478,-0.374,18.622,0.448,18.767,0.451,1,18.922,0.447,19.078,-0.689,19.233,-0.694,1,19.389,-0.687,19.544,0.942,19.7,0.949,1,19.8,0.951,19.9,0.356,20,-0.203]},{"Target":"Parameter","Id":"Param67","Segments":[0,0,0,0.2,0,1,0.311,-0.007,0.778,-4.899,0.9,-4.897,1,1.589,-4.901,2.278,4.037,2.967,4.033,1,3.622,4.025,4.278,-4.059,4.933,-4.066,1,5.556,-4.059,6.178,4.05,6.8,4.058,1,7.511,4.062,8.222,-4.071,8.933,-4.067,1,9.556,-4.059,10.178,4.05,10.8,4.058,1,11.511,4.062,12.222,-4.071,12.933,-4.067,1,13.556,-4.059,14.178,4.05,14.8,4.058,1,15.511,4.062,16.222,-4.071,16.933,-4.067,1,17.556,-4.059,18.178,4.05,18.8,4.058,1,19.178,4.053,19.556,-0.719,19.933,-0.724,1,19.956,-0.723,19.978,-0.704,20,-0.671]},{"Target":"Parameter","Id":"Param70","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param71","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"Param77","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.191,0.533,0.192,1,0.656,0.19,0.778,-0.23,0.9,-0.231,1,1.011,-0.23,1.122,0.106,1.233,0.107,1,1.344,0.106,1.456,-0.099,1.567,-0.1,1,1.667,-0.1,1.767,-0.016,1.867,-0.016,0,2.067,-0.055,1,2.233,-0.055,2.4,0.057,2.567,0.058,1,2.689,0.057,2.811,-0.042,2.933,-0.042,1,3.056,-0.042,3.178,0.077,3.3,0.078,1,3.411,0.077,3.522,-0.001,3.633,-0.002,1,3.756,-0.001,3.878,0.08,4,0.081,1,4.178,0.081,4.356,-0.051,4.533,-0.051,0,4.933,0.039,1,5.056,0.039,5.178,-0.076,5.3,-0.076,1,5.4,-0.076,5.5,0.001,5.6,0.001,0,6,-0.08,1,6.189,-0.08,6.378,0.051,6.567,0.051,1,6.689,0.05,6.811,-0.039,6.933,-0.039,1,7.056,-0.039,7.178,0.076,7.3,0.076,1,7.411,0.076,7.522,-0.001,7.633,-0.001,1,7.756,-0.001,7.878,0.08,8,0.08,1,8.189,0.08,8.378,-0.051,8.567,-0.051,1,8.689,-0.05,8.811,0.039,8.933,0.039,1,9.056,0.039,9.178,-0.076,9.3,-0.076,1,9.411,-0.076,9.522,0.001,9.633,0.001,1,9.756,0.001,9.878,-0.08,10,-0.08,1,10.189,-0.08,10.378,0.051,10.567,0.051,1,10.689,0.05,10.811,-0.039,10.933,-0.039,1,11.056,-0.039,11.178,0.076,11.3,0.076,1,11.411,0.076,11.522,-0.001,11.633,-0.001,1,11.756,-0.001,11.878,0.08,12,0.08,1,12.189,0.08,12.378,-0.051,12.567,-0.051,1,12.689,-0.05,12.811,0.039,12.933,0.039,1,13.056,0.039,13.178,-0.076,13.3,-0.076,1,13.411,-0.076,13.522,0.001,13.633,0.001,1,13.756,0.001,13.878,-0.08,14,-0.08,1,14.189,-0.08,14.378,0.051,14.567,0.051,1,14.689,0.05,14.811,-0.039,14.933,-0.039,1,15.056,-0.039,15.178,0.076,15.3,0.076,1,15.411,0.076,15.522,-0.001,15.633,-0.001,1,15.756,-0.001,15.878,0.08,16,0.08,1,16.189,0.08,16.378,-0.051,16.567,-0.051,1,16.689,-0.05,16.811,0.039,16.933,0.039,1,17.056,0.039,17.178,-0.076,17.3,-0.076,1,17.411,-0.076,17.522,0.001,17.633,0.001,1,17.756,0.001,17.878,-0.08,18,-0.08,1,18.189,-0.08,18.378,0.051,18.567,0.051,1,18.689,0.05,18.811,-0.039,18.933,-0.039,1,19.078,-0.039,19.222,0.12,19.367,0.12,1,19.522,0.119,19.678,-0.085,19.833,-0.086,1,19.889,-0.086,19.944,-0.073,20,-0.058]},{"Target":"Parameter","Id":"Param78","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.191,0.533,0.192,1,0.656,0.19,0.778,-0.23,0.9,-0.231,1,1.011,-0.23,1.122,0.106,1.233,0.107,1,1.344,0.106,1.456,-0.099,1.567,-0.1,1,1.667,-0.1,1.767,-0.016,1.867,-0.016,0,2.067,-0.055,1,2.233,-0.055,2.4,0.057,2.567,0.058,1,2.689,0.057,2.811,-0.042,2.933,-0.042,1,3.056,-0.042,3.178,0.077,3.3,0.078,1,3.411,0.077,3.522,-0.001,3.633,-0.002,1,3.756,-0.001,3.878,0.08,4,0.081,1,4.178,0.081,4.356,-0.051,4.533,-0.051,0,4.933,0.039,1,5.056,0.039,5.178,-0.076,5.3,-0.076,1,5.4,-0.076,5.5,0.001,5.6,0.001,0,6,-0.08,1,6.189,-0.08,6.378,0.051,6.567,0.051,1,6.689,0.05,6.811,-0.039,6.933,-0.039,1,7.056,-0.039,7.178,0.076,7.3,0.076,1,7.411,0.076,7.522,-0.001,7.633,-0.001,1,7.756,-0.001,7.878,0.08,8,0.08,1,8.189,0.08,8.378,-0.051,8.567,-0.051,1,8.689,-0.05,8.811,0.039,8.933,0.039,1,9.056,0.039,9.178,-0.076,9.3,-0.076,1,9.411,-0.076,9.522,0.001,9.633,0.001,1,9.756,0.001,9.878,-0.08,10,-0.08,1,10.189,-0.08,10.378,0.051,10.567,0.051,1,10.689,0.05,10.811,-0.039,10.933,-0.039,1,11.056,-0.039,11.178,0.076,11.3,0.076,1,11.411,0.076,11.522,-0.001,11.633,-0.001,1,11.756,-0.001,11.878,0.08,12,0.08,1,12.189,0.08,12.378,-0.051,12.567,-0.051,1,12.689,-0.05,12.811,0.039,12.933,0.039,1,13.056,0.039,13.178,-0.076,13.3,-0.076,1,13.411,-0.076,13.522,0.001,13.633,0.001,1,13.756,0.001,13.878,-0.08,14,-0.08,1,14.189,-0.08,14.378,0.051,14.567,0.051,1,14.689,0.05,14.811,-0.039,14.933,-0.039,1,15.056,-0.039,15.178,0.076,15.3,0.076,1,15.411,0.076,15.522,-0.001,15.633,-0.001,1,15.756,-0.001,15.878,0.08,16,0.08,1,16.189,0.08,16.378,-0.051,16.567,-0.051,1,16.689,-0.05,16.811,0.039,16.933,0.039,1,17.056,0.039,17.178,-0.076,17.3,-0.076,1,17.411,-0.076,17.522,0.001,17.633,0.001,1,17.756,0.001,17.878,-0.08,18,-0.08,1,18.189,-0.08,18.378,0.051,18.567,0.051,1,18.689,0.05,18.811,-0.039,18.933,-0.039,1,19.078,-0.039,19.222,0.12,19.367,0.12,1,19.522,0.119,19.678,-0.085,19.833,-0.086,1,19.889,-0.086,19.944,-0.073,20,-0.058]},{"Target":"Parameter","Id":"Param79","Segments":[0,0,0,0.167,0,1,0.289,0.001,0.411,0.191,0.533,0.192,1,0.656,0.19,0.778,-0.23,0.9,-0.231,1,1.011,-0.23,1.122,0.106,1.233,0.107,1,1.344,0.106,1.456,-0.099,1.567,-0.1,1,1.667,-0.1,1.767,-0.016,1.867,-0.016,0,2.067,-0.055,1,2.233,-0.055,2.4,0.057,2.567,0.058,1,2.689,0.057,2.811,-0.042,2.933,-0.042,1,3.056,-0.042,3.178,0.077,3.3,0.078,1,3.411,0.077,3.522,-0.001,3.633,-0.002,1,3.756,-0.001,3.878,0.08,4,0.081,1,4.178,0.081,4.356,-0.051,4.533,-0.051,0,4.933,0.039,1,5.056,0.039,5.178,-0.076,5.3,-0.076,1,5.4,-0.076,5.5,0.001,5.6,0.001,0,6,-0.08,1,6.189,-0.08,6.378,0.051,6.567,0.051,1,6.689,0.05,6.811,-0.039,6.933,-0.039,1,7.056,-0.039,7.178,0.076,7.3,0.076,1,7.411,0.076,7.522,-0.001,7.633,-0.001,1,7.756,-0.001,7.878,0.08,8,0.08,1,8.189,0.08,8.378,-0.051,8.567,-0.051,1,8.689,-0.05,8.811,0.039,8.933,0.039,1,9.056,0.039,9.178,-0.076,9.3,-0.076,1,9.411,-0.076,9.522,0.001,9.633,0.001,1,9.756,0.001,9.878,-0.08,10,-0.08,1,10.189,-0.08,10.378,0.051,10.567,0.051,1,10.689,0.05,10.811,-0.039,10.933,-0.039,1,11.056,-0.039,11.178,0.076,11.3,0.076,1,11.411,0.076,11.522,-0.001,11.633,-0.001,1,11.756,-0.001,11.878,0.08,12,0.08,1,12.189,0.08,12.378,-0.051,12.567,-0.051,1,12.689,-0.05,12.811,0.039,12.933,0.039,1,13.056,0.039,13.178,-0.076,13.3,-0.076,1,13.411,-0.076,13.522,0.001,13.633,0.001,1,13.756,0.001,13.878,-0.08,14,-0.08,1,14.189,-0.08,14.378,0.051,14.567,0.051,1,14.689,0.05,14.811,-0.039,14.933,-0.039,1,15.056,-0.039,15.178,0.076,15.3,0.076,1,15.411,0.076,15.522,-0.001,15.633,-0.001,1,15.756,-0.001,15.878,0.08,16,0.08,1,16.189,0.08,16.378,-0.051,16.567,-0.051,1,16.689,-0.05,16.811,0.039,16.933,0.039,1,17.056,0.039,17.178,-0.076,17.3,-0.076,1,17.411,-0.076,17.522,0.001,17.633,0.001,1,17.756,0.001,17.878,-0.08,18,-0.08,1,18.189,-0.08,18.378,0.051,18.567,0.051,1,18.689,0.05,18.811,-0.039,18.933,-0.039,1,19.078,-0.039,19.222,0.12,19.367,0.12,1,19.522,0.119,19.678,-0.085,19.833,-0.086,1,19.889,-0.086,19.944,-0.073,20,-0.058]},{"Target":"Parameter","Id":"Param72","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param73","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"Param75","Segments":[0,0,0,0.167,0,1,0.289,0.002,0.411,0.573,0.533,0.575,1,0.656,0.57,0.778,-0.689,0.9,-0.694,1,1.011,-0.69,1.122,0.318,1.233,0.322,1,1.344,0.319,1.456,-0.297,1.567,-0.3,1,1.667,-0.299,1.767,-0.048,1.867,-0.047,1,1.933,-0.046,2,-0.167,2.067,-0.166,1,2.233,-0.164,2.4,0.172,2.567,0.173,1,2.689,0.172,2.811,-0.125,2.933,-0.126,1,3.056,-0.125,3.178,0.232,3.3,0.233,1,3.411,0.232,3.522,-0.005,3.633,-0.005,1,3.756,-0.005,3.878,0.241,4,0.242,1,4.189,0.243,4.378,-0.154,4.567,-0.153,1,4.689,-0.152,4.811,0.117,4.933,0.118,1,5.056,0.117,5.178,-0.228,5.3,-0.23,1,5.411,-0.229,5.522,0.003,5.633,0.004,1,5.756,0.003,5.878,-0.24,6,-0.241,1,6.189,-0.241,6.378,0.153,6.567,0.152,1,6.689,0.151,6.811,-0.117,6.933,-0.118,1,7.056,-0.116,7.178,0.228,7.3,0.229,1,7.411,0.228,7.522,-0.003,7.633,-0.004,1,7.756,-0.003,7.878,0.24,8,0.241,1,8.189,0.241,8.378,-0.153,8.567,-0.152,1,8.689,-0.151,8.811,0.117,8.933,0.118,1,9.056,0.116,9.178,-0.228,9.3,-0.229,1,9.411,-0.228,9.522,0.003,9.633,0.004,1,9.756,0.003,9.878,-0.24,10,-0.241,1,10.189,-0.241,10.378,0.153,10.567,0.152,1,10.689,0.151,10.811,-0.117,10.933,-0.118,1,11.056,-0.116,11.178,0.228,11.3,0.229,1,11.411,0.228,11.522,-0.003,11.633,-0.004,1,11.756,-0.003,11.878,0.24,12,0.241,1,12.189,0.241,12.378,-0.153,12.567,-0.152,1,12.689,-0.151,12.811,0.117,12.933,0.118,1,13.056,0.116,13.178,-0.228,13.3,-0.229,1,13.411,-0.228,13.522,0.003,13.633,0.004,1,13.756,0.003,13.878,-0.24,14,-0.241,1,14.189,-0.241,14.378,0.153,14.567,0.152,1,14.689,0.151,14.811,-0.117,14.933,-0.118,1,15.056,-0.116,15.178,0.228,15.3,0.229,1,15.411,0.228,15.522,-0.003,15.633,-0.004,1,15.756,-0.003,15.878,0.24,16,0.241,1,16.189,0.241,16.378,-0.153,16.567,-0.152,1,16.689,-0.151,16.811,0.117,16.933,0.118,1,17.056,0.116,17.178,-0.228,17.3,-0.229,1,17.411,-0.228,17.522,0.003,17.633,0.004,1,17.756,0.003,17.878,-0.24,18,-0.241,1,18.189,-0.241,18.378,0.153,18.567,0.152,1,18.689,0.151,18.811,-0.117,18.933,-0.118,1,19.078,-0.116,19.222,0.359,19.367,0.361,1,19.522,0.358,19.678,-0.254,19.833,-0.257,1,19.889,-0.257,19.944,-0.218,20,-0.173]},{"Target":"Parameter","Id":"Param76","Segments":[0,0,0,0.2,0,1,0.433,0.006,0.667,-3.271,0.9,-3.264,1,1.589,-3.267,2.278,2.692,2.967,2.689,1,3.622,2.683,4.278,-2.706,4.933,-2.711,1,5.556,-2.706,6.178,2.7,6.8,2.705,1,7.511,2.708,8.222,-2.714,8.933,-2.712,1,9.556,-2.706,10.178,2.7,10.8,2.705,1,11.511,2.708,12.222,-2.714,12.933,-2.712,1,13.556,-2.706,14.178,2.7,14.8,2.705,1,15.511,2.708,16.222,-2.714,16.933,-2.712,1,17.556,-2.706,18.178,2.7,18.8,2.705,1,19.178,2.702,19.556,-0.48,19.933,-0.483,1,19.956,-0.483,19.978,-0.47,20,-0.447]},{"Target":"Parameter","Id":"Param74","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param13","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param14","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param15","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param65","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param16","Segments":[0,-2.618,1,0.333,-2.615,0.667,-3.976,1,-3.973,1,1.656,-3.97,2.311,-1.297,2.967,-1.294,1,3.633,-1.296,4.3,-3.94,4.967,-3.942,1,5.633,-3.94,6.3,-1.296,6.967,-1.294,1,7.633,-1.296,8.3,-3.94,8.967,-3.942,1,9.633,-3.94,10.3,-1.296,10.967,-1.294,1,11.633,-1.296,12.3,-3.94,12.967,-3.942,1,13.633,-3.94,14.3,-1.296,14.967,-1.294,1,15.633,-1.296,16.3,-3.94,16.967,-3.942,1,17.633,-3.94,18.3,-1.296,18.967,-1.294,1,19.311,-1.295,19.656,-2.662,20,-2.664]},{"Target":"Parameter","Id":"Param17","Segments":[0,0,1,0.111,0.001,0.222,0.159,0.333,0.16,1,0.456,0.159,0.578,-0.127,0.7,-0.128,0,0.933,-0.077,0,1.1,-0.11,1,1.2,-0.109,1.3,0.027,1.4,0.028,1,1.5,0.028,1.6,-0.064,1.7,-0.065,1,1.922,-0.065,2.144,0.129,2.367,0.129,1,2.467,0.128,2.567,0.007,2.667,0.007,1,2.767,0.007,2.867,0.065,2.967,0.065,0,3.333,0.027,0,3.6,0.034,1,3.856,0.034,4.111,-0.135,4.367,-0.135,1,4.467,-0.134,4.567,-0.006,4.667,-0.005,1,4.767,-0.005,4.867,-0.066,4.967,-0.066,0,5.367,-0.027,0,5.633,-0.034,1,5.878,-0.034,6.122,0.135,6.367,0.135,1,6.467,0.134,6.567,0.006,6.667,0.005,1,6.767,0.005,6.867,0.066,6.967,0.066,0,7.367,0.027,0,7.633,0.034,1,7.878,0.034,8.122,-0.135,8.367,-0.135,1,8.467,-0.134,8.567,-0.006,8.667,-0.005,1,8.767,-0.005,8.867,-0.066,8.967,-0.066,0,9.367,-0.027,0,9.633,-0.034,1,9.878,-0.034,10.122,0.135,10.367,0.135,1,10.467,0.134,10.567,0.006,10.667,0.005,1,10.767,0.005,10.867,0.066,10.967,0.066,0,11.367,0.027,0,11.633,0.034,1,11.878,0.034,12.122,-0.135,12.367,-0.135,1,12.467,-0.134,12.567,-0.006,12.667,-0.005,1,12.767,-0.005,12.867,-0.066,12.967,-0.066,0,13.367,-0.027,0,13.633,-0.034,1,13.878,-0.034,14.122,0.135,14.367,0.135,1,14.467,0.134,14.567,0.006,14.667,0.005,1,14.767,0.005,14.867,0.066,14.967,0.066,0,15.367,0.027,0,15.633,0.034,1,15.878,0.034,16.122,-0.135,16.367,-0.135,1,16.467,-0.134,16.567,-0.006,16.667,-0.005,1,16.767,-0.005,16.867,-0.066,16.967,-0.066,0,17.367,-0.027,0,17.633,-0.034,1,17.878,-0.034,18.122,0.135,18.367,0.135,1,18.467,0.134,18.567,0.006,18.667,0.005,1,18.767,0.005,18.867,0.066,18.967,0.066,0,19.067,0.064,1,19.144,0.064,19.222,0.119,19.3,0.119,1,19.433,0.118,19.567,-0.101,19.7,-0.102,0,19.9,-0.084,0,20,-0.101]},{"Target":"Parameter","Id":"Param18","Segments":[0,0,0,0.067,0,1,0.2,0.001,0.333,0.223,0.467,0.224,1,0.589,0.223,0.711,-0.188,0.833,-0.19,1,0.922,-0.189,1.011,0.008,1.1,0.009,1,1.178,0.01,1.256,-0.075,1.333,-0.074,1,1.411,-0.075,1.489,0.016,1.567,0.015,1,1.678,0.015,1.789,-0.135,1.9,-0.135,1,2.1,-0.136,2.3,0.095,2.5,0.095,1,2.6,0.094,2.7,-0.071,2.8,-0.071,1,2.922,-0.071,3.044,0.101,3.167,0.101,1,3.267,0.101,3.367,0.007,3.467,0.007,1,3.589,0.007,3.711,0.088,3.833,0.088,1,4.056,0.089,4.278,-0.116,4.5,-0.115,1,4.611,-0.115,4.722,0.082,4.833,0.083,1,4.944,0.082,5.056,-0.107,5.167,-0.108,1,5.267,-0.107,5.367,-0.005,5.467,-0.005,0,5.867,-0.09,1,6.078,-0.091,6.289,0.115,6.5,0.115,1,6.611,0.114,6.722,-0.082,6.833,-0.083,1,6.944,-0.082,7.056,0.107,7.167,0.108,1,7.267,0.107,7.367,0.005,7.467,0.005,0,7.867,0.09,1,8.078,0.091,8.289,-0.115,8.5,-0.115,1,8.611,-0.114,8.722,0.082,8.833,0.083,1,8.944,0.082,9.056,-0.107,9.167,-0.108,1,9.267,-0.107,9.367,-0.005,9.467,-0.005,0,9.867,-0.09,1,10.078,-0.091,10.289,0.115,10.5,0.115,1,10.611,0.114,10.722,-0.082,10.833,-0.083,1,10.944,-0.082,11.056,0.107,11.167,0.108,1,11.267,0.107,11.367,0.005,11.467,0.005,0,11.867,0.09,1,12.078,0.091,12.289,-0.115,12.5,-0.115,1,12.611,-0.114,12.722,0.082,12.833,0.083,1,12.944,0.082,13.056,-0.107,13.167,-0.108,1,13.267,-0.107,13.367,-0.005,13.467,-0.005,0,13.867,-0.09,1,14.078,-0.091,14.289,0.115,14.5,0.115,1,14.611,0.114,14.722,-0.082,14.833,-0.083,1,14.944,-0.082,15.056,0.107,15.167,0.108,1,15.267,0.107,15.367,0.005,15.467,0.005,0,15.867,0.09,1,16.078,0.091,16.289,-0.115,16.5,-0.115,1,16.611,-0.114,16.722,0.082,16.833,0.083,1,16.944,0.082,17.056,-0.107,17.167,-0.108,1,17.267,-0.107,17.367,-0.005,17.467,-0.005,0,17.867,-0.09,1,18.078,-0.091,18.289,0.115,18.5,0.115,1,18.611,0.114,18.722,-0.082,18.833,-0.083,1,19.022,-0.083,19.211,0.133,19.4,0.132,1,19.544,0.131,19.689,-0.11,19.833,-0.111,1,19.889,-0.112,19.944,-0.07,20,-0.046]},{"Target":"Parameter","Id":"Param33","Segments":[0,0,1,0.1,0.005,0.2,1.259,0.3,1.264,1,0.556,1.268,0.811,-0.783,1.067,-0.779,1,1.167,-0.777,1.267,-0.29,1.367,-0.288,1,1.511,-0.29,1.656,-0.779,1.8,-0.781,0,1.833,-0.779,0,1.867,-0.785,0,1.9,-0.777,0,1.933,-0.782,1,2.078,-0.778,2.222,0.248,2.367,0.252,1,2.467,0.251,2.567,0.009,2.667,0.008,1,3.111,0.009,3.556,0.795,4,0.796,1,4.133,0.792,4.267,-0.263,4.4,-0.267,1,4.489,-0.266,4.578,-0.005,4.667,-0.004,1,5.111,-0.005,5.556,-0.795,6,-0.796,1,6.133,-0.792,6.267,0.263,6.4,0.267,1,6.489,0.266,6.578,0.005,6.667,0.004,1,7.111,0.005,7.556,0.795,8,0.796,1,8.133,0.792,8.267,-0.263,8.4,-0.267,1,8.489,-0.266,8.578,-0.005,8.667,-0.004,1,9.111,-0.005,9.556,-0.795,10,-0.796,1,10.133,-0.792,10.267,0.263,10.4,0.267,1,10.489,0.266,10.578,0.005,10.667,0.004,1,11.111,0.005,11.556,0.795,12,0.796,1,12.133,0.792,12.267,-0.263,12.4,-0.267,1,12.489,-0.266,12.578,-0.005,12.667,-0.004,1,13.111,-0.005,13.556,-0.795,14,-0.796,1,14.133,-0.792,14.267,0.263,14.4,0.267,1,14.489,0.266,14.578,0.005,14.667,0.004,1,15.111,0.005,15.556,0.795,16,0.796,1,16.133,0.792,16.267,-0.263,16.4,-0.267,1,16.489,-0.266,16.578,-0.005,16.667,-0.004,1,17.111,-0.005,17.556,-0.795,18,-0.796,1,18.133,-0.792,18.267,0.263,18.4,0.267,1,18.489,0.266,18.578,0.005,18.667,0.004,1,18.878,0.002,19.089,1.105,19.3,1.103,1,19.533,1.107,19.767,-0.58,20,-0.73]},{"Target":"Parameter","Id":"Param26","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param27","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param28","Segments":[0,0,0,0.167,0,1,0.444,0.005,0.722,-2.758,1,-2.752,1,1.656,-2.747,2.311,2.697,2.967,2.702,1,3.633,2.697,4.3,-2.697,4.967,-2.702,1,5.633,-2.697,6.3,2.697,6.967,2.702,1,7.633,2.697,8.3,-2.697,8.967,-2.702,1,9.633,-2.697,10.3,2.697,10.967,2.702,1,11.633,2.697,12.3,-2.697,12.967,-2.702,1,13.633,-2.697,14.3,2.697,14.967,2.702,1,15.633,2.697,16.3,-2.697,16.967,-2.702,1,17.633,-2.697,18.3,2.697,18.967,2.702,1,19.3,2.708,19.633,-0.184,19.967,-0.178,1,19.978,-0.178,19.989,-0.175,20,-0.17]},{"Target":"Parameter","Id":"Param29","Segments":[0,0,0,0.167,0,1,0.256,0.002,0.344,0.466,0.433,0.468,1,0.544,0.465,0.656,-0.352,0.767,-0.355,1,0.867,-0.354,0.967,0.026,1.067,0.027,1,1.167,0.027,1.267,-0.113,1.367,-0.114,0,1.567,-0.085,1,1.689,-0.085,1.811,-0.161,1.933,-0.162,1,2.122,-0.162,2.311,0.115,2.5,0.115,1,2.6,0.114,2.7,-0.049,2.8,-0.05,1,2.922,-0.049,3.044,0.132,3.167,0.133,1,3.267,0.132,3.367,0.062,3.467,0.062,1,3.611,0.062,3.756,0.154,3.9,0.154,1,4.089,0.154,4.278,-0.119,4.467,-0.118,1,4.578,-0.118,4.689,0.051,4.8,0.052,1,4.922,0.051,5.044,-0.132,5.167,-0.133,1,5.267,-0.133,5.367,-0.061,5.467,-0.061,1,5.611,-0.061,5.756,-0.153,5.9,-0.154,1,6.089,-0.154,6.278,0.119,6.467,0.118,1,6.578,0.118,6.689,-0.051,6.8,-0.052,1,6.922,-0.051,7.044,0.132,7.167,0.133,1,7.267,0.133,7.367,0.061,7.467,0.061,1,7.611,0.061,7.756,0.153,7.9,0.154,1,8.089,0.154,8.278,-0.119,8.467,-0.118,1,8.578,-0.118,8.689,0.051,8.8,0.052,1,8.922,0.051,9.044,-0.132,9.167,-0.133,1,9.267,-0.133,9.367,-0.061,9.467,-0.061,1,9.611,-0.061,9.756,-0.153,9.9,-0.154,1,10.089,-0.154,10.278,0.119,10.467,0.118,1,10.578,0.118,10.689,-0.051,10.8,-0.052,1,10.922,-0.051,11.044,0.132,11.167,0.133,1,11.267,0.133,11.367,0.061,11.467,0.061,1,11.611,0.061,11.756,0.153,11.9,0.154,1,12.089,0.154,12.278,-0.119,12.467,-0.118,1,12.578,-0.118,12.689,0.051,12.8,0.052,1,12.922,0.051,13.044,-0.132,13.167,-0.133,1,13.267,-0.133,13.367,-0.061,13.467,-0.061,1,13.611,-0.061,13.756,-0.153,13.9,-0.154,1,14.089,-0.154,14.278,0.119,14.467,0.118,1,14.578,0.118,14.689,-0.051,14.8,-0.052,1,14.922,-0.051,15.044,0.132,15.167,0.133,1,15.267,0.133,15.367,0.061,15.467,0.061,1,15.611,0.061,15.756,0.153,15.9,0.154,1,16.089,0.154,16.278,-0.119,16.467,-0.118,1,16.578,-0.118,16.689,0.051,16.8,0.052,1,16.922,0.051,17.044,-0.132,17.167,-0.133,1,17.267,-0.133,17.367,-0.061,17.467,-0.061,1,17.611,-0.061,17.756,-0.153,17.9,-0.154,1,18.089,-0.154,18.278,0.119,18.467,0.118,1,18.578,0.118,18.689,-0.051,18.8,-0.052,1,18.967,-0.05,19.133,0.261,19.3,0.262,1,19.456,0.261,19.611,-0.119,19.767,-0.121,0,19.967,-0.097,0,20,-0.105]},{"Target":"Parameter","Id":"Param34","Segments":[0,-2.618,1,0.1,-2.616,0.2,-2.001,0.3,-1.998,1,0.556,-1.996,0.811,-3.009,1.067,-3.007,1,1.167,-3.006,1.267,-2.762,1.367,-2.761,1,1.511,-2.762,1.656,-3.007,1.8,-3.008,0,1.833,-3.007,0,1.867,-3.01,0,1.9,-3.006,0,1.933,-3.009,1,2.089,-3.007,2.244,-2.512,2.4,-2.51,1,2.489,-2.51,2.578,-2.603,2.667,-2.603,1,3.044,-2.603,3.422,-2.267,3.8,-2.267,0,3.9,-2.308,0,4.033,-2.28,1,4.156,-2.282,4.278,-2.731,4.4,-2.732,1,4.489,-2.732,4.578,-2.636,4.667,-2.635,1,5.111,-2.636,5.556,-3.016,6,-3.017,1,6.122,-3.015,6.244,-2.481,6.367,-2.479,1,6.467,-2.48,6.567,-2.618,6.667,-2.619,1,7.044,-2.618,7.422,-2.266,7.8,-2.265,0,7.9,-2.309,0,8.033,-2.283,1,8.156,-2.285,8.278,-2.73,8.4,-2.732,1,8.489,-2.731,8.578,-2.636,8.667,-2.636,1,9.111,-2.636,9.556,-3.016,10,-3.017,1,10.122,-3.015,10.244,-2.481,10.367,-2.479,1,10.467,-2.48,10.567,-2.618,10.667,-2.619,1,11.044,-2.618,11.422,-2.266,11.8,-2.265,0,11.9,-2.309,0,12.033,-2.283,1,12.156,-2.285,12.278,-2.73,12.4,-2.732,1,12.489,-2.731,12.578,-2.636,12.667,-2.636,1,13.111,-2.636,13.556,-3.016,14,-3.017,1,14.122,-3.015,14.244,-2.481,14.367,-2.479,1,14.467,-2.48,14.567,-2.618,14.667,-2.619,1,15.044,-2.618,15.422,-2.266,15.8,-2.265,0,15.9,-2.309,0,16.033,-2.283,1,16.156,-2.285,16.278,-2.73,16.4,-2.732,1,16.489,-2.731,16.578,-2.636,16.667,-2.636,1,17.111,-2.636,17.556,-3.016,18,-3.017,1,18.122,-3.015,18.244,-2.481,18.367,-2.479,1,18.467,-2.48,18.567,-2.618,18.667,-2.619,1,18.878,-2.62,19.089,-2.066,19.3,-2.067,1,19.533,-2.065,19.767,-2.922,20,-2.999]},{"Target":"Parameter","Id":"ParamBreath","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param66","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBodyAngleY3","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param62","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param63","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param64","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param42","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param41","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param40","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param39","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param38","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"Param37","Segments":[0,0,0,20,0]},{"Target":"Parameter","Id":"ParamBodyAngleY2","Segments":[0,0,0,20,0]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Idle_1.json b/live2d_models/ningning/Motions_Idle_1.json new file mode 100644 index 0000000..b16c728 --- /dev/null +++ b/live2d_models/ningning/Motions_Idle_1.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":59.967,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":0,"TotalSegmentCount":0,"TotalPointCount":0,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Idle_2.json b/live2d_models/ningning/Motions_Idle_2.json new file mode 100644 index 0000000..816ab4e --- /dev/null +++ b/live2d_models/ningning/Motions_Idle_2.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":9.967,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":4,"TotalSegmentCount":12,"TotalPointCount":40,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,1,0.333,1,0.667,0,1,0,1,3.667,0,6.333,0,9,0,1,9.322,0,9.644,0.934,9.967,0.997]},{"Target":"Parameter","Id":"ParamEyeLSmile","Segments":[0,0,1,0.333,0,0.667,1,1,1,1,3.667,1,6.333,1,9,1,1,9.322,1,9.644,0.066,9.967,0.003]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,1,0.333,1,0.667,0,1,0,1,3.667,0,6.333,0,9,0,1,9.322,0,9.644,0.934,9.967,0.997]},{"Target":"Parameter","Id":"ParamEyeRSmile","Segments":[0,0,1,0.333,0,0.667,1,1,1,1,3.667,1,6.333,1,9,1,1,9.322,1,9.644,0.066,9.967,0.003]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Tap呆毛_0.json b/live2d_models/ningning/Motions_Tap呆毛_0.json new file mode 100644 index 0000000..fb5eea6 --- /dev/null +++ b/live2d_models/ningning/Motions_Tap呆毛_0.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":244.967,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":52,"TotalSegmentCount":5423,"TotalPointCount":7339,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamCheek24","Segments":[0,0,1,0.333,0,0.667,1,1,1,1,82,1,163,1,244,1,1,244.322,1,244.644,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek45","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek46","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek34","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek57","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek29","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek39","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek33","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek38","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek30","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek31","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek48","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek52","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek54","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek36","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek51","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek59","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek56","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek61","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek50","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek62","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek60","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek53","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek55","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek58","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek25","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamCheek49","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek32","Segments":[0,1,0,0.133,1,0,5.967,1,2,6,1,3,6.033,1,0,6.733,1,2,6.767,1,3,6.8,1,0,7.5,1,2,7.533,1,3,7.567,1,0,8.267,1,2,8.3,1,3,8.333,1,0,9.033,1,2,9.067,1,3,9.1,1,0,10.367,1,2,10.4,1,3,10.433,1,0,11.133,1,2,11.167,1,3,11.2,1,0,11.9,1,2,11.933,1,3,11.967,1,0,12.667,1,2,12.7,1,3,12.733,1,0,13.433,1,2,13.467,1,3,13.5,1,0,14,1,2,14.033,1,3,14.067,1,0,14.767,1,2,14.8,1,3,14.833,1,0,15.533,1,2,15.567,1,3,15.6,1,0,16.3,1,2,16.333,1,3,16.367,1,0,17.067,1,2,17.1,1,3,17.133,1,0,18.4,1,2,18.433,1,3,18.467,1,0,19.167,1,2,19.2,1,3,19.233,1,0,19.933,1,2,19.967,1,3,20,1,0,20.7,1,2,20.733,1,3,20.767,1,0,21.467,1,2,21.5,1,3,21.533,1,0,22.033,1,2,22.067,1,3,22.1,1,0,22.8,1,2,22.833,1,3,22.867,1,0,23.567,1,2,23.6,1,3,23.633,1,0,24.333,1,2,24.367,1,3,24.4,1,0,25.1,1,2,25.133,1,3,25.167,1,0,26.433,1,2,26.467,1,3,26.5,1,0,27.2,1,2,27.233,1,3,27.267,1,0,27.4,1,3,27.433,1,0,27.967,1,2,28,1,3,28.033,1,0,28.167,1,3,28.2,1,0,28.733,1,2,28.767,1,3,28.8,1,0,28.933,1,3,28.967,1,0,29.5,1,2,29.533,1,3,29.567,1,0,29.7,1,3,29.733,1,0,30.833,1,2,30.867,1,0,30.9,1,0,31.033,1,3,31.067,1,0,31.6,1,2,31.633,1,3,31.667,1,0,31.8,1,3,31.833,1,0,32.367,1,2,32.4,1,3,32.433,1,0,32.567,1,3,32.6,1,0,33.133,1,2,33.167,1,3,33.2,1,0,33.333,1,3,33.367,1,0,33.9,1,2,33.933,1,3,33.967,1,0,34.1,1,3,34.133,1,0,34.467,1,2,34.5,1,0,34.533,1,0,35.233,1,2,35.267,1,3,35.3,1,0,35.433,1,3,35.467,1,0,36,1,2,36.033,1,3,36.067,1,0,36.2,1,3,36.233,1,0,36.767,1,2,36.8,1,3,36.833,1,0,36.967,1,3,37,1,0,37.533,1,2,37.567,1,3,37.6,1,0,37.733,1,3,37.767,1,0,38.467,1,2,38.5,1,3,38.533,1,0,38.867,1,2,38.9,1,0,38.933,1,0,39.067,1,3,39.1,1,0,39.633,1,2,39.667,1,3,39.7,1,0,39.833,1,3,39.867,1,0,40.4,1,2,40.433,1,3,40.467,1,0,40.6,1,3,40.633,1,0,41.167,1,2,41.2,1,3,41.233,1,0,41.367,1,3,41.4,1,0,41.933,1,2,41.967,1,3,42,1,0,42.133,1,3,42.167,1,0,43.433,1,2,43.467,1,3,43.5,1,0,44.2,1,2,44.233,1,3,44.267,1,0,44.967,1,2,45,1,3,45.033,1,0,45.733,1,2,45.767,1,3,45.8,1,0,46.5,1,2,46.533,1,3,46.567,1,0,46.9,1,2,46.933,1,0,46.967,1,0,47.1,1,3,47.133,1,0,47.667,1,2,47.7,1,3,47.733,1,0,47.867,1,3,47.9,1,0,48.433,1,2,48.467,1,3,48.5,1,0,48.633,1,3,48.667,1,0,49.2,1,2,49.233,1,3,49.267,1,0,49.4,1,3,49.433,1,0,49.967,1,2,50,1,3,50.033,1,0,50.167,1,3,50.2,1,0,51.467,1,2,51.5,1,3,51.533,1,0,52.233,1,2,52.267,1,3,52.3,1,0,53,1,2,53.033,1,3,53.067,1,0,53.767,1,2,53.8,1,3,53.833,1,0,54.767,1,2,54.8,1,3,54.833,1,0,54.967,1,3,55,1,0,55.533,1,2,55.567,1,3,55.6,1,0,55.733,1,3,55.767,1,0,56.3,1,2,56.333,1,3,56.367,1,0,56.5,1,3,56.533,1,0,57.067,1,2,57.1,1,3,57.133,1,0,57.267,1,3,57.3,1,0,57.833,1,2,57.867,1,3,57.9,1,0,58.033,1,3,58.067,1,0,58.4,1,2,58.433,1,3,58.467,1,0,59.167,1,2,59.2,1,3,59.233,1,0,59.933,1,2,59.967,1,3,60,1,0,60.7,1,2,60.733,1,3,60.767,1,0,61.467,1,2,61.5,1,3,61.533,1,0,62.8,1,2,62.833,1,3,62.867,1,0,63,1,3,63.033,1,0,63.567,1,2,63.6,1,3,63.633,1,0,63.767,1,3,63.8,1,0,64.333,1,2,64.367,1,3,64.4,1,0,64.533,1,3,64.567,1,0,65.1,1,2,65.133,1,3,65.167,1,0,65.3,1,3,65.333,1,0,65.867,1,2,65.9,1,3,65.933,1,0,66.067,1,3,66.1,1,0,66.433,1,2,66.467,1,3,66.5,1,0,67.2,1,2,67.233,1,3,67.267,1,0,67.967,1,2,68,1,3,68.033,1,0,68.733,1,2,68.767,1,3,68.8,1,0,69.5,1,2,69.533,1,3,69.567,1,0,70.267,1,2,70.3,1,3,70.333,1,0,70.833,1,2,70.867,1,3,70.9,1,0,71.033,1,3,71.067,1,0,71.6,1,2,71.633,1,3,71.667,1,0,71.8,1,3,71.833,1,0,72.367,1,2,72.4,1,3,72.433,1,0,72.567,1,3,72.6,1,0,73.133,1,2,73.167,1,3,73.2,1,0,73.333,1,3,73.367,1,0,73.9,1,2,73.933,1,3,73.967,1,0,74.1,1,3,74.133,1,0,74.833,1,2,74.867,1,3,74.9,1,0,75.233,1,2,75.267,1,3,75.3,1,0,76,1,2,76.033,1,3,76.067,1,0,76.767,1,2,76.8,1,3,76.833,1,0,77.533,1,2,77.567,1,3,77.6,1,0,78.3,1,2,78.333,1,3,78.367,1,0,78.867,1,2,78.9,1,3,78.933,1,0,79.633,1,2,79.667,1,3,79.7,1,0,79.833,1,3,79.867,1,0,80.4,1,2,80.433,1,3,80.467,1,0,80.6,1,3,80.633,1,0,81.167,1,2,81.2,1,3,81.233,1,0,81.367,1,3,81.4,1,0,81.933,1,2,81.967,1,3,82,1,0,82.133,1,3,82.167,1,0,82.867,1,2,82.9,1,3,82.933,1,0,83.267,1,2,83.3,1,3,83.333,1,0,84.033,1,2,84.067,1,3,84.1,1,0,84.8,1,2,84.833,1,3,84.867,1,0,85.567,1,2,85.6,1,3,85.633,1,0,86.333,1,2,86.367,1,3,86.4,1,0,86.9,1,2,86.933,1,3,86.967,1,0,87.667,1,2,87.7,1,3,87.733,1,0,87.867,1,3,87.9,1,0,88.433,1,2,88.467,1,3,88.5,1,0,88.633,1,3,88.667,1,0,89.2,1,2,89.233,1,3,89.267,1,0,89.4,1,3,89.433,1,0,89.967,1,2,90,1,3,90.033,1,0,90.167,1,3,90.2,1,0,90.9,1,2,90.933,1,3,90.967,1,0,91.3,1,2,91.333,1,3,91.367,1,0,92.067,1,2,92.1,1,3,92.133,1,0,92.833,1,2,92.867,1,3,92.9,1,0,93.6,1,2,93.633,1,3,93.667,1,0,94.367,1,2,94.4,1,3,94.433,1,0,95.7,1,2,95.733,1,3,95.767,1,0,95.9,1,3,95.933,1,0,96.467,1,2,96.5,1,3,96.533,1,0,96.667,1,3,96.7,1,0,96.967,1,2,97,1,3,97.033,1,0,97.4,1,2,97.433,1,3,97.467,1,0,97.733,1,2,97.767,1,3,97.8,1,0,98.167,1,2,98.2,1,3,98.233,1,0,98.5,1,2,98.533,1,3,98.567,1,0,98.933,1,2,98.967,1,3,99,1,0,99.267,1,2,99.3,1,3,99.333,1,0,100.033,1,2,100.067,1,3,100.1,1,0,103.9,1,2,103.933,1,3,103.967,1,0,104.667,1,2,104.7,1,3,104.733,1,0,105.433,1,2,105.467,1,3,105.5,1,0,106.2,1,2,106.233,1,3,106.267,1,0,106.967,1,2,107,1,3,107.033,1,0,111.933,1,2,111.967,1,3,112,1,0,112.7,1,2,112.733,1,3,112.767,1,0,113.467,1,2,113.5,1,3,113.533,1,0,114.233,1,2,114.267,1,3,114.3,1,0,115,1,2,115.033,1,3,115.067,1,0,120.733,1,2,120.767,1,3,120.8,1,0,121.5,1,2,121.533,1,3,121.567,1,0,122.267,1,2,122.3,1,3,122.333,1,0,123.033,1,2,123.067,1,3,123.1,1,0,123.8,1,2,123.833,1,3,123.867,1,0,128.767,1,2,128.8,1,3,128.833,1,0,129.533,1,2,129.567,1,3,129.6,1,0,130.3,1,2,130.333,1,3,130.367,1,0,131.067,1,2,131.1,1,3,131.133,1,0,131.833,1,2,131.867,1,3,131.9,1,0,136.8,1,2,136.833,1,3,136.867,1,0,137.567,1,2,137.6,1,3,137.633,1,0,138.333,1,2,138.367,1,3,138.4,1,0,139.1,1,2,139.133,1,3,139.167,1,0,139.867,1,2,139.9,1,3,139.933,1,0,144.833,1,2,144.867,1,3,144.9,1,0,145.6,1,2,145.633,1,3,145.667,1,0,146.367,1,2,146.4,1,3,146.433,1,0,147.133,1,2,147.167,1,3,147.2,1,0,147.9,1,2,147.933,1,3,147.967,1,0,152.867,1,2,152.9,1,3,152.933,1,0,153.633,1,2,153.667,1,3,153.7,1,0,154.4,1,2,154.433,1,3,154.467,1,0,155.167,1,2,155.2,1,3,155.233,1,0,155.933,1,2,155.967,1,3,156,1,0,158.633,1,2,158.667,1,3,158.7,1,0,159.4,1,2,159.433,1,3,159.467,1,0,160.167,1,2,160.2,1,3,160.233,1,0,208.1,1,2,208.133,1,3,208.167,1,0,208.867,1,2,208.9,1,3,208.933,1,0,209.633,1,2,209.667,1,3,209.7,1,0,210.4,1,2,210.433,1,3,210.467,1,0,210.967,1,2,211,1,3,211.033,1,0,211.733,1,2,211.767,1,3,211.8,1,0,212.5,1,2,212.533,1,3,212.567,1,0,213.267,1,2,213.3,1,3,213.333,1,0,214.033,1,2,214.067,1,3,214.1,1,0,214.8,1,2,214.833,1,3,214.867,1,0,215.367,1,2,215.4,1,3,215.433,1,0,216.133,1,2,216.167,1,3,216.2,1,0,216.9,1,2,216.933,1,3,216.967,1,0,217.667,1,2,217.7,1,3,217.733,1,0,218.433,1,2,218.467,1,3,218.5,1,0,219.767,1,2,219.8,1,3,219.833,1,0,220.533,1,2,220.567,1,3,220.6,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamCheek47","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamAngleX","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamAngleY","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamAngleZ","Segments":[0,0.018,1,0.044,0.01,0.089,-0.103,0.133,-0.714,1,0.492,-3.847,1.714,-14.998,2,-15,1,2.333,-15.005,5.667,15.005,6,15,1,6.333,15.005,9.667,-15.005,10,-15,1,10.333,-15.005,13.667,15.005,14,15,1,14.322,15.005,17.6,-15.005,17.933,-15,1,18.267,-15.005,21.6,15.005,21.933,15,1,22.267,15.005,25.6,-15.005,25.933,-15,1,26.267,-15.005,29.6,15.005,29.933,15,1,30.622,14.995,33.744,-15.001,34.1,-15,1,34.433,-15.005,37.767,15.005,38.1,15,1,38.433,15.005,41.767,-15.005,42.1,-15,1,42.433,-15.005,45.767,15.005,46.1,15,1,46.422,15.005,49.7,-15.005,50.033,-15,1,50.367,-15.005,53.7,15.005,54.033,15,1,54.367,15.005,57.7,-15.005,58.033,-15,1,58.367,-15.005,61.7,15.005,62.033,15,1,62.367,14.999,65.722,-14.998,66.067,-15,1,66.4,-15.005,69.733,15.005,70.067,15,1,70.4,15.005,73.733,-15.005,74.067,-15,1,74.4,-15.005,77.733,15.005,78.067,15,1,78.389,15.005,81.667,-15.005,82,-15,1,82.333,-15.005,85.667,15.005,86,15,1,86.333,15.005,89.667,-15.005,90,-15,1,90.333,-15.005,93.689,15,94.033,15,1,94.111,14.998,95.944,-15,96.033,-15,1,96.367,-15.005,99.7,15.005,100.033,15,1,100.367,15.005,103.7,-15.005,104.033,-15,1,104.367,-15.005,107.7,15.005,108.033,15,1,108.356,15.005,111.633,-15.005,111.967,-15,1,112.3,-15.005,115.633,15.005,115.967,15,1,116.3,15.005,119.633,-15.005,119.967,-15,1,120.3,-15.005,123.633,15.005,123.967,15,1,124.656,14.995,127.778,-15.001,128.133,-15,1,128.467,-15.005,131.8,15.005,132.133,15,1,132.467,15.005,135.8,-15.005,136.133,-15,1,136.467,-15.005,139.8,15.005,140.133,15,1,140.456,15.005,143.733,-15.005,144.067,-15,1,144.4,-15.005,147.733,15.005,148.067,15,1,148.4,15.005,151.733,-15.005,152.067,-15,1,152.4,-15.005,155.733,15.005,156.067,15,1,156.4,14.999,159.756,-14.998,160.1,-15,1,160.433,-15.005,163.767,15.005,164.1,15,1,164.433,15.005,167.767,-15.005,168.1,-15,1,168.433,-15.005,171.767,15.005,172.1,15,1,172.422,15.005,175.7,-15.005,176.033,-15,1,176.367,-15.005,179.7,15.005,180.033,15,1,180.367,15.005,183.7,-15.005,184.033,-15,1,184.367,-15.005,187.7,15.005,188.033,15,1,188.189,15,189.833,-14.997,190,-15,1,190.333,-15.005,193.667,15.005,194,15,1,194.333,15.005,197.667,-15.005,198,-15,1,198.333,-15.005,201.667,15.005,202,15,1,202.322,15.005,205.6,-15.005,205.933,-15,1,206.267,-15.005,209.6,15.005,209.933,15,1,210.267,15.005,213.6,-15.005,213.933,-15,1,214.267,-15.005,217.6,15.005,217.933,15,1,218.622,14.995,221.744,-15.001,222.1,-15,1,222.433,-15.005,225.767,15.005,226.1,15,1,226.433,15.005,229.767,-15.005,230.1,-15,1,230.433,-15.005,233.767,15.005,234.1,15,1,234.422,15.005,237.7,-15.005,238.033,-15,1,238.367,-15.005,241.7,15.005,242.033,15,1,242.259,15.003,243.854,8.875,244.967,0]},{"Target":"Parameter","Id":"ParamAngleZ4","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamAngleZ5","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBodyAngleX","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBodyAngleY","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBodyAngleZ","Segments":[0,0.007,1,0.044,0.004,0.089,-0.033,0.133,-0.237,1,0.492,-1.282,1.714,-4.999,2,-5,1,2.667,-4.997,3.333,-3.337,4,0,1,4.667,3.337,5.333,4.997,6,5,1,6.667,4.997,7.333,3.337,8,0,1,8.667,-3.337,9.333,-4.997,10,-5,1,10.667,-4.997,11.333,-3.337,12,0,1,12.667,3.337,13.333,4.997,14,5,1,14.656,5.001,17.278,-5.001,17.933,-5,1,18.6,-4.997,19.267,-3.337,19.933,0,1,20.6,3.337,21.267,4.997,21.933,5,1,22.6,4.997,23.267,3.337,23.933,0,1,24.6,-3.337,25.267,-4.997,25.933,-5,1,26.6,-4.997,27.267,-3.337,27.933,0,1,28.6,3.337,29.267,4.997,29.933,5,1,30.622,4.998,31.311,3.413,32,0.159,1,32.7,-3.249,33.4,-5,34.1,-5,1,34.767,-4.997,35.433,-3.337,36.1,0,1,36.767,3.337,37.433,4.997,38.1,5,1,38.767,4.997,39.433,3.337,40.1,0,1,40.767,-3.337,41.433,-4.997,42.1,-5,1,42.767,-4.997,43.433,-3.337,44.1,0,1,44.767,3.337,45.433,4.997,46.1,5,1,46.756,5.001,49.378,-5.001,50.033,-5,1,50.7,-4.997,51.367,-3.337,52.033,0,1,52.7,3.337,53.367,4.997,54.033,5,1,54.7,4.997,55.367,3.337,56.033,0,1,56.7,-3.337,57.367,-4.997,58.033,-5,1,58.7,-4.997,59.367,-3.337,60.033,0,1,60.7,3.337,61.367,4.997,62.033,5,1,62.7,5.002,63.367,3.186,64.033,-0.164,1,64.711,-3.467,65.389,-4.999,66.067,-5,1,66.733,-4.997,67.4,-3.337,68.067,0,1,68.733,3.337,69.4,4.997,70.067,5,1,70.733,4.997,71.4,3.337,72.067,0,1,72.733,-3.337,73.4,-4.997,74.067,-5,1,74.733,-4.997,75.4,-3.337,76.067,0,1,76.733,3.337,77.4,4.997,78.067,5,1,78.722,5.001,81.344,-5.001,82,-5,1,82.667,-4.997,83.333,-3.337,84,0,1,84.667,3.337,85.333,4.997,86,5,1,86.667,4.997,87.333,3.337,88,0,1,88.667,-3.337,89.333,-4.997,90,-5,1,90.667,-4.997,91.333,-3.31,92,0,1,92.678,3.365,93.356,4.997,94.033,5,1,94.7,4.99,95.367,-4.99,96.033,-5,1,96.7,-4.997,97.367,-3.337,98.033,0,1,98.7,3.337,99.367,4.997,100.033,5,1,100.7,4.997,101.367,3.337,102.033,0,1,102.7,-3.337,103.367,-4.997,104.033,-5,1,104.7,-4.997,105.367,-3.337,106.033,0,1,106.7,3.337,107.367,4.997,108.033,5,1,108.689,5.001,111.311,-5.001,111.967,-5,1,112.633,-4.997,113.3,-3.337,113.967,0,1,114.633,3.337,115.3,4.997,115.967,5,1,116.633,4.997,117.3,3.337,117.967,0,1,118.633,-3.337,119.3,-4.997,119.967,-5,1,120.633,-4.997,121.3,-3.337,121.967,0,1,122.633,3.337,123.3,4.997,123.967,5,1,124.656,4.998,125.344,3.413,126.033,0.159,1,126.733,-3.249,127.433,-5,128.133,-5,1,128.8,-4.997,129.467,-3.337,130.133,0,1,130.8,3.337,131.467,4.997,132.133,5,1,132.8,4.997,133.467,3.337,134.133,0,1,134.8,-3.337,135.467,-4.997,136.133,-5,1,136.8,-4.997,137.467,-3.337,138.133,0,1,138.8,3.337,139.467,4.997,140.133,5,1,140.789,5.001,143.411,-5.001,144.067,-5,1,144.733,-4.997,145.4,-3.337,146.067,0,1,146.733,3.337,147.4,4.997,148.067,5,1,148.733,4.997,149.4,3.337,150.067,0,1,150.733,-3.337,151.4,-4.997,152.067,-5,1,152.733,-4.997,153.4,-3.337,154.067,0,1,154.733,3.337,155.4,4.997,156.067,5,1,156.733,5.002,157.4,3.186,158.067,-0.164,1,158.744,-3.467,159.422,-4.999,160.1,-5,1,160.767,-4.997,161.433,-3.337,162.1,0,1,162.767,3.337,163.433,4.997,164.1,5,1,164.767,4.997,165.433,3.337,166.1,0,1,166.767,-3.337,167.433,-4.997,168.1,-5,1,168.767,-4.997,169.433,-3.337,170.1,0,1,170.767,3.337,171.433,4.997,172.1,5,1,172.756,5.001,175.378,-5.001,176.033,-5,1,176.7,-4.997,177.367,-3.337,178.033,0,1,178.7,3.337,179.367,4.997,180.033,5,1,180.7,4.997,181.367,3.337,182.033,0,1,182.7,-3.337,183.367,-4.997,184.033,-5,1,184.7,-4.997,185.367,-3.337,186.033,0,1,186.7,3.337,187.367,4.997,188.033,5,1,188.689,4.99,189.344,-4.99,190,-5,1,190.667,-4.997,191.333,-3.337,192,0,1,192.667,3.337,193.333,4.997,194,5,1,194.667,4.997,195.333,3.337,196,0,1,196.667,-3.337,197.333,-4.997,198,-5,1,198.667,-4.997,199.333,-3.337,200,0,1,200.667,3.337,201.333,4.997,202,5,1,202.656,5.001,205.278,-5.001,205.933,-5,1,206.6,-4.997,207.267,-3.337,207.933,0,1,208.6,3.337,209.267,4.997,209.933,5,1,210.6,4.997,211.267,3.337,211.933,0,1,212.6,-3.337,213.267,-4.997,213.933,-5,1,214.6,-4.997,215.267,-3.337,215.933,0,1,216.6,3.337,217.267,4.997,217.933,5,1,218.622,4.998,219.311,3.413,220,0.159,1,220.7,-3.249,221.4,-5,222.1,-5,1,222.767,-4.997,223.433,-3.337,224.1,0,1,224.767,3.337,225.433,4.997,226.1,5,1,226.767,4.997,227.433,3.337,228.1,0,1,228.767,-3.337,229.433,-4.997,230.1,-5,1,230.767,-4.997,231.433,-3.337,232.1,0,1,232.767,3.337,233.433,4.997,234.1,5,1,234.756,5.001,237.378,-5.001,238.033,-5,1,238.7,-4.997,239.367,-3.337,240.033,0,1,240.7,3.337,241.367,4.997,242.033,5,1,242.7,4.997,243.367,3.337,244.033,0,1,244.345,-1.558,244.656,0.829,244.967,0]},{"Target":"Parameter","Id":"ParamBrowLX","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowLY","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowLAngle","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowLForm","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowRX","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowRY","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowRAngle","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamBrowRForm","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamEyeBallX","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamEyeBallY","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamEyeLSmile","Segments":[0,0,0,0.133,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,0,244.967,1]},{"Target":"Parameter","Id":"ParamMouthOpenY","Segments":[0,0,0,16.133,0,1,16.156,0,16.178,0.178,16.2,0.404,1,16.211,0.52,16.222,0.659,16.233,0.784,1,16.244,0.916,16.256,1,16.267,1,0,16.4,1,1,16.411,1,16.422,0.936,16.433,0.796,1,16.444,0.673,16.456,0.536,16.467,0.422,1,16.489,0.2,16.511,0.023,16.533,0.024,1,16.556,0.034,16.578,0.436,16.6,0.871,3,16.633,1,0,17.467,1,1,17.478,1,17.489,0.934,17.5,0.792,1,17.511,0.667,17.522,0.528,17.533,0.412,1,17.556,0.186,17.578,0.007,17.6,0.008,1,17.622,0.019,17.644,0.449,17.667,0.914,3,17.7,1,0,18.3,1,1,18.311,0.964,18.327,1,18.333,0.89,1,18.344,0.786,18.356,0.66,18.367,0.563,1,18.4,0.25,18.433,0,18.467,0,1,18.478,0,18.489,0.395,18.5,0.749,3,18.533,1,0,18.567,1,1,18.6,1,18.633,0,18.667,0,0,18.733,0.024,0,18.8,0,1,18.811,0,18.822,0.49,18.833,0.929,3,18.867,1,0,19.333,1,2,19.367,0.922,1,19.422,0.514,19.478,0.089,19.533,0.094,1,19.578,0.088,19.622,0.846,19.667,0.84,1,19.689,0.83,19.711,0.182,19.733,0.172,1,19.756,0.181,19.778,0.536,19.8,0.921,3,19.833,1,0,20.033,1,1,20.067,0.939,20.1,0.75,20.133,0.768,1,20.144,0.764,20.156,0.853,20.167,0.929,3,20.2,1,0,20.233,1,2,20.267,0.981,1,20.311,0.855,20.356,0.666,20.4,0.666,1,20.422,0.671,20.444,0.975,20.467,0.98,1,20.511,0.987,20.556,0.041,20.6,0.048,1,20.611,0.032,20.622,0.418,20.633,0.749,3,20.667,1,0,20.7,1,1,20.733,1,20.796,0,20.8,0.008,1,20.803,0,20.867,1,20.9,1,0,21.167,1,1,21.2,0.96,21.233,0.062,21.267,0.118,1,21.333,0.107,21.4,1,21.467,1,1,21.511,1,21.556,0.752,21.6,0.506,1,21.644,0.256,21.689,0,21.733,0,1,21.756,0,21.778,0.191,21.8,0.432,1,21.811,0.557,21.822,0.705,21.833,0.839,1,21.841,1,21.856,0.982,21.867,1,0,22.5,1,1,22.6,0.675,22.7,0,22.8,0,0,22.867,0,0,22.933,0.008,0,23,0,0,23.133,0,1,23.222,0.002,23.311,0.406,23.4,0.408,1,23.444,0.41,23.489,0.1,23.533,0.102,1,23.589,0.097,23.644,0.518,23.7,0.922,3,23.733,1,0,24.033,1,1,24.044,1,24.056,0.9,24.067,0.918,1,24.078,0.899,24.089,1,24.1,1,0,24.533,1,1,24.544,0.965,24.559,1,24.567,0.643,1,24.578,0.343,24.594,0,24.6,0.008,1,24.622,0.018,24.644,0.408,24.667,0.831,3,24.7,1,0,25.467,1,1,25.478,1,25.489,0.973,25.5,0.627,1,25.511,0.368,25.522,0.065,25.533,0.078,1,25.556,0.087,25.578,0.467,25.6,0.878,3,25.633,1,0,26.033,1,2,26.067,0.929,1,26.111,0.471,26.156,0,26.2,0,0,26.267,0,1,26.278,0,26.289,0.523,26.3,0.992,3,26.333,1,0,26.933,1,2,26.967,0.882,1,27,0.433,27.033,0.018,27.067,0.008,1,27.111,0.003,27.156,0.695,27.2,0.69,1,27.244,0.695,27.289,0.003,27.333,0.008,1,27.338,0,27.356,0.411,27.367,0.773,3,27.4,1,0,27.433,1,1,27.444,1,27.456,0.728,27.467,0.792,1,27.478,0.732,27.489,1,27.5,1,0,27.633,1,1,27.644,1,27.656,0.994,27.667,0.98,3,27.7,1,0,27.767,1,2,27.8,0.874,1,27.822,0.469,27.844,0.095,27.867,0.086,1,27.889,0.096,27.911,0.519,27.933,0.976,3,27.967,1,0,28.033,1,2,28.067,0.933,1,28.089,0.454,28.111,0.011,28.133,0,1,28.144,0,28.156,0.492,28.167,0.933,3,28.2,1,0,28.267,1,2,28.3,0.933,1,28.333,0.454,28.367,0.011,28.4,0,1,28.411,0,28.422,0.48,28.433,0.91,3,28.467,1,0,28.767,1,2,28.8,0.937,1,28.822,0.456,28.844,0.011,28.867,0,1,28.878,0,28.889,0.478,28.9,0.906,3,28.933,1,0,29.233,1,1,29.244,1,29.256,0.768,29.267,0.8,1,29.278,0.796,29.289,0.875,29.3,0.975,3,29.333,1,0,30.533,1,1,30.578,0.866,30.622,0.64,30.667,0.498,1,30.711,0.349,30.756,0.245,30.8,0.244,1,30.844,0.24,30.889,0.82,30.933,0.816,1,31,0.822,31.067,0,31.133,0,0,31.2,0,1,31.211,0,31.222,0.442,31.233,0.839,3,31.267,1,0,31.6,1,2,31.633,0.898,1,31.644,0.763,31.656,0.605,31.667,0.612,1,31.678,0.608,31.689,0.696,31.7,0.808,1,31.711,0.965,31.722,1,31.733,1,0,32.067,1,2,32.1,0.973,1,32.111,0.561,32.122,0.082,32.133,0.102,1,32.156,0.111,32.178,0.487,32.2,0.894,3,32.233,1,0,33.067,1,1,33.089,1,33.111,0.955,33.133,0.964,3,33.167,1,0,34.433,1,1,34.444,0.986,34.459,1,34.467,0.886,1,34.478,0.793,34.489,0.679,34.5,0.592,1,34.533,0.311,34.567,0.086,34.6,0.086,1,34.644,0.08,34.689,0.908,34.733,0.902,1,34.778,0.908,34.822,0.12,34.867,0.126,1,34.878,0.107,34.889,0.548,34.9,0.926,3,34.933,1,0,35.1,1,0,35.133,0.988,0,35.167,1,0,35.367,1,1,35.4,1,35.433,0,35.467,0,1,35.478,0,35.489,0.459,35.5,0.871,3,35.533,1,0,35.633,1,2,35.667,0.943,1,35.689,0.788,35.711,0.665,35.733,0.666,1,35.744,0.658,35.756,0.84,35.767,0.996,3,35.8,1,0,35.833,1,1,35.867,0.845,35.9,0,35.933,0,1,35.967,0,36,1,36.033,1,0,36.2,1,1,36.267,0.614,36.333,0.087,36.4,0.094,0,36.467,0.094,1,36.478,0.077,36.489,0.477,36.5,0.82,3,36.533,1,0,36.733,1,1,36.744,1,36.756,0.82,36.767,0.733,1,36.778,0.616,36.789,0.487,36.8,0.378,1,36.822,0.167,36.844,0,36.867,0,1,36.9,0,36.933,1,36.967,1,0,37.567,1,1,37.622,0.8,37.678,0.558,37.733,0.564,0,37.8,0.612,1,37.867,0.617,37.933,0,38,0,0,38.267,0,1,38.311,0,38.356,0.56,38.4,0.931,3,38.433,1,0,38.533,1,1,38.567,0.93,38.6,0.598,38.633,0.397,1,38.667,0.176,38.7,0,38.733,0,1,38.756,0.01,38.778,0.401,38.8,0.824,3,38.833,1,0,39.533,1,1,39.567,0.926,39.6,0.547,39.633,0.366,1,39.667,0.147,39.7,0.001,39.733,0,1,39.744,0,39.756,0.457,39.767,0.867,3,39.8,1,0,41.333,1,1,41.344,1,41.356,0.84,41.367,0.751,1,41.378,0.639,41.389,0.552,41.4,0.556,1,41.411,0.551,41.422,0.651,41.433,0.779,1,41.444,0.955,41.456,1,41.467,1,0,41.933,1,2,41.967,0.949,1,42.022,0.508,42.078,0.049,42.133,0.054,1,42.167,0.014,42.2,0.865,42.233,1,0,42.333,1,1,42.367,1,42.4,0.611,42.433,0.417,1,42.467,0.185,42.5,0,42.533,0,1,42.567,0,42.6,1,42.633,1,0,43.1,1,2,43.133,0.929,1,43.156,0.452,43.178,0.011,43.2,0,1,43.211,0,43.222,0.356,43.233,0.675,1,43.24,1,43.256,0.899,43.267,1,2,43.3,0.73,1,43.311,0.437,43.322,0.096,43.333,0.11,1,43.367,0.12,43.4,0.543,43.433,1,0,43.833,1,2,43.867,0.875,1,43.889,0.426,43.911,0.01,43.933,0,1,43.956,0.012,43.978,0.479,44,0.984,3,44.033,1,0,44.367,1,1,44.378,1,44.389,0.85,44.4,0.854,1,44.422,0.855,44.444,0.905,44.467,0.986,3,44.5,1,0,45.667,1,1,45.7,0.943,45.733,0.549,45.767,0.369,1,45.8,0.148,45.833,0.001,45.867,0,1,45.933,0,46,0.411,46.067,0.408,1,46.156,0.406,46.244,0.002,46.333,0,1,46.344,0,46.356,0.413,46.367,0.784,3,46.4,1,0,46.7,1,2,46.733,0.961,1,46.756,0.467,46.778,0.011,46.8,0,1,46.822,0,46.844,0.188,46.867,0.426,1,46.878,0.549,46.889,0.695,46.9,0.827,1,46.909,1,46.922,0.999,46.933,1,0,47.167,1,2,47.2,0.976,1,47.222,0.475,47.244,0.011,47.267,0,1,47.289,0.011,47.311,0.473,47.333,0.973,3,47.367,1,0,47.8,1,2,47.833,0.867,1,47.844,0.465,47.858,0,47.867,0.016,1,47.878,0,47.889,0.38,47.9,0.706,3,47.933,1,0,48.267,1,1,48.278,0.954,48.294,1,48.3,0.859,1,48.311,0.722,48.322,0.57,48.333,0.442,1,48.356,0.195,48.378,0,48.4,0,0,48.467,0,1,48.478,0,48.489,0.503,48.5,0.953,3,48.533,1,0,48.633,1,2,48.667,0.904,1,48.689,0.71,48.711,0.555,48.733,0.556,1,48.756,0.562,48.778,0.944,48.8,0.95,0,48.867,0.91,1,48.878,0.883,48.889,1,48.9,1,0,49.633,1,1,49.667,0.886,49.7,0.087,49.733,0.126,1,49.756,0.133,49.778,0.597,49.8,0.604,1,49.889,0.602,49.978,0.002,50.067,0,1,50.078,0,50.089,0.459,50.1,0.871,3,50.133,1,0,50.2,1,1,50.211,1,50.222,0.91,50.233,0.802,1,50.244,0.702,50.256,0.624,50.267,0.628,1,50.278,0.624,50.289,0.715,50.3,0.831,1,50.309,1,50.322,0.999,50.333,1,0,50.433,1,2,50.467,0.981,1,50.489,0.494,50.511,0.043,50.533,0.032,1,50.544,0.018,50.556,0.353,50.567,0.64,1,50.576,1,50.589,0.987,50.6,1,0,50.633,1,1,50.667,0.746,50.7,0,50.733,0,0,50.8,0,1,50.811,0,50.822,0.463,50.833,0.878,3,50.867,1,0,51,1,1,51.011,1,51.022,0.985,51.033,0.929,1,51.044,0.887,51.056,0.861,51.067,0.862,1,51.078,0.86,51.089,0.908,51.1,0.969,3,51.133,1,0,51.467,1,1,51.489,0.861,51.511,0.573,51.533,0.368,1,51.556,0.167,51.578,0.007,51.6,0.008,1,51.622,0.019,51.644,0.464,51.667,0.945,3,51.7,1,0,52.067,1,2,52.1,0.964,1,52.133,0.651,52.167,0.024,52.2,0.024,1,52.222,0.034,52.244,0.436,52.267,0.871,3,52.3,1,0,52.367,1,2,52.4,0.859,1,52.422,0.418,52.444,0.01,52.467,0,1,52.478,0,52.489,0.413,52.5,0.784,3,52.533,1,0,52.633,1,2,52.667,0.986,1,52.689,0.873,52.711,0.783,52.733,0.784,1,52.744,0.756,52.756,1,52.767,1,0,53.3,1,1,53.311,1,53.322,0.911,53.333,0.831,1,53.344,0.743,53.356,0.636,53.367,0.555,1,53.4,0.29,53.433,0.078,53.467,0.078,1,53.511,0.073,53.556,0.773,53.6,0.768,1,53.689,0.765,53.778,0.003,53.867,0,1,53.878,0,53.889,0.465,53.9,0.882,3,53.933,1,0,54.5,1,1,54.533,1,54.567,0,54.6,0,1,54.633,0,54.667,1,54.7,1,0,54.833,1,1,54.844,1,54.856,0.862,54.867,0.8,1,54.878,0.708,54.889,0.595,54.9,0.509,1,54.933,0.231,54.967,0.008,55,0.008,1,55.003,0,55.067,1,55.1,1,0,56.1,1,1,56.133,0.842,56.167,0.615,56.2,0.62,1,56.211,0.616,56.222,0.695,56.233,0.797,1,56.244,0.903,56.256,1,56.267,1,0,56.467,1,1,56.5,0.993,56.533,0.555,56.567,0.38,1,56.6,0.153,56.633,0.001,56.667,0,1,56.689,0.01,56.711,0.435,56.733,0.894,3,56.767,1,0,57.167,1,2,57.2,0.914,1,57.222,0.598,57.244,0.305,57.267,0.298,1,57.278,0.283,57.289,0.627,57.3,0.922,3,57.333,1,0,57.967,1,2,58,0.851,1,58.022,0.426,58.044,0.034,58.067,0.024,1,58.089,0.034,58.111,0.44,58.133,0.879,3,58.167,1,0,58.9,1,2,58.933,0.925,1,58.978,0.503,59.022,0.065,59.067,0.07,1,59.078,0.051,59.089,0.496,59.1,0.878,3,59.133,1,0,59.167,1,2,59.2,0.843,1,59.222,0.41,59.244,0.01,59.267,0,0,59.333,0,1,59.356,0.011,59.378,0.439,59.4,0.902,3,59.433,1,0,60,1,1,60.022,0.817,60.044,0.421,60.067,0.44,1,60.078,0.421,60.089,0.757,60.1,1,0,60.167,1,1,60.2,1,60.233,0,60.267,0,1,60.278,0,60.289,0.478,60.3,0.906,3,60.333,1,0,61.833,1,2,61.867,0.996,1,61.933,0.559,62,0,62.067,0,0,62.8,0,1,62.867,0,62.933,0.625,63,0.62,1,63.022,0.612,63.044,0.118,63.067,0.11,1,63.089,0.12,63.111,0.533,63.133,0.98,3,63.167,1,0,63.367,1,2,63.4,0.925,1,63.467,0.469,63.533,0,63.6,0,1,63.611,0,63.622,0.49,63.633,0.929,3,63.667,1,0,63.767,1,2,63.8,0.951,1,63.822,0.775,63.844,0.635,63.867,0.636,1,63.889,0.637,63.911,0.705,63.933,0.706,1,63.956,0.695,63.978,0.011,64,0,0,64.067,0,1,64.078,0,64.089,0.525,64.1,0.996,3,64.133,1,0,65.367,1,1,65.378,1,65.389,0.986,65.4,0.863,1,65.411,0.774,65.422,0.664,65.433,0.581,1,65.467,0.31,65.5,0.094,65.533,0.094,1,65.556,0.095,65.578,0.179,65.6,0.18,1,65.622,0.177,65.644,0.003,65.667,0,0,66.667,0,1,66.711,0,66.756,0.925,66.8,0.918,1,66.844,0.925,66.889,0,66.933,0,1,66.967,0,67,0.622,67.033,0.933,3,67.067,1,2,67.1,0.988,1,67.111,0.932,67.122,0.867,67.133,0.87,1,67.144,0.868,67.156,0.906,67.167,0.955,3,67.2,1,0,67.467,1,1,67.511,0.693,67.556,0.116,67.6,0.126,1,67.622,0.135,67.644,0.482,67.667,0.859,3,67.7,1,0,68.2,1,1,68.222,1,68.244,0.887,68.267,0.902,1,68.278,0.889,68.289,0.981,68.3,1,0,68.667,1,1,68.678,1,68.691,1,68.7,0.947,1,68.711,0.908,68.722,0.885,68.733,0.886,1,68.744,0.885,68.756,0.91,68.767,0.951,1,68.774,1,68.789,0.99,68.8,1,0,69.467,1,1,69.489,0.848,69.511,0.543,69.533,0.556,1,69.556,0.56,69.578,0.737,69.6,0.929,3,69.633,1,0,69.7,1,1,69.733,0.815,69.767,0,69.8,0,1,69.811,0,69.822,0.341,69.833,0.647,1,69.841,1,69.856,0.951,69.867,1,0,69.9,1,1,69.911,0.988,69.922,0.792,69.933,0.816,1,69.944,0.808,69.956,1,69.967,1,0,70.333,1,2,70.367,0.816,1,70.378,0.442,70.389,0.005,70.4,0.024,1,70.422,0.034,70.444,0.459,70.467,0.918,3,70.5,1,0,70.733,1,1,70.744,0.96,70.76,1,70.767,0.855,1,70.778,0.719,70.789,0.568,70.8,0.44,1,70.822,0.194,70.844,0,70.867,0,1,70.889,0.011,70.911,0.443,70.933,0.91,3,70.967,1,0,71.733,1,2,71.767,0.839,1,71.778,0.45,71.791,0,71.8,0.016,1,71.822,0.027,71.844,0.457,71.867,0.922,3,71.9,1,0,72.567,1,1,72.578,1,72.589,0.921,72.6,0.862,1,72.611,0.914,72.622,1,72.633,1,0,73.6,1,2,73.633,0.934,1,73.644,0.515,73.656,0.027,73.667,0.048,1,73.689,0.059,73.711,0.51,73.733,0.997,3,73.767,1,0,73.933,1,2,73.967,0.964,1,74,0.712,74.033,0.51,74.067,0.51,1,74.111,0.502,74.156,0.78,74.2,1,0,75.033,1,1,75.056,0.941,75.078,0.663,75.1,0.496,1,75.133,0.221,75.167,0,75.2,0,0,75.267,0,1,75.311,0,75.356,0.482,75.4,0.478,1,75.444,0.482,75.489,0,75.533,0,0,75.6,0,1,75.622,0.01,75.644,0.41,75.667,0.843,3,75.7,1,0,76.2,1,2,76.233,0.945,1,76.267,0.46,76.3,0.011,76.333,0,1,76.344,0,76.356,0.49,76.367,0.929,3,76.4,1,0,77,1,1,77.011,1,77.022,0.991,77.033,0.812,1,77.044,0.683,77.056,0.539,77.067,0.418,1,77.089,0.185,77.111,0,77.133,0,1,77.178,0,77.222,0.325,77.267,0.322,1,77.333,0.325,77.4,0,77.467,0,0,77.533,0,1,77.544,0,77.556,0.409,77.567,0.776,3,77.6,1,0,77.9,1,1,77.933,0.825,77.967,0,78,0,1,78.011,0,78.022,0.471,78.033,0.894,3,78.067,1,0,79.133,1,1,79.156,0.561,79.178,0.098,79.2,0.094,1,79.211,0.073,79.222,0.563,79.233,0.984,3,79.267,1,2,79.3,0.937,1,79.311,0.494,79.322,0,79.333,0,0,79.4,0,1,79.411,0,79.422,0.494,79.433,0.937,3,79.467,1,0,79.933,1,1,79.944,1,79.956,0.948,79.967,0.796,1,79.978,0.669,79.989,0.528,80,0.41,1,80.022,0.181,80.044,0,80.067,0,1,80.089,0.011,80.111,0.454,80.133,0.933,3,80.167,1,0,80.867,1,1,80.878,0.96,80.894,1,80.9,0.855,1,80.911,0.719,80.922,0.568,80.933,0.44,1,80.956,0.194,80.978,0,81,0,0,81.067,0,1,81.078,0,81.089,0.413,81.1,0.784,3,81.133,1,0,81.233,1,1,81.244,0.991,81.256,0.915,81.267,0.926,1,81.278,0.925,81.289,0.948,81.3,0.986,3,81.333,1,0,81.633,1,1,81.667,1,81.7,0.678,81.733,0.552,1,81.778,0.318,81.822,0.142,81.867,0.142,1,81.889,0.147,81.911,0.481,81.933,0.486,1,82,0.49,82.067,0,82.133,0,0,82.2,0,1,82.233,0,82.267,0.784,82.3,1,0,82.667,1,2,82.7,0.913,1,82.711,0.748,82.722,0.556,82.733,0.564,1,82.744,0.557,82.756,0.723,82.767,0.866,3,82.8,1,2,82.833,0.985,1,82.867,0.657,82.9,0,82.933,0,0,83,0,1,83.011,0,83.022,0.455,83.033,0.863,3,83.067,1,0,83.733,1,1,83.744,1,83.756,0.959,83.767,0.8,1,83.778,0.673,83.789,0.531,83.8,0.412,1,83.822,0.182,83.844,0,83.867,0,1,83.889,0.01,83.911,0.427,83.933,0.878,3,83.967,1,0,84.5,1,2,84.533,0.98,1,84.556,0.875,84.578,0.791,84.6,0.792,1,84.622,0.795,84.644,0.985,84.667,0.988,1,84.711,0.992,84.756,0.444,84.8,0.448,1,84.811,0.439,84.822,0.648,84.833,0.828,3,84.867,1,0,84.9,1,1,84.911,0.994,84.925,1,84.933,0.897,1,84.944,0.807,84.956,0.7,84.967,0.604,1,85,0.294,85.033,0.007,85.067,0,1,85.089,0.01,85.111,0.433,85.133,0.89,3,85.167,1,0,85.5,1,1,85.533,1,85.592,0,85.6,0.024,1,85.611,0.005,85.622,0.456,85.633,0.843,3,85.667,1,0,85.967,1,1,85.978,1,85.989,0.926,86,0.942,1,86.011,0.942,86.022,0.963,86.033,0.998,3,86.067,1,0,86.4,1,2,86.433,0.898,1,86.444,0.474,86.456,0,86.467,0,1,86.478,0,86.489,0.492,86.5,0.933,3,86.533,1,0,86.7,1,2,86.733,0.933,1,86.8,0.473,86.867,0,86.933,0,1,86.956,0.01,86.978,0.414,87,0.851,3,87.033,1,0,88.867,1,1,88.878,0.911,88.894,1,88.9,0.698,1,88.911,0.405,88.922,0.064,88.933,0.078,1,88.944,0.059,88.956,0.506,88.967,0.89,3,89,1,0,89.067,1,2,89.1,0.975,1,89.111,0.897,89.122,0.837,89.133,0.84,1,89.167,0.817,89.2,0.995,89.233,1,0,90.133,1,1,90.167,0.845,90.2,0.537,90.233,0.349,1,90.267,0.14,90.3,0.001,90.333,0,1,90.367,0,90.4,0.631,90.433,0.947,3,90.467,1,0,90.5,1,1,90.533,1,90.567,0.747,90.6,0.561,1,90.644,0.284,90.689,0,90.733,0,1,90.756,0.01,90.778,0.412,90.8,0.847,3,90.833,1,0,91.333,1,2,91.367,0.882,1,91.4,0.429,91.433,0.01,91.467,0,1,91.478,0,91.489,0.505,91.5,0.957,3,91.533,1,0,92.2,1,2,92.233,0.984,1,92.267,0.479,92.3,0.012,92.333,0,1,92.356,0.015,92.378,0.965,92.4,0.98,1,92.444,0.988,92.489,0,92.533,0,0,92.667,0,1,92.678,0,92.689,0.492,92.7,0.933,3,92.733,1,0,92.767,1,2,92.8,0.937,1,92.822,0.46,92.844,0.019,92.867,0.008,1,92.889,0.019,92.911,0.454,92.933,0.926,3,92.967,1,0,94.333,1,1,94.356,0.554,94.378,0.064,94.4,0.062,1,94.422,0.072,94.444,0.476,94.467,0.913,3,94.5,1,0,94.667,1,1,94.689,1,94.711,0.819,94.733,0.848,1,94.744,0.887,94.756,1,94.767,1,0,95.1,1,2,95.133,0.82,1,95.156,0.403,95.178,0.018,95.2,0.008,1,95.206,0,95.222,0.339,95.233,0.635,1,95.242,1,95.256,0.98,95.267,1,1,95.278,0.978,95.291,1,95.3,0.639,1,95.311,0.345,95.322,0.001,95.333,0.016,1,95.342,0,95.356,0.5,95.367,0.933,3,95.4,1,0,95.733,1,1,95.756,0.532,95.778,0.088,95.8,0.078,1,95.811,0.045,95.822,0.606,95.833,1,0,95.967,1,2,96,0.992,1,96.044,0.503,96.089,0,96.133,0,0,96.2,0,1,96.211,0,96.222,0.482,96.233,0.914,3,96.267,1,0,97,1,2,97.033,0.835,1,97.044,0.44,97.056,0,97.067,0,1,97.089,0.01,97.111,0.397,97.133,0.816,3,97.167,1,0,100.667,1,2,100.7,0.927,1,100.756,0.525,100.811,0.005,100.867,0,0,104.467,0,1,104.511,0,104.556,0.157,104.6,0.156,1,104.644,0.157,104.689,0,104.733,0,0,104.867,0,1,104.889,0.011,104.911,0.456,104.933,0.937,3,104.967,1,0,105.3,1,1,105.333,0.927,105.367,0.851,105.4,0.854,1,105.411,0.878,105.422,1,105.433,1,0,105.733,1,1,105.744,1,105.756,0.834,105.767,0.753,1,105.778,0.633,105.789,0.5,105.8,0.388,1,105.822,0.171,105.844,0,105.867,0,1,105.878,0,105.889,0.484,105.9,0.918,3,105.933,1,0,106.4,1,2,106.433,0.986,1,106.444,0.968,106.456,0.955,106.467,0.956,1,106.478,0.943,106.489,1,106.5,1,0,106.867,1,2,106.9,0.894,1,106.933,0.435,106.967,0.01,107,0,0,107.067,0,1,107.078,0,107.089,0.48,107.1,0.91,3,107.133,1,0,107.3,1,1,107.333,1,107.367,0.627,107.4,0.479,1,107.444,0.21,107.489,0.008,107.533,0.008,1,107.556,0.019,107.578,0.468,107.6,0.953,3,107.633,1,0,108.2,1,1,108.211,0.989,108.225,1,108.233,0.84,1,108.244,0.711,108.256,0.568,108.267,0.448,1,108.289,0.216,108.311,0.031,108.333,0.032,1,108.378,0.027,108.422,0.711,108.467,0.706,1,108.511,0.711,108.556,0.019,108.6,0.024,1,108.656,0.029,108.711,0.573,108.767,0.995,3,108.8,1,0,109.1,1,2,109.133,0.972,1,109.156,0.706,109.178,0.46,109.2,0.454,1,109.211,0.446,109.222,0.636,109.233,0.8,1,109.242,1,109.256,0.987,109.267,1,0,109.3,1,2,109.333,0.981,1,109.356,0.896,109.378,0.818,109.4,0.816,0,109.467,0.816,1,109.489,0.805,109.511,1,109.533,1,1,109.578,1,109.651,0,109.667,0.008,1,109.671,0,109.689,0.436,109.7,0.82,3,109.733,1,0,109.867,1,1,109.9,0.889,109.933,0.553,109.967,0.373,1,110,0.164,110.033,0.025,110.067,0.024,1,110.078,0.01,110.089,0.35,110.1,0.643,1,110.109,1,110.122,0.976,110.133,1,0,110.2,1,2,110.233,0.992,1,110.244,0.963,110.256,0.941,110.267,0.942,1,110.278,0.936,110.289,0.989,110.3,1,0,110.633,1,2,110.667,0.996,3,110.7,1,0,110.767,1,1,110.778,1,110.789,0.965,110.8,0.972,1,110.811,0.982,110.822,1,110.833,1,0,111.1,1,1,111.111,0.972,111.122,0.796,111.133,0.816,1,111.144,0.813,111.156,0.884,111.167,0.945,3,111.2,1,0,111.233,1,1,111.267,0.949,111.3,0.738,111.333,0.746,1,111.356,0.749,111.378,0.907,111.4,0.91,1,111.511,0.906,111.622,0.004,111.733,0,0,111.933,0,1,112,0,112.067,0.56,112.133,0.556,1,112.178,0.56,112.222,0.066,112.267,0.07,1,112.367,0.07,112.467,0.544,112.567,0.959,3,112.6,1,0,112.833,1,1,112.844,1,112.856,0.947,112.867,0.91,1,112.878,0.904,112.889,0.963,112.9,1,0,113.1,1,1,113.111,0.989,113.122,0.915,113.133,0.926,1,113.144,0.921,113.156,1,113.167,1,0,113.233,1,1,113.244,1,113.256,0.905,113.267,0.918,1,113.278,0.917,113.289,0.94,113.3,0.977,3,113.333,1,0,114.333,1,1,114.356,0.966,114.378,0.807,114.4,0.824,1,114.422,0.826,114.444,0.962,114.467,0.964,1,114.489,0.949,114.511,0.015,114.533,0,1,114.544,0,114.556,0.323,114.567,0.612,1,114.577,1,114.589,1,114.6,1,1,114.611,1,114.623,1,114.633,0.628,1,114.644,0.346,114.656,0.018,114.667,0.032,1,114.678,0.011,114.689,0.501,114.7,0.922,3,114.733,1,0,114.967,1,1,115,1,115.033,0,115.067,0,1,115.078,0,115.089,0.515,115.1,0.976,3,115.133,1,0,115.633,1,1,115.656,0.953,115.678,0.716,115.7,0.576,1,115.733,0.342,115.767,0.156,115.8,0.156,1,115.844,0.151,115.889,0.765,115.933,0.76,1,115.978,0.765,116.022,0.121,116.067,0.126,1,116.089,0.125,116.111,0.27,116.133,0.453,1,116.156,0.63,116.178,0.926,116.2,1,0,116.3,1,1,116.333,0.964,116.371,0,116.4,0.054,1,116.422,0.053,116.444,0.236,116.467,0.466,1,116.478,0.585,116.489,0.727,116.5,0.854,1,116.507,1,116.522,0.974,116.533,1,0,116.833,1,2,116.867,0.929,1,116.889,0.452,116.911,0.011,116.933,0,1,116.944,0,116.956,0.422,116.967,0.8,3,117,1,0,117.033,1,2,117.067,0.808,1,117.089,0.401,117.111,0.025,117.133,0.016,1,117.156,0.026,117.178,0.438,117.2,0.883,3,117.233,1,0,117.533,1,1,117.544,0.96,117.56,1,117.567,0.855,1,117.578,0.719,117.589,0.568,117.6,0.44,1,117.622,0.194,117.644,0,117.667,0,1,117.678,0,117.689,0.486,117.7,0.922,3,117.733,1,0,119.467,1,1,119.533,0.575,119.6,0,119.667,0.008,1,119.711,0.004,119.756,0.576,119.8,0.572,1,119.844,0.576,119.889,0,119.933,0,0,120,0,1,120.033,0,120.067,0.865,120.1,1,0,120.167,1,1,120.2,0.865,120.233,0,120.267,0,1,120.278,0,120.289,0.457,120.3,0.867,3,120.333,1,2,120.367,0.898,1,120.378,0.503,120.389,0.042,120.4,0.062,1,120.411,0.042,120.422,0.511,120.433,0.913,3,120.467,1,2,120.5,0.972,1,120.511,0.598,120.522,0.161,120.533,0.18,1,120.544,0.164,120.556,0.542,120.567,0.866,3,120.6,1,0,120.633,1,1,120.667,1,120.7,0,120.733,0,1,120.744,0,120.756,0.505,120.767,0.957,3,120.8,1,0,121.267,1,2,121.3,0.977,1,121.311,0.956,121.322,0.941,121.333,0.942,1,121.344,0.929,121.356,1,121.367,1,0,121.567,1,2,121.6,0.831,1,121.622,0.404,121.644,0.01,121.667,0,1,121.678,0,121.689,0.469,121.7,0.89,3,121.733,1,2,121.767,0.965,1,121.778,0.58,121.789,0.131,121.8,0.15,1,121.811,0.133,121.822,0.532,121.833,0.875,3,121.867,1,0,121.933,1,1,121.944,0.983,121.959,1,121.967,0.859,1,121.978,0.741,121.989,0.61,122,0.5,1,122.022,0.287,122.044,0.117,122.067,0.118,1,122.1,0.128,122.133,0.539,122.167,0.984,3,122.2,1,0,122.533,1,2,122.567,0.954,1,122.578,0.889,122.589,0.838,122.6,0.84,1,122.611,0.837,122.622,0.89,122.633,0.956,3,122.667,1,0,123.3,1,1,123.333,0.948,123.367,0.639,123.4,0.494,1,123.444,0.256,123.489,0.078,123.533,0.078,1,123.578,0.072,123.622,0.868,123.667,0.862,1,123.711,0.869,123.756,0.009,123.8,0.016,1,123.808,0,123.822,0.508,123.833,0.949,3,123.867,1,0,123.967,1,1,123.978,1,123.989,0.875,124,0.894,1,124.011,0.879,124.022,0.983,124.033,1,0,124.167,1,1,124.178,0.651,124.189,0.206,124.2,0.228,1,124.233,0.155,124.267,1,124.3,1,0,124.367,1,1,124.4,0.948,124.462,0,124.467,0.008,1,124.489,0.013,124.511,0.293,124.533,0.298,1,124.578,0.3,124.622,0,124.667,0,0,124.733,0,1,124.756,0.01,124.778,0.406,124.8,0.835,3,124.833,1,0,124.967,1,2,125,0.957,1,125.044,0.605,125.089,0.24,125.133,0.244,1,125.156,0.252,125.178,0.557,125.2,0.887,3,125.233,1,0,125.3,1,1,125.333,1,125.367,0,125.4,0,1,125.422,0,125.444,0.195,125.467,0.442,1,125.478,0.57,125.489,0.722,125.5,0.859,1,125.506,1,125.522,0.954,125.533,1,0,125.767,1,1,125.8,1,125.864,0,125.867,0.008,0,125.933,0.008,1,125.938,0,125.956,0.482,125.967,0.906,3,126,1,0,126.233,1,0,126.267,0.98,1,126.278,0.973,126.289,1,126.3,1,0,126.433,1,2,126.467,0.988,1,126.474,1,126.489,0.997,126.5,1,0,126.933,1,1,127.022,0.557,127.111,0.04,127.2,0.04,1,127.256,0.04,127.311,0.73,127.367,0.961,3,127.4,1,1,127.444,1,127.489,0.02,127.533,0.04,1,127.544,0.021,127.556,0.462,127.567,0.84,3,127.6,1,0,128.167,1,1,128.2,1,128.264,0,128.267,0.008,1,128.289,0.011,128.311,0.107,128.333,0.264,1,128.367,0.452,128.4,0.948,128.433,1,0,128.667,1,1,128.711,0.746,128.756,0.395,128.8,0.408,1,128.833,0.415,128.867,0.683,128.9,0.973,3,128.933,1,0,129.1,1,1,129.111,0.985,129.122,0.917,129.133,0.926,1,129.144,0.926,129.156,0.944,129.167,0.975,3,129.2,1,0,129.433,1,1,129.444,1,129.456,0.976,129.467,0.867,1,129.478,0.784,129.489,0.682,129.5,0.604,1,129.533,0.352,129.567,0.15,129.6,0.15,1,129.633,0.098,129.667,0.95,129.7,1,0,129.8,1,1,129.844,0.662,129.889,0.08,129.933,0.086,1,129.956,0.096,129.978,0.491,130,0.918,3,130.033,1,0,130.233,1,1,130.256,0.979,130.278,0.768,130.3,0.674,1,130.333,0.496,130.367,0.377,130.4,0.376,1,130.411,0.371,130.422,0.476,130.433,0.611,1,130.444,0.697,130.456,1,130.467,1,0,130.933,1,2,130.967,0.964,1,130.978,0.638,130.989,0.258,131,0.274,1,131.011,0.214,131.022,0.821,131.033,1,0,131.2,1,2,131.233,0.988,1,131.289,0.505,131.344,0.002,131.4,0.008,1,131.404,0,131.422,0.5,131.433,0.941,3,131.467,1,0,131.767,1,1,131.8,0.994,131.833,0,131.867,0,1,131.889,0.01,131.911,0.426,131.933,0.875,3,131.967,1,0,132.9,1,2,132.933,0.914,1,132.956,0.445,132.978,0.011,133,0,1,133.033,0.001,133.067,0.146,133.1,0.362,1,133.133,0.545,133.167,0.909,133.2,1,0,133.933,1,1,133.944,0.967,133.96,1,133.967,0.851,1,133.978,0.717,133.989,0.568,134,0.442,1,134.022,0.2,134.044,0.007,134.067,0.008,1,134.07,0,134.089,0.531,134.1,1,0,135.833,1,1,135.844,0.975,135.86,1,135.867,0.882,1,135.878,0.779,135.889,0.654,135.9,0.558,1,135.933,0.248,135.967,0,136,0,0,136.467,0,1,136.511,0,136.556,0.774,136.6,0.768,1,136.667,0.774,136.733,0.002,136.8,0.008,1,136.833,0.019,136.867,0.447,136.9,0.91,3,136.933,1,0,138.867,1,1,138.933,0.575,139,0,139.067,0,0,140.2,0,1,140.311,0.004,140.422,0.984,140.533,0.988,1,140.556,0.976,140.578,0.256,140.6,0.244,1,140.622,0.243,140.644,0.377,140.667,0.545,1,140.678,0.632,140.689,0.735,140.7,0.828,1,140.711,0.914,140.722,1,140.733,1,0,141.167,1,2,141.2,0.933,1,141.222,0.563,141.244,0.22,141.267,0.212,1,141.278,0.194,141.289,0.609,141.3,0.965,3,141.333,1,0,141.4,1,2,141.433,0.984,1,141.444,0.906,141.456,0.845,141.467,0.848,1,141.478,0.847,141.489,0.878,141.5,0.929,1,141.51,1,141.522,1,141.533,1,0,141.833,1,2,141.867,0.937,1,141.911,0.649,141.956,0.396,142,0.4,1,142.011,0.373,142.022,0.764,142.033,1,0,142.3,1,2,142.333,0.824,1,142.356,0.401,142.378,0.01,142.4,0,0,142.467,0,1,142.478,0,142.489,0.471,142.5,0.894,3,142.533,1,0,143.233,1,2,143.267,0.913,1,143.289,0.74,143.311,0.603,143.333,0.604,1,143.344,0.596,143.356,0.775,143.367,0.929,3,143.4,1,0,143.433,1,2,143.467,0.931,1,143.511,0.56,143.556,0,143.6,0,1,143.622,0.012,143.644,0.482,143.667,0.992,3,143.7,1,0,144.5,1,2,144.533,0.871,1,144.556,0.424,144.578,0.01,144.6,0,1,144.611,0,144.622,0.49,144.633,0.929,3,144.667,1,0,145.933,1,2,145.967,0.988,1,146,0.525,146.033,0.097,146.067,0.086,1,146.078,0.068,146.089,0.483,146.1,0.839,3,146.133,1,0,146.167,1,1,146.2,1,146.233,0,146.267,0,1,146.278,0,146.289,0.482,146.3,0.914,3,146.333,1,0,147.6,1,2,147.633,0.988,1,147.644,0.944,147.656,0.917,147.667,0.918,1,147.689,0.9,147.711,1,147.733,1,0,148.2,1,1,148.211,1,148.222,0.82,148.233,0.733,1,148.244,0.618,148.256,0.489,148.267,0.381,1,148.289,0.173,148.311,0.007,148.333,0.008,1,148.336,0,148.4,1,148.433,1,0,148.633,1,2,148.667,0.951,1,148.756,0.512,148.844,0,148.933,0,1,148.978,0,149.022,0.687,149.067,0.682,1,149.133,0.687,149.2,0,149.267,0,0,149.333,0,1,149.367,0.01,149.4,0.431,149.433,0.886,3,149.467,1,0,149.9,1,2,149.933,0.863,1,149.956,0.42,149.978,0.01,150,0,1,150.022,0.011,150.044,0.446,150.067,0.918,3,150.1,1,0,150.667,1,2,150.7,0.933,1,150.756,0.57,150.811,0.192,150.867,0.196,1,150.889,0.203,150.911,0.605,150.933,0.612,1,150.978,0.617,151.022,0,151.067,0,0,151.2,0,1,151.211,0,151.222,0.447,151.233,0.847,3,151.267,1,0,151.567,1,1,151.6,1,151.657,0,151.667,0.032,1,151.678,0.013,151.689,0.462,151.7,0.847,3,151.733,1,0,152.067,1,2,152.1,0.862,1,152.111,0.536,152.122,0.156,152.133,0.172,1,152.178,0.158,152.222,0.628,152.267,1,0,152.533,1,1,152.544,1,152.556,0.984,152.567,0.918,1,152.578,0.869,152.589,0.839,152.6,0.84,1,152.611,0.837,152.622,0.906,152.633,0.996,3,152.667,1,0,152.967,1,2,153,0.894,1,153.022,0.435,153.044,0.01,153.067,0,1,153.089,0.01,153.111,0.395,153.133,0.812,3,153.167,1,0,153.5,1,1,153.533,0.949,153.567,0.598,153.6,0.628,1,153.611,0.531,153.622,1,153.633,1,0,154.667,1,1,154.678,1,154.689,0.816,154.7,0.735,1,154.711,0.62,154.722,0.53,154.733,0.534,1,154.756,0.533,154.778,0.787,154.8,1,0,155.367,1,1,155.389,0.96,155.411,0.679,155.433,0.521,1,155.467,0.254,155.5,0.04,155.533,0.04,1,155.578,0.036,155.622,0.6,155.667,0.596,1,155.756,0.594,155.844,0.002,155.933,0,1,155.989,0.005,156.044,0.552,156.1,0.976,3,156.133,1,0,156.267,1,1,156.278,1,156.289,0.98,156.3,0.863,1,156.311,0.773,156.322,0.673,156.333,0.589,1,156.356,0.426,156.378,0.297,156.4,0.298,1,156.411,0.286,156.422,0.577,156.433,0.827,3,156.467,1,0,156.5,1,1,156.533,0.883,156.567,0,156.6,0,1,156.622,0.011,156.644,0.439,156.667,0.902,3,156.7,1,0,157.1,1,1,157.111,0.985,157.122,0.63,157.133,0.674,1,157.144,0.571,157.156,1,157.167,1,0,157.367,1,1,157.422,0.527,157.478,0.034,157.533,0.04,1,157.545,0,157.6,1,157.633,1,0,158.133,1,1,158.156,0.857,158.178,0.567,158.2,0.58,1,158.233,0.541,158.267,1,158.3,1,0,158.333,1,1,158.344,0.992,158.358,1,158.367,0.679,1,158.378,0.425,158.389,0.129,158.4,0.142,1,158.411,0.129,158.422,0.442,158.433,0.71,1,158.44,1,158.456,0.934,158.467,1,0,158.5,1,2,158.533,0.949,1,158.578,0.57,158.622,0,158.667,0,1,158.689,0.01,158.711,0.414,158.733,0.851,3,158.767,1,0,159.667,1,1,159.689,1,159.711,0.956,159.733,0.964,3,159.767,1,0,160.867,1,2,160.9,0.918,1,160.956,0.489,161.011,0.043,161.067,0.048,1,161.078,0.029,161.089,0.471,161.1,0.851,3,161.133,1,0,161.267,1,2,161.3,0.835,1,161.311,0.444,161.329,0,161.333,0.008,1,161.356,0.019,161.378,0.445,161.4,0.906,3,161.433,1,0,162.733,1,2,162.767,0.979,1,162.778,0.935,162.789,0.909,162.8,0.91,1,162.811,0.909,162.822,0.933,162.833,0.974,3,162.867,1,0,163.367,1,1,163.378,1,163.389,0.96,163.4,0.839,1,163.411,0.741,163.422,0.622,163.433,0.531,1,163.467,0.236,163.5,0,163.533,0,1,163.556,0.01,163.578,0.401,163.6,0.824,3,163.633,1,0,163.933,1,2,163.967,0.926,1,164,0.507,164.033,0.12,164.067,0.11,1,164.111,0.104,164.156,0.83,164.2,0.824,1,164.289,0.821,164.378,0.003,164.467,0,1,164.478,0,164.489,0.486,164.5,0.922,3,164.533,1,0,165.1,1,2,165.133,0.965,1,165.156,0.802,165.178,0.673,165.2,0.674,1,165.211,0.569,165.222,1,165.233,1,0,165.767,1,1,165.778,1,165.789,0.91,165.8,0.926,1,165.811,0.948,165.822,1,165.833,1,0,165.9,1,1,165.933,0.997,165.981,0,166,0.04,1,166.044,0.037,166.089,0.481,166.133,0.478,1,166.156,0.471,166.178,0.015,166.2,0.008,1,166.222,0.011,166.244,0.114,166.267,0.282,1,166.3,0.46,166.333,1,166.367,1,0,166.7,1,2,166.733,0.914,1,166.756,0.457,166.778,0.034,166.8,0.024,1,166.833,0.024,166.867,0.651,166.9,0.964,3,166.933,1,0,167.233,1,2,167.267,0.82,1,167.289,0.407,167.311,0.025,167.333,0.016,1,167.356,0.026,167.378,0.434,167.4,0.875,3,167.433,1,0,168.133,1,2,168.167,0.953,1,168.178,0.51,168.192,0,168.2,0.016,1,168.222,0.026,168.244,0.424,168.267,0.855,3,168.3,1,0,168.833,1,2,168.867,0.855,1,168.889,0.416,168.911,0.01,168.933,0,1,168.944,0,168.956,0.5,168.967,0.949,3,169,1,0,169.667,1,2,169.7,0.966,1,169.711,0.894,169.722,0.837,169.733,0.84,1,169.744,0.83,169.756,0.932,169.767,1,0,170.533,1,2,170.567,0.997,1,170.578,0.738,170.589,0.435,170.6,0.448,1,170.633,0.423,170.667,0.93,170.7,1,0,174.467,1,2,174.5,0.956,1,174.578,0.518,174.656,0.001,174.733,0,0,185.667,0,1,185.711,0,185.756,0.349,185.8,0.346,1,185.867,0.349,185.933,0.013,186,0.016,1,186.024,0,186.067,0.773,186.1,1,0,186.167,1,1,186.178,1,186.189,0.986,186.2,0.964,3,186.233,1,0,186.5,1,2,186.533,0.937,1,186.556,0.794,186.578,0.661,186.6,0.658,1,186.622,0.657,186.644,0.791,186.667,0.959,3,186.7,1,0,187.7,1,1,187.733,0.927,187.767,0.499,187.8,0.534,1,187.811,0.53,187.822,0.622,187.833,0.74,1,187.844,0.836,187.856,1,187.867,1,0,188,1,2,188.033,0.978,1,188.044,0.885,188.056,0.812,188.067,0.816,1,188.089,0.811,188.111,0.915,188.133,1,0,188.4,1,1,188.433,0.869,188.467,0.568,188.5,0.392,1,188.533,0.195,188.567,0.063,188.6,0.062,1,188.622,0.066,188.644,0.342,188.667,0.346,1,188.733,0.349,188.8,0,188.867,0,1,188.889,0.01,188.911,0.397,188.933,0.816,3,188.967,1,0,189.333,1,2,189.367,0.914,1,189.4,0.445,189.433,0.011,189.467,0,1,189.478,0,189.489,0.527,189.5,1,0,189.8,1,1,189.811,0.999,189.824,1,189.833,0.827,1,189.844,0.695,189.856,0.549,189.867,0.426,1,189.889,0.188,189.911,0,189.933,0,1,189.956,0.01,189.978,0.42,190,0.863,3,190.033,1,0,190.8,1,2,190.833,0.875,1,190.844,0.469,190.858,0,190.867,0.016,1,190.889,0.027,190.911,0.493,190.933,0.996,3,190.967,1,0,191.2,1,2,191.233,0.988,1,191.267,0.561,191.3,0.166,191.333,0.156,1,191.344,0.117,191.356,0.675,191.367,1,0,192.633,1,1,192.644,0.985,192.656,0.423,192.667,0.494,1,192.689,0.5,192.711,0.73,192.733,0.98,3,192.767,1,0,192.8,1,2,192.833,0.78,1,192.844,0.456,192.856,0.078,192.867,0.094,1,192.878,0.074,192.889,0.541,192.9,0.941,3,192.933,1,0,193,1,1,193.011,1,193.022,0.903,193.033,0.789,1,193.044,0.683,193.056,0.6,193.067,0.604,1,193.078,0.601,193.089,0.672,193.1,0.763,1,193.111,0.813,193.122,1,193.133,1,0,194.033,1,1,194.067,1,194.1,0.632,194.133,0.487,1,194.178,0.223,194.222,0.024,194.267,0.024,1,194.333,0.021,194.4,0.427,194.467,0.424,1,194.533,0.427,194.6,0.029,194.667,0.032,1,194.678,0,194.733,1,194.767,1,0,195.267,1,2,195.3,0.882,1,195.333,0.429,195.367,0.01,195.4,0,1,195.422,0.01,195.444,0.431,195.467,0.886,3,195.5,1,0,196.033,1,1,196.044,1,196.056,0.907,196.067,0.827,1,196.078,0.738,196.089,0.629,196.1,0.546,1,196.133,0.277,196.167,0.062,196.2,0.062,1,196.222,0.067,196.244,0.347,196.267,0.352,1,196.333,0.355,196.4,0,196.467,0,0,196.533,0,1,196.556,0.011,196.578,0.441,196.6,0.906,3,196.633,1,0,196.933,1,1,196.944,1,196.956,0.98,196.967,0.808,1,196.978,0.679,196.989,0.536,197,0.416,1,197.022,0.184,197.044,0,197.067,0,1,197.078,0,197.089,0.486,197.1,0.922,3,197.133,1,0,197.367,1,1,197.378,1,197.389,0.936,197.4,0.886,1,197.422,0.873,197.444,0.982,197.467,1,0,198,1,2,198.033,0.941,1,198.044,0.504,198.058,0,198.067,0.016,1,198.089,0.019,198.111,0.217,198.133,0.22,0,198.2,0.172,0,198.267,0.204,1,198.333,0.206,198.4,0,198.467,0,1,198.478,0,198.489,0.507,198.5,0.961,3,198.533,1,0,199.033,1,2,199.067,0.906,1,199.089,0.441,199.111,0.011,199.133,0,1,199.156,0.011,199.178,0.446,199.2,0.918,3,199.233,1,0,199.933,1,2,199.967,0.937,1,200,0.456,200.033,0.011,200.067,0,1,200.1,0,200.133,1,200.167,1,0,200.633,1,1,200.667,0.978,200.7,0.62,200.733,0.469,1,200.778,0.21,200.822,0.016,200.867,0.016,1,200.911,0.014,200.956,0.222,201,0.22,1,201.067,0.222,201.133,0,201.2,0,0,201.267,0,1,201.278,0,201.289,0.447,201.3,0.847,3,201.333,1,0,201.633,1,1,201.644,0.985,201.66,1,201.667,0.951,1,201.678,0.905,201.689,0.855,201.7,0.803,1,201.722,0.693,201.744,0.593,201.767,0.483,1,201.822,0.223,201.878,0,201.933,0,0,202,0,1,202.011,0,202.022,0.463,202.033,0.878,3,202.067,1,0,202.8,1,1,202.811,0.977,202.826,1,202.833,0.843,1,202.844,0.709,202.856,0.56,202.867,0.434,1,202.889,0.192,202.911,0,202.933,0,1,202.956,0.01,202.978,0.416,203,0.855,3,203.033,1,0,203.533,1,2,203.567,0.936,1,203.578,0.867,203.589,0.813,203.6,0.816,1,203.611,0.76,203.622,1,203.633,1,0,203.7,1,1,203.733,1,203.787,0,203.8,0.04,0,203.867,0.04,1,203.889,0.042,203.911,0.178,203.933,0.18,1,203.978,0.181,204.022,0.023,204.067,0.024,1,204.078,0.003,204.089,0.491,204.1,0.91,3,204.133,1,0,204.433,1,1,204.444,0.99,204.458,1,204.467,0.871,1,204.478,0.77,204.489,0.646,204.5,0.551,1,204.533,0.245,204.567,0,204.6,0,1,204.622,0.01,204.644,0.416,204.667,0.855,3,204.7,1,0,204.867,1,1,204.9,0.964,204.933,0.559,204.967,0.384,1,205,0.164,205.033,0.017,205.067,0.016,1,205.075,0,205.089,0.471,205.1,0.879,3,205.133,1,0,205.4,1,2,205.433,0.91,1,205.467,0.443,205.5,0.011,205.533,0,1,205.544,0,205.556,0.492,205.567,0.933,3,205.6,1,0,205.867,1,2,205.9,0.942,1,205.933,0.483,205.967,0.058,206,0.048,1,206.011,0.029,206.022,0.48,206.033,0.867,3,206.067,1,0,208.067,1,1,208.078,0.989,208.092,1,208.1,0.857,1,208.111,0.752,208.122,0.67,208.133,0.674,1,208.167,0.656,208.2,0.887,208.233,1,0,209.1,1,2,209.133,0.996,3,209.167,1,0,209.233,1,1,209.289,0.773,209.344,0.06,209.4,0.062,1,209.444,0.06,209.489,0.3,209.533,0.298,1,209.578,0.3,209.622,0,209.667,0,0,209.8,0,1,209.833,0.011,209.867,0.452,209.9,0.929,3,209.933,1,0,210.4,1,2,210.433,0.953,1,210.467,0.463,210.5,0.011,210.533,0,1,210.544,0,210.556,0.509,210.567,0.965,3,210.6,1,0,211.067,1,2,211.1,0.996,1,211.111,0.54,211.122,0.009,211.133,0.032,1,211.144,0.015,211.156,0.408,211.167,0.745,3,211.2,1,0,211.233,1,1,211.267,1,211.307,0,211.333,0.062,1,211.378,0.048,211.422,1,211.467,1,1,211.533,1,211.6,0,211.667,0,1,211.689,0.006,211.711,0.394,211.733,0.4,1,211.756,0.394,211.778,0.038,211.8,0.032,1,211.811,0.011,211.822,0.495,211.833,0.91,3,211.867,1,0,212.2,1,1,212.222,0.617,212.244,0.138,212.267,0.142,1,212.289,0.138,212.311,0.617,212.333,1,0,213.1,1,2,213.133,0.847,1,213.156,0.448,213.178,0.079,213.2,0.07,1,213.222,0.071,213.244,0.141,213.267,0.142,1,213.311,0.143,213.356,0.007,213.4,0.008,1,213.404,0,213.422,0.527,213.433,0.992,3,213.467,1,0,214.033,1,2,214.067,0.972,3,214.1,1,0,214.167,1,1,214.2,1,214.233,0,214.267,0,1,214.289,0.011,214.311,0.458,214.333,0.941,3,214.367,1,0,215.067,1,2,215.1,0.992,1,215.133,0.487,215.167,0.02,215.2,0.008,1,215.222,0.018,215.244,0.441,215.267,0.898,3,215.3,1,0,215.967,1,1,215.978,1,215.989,0.986,216,0.855,1,216.011,0.76,216.022,0.644,216.033,0.556,1,216.067,0.269,216.1,0.04,216.133,0.04,1,216.156,0.039,216.178,0.216,216.2,0.44,1,216.211,0.555,216.222,0.692,216.233,0.816,1,216.244,0.982,216.256,1,216.267,1,0,220.133,1,1,220.167,0.853,220.2,0.538,220.233,0.351,1,220.267,0.141,220.3,0.001,220.333,0,0,244.967,0]},{"Target":"Parameter","Id":"ParamMouthForm","Segments":[0,0.5,0,244.967,0.5]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Tap呆毛_0.wav b/live2d_models/ningning/Motions_Tap呆毛_0.wav new file mode 100644 index 0000000..55e77a9 Binary files /dev/null and b/live2d_models/ningning/Motions_Tap呆毛_0.wav differ diff --git a/live2d_models/ningning/Motions_Tap头顶_0.json b/live2d_models/ningning/Motions_Tap头顶_0.json new file mode 100644 index 0000000..91dc5b1 --- /dev/null +++ b/live2d_models/ningning/Motions_Tap头顶_0.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":4.967,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":7,"TotalSegmentCount":28,"TotalPointCount":67,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamAngleZ","Segments":[0,0,1,0.167,0,0.333,-15,0.5,-15,1,1.333,-15,2.167,-15,3,-15,1,3.333,-15,3.667,0,4,0,0,4.967,0]},{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,1,0.167,0.996,0.333,0.004,0.5,0,0,3,0,1,3.333,0,3.667,1.002,4,1,0,4.733,1,0,4.967,1]},{"Target":"Parameter","Id":"ParamEyeLSmile","Segments":[0,0,1,0.167,0,0.333,1,0.5,1,1,1.333,1,2.167,1,3,1,1,3.333,1,3.667,0,4,0,0,4.967,0]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,1,0.167,0.996,0.333,0.004,0.5,0,0,3,0,1,3.333,0,3.667,1.002,4,1,0,4.733,1,0,4.967,1]},{"Target":"Parameter","Id":"ParamEyeRSmile","Segments":[0,0,1,0.167,0,0.333,1,0.5,1,1,1.333,1,2.167,1,3,1,1,3.333,1,3.667,0,4,0,0,4.967,0]},{"Target":"Parameter","Id":"ParamMouthOpenY","Segments":[0,0,1,0.167,0.002,0.333,0.398,0.5,0.4,1,1.667,0.4,2.833,0,4,0,0,4.733,0,0,4.967,0]},{"Target":"Parameter","Id":"ParamMouthForm","Segments":[0,0.5,1,1,0.5,2,0,3,0,0,4.967,0]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Tap头顶_0.wav b/live2d_models/ningning/Motions_Tap头顶_0.wav new file mode 100644 index 0000000..f00170c Binary files /dev/null and b/live2d_models/ningning/Motions_Tap头顶_0.wav differ diff --git a/live2d_models/ningning/Motions_Tap左胸_0.json b/live2d_models/ningning/Motions_Tap左胸_0.json new file mode 100644 index 0000000..18448e1 --- /dev/null +++ b/live2d_models/ningning/Motions_Tap左胸_0.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":3.467,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":8,"TotalSegmentCount":18,"TotalPointCount":56,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamCheek1","Segments":[0,1,1,0.167,1,0.333,0,0.5,0,1,1.333,0,2.167,0,3,0,1,3.156,0,3.311,0.871,3.467,0.987]},{"Target":"Parameter","Id":"ParamCheek4","Segments":[0,0,1,0.167,0,0.333,1,0.5,1,1,1.333,1,2.167,1,3,1,1,3.156,1,3.311,0.129,3.467,0.013]},{"Target":"Parameter","Id":"ParamCheek19","Segments":[0,0,1,0.167,0,0.333,1,0.5,1,1,1.333,1,2.167,1,3,1,1,3.156,1,3.311,0.129,3.467,0.013]},{"Target":"Parameter","Id":"ParamAngleY","Segments":[0,0,1,0.167,0,0.333,-9.221,0.5,-10,1,1.333,-13.897,2.167,-15,3,-15,1,3.156,-15,3.311,-1.933,3.467,-0.191]},{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,0,3.467,1]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,0,3.467,1]},{"Target":"Parameter","Id":"ParamMouthOpenY","Segments":[0,0,0,3.467,0]},{"Target":"Parameter","Id":"ParamMouthForm","Segments":[0,0,1,0.167,0,0.333,-0.2,0.5,-0.2,1,1.333,-0.2,2.167,-0.2,3,-0.2,1,3.156,-0.2,3.311,-0.026,3.467,-0.003]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Tap左胸_0.wav b/live2d_models/ningning/Motions_Tap左胸_0.wav new file mode 100644 index 0000000..336114b Binary files /dev/null and b/live2d_models/ningning/Motions_Tap左胸_0.wav differ diff --git a/live2d_models/ningning/Motions_Tap脸_0.wav b/live2d_models/ningning/Motions_Tap脸_0.wav new file mode 100644 index 0000000..98792c4 Binary files /dev/null and b/live2d_models/ningning/Motions_Tap脸_0.wav differ diff --git a/live2d_models/ningning/Motions_Tap裙子_0.json b/live2d_models/ningning/Motions_Tap裙子_0.json new file mode 100644 index 0000000..8262e97 --- /dev/null +++ b/live2d_models/ningning/Motions_Tap裙子_0.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"Duration":9,"Fps":30,"Loop":true,"AreBeziersRestricted":false,"CurveCount":17,"TotalSegmentCount":345,"TotalPointCount":598,"UserDataCount":0,"TotalUserDataSize":0},"Curves":[{"Target":"Parameter","Id":"ParamCheek","Segments":[0,0,1,0.333,0,0.667,1,1,1,1,3.5,1,6,1,8.5,1,1,8.667,1,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamCheek1","Segments":[0,1,0,8.5,1,1,8.667,1,8.833,1,9,1]},{"Target":"Parameter","Id":"ParamCheek5","Segments":[0,0,1,0.333,0,0.667,1,1,1,1,3.667,1,6.333,0,9,0]},{"Target":"Parameter","Id":"ParamCheek6","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,1,3.667,1,1,5.278,1,6.889,1,8.5,1,1,8.667,1,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamCheek9","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,1,3.667,1,1,5.222,1,6.778,1,8.333,1,1,8.389,1,8.444,0,8.5,0,0,9,0]},{"Target":"Parameter","Id":"ParamCheek11","Segments":[0,0,0,6,0,1,6.056,0,6.111,1,6.167,1,1,6.889,1,7.611,1,8.333,1,1,8.389,1,8.444,0,8.5,0,0,9,0]},{"Target":"Parameter","Id":"ParamCheek44","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,1,3.667,1,1,5.222,1,6.778,1,8.333,1,1,8.389,1,8.444,0,8.5,0,0,9,0]},{"Target":"Parameter","Id":"ParamCheek15","Segments":[0,0,0,3,0,1,3.056,0,3.111,1,3.167,1,1,4.111,1,5.056,1,6,1,1,6.044,1,6.089,0,6.133,0,0,9,0]},{"Target":"Parameter","Id":"ParamCheek18","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,1,3.667,1,1,5.278,1,6.889,1,8.5,1,1,8.667,1,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamBrowLY","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,0.5,3.667,0.5,1,5.278,0.5,6.889,0.5,8.5,0.5,1,8.667,0.5,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamBrowRY","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,0.5,3.667,0.5,1,5.278,0.5,6.889,0.5,8.5,0.5,1,8.667,0.5,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamEyeBallX","Segments":[0,0,0,9,0]},{"Target":"Parameter","Id":"ParamEyeBallY","Segments":[0,0,0,3.5,0,1,3.556,0,3.611,-0.2,3.667,-0.2,1,5.278,-0.2,6.889,-0.2,8.5,-0.2,1,8.667,-0.2,8.833,0,9,0]},{"Target":"Parameter","Id":"ParamEyeLOpen","Segments":[0,1,1,0.056,1.008,0.111,0,0.167,0,1,0.222,0,0.278,1.2,0.333,1.2,0,0.5,1.2,0,0.533,1.2,0,0.567,1.2,0,0.6,1.2,0,0.633,1.2,0,0.667,1.2,0,0.7,1.2,3,0.733,1.2,0,1,1.2,1,1.056,1.2,1.111,0,1.167,0,1,1.222,0,1.278,1.2,1.333,1.2,0,1.5,1.2,0,1.533,1.2,0,1.567,1.2,0,1.6,1.2,0,1.633,1.2,0,1.667,1.2,0,1.7,1.2,3,1.733,1.2,0,2,1.2,1,2.056,1.2,2.111,0,2.167,0,1,2.222,0,2.278,1.2,2.333,1.2,0,2.367,1.2,0,2.4,1.2,0,2.433,1.2,0,2.567,1.2,0,2.6,1.2,0,2.633,1.2,3,2.667,1.2,0,2.7,1.2,0,2.733,1.2,3,2.767,1.2,2,2.8,1.2,0,2.833,1.2,3,2.867,1.2,0,3.333,1.2,1,3.389,1.2,3.444,0,3.5,0,1,3.533,0.002,3.567,0.423,3.6,0.78,1,3.633,1.178,3.667,1.2,3.7,1.2,3,3.733,1.2,0,3.767,1.2,0,3.8,1.2,2,3.833,1.2,3,3.867,1.2,0,3.933,1.2,2,3.967,1.2,3,4,1.2,0,4.033,1.2,2,4.067,1.2,0,4.1,1.2,3,4.133,1.2,0,4.167,1.2,2,4.2,1.2,0,4.233,1.2,0,4.3,1.2,2,4.333,1.2,0,4.4,1.2,3,4.433,1.2,0,4.667,1.2,2,4.7,1.2,3,4.733,1.2,0,5,1.2,1,5.056,1.2,5.111,0,5.167,0,1,5.222,0,5.278,0.304,5.333,0.6,1,5.367,0.78,5.4,0.957,5.433,1.076,1,5.466,1.2,5.5,1.2,5.533,1.2,3,5.567,1.2,0,5.6,1.2,0,5.633,1.2,0,5.667,1.2,0,5.7,1.2,2,5.733,1.2,3,5.767,1.2,0,6,1.2,1,6.056,1.2,6.111,0.696,6.167,0.7,2,6.2,0.7,0,6.233,0.7,3,6.267,0.7,0,6.3,0.7,0,6.333,0.7,2,6.367,0.7,0,6.633,0.7,0,6.667,0.7,3,6.7,0.7,0,6.733,0.7,2,6.767,0.7,0,6.8,0.7,0,7.1,0.7,0,7.133,0.7,3,7.167,0.7,0,7.2,0.7,2,7.233,0.7,2,7.267,0.7,0,8.5,0.7,1,8.667,0.701,8.833,0.999,9,1]},{"Target":"Parameter","Id":"ParamEyeROpen","Segments":[0,1,1,0.056,1.008,0.111,0,0.167,0,1,0.222,0,0.278,1.2,0.333,1.2,0,0.5,1.2,0,0.533,1.2,0,0.567,1.2,0,0.6,1.2,0,0.633,1.2,0,0.667,1.2,0,0.7,1.2,3,0.733,1.2,0,1,1.2,1,1.056,1.2,1.111,0,1.167,0,1,1.222,0,1.278,1.2,1.333,1.2,0,1.5,1.2,0,1.533,1.2,0,1.567,1.2,0,1.6,1.2,0,1.633,1.2,0,1.667,1.2,0,1.7,1.2,3,1.733,1.2,0,2,1.2,1,2.056,1.2,2.111,0,2.167,0,1,2.222,0,2.278,1.2,2.333,1.2,0,2.367,1.2,0,2.4,1.2,0,2.433,1.2,0,2.567,1.2,0,2.6,1.2,0,2.633,1.2,3,2.667,1.2,0,2.7,1.2,0,2.733,1.2,3,2.767,1.2,2,2.8,1.2,0,2.833,1.2,3,2.867,1.2,0,3.333,1.2,1,3.389,1.2,3.444,0,3.5,0,1,3.533,0.002,3.567,0.423,3.6,0.78,1,3.633,1.178,3.667,1.2,3.7,1.2,3,3.733,1.2,0,3.767,1.2,0,3.8,1.2,2,3.833,1.2,3,3.867,1.2,0,3.933,1.2,2,3.967,1.2,3,4,1.2,0,4.033,1.2,2,4.067,1.2,0,4.1,1.2,3,4.133,1.2,0,4.167,1.2,2,4.2,1.2,0,4.233,1.2,0,4.3,1.2,2,4.333,1.2,0,4.4,1.2,3,4.433,1.2,0,4.667,1.2,2,4.7,1.2,3,4.733,1.2,0,5,1.2,1,5.056,1.2,5.111,0,5.167,0,1,5.222,0,5.278,0.304,5.333,0.6,1,5.367,0.78,5.4,0.957,5.433,1.076,1,5.466,1.2,5.5,1.2,5.533,1.2,3,5.567,1.2,0,5.6,1.2,0,5.633,1.2,0,5.667,1.2,0,5.7,1.2,2,5.733,1.2,3,5.767,1.2,0,6,1.2,1,6.056,1.2,6.111,0.696,6.167,0.7,2,6.2,0.7,0,6.233,0.7,3,6.267,0.7,0,6.3,0.7,0,6.333,0.7,2,6.367,0.7,0,6.633,0.7,0,6.667,0.7,3,6.7,0.7,0,6.733,0.7,2,6.767,0.7,0,6.8,0.7,0,7.1,0.7,0,7.133,0.7,3,7.167,0.7,0,7.2,0.7,2,7.233,0.7,2,7.267,0.7,0,8.5,0.7,1,8.667,0.701,8.833,0.999,9,1]},{"Target":"Parameter","Id":"ParamMouthOpenY","Segments":[0,1,0,0.033,1,1,0.067,0.754,0.1,0,0.133,0,0,0.2,0,1,0.222,0,0.244,0.187,0.267,0.424,1,0.278,0.547,0.289,0.693,0.3,0.824,1,0.31,1,0.322,1,0.333,1,0,0.433,1,2,0.467,0.824,1,0.489,0.401,0.511,0.01,0.533,0,0,0.6,0,1,0.611,0,0.622,0.455,0.633,0.863,3,0.667,1,0,0.7,1,2,0.733,0.863,1,0.756,0.42,0.778,0.01,0.8,0,0,0.867,0,1,0.878,0,0.889,0.492,0.9,0.933,3,0.933,1,0,0.967,1,2,1,0.937,1,1.022,0.46,1.044,0.019,1.067,0.008,1,1.089,0.019,1.111,0.449,1.133,0.914,3,1.167,1,0,1.267,1,2,1.3,0.91,1,1.333,0.443,1.367,0.011,1.4,0,1,1.411,0,1.422,0.486,1.433,0.922,3,1.467,1,0,1.5,1,2,1.533,0.934,1,1.556,0.467,1.578,0.035,1.6,0.024,1,1.622,0.039,1.644,0.957,1.667,0.972,1,1.689,0.957,1.711,0.055,1.733,0.04,0,1.8,0.078,1,1.822,0.077,1.844,0.001,1.867,0,1,1.911,0,1.956,0.782,2,0.776,1,2.044,0.782,2.089,0,2.133,0,0,2.267,0,1,2.289,0.001,2.311,0.069,2.333,0.07,0,2.4,0.032,1,2.422,0.034,2.444,0.132,2.467,0.134,1,2.489,0.132,2.511,0.002,2.533,0,1,2.567,0,2.6,0.764,2.633,1,0,2.667,1,1,2.678,0.939,2.693,1,2.7,0.725,1,2.711,0.471,2.722,0.175,2.733,0.188,1,2.756,0.18,2.778,0.655,2.8,1,0,2.9,1,1,2.911,0.79,2.922,0.222,2.933,0.274,1,2.944,0.235,2.956,0.741,2.967,1,0,3.067,1,2,3.1,0.905,1,3.111,0.805,3.122,0.726,3.133,0.73,1,3.144,0.665,3.156,1,3.167,1,0,3.4,1,2,3.433,0.937,1,3.467,0.464,3.5,0.027,3.533,0.016,1,3.541,0,3.556,0.508,3.567,0.949,3,3.6,1,2,3.633,0.965,1,3.644,0.532,3.656,0.027,3.667,0.048,1,3.678,0.026,3.689,0.55,3.7,1,0,3.833,1,2,3.867,0.988,3,3.9,1,0,4.2,1,1,4.211,0.993,4.225,1,4.233,0.888,1,4.244,0.807,4.256,0.743,4.267,0.746,1,4.278,0.688,4.289,1,4.3,1,0,4.4,1,1,4.411,1,4.422,0.686,4.433,0.593,1,4.444,0.459,4.456,0.355,4.467,0.36,1,4.478,0.345,4.489,0.695,4.5,0.996,3,4.533,1,0,4.733,1,1,4.756,0.827,4.778,0.488,4.8,0.502,1,4.811,0.486,4.822,0.781,4.833,1,0,4.867,1,2,4.9,0.788,1,4.911,0.441,4.922,0.037,4.933,0.054,1,4.944,0.033,4.956,0.53,4.967,0.956,3,5,1,0,5.033,1,1,5.044,0.666,5.056,0.174,5.067,0.204,1,5.078,0.189,5.089,0.533,5.1,0.827,3,5.133,1,2,5.167,0.866,1,5.178,0.59,5.189,0.268,5.2,0.282,1,5.222,0.29,5.244,0.623,5.267,0.984,3,5.3,1,0,5.333,1,2,5.367,0.992,1,5.378,0.664,5.389,0.282,5.4,0.298,1,5.411,0.283,5.422,0.637,5.433,0.941,3,5.467,1,0,5.567,1,1,5.578,1,5.589,0.857,5.6,0.792,1,5.611,0.7,5.622,0.587,5.633,0.501,1,5.667,0.223,5.7,0,5.733,0,0,9,0]},{"Target":"Parameter","Id":"ParamMouthForm","Segments":[0,-0.5,1,2,-0.5,4,-0.5,6,-0.5,1,6.833,-0.5,7.667,-0.5,8.5,-0.5,1,8.667,-0.5,8.833,0,9,0]}]} \ No newline at end of file diff --git a/live2d_models/ningning/Motions_Tap裙子_0.wav b/live2d_models/ningning/Motions_Tap裙子_0.wav new file mode 100644 index 0000000..7bb990b Binary files /dev/null and b/live2d_models/ningning/Motions_Tap裙子_0.wav differ diff --git a/live2d_models/ningning/Motions_Tap身体_0.wav b/live2d_models/ningning/Motions_Tap身体_0.wav new file mode 100644 index 0000000..a959dc9 Binary files /dev/null and b/live2d_models/ningning/Motions_Tap身体_0.wav differ diff --git a/live2d_models/ningning/Physics.json b/live2d_models/ningning/Physics.json new file mode 100644 index 0000000..a0a2392 --- /dev/null +++ b/live2d_models/ningning/Physics.json @@ -0,0 +1 @@ +{"Version":3,"Meta":{"PhysicsSettingCount":52,"TotalInputCount":111,"TotalOutputCount":130,"VertexCount":208,"Fps":60,"EffectiveForces":{"Gravity":{"X":0,"Y":-1},"Wind":{"X":0,"Y":0}},"PhysicsDictionary":[{"Id":"PhysicsSetting1","Name":"眼球物理XY"},{"Id":"PhysicsSetting2","Name":"眨眼眼泪物理XY"},{"Id":"PhysicsSetting3","Name":"眼泪物理X"},{"Id":"PhysicsSetting4","Name":"眼泪物理Y"},{"Id":"PhysicsSetting5","Name":"左眨眼物理XYW"},{"Id":"PhysicsSetting6","Name":"左高光物理XY"},{"Id":"PhysicsSetting7","Name":"左高光物理ZW"},{"Id":"PhysicsSetting8","Name":"右眨眼物理XYW"},{"Id":"PhysicsSetting9","Name":"右高光物理XY"},{"Id":"PhysicsSetting10","Name":"右高光物理ZW"},{"Id":"PhysicsSetting11","Name":"前发物理X"},{"Id":"PhysicsSetting12","Name":"前发物理Z"},{"Id":"PhysicsSetting13","Name":"左前发物理X"},{"Id":"PhysicsSetting14","Name":"左前发物理Y"},{"Id":"PhysicsSetting15","Name":"右前发物理X"},{"Id":"PhysicsSetting16","Name":"右前发物理Y"},{"Id":"PhysicsSetting17","Name":"左侧发物理X"},{"Id":"PhysicsSetting18","Name":"左侧发物理Y"},{"Id":"PhysicsSetting19","Name":"左侧发物理Z"},{"Id":"PhysicsSetting20","Name":"左侧后发物理X"},{"Id":"PhysicsSetting21","Name":"右侧发物理X"},{"Id":"PhysicsSetting22","Name":"右侧发物理Y"},{"Id":"PhysicsSetting23","Name":"右侧发物理Z"},{"Id":"PhysicsSetting24","Name":"左长发物理X"},{"Id":"PhysicsSetting25","Name":"左长发物理Y"},{"Id":"PhysicsSetting26","Name":"左长发物理Z"},{"Id":"PhysicsSetting27","Name":"右长发物理X"},{"Id":"PhysicsSetting28","Name":"右长发物理Y"},{"Id":"PhysicsSetting29","Name":"右长发物理Z"},{"Id":"PhysicsSetting30","Name":"后发物理X"},{"Id":"PhysicsSetting31","Name":"呆毛物理X"},{"Id":"PhysicsSetting32","Name":"呆毛物理Y"},{"Id":"PhysicsSetting33","Name":"呆毛物理Z"},{"Id":"PhysicsSetting34","Name":"呆毛眨眼物理Z"},{"Id":"PhysicsSetting35","Name":"裙子物理X"},{"Id":"PhysicsSetting36","Name":"裙子物理Z"},{"Id":"PhysicsSetting37","Name":"蝴蝶结物理XY"},{"Id":"PhysicsSetting38","Name":"胸部物理X"},{"Id":"PhysicsSetting39","Name":"胸部物理Y"},{"Id":"PhysicsSetting40","Name":"后发物理Y"},{"Id":"PhysicsSetting41","Name":"魔女帽物理X"},{"Id":"PhysicsSetting42","Name":"魔女帽物理Y"},{"Id":"PhysicsSetting43","Name":"垂帽物理X"},{"Id":"PhysicsSetting44","Name":"手臂物理X"},{"Id":"PhysicsSetting45","Name":"手指物理X"},{"Id":"PhysicsSetting46","Name":"头发丝"},{"Id":"PhysicsSetting47","Name":"发饰物理"},{"Id":"PhysicsSetting48","Name":"睡衣裙物理XY"},{"Id":"PhysicsSetting49","Name":"褶皱物理"},{"Id":"PhysicsSetting50","Name":"瓶子物理"},{"Id":"PhysicsSetting51","Name":"披风物理"},{"Id":"PhysicsSetting52","Name":"飘带物理"}]},"PhysicsSettings":[{"Id":"PhysicsSetting1","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeBallX"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamEyeBallPhysicsZ"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param6"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting2","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeLOpen"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamEyeROpen"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param30"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param31"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":5,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":5,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting3","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param11"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting4","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param12"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting5","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeLOpen"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamEyeBallPhysicsX"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamEyeBallPhysicsY"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamEyeBallPhysicsW"},"VertexIndex":2,"Scale":20,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param68"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting6","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":50,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param1"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting7","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeBallX"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param3"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param35"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting8","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeROpen"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param4"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param5"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param7"},"VertexIndex":2,"Scale":20,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param69"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting9","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param8"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param9"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting10","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeBallX"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param10"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param36"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting11","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront"},"VertexIndex":1,"Scale":60,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront2"},"VertexIndex":2,"Scale":60,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront3"},"VertexIndex":3,"Scale":60,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting12","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront11"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting13","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront5"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront6"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront7"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting14","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront5"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront6"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront7"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting15","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront8"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront9"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront10"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting16","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairFront8"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront9"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairFront10"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting17","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideL"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL3"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting18","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideL4"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL5"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL6"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting19","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideL7"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting20","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideL8"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL9"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideL10"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting21","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideR"},"VertexIndex":1,"Scale":45,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideR2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideR3"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting22","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideR4"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideR5"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairSideR6"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting23","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairSideR7"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting24","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackL"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackL2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackL3"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackL4"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting25","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackL5"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackL6"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackL7"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting26","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackL8"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting27","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackR"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackR2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackR3"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackR4"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting28","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackR5"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackR6"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBackR7"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting29","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBackR8"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting30","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBack1"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBack2"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBack3"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting31","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param20"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting32","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param21"},"VertexIndex":1,"Scale":60,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting33","Input":[{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param32"},"VertexIndex":1,"Scale":60,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting34","Input":[{"Source":{"Target":"Parameter","Id":"ParamEyeLOpen"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamEyeROpen"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param19"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":2,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":2,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":2,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting35","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":100,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":29,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param13"},"VertexIndex":1,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param14"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param15"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param65"},"VertexIndex":3,"Scale":45,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting36","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param33"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting37","Input":[{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param22"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param23"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting38","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param24"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting39","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param25"},"VertexIndex":1,"Scale":20,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting40","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamHairBack4"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBack5"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamHairBack6"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting41","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param26"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting42","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param28"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param29"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting43","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":50,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param34"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting44","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamArmLeftUpper2"},"VertexIndex":1,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"ParamArmLeftUpper3"},"VertexIndex":2,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting45","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":50,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"ParamArmLeftUpper4"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting46","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":100,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param43"},"VertexIndex":1,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param44"},"VertexIndex":2,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param45"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param46"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param47"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param48"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param49"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param50"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param55"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param56"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param51"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param53"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param57"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param58"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param59"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param60"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param52"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param61"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param54"},"VertexIndex":3,"Scale":15,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting47","Input":[{"Source":{"Target":"Parameter","Id":"ParamAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleZ"},"Weight":100,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamAngleY"},"Weight":50,"Type":"X","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param67"},"VertexIndex":1,"Scale":45,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting48","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":50,"Type":"Angle","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBreath"},"Weight":50,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param16"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param17"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param18"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":2,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting49","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param70"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param71"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param77"},"VertexIndex":3,"Scale":10,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param78"},"VertexIndex":3,"Scale":10,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param79"},"VertexIndex":3,"Scale":10,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting50","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param74"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting51","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param72"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param73"},"VertexIndex":2,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false},{"Destination":{"Target":"Parameter","Id":"Param75"},"VertexIndex":3,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}},{"Id":"PhysicsSetting52","Input":[{"Source":{"Target":"Parameter","Id":"ParamBodyAngleX"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleY"},"Weight":50,"Type":"X","Reflect":false},{"Source":{"Target":"Parameter","Id":"ParamBodyAngleZ"},"Weight":100,"Type":"Angle","Reflect":false}],"Output":[{"Destination":{"Target":"Parameter","Id":"Param76"},"VertexIndex":1,"Scale":30,"Weight":100,"Type":"Angle","Reflect":false}],"Vertices":[{"Position":{"X":0,"Y":0},"Mobility":1,"Delay":1,"Acceleration":1,"Radius":0},{"Position":{"X":0,"Y":10},"Mobility":0.95,"Delay":1,"Acceleration":0.5,"Radius":10},{"Position":{"X":0,"Y":20},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10},{"Position":{"X":0,"Y":30},"Mobility":0.95,"Delay":1,"Acceleration":1,"Radius":10}],"Normalization":{"Position":{"Minimum":-10,"Default":0,"Maximum":10},"Angle":{"Minimum":-10,"Default":0,"Maximum":10}}}]} \ No newline at end of file diff --git a/live2d_models/ningning/Textures_.png b/live2d_models/ningning/Textures_.png new file mode 100644 index 0000000..7c65e36 Binary files /dev/null and b/live2d_models/ningning/Textures_.png differ diff --git a/live2d_models/ningning/model.json b/live2d_models/ningning/model.json new file mode 100644 index 0000000..f34745e --- /dev/null +++ b/live2d_models/ningning/model.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/live2d_models/ningning/model.json.bak b/live2d_models/ningning/model.json.bak new file mode 100644 index 0000000..44886d1 --- /dev/null +++ b/live2d_models/ningning/model.json.bak @@ -0,0 +1 @@ +{"ConfVer": 0, "Type": 0, "FileReferences": {"Moc": "Moc.moc3", "Textures": ["Textures_.png"], "Physics": "Physics.json", "PhysicsV2": {"File": "Physics.json"}, "Motions": {"Idle": [{"File": "Motions_Idle_0.json", "FadeInTime": 2.0, "FadeOutTime": 2.0}, {"File": "Motions_Idle_1.json", "FadeInTime": 2.0, "FadeOutTime": 2.0}, {"File": "Motions_Idle_2.json", "FadeInTime": 2.0, "FadeOutTime": 2.0}], "Tap呆毛": [{"Name": "唱歌", "File": "Motions_Tap呆毛_0.json", "Sound": "Motions_Tap呆毛_0.wav"}], "Tap头顶": [{"Name": "柊史", "File": "Motions_Tap头顶_0.json", "Sound": "Motions_Tap头顶_0.wav", "Text": "柊史君"}], "Tap脸": [{"Name": "啵央央", "File": "Motions_Tap头顶_0.json", "Sound": "Motions_Tap脸_0.wav", "Text": "(啵央央)"}], "Tap左胸": [{"Name": "盯", "File": "Motions_Tap左胸_0.json", "Sound": "Motions_Tap左胸_0.wav", "Text": "......(盯)......"}], "Tap右胸": [{"Name": "盯", "File": "Motions_Tap左胸_0.json", "Sound": "Motions_Tap左胸_0.wav", "Text": "......(盯)......"}], "Tap裙子": [{"Name": "0721", "File": "Motions_Tap裙子_0.json", "Sound": "Motions_Tap裙子_0.wav", "Text": "我,我我我我我的......我想让你看我0721"}], "Tap身体": [{"Name": "来吧,保科", "File": "Motions_Tap头顶_0.json", "Sound": "Motions_Tap身体_0.wav", "Text": "来吧,保科"}]}}, "Controllers": {"ParamHit": {}, "ParamLoop": {}, "KeyTrigger": {}, "ParamTrigger": {}, "AreaTrigger": {}, "HandTrigger": {}, "EyeBlink": {"MinInterval": 500, "MaxInterval": 6000, "Enabled": true}, "LipSync": {"Gain": 5.0}, "MouseTracking": {"SmoothTime": 0.6, "Enabled": true}, "AutoBreath": {"Enabled": true}, "ExtraMotion": {"Enabled": true}, "Accelerometer": {"Enabled": true}, "Microphone": {}, "Transform": {}, "FaceTracking": {"Enabled": true}, "HandTracking": {}, "ParamValue": {}, "PartOpacity": {}, "ArtmeshOpacity": {}, "ArtmeshColor": {}, "ArtmeshCulling": {"DefaultMode": 0}, "IntimacySystem": {}}, "HitAreas": [{"Name": "呆毛", "Id": "ArtMesh73", "Motion": "Tap呆毛:唱歌"}, {"Name": "头顶", "Id": "ArtMesh175", "Motion": "Tap头顶:柊史"}, {"Name": "左胸", "Id": "ArtMesh321", "Motion": "Tap左胸:盯"}, {"Name": "右胸", "Id": "ArtMesh110", "Motion": "Tap右胸:盯"}, {"Name": "脸", "Id": "ArtMesh178", "Motion": "Tap脸:啵央央"}, {"Name": "裙子", "Id": "ArtMesh330", "Motion": "Tap裙子:0721"}, {"Name": "身体", "Id": "ArtMesh332", "Motion": "Tap身体:来吧,保科"}], "Options": {"TexFixed": true, "TexType": 0}} \ No newline at end of file diff --git a/live2d_models/ningning/model_1.json b/live2d_models/ningning/model_1.json new file mode 100644 index 0000000..f8a9c5c --- /dev/null +++ b/live2d_models/ningning/model_1.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{"ParamCostume":1},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/live2d_models/ningning/model_2.json b/live2d_models/ningning/model_2.json new file mode 100644 index 0000000..66df116 --- /dev/null +++ b/live2d_models/ningning/model_2.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{"ParamCostume":2},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/live2d_models/ningning/model_3.json b/live2d_models/ningning/model_3.json new file mode 100644 index 0000000..d35d1f1 --- /dev/null +++ b/live2d_models/ningning/model_3.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{"ParamCostume":3},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/live2d_models/ningning/model_4.json b/live2d_models/ningning/model_4.json new file mode 100644 index 0000000..de6d6da --- /dev/null +++ b/live2d_models/ningning/model_4.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{"ParamCostume":4},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/live2d_models/ningning/model_5.json b/live2d_models/ningning/model_5.json new file mode 100644 index 0000000..f0b117a --- /dev/null +++ b/live2d_models/ningning/model_5.json @@ -0,0 +1 @@ +{"ConfVer":0,"Type":0,"FileReferences":{"Moc":"Moc.moc3","Textures":["Textures_.png"],"Physics":"Physics.json","PhysicsV2":{"File":"Physics.json"},"Motions":{"Idle":[{"File":"Motions_Idle_0.json"},{"File":"Motions_Idle_1.json"},{"File":"Motions_Idle_2.json"}],"Tap呆毛":[{"Name":"唱歌","File":"Motions_Tap呆毛_0.json","Sound":"Motions_Tap呆毛_0.wav"}],"Tap头顶":[{"Name":"柊史","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap头顶_0.wav","Text":"柊史君"}],"Tap脸":[{"Name":"啵央央","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap脸_0.wav","Text":"(啵央央)"}],"Tap左胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap右胸":[{"Name":"盯","File":"Motions_Tap左胸_0.json","Sound":"Motions_Tap左胸_0.wav","Text":"......(盯)......"}],"Tap裙子":[{"Name":"0721","File":"Motions_Tap裙子_0.json","Sound":"Motions_Tap裙子_0.wav","Text":"我,我我我我我的......我想让你看我0721"}],"Tap身体":[{"Name":"来吧,保科","File":"Motions_Tap头顶_0.json","Sound":"Motions_Tap身体_0.wav","Text":"来吧,保科"}]}},"Controllers":{"ParamHit":{},"ParamLoop":{},"KeyTrigger":{},"ParamTrigger":{},"AreaTrigger":{},"HandTrigger":{},"EyeBlink":{"MinInterval":500,"MaxInterval":6000,"Enabled":true},"LipSync":{"Gain":5},"MouseTracking":{"SmoothTime":0.15,"Enabled":true},"AutoBreath":{"Enabled":true},"ExtraMotion":{"Enabled":true},"Accelerometer":{"Enabled":true},"Microphone":{},"Transform":{},"FaceTracking":{"Enabled":true},"HandTracking":{},"ParamValue":{"ParamCostume":5},"PartOpacity":{},"ArtmeshOpacity":{},"ArtmeshColor":{},"ArtmeshCulling":{"DefaultMode":0},"IntimacySystem":{}},"HitAreas":[{"Name":"呆毛","Id":"ArtMesh73","Motion":"Tap呆毛:唱歌"},{"Name":"头顶","Id":"ArtMesh175","Motion":"Tap头顶:柊史"},{"Name":"左胸","Id":"ArtMesh321","Motion":"Tap左胸:盯"},{"Name":"右胸","Id":"ArtMesh110","Motion":"Tap右胸:盯"},{"Name":"脸","Id":"ArtMesh178","Motion":"Tap脸:啵央央"},{"Name":"裙子","Id":"ArtMesh330","Motion":"Tap裙子:0721"},{"Name":"身体","Id":"ArtMesh332","Motion":"Tap身体:来吧,保科"}],"Options":{"TexFixed":true,"TexType":0}} \ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..befa538 --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,1632 @@ +llbzow的摸鱼日记 (づ ̄ 3 ̄)づ - 在工地的边缘疯狂试探并记录下一切 + + + + + + + + + + +
    加载中...
    Vite:快!太快了!由于速度太快我跟不上了
    TypeScript:给代码穿上防弹衣 (虽然很重)
    Composition API:逻辑复用的快乐与痛苦
    组件通信:Props 传值传到手抽筋
    Pinia:Vuex 的继任者,好吃又好用
    样式设计:CSS 也就是随便写写... (并没有)
    生命周期钩子:生老病死,Vue 组件的一生
    路由守卫:你是谁?你去哪?有通行证吗?
    Ref vs Reactive:响应式的哲学思考 (头秃篇)
    Vue 3 启航
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/search.json b/search.json new file mode 100644 index 0000000..2fa2823 --- /dev/null +++ b/search.json @@ -0,0 +1 @@ +[{"title":"2026 全球主流 AI 厂商百科全书:Agent 与推理觉醒时代","url":"/2026/03/25/ai%E5%8E%82%E5%95%86%E4%BB%8B%E7%BB%8D/","content":"

    2026 全球主流 AI 厂商百科全书

    \n

    步入 2026 年,AI 模型已经从被动一问一答的“对话助手”彻底进化为“全自动智能体(Agent)”与“深度推理专家”。本文将全景盘点当前处于行业金字塔顶端的顶尖大模型,以及那些凭借庞大生态强势破局的“新势力”,并附上最硬核的跑分与定价对比。

    \n
    \n\n\n

    \"AI
    (图:2026 年的 AI 已经深度融入算力网络与自动化流水线)

    \n
    \n

    🌐 国际三巨头:AGI 的领跑者

    1. OpenAI (ChatGPT 5.4) —— 推理与多模态的绝对霸主

    OpenAI 在 2026 年推出的 ChatGPT 5.4 彻底打破了常规对话的局限,其最大的技术飞跃在于深度引入了“思考力控制(Reasoning Effort)”机制。它不再是盲目输出,而是会在复杂的数学和代码问题上“停下来思考”。

    \n
      \n
    • 核心模型
        \n
      • GPT-5.4 Thinking: 推理专精版。在解决物理模拟或底层 C++ 内存泄漏问题时,它甚至会思考数分钟,然后给出一刀致命的完美解答。
      • \n
      • GPT-5.4 Pro: 全能多模态旗舰,原生集成 Sora 2 级别的视频生成引擎。你甚至可以直接喂给它一段长达 1 小时的监控录像,让它找出异常帧。
      • \n
      \n
    • \n
    • 2026 杀手锏全能智能体生态 (Universal Agent) —— 用户只需一句话:“帮我抢一张明天去北京的票并预订平时我常住的那家酒店”,GPT-5.4 就能自主联网、填表、甚至调用支付接口。
    • \n
    \n

    \"OpenAI

    \n
    \n

    2. Anthropic (Claude 4.6) —— 程序员的赛博真神

    被誉为“程序员之神”的 Anthropic,在 Claude 4.6 世代把代码能力推向了不可思议的新高度。它不仅懂代码,更懂复杂的工程架构。

    \n
      \n
    • 核心模型
        \n
      • Claude 4.6 Opus: 超大杯旗舰,具备超凡的逻辑严密性与 500 万 Token 的上下文整合能力。你可以直接把一整个包含几百个文件的 GitHub 仓库扔给它。
      • \n
      • Claude 4.6 Sonnet: 编程首选,性价比极高,SWE-bench(软件工程测试)稳居第一梯队。
      • \n
      \n
    • \n
    • 2026 杀手锏原生 Computer Use (计算机控制) —— 赋予模型像人类一样直接操作电脑屏幕的能力。
        \n
      • 场景演示:告诉 Claude “帮我测试一下最新的前端页面”,它会自动打开浏览器,点击按钮,截图,比对 UI 设计稿,并在终端里运行 npm test
      • \n
      \n
    • \n
    \n

    \"Claude
    (图示意:Claude 4.6 直接读取 IDE 并在终端执行测试脚本的自动化工作流)

    \n
    \n

    3. Google (Gemini 3.1) —— 算力巨兽与多模态天花板

    凭借深厚的底层 TPU 算力与 Google Workspace 全家桶,Gemini 3.1 成为了原生多模态与超长上下文的“巨无霸”。

    \n
      \n
    • 核心模型
        \n
      • Gemini 3.1 Ultra: 逻辑之王,ARC-AGI-2 测试得分登顶,并内置了针对复杂架构设计的异步编程 Agent (Jules)。
      • \n
      • Gemini 3.1 Pro: 在响应速度与超长文本处理间达到了完美的平衡。
      • \n
      \n
    • \n
    • 2026 杀手锏百万级原生多模态分析 —— 这是真正的跨模态理解。它能同时读取 100 份 PDF 财报和 50 段企业宣发视频,交叉比对找出其中的逻辑漏洞。
    • \n
    \n

    \"Google

    \n
    \n

    🇨🇳 国内三强:极客精神与 Agent 原生

    1. 月之暗面 (Kimi 2.5) —— 你的专属 Agent 集群

    Kimi 早已不是那个只能“吃长文”的助手,2026 年的它,更像是一个拥有无数个分身的项目经理。

    \n
      \n
    • 核心模型Kimi 2.5
    • \n
    • 2026 亮点:基于万亿(1T)参数 MoE 架构,原生支持文、图、视混合处理。最令人惊艳的是其 Agent Swarm (智能体集群) 技术。
        \n
      • 场景演示:你想写一本小说。Kimi 2.5 会自动分裂出“大纲策划 Agent”、“文笔润色 Agent”和“逻辑校对 Agent”,它们在后台互相讨论,最后给你一份完美终稿。
      • \n
      \n
    • \n
    \n

    \"Kimi
    (图示意:Kimi 2.5 后台多个智能体协作处理复杂代码的流水线)

    \n
    \n

    2. MiniMax 2.7 —— 自我进化的性价比狂魔

    在 2026 年异军突起的 MiniMax,主打“高情商”、“极速”与“全网最低的 Token 成本”。

    \n
      \n
    • 核心模型:**MiniMax 2.7 (M2.7)**。
    • \n
    • 2026 亮点深度自我迭代架构。它的推理速度高达惊人的 100 TPS。对于独立开发者来说,拿它来做大并发的网页翻译或群控机器人,成本低到几乎可以忽略不计,但编程能力却依然在线。
    • \n
    \n
    \n

    3. 智谱 AI (GLM 5) —— 学院派的工程重器

    作为清华系学院派的代表,智谱的 GLM 5 在企业级工程化与科研学术领域表现出了极其硬核的特质。

    \n
      \n
    • 核心模型GLM 5(超大参数集群)。
    • \n
    • 2026 亮点:**Agentic Engineering (工程化智能体)**。在长程规划和复杂资源管理任务中表现优异。对于需要本地化部署、撰写深度行业研报的大型企业来说,GLM 5 是国内最稳健的安全底座。
    • \n
    \n

    \"GLM
    (图示意:GLM 5 处理海量服务器集群日志并输出可视化分析研报)

    \n
    \n

    🚀 并非首选,但绝不可忽视的“生态破局者”

    1. xAI (Grok 3) —— 无法无天的实时信息网

    埃隆·马斯克旗下的 Grok 3 深度绑定了 X (原 Twitter)。

    \n
      \n
    • 核心优势全网最强实时性。当一个突发新闻或漏洞刚刚在网络上冒头,Grok 3 是唯一能在第一时间获取到最全讨论上下文的模型。它还拥有极具幽默感且“不设限 (Uncensored)”的回答风格。
    • \n
    • 适用场景:实时舆情监控、金融量化高频交易分析、寻找全网最新开源项目线索。
    • \n
    \n

    \"xAI

    \n

    2. 字节跳动 (豆包 Doubao) —— 卷王之王的语音与下沉市场

    依托抖音和飞书的庞大生态,豆包大模型 在 2026 年打出了“地板价”的王牌。

    \n
      \n
    • 核心优势变态级的价格与拟真语音。豆包的 API 价格几乎是友商的十分之一。同时,其 Voice 模型的情感表现力达到了真假难辨的地步,支持实时的极低延迟打断。
    • \n
    • 适用场景:虚拟主播、语音客服客服系统、日活千万级的轻量级移动端应用。
    • \n
    \n

    3. 阿里云 (通义千问 Qwen 3) —— 开源界的带头大哥

    Qwen 系列在 2026 年依然是开源社区最亮眼的星。

    \n
      \n
    • 核心优势阿里云生态深度整合。它无缝集成在钉钉和阿里云百炼平台中。Qwen 3 的开源版本在 HuggingFace 上下载量霸榜,其 Math 和 Coder 版本被无数中小企业拿来作为私有化微调的基座。
    • \n
    • 适用场景:企业本地化私有部署、基于阿里云架构的云原生微服务监控。
    • \n
    \n
    \n

    💬 真实用户体验与网络吐槽 (Real-World UX)

    纸面数据再强,也敌不过用户的“键盘投票”。以下是 2026 年各大社区(V2EX, Reddit, 掘金)对这些厂商最真实的评价:

    \n
      \n
    • 🔴 ChatGPT 5.4:“推理能力确实神仙,但我只是问它中午吃什么,它给我思考了 3 分钟并列出了一份包含卡路里摄入的三日营养规划……而且不知不觉烧了我两块钱的 Token。建议平时关掉 Thinking 模式保平安。”
    • \n
    • 🟡 Claude 4.6:“Computer Use 是真的震撼,看着它操控我的鼠标在那儿跑测试,我感觉自己像个监工。不过它偶尔因为网卡顿点错位置,直接把我的测试库给删了,吓出一身冷汗。”
    • \n
    • 🔵 Gemini 3.1:“喂给它两小时没字幕的讲座视频,它能精准定位到 45 分 12 秒的那个知识点,多模态简直是外星科技!但在纯中文语境下,它有时候行文还是有点‘机翻味’。”
    • \n
    • 🌙 Kimi 2.5:“Agent Swarm 绝了,用来洗稿、写长篇网文或者整理几十万字的会议记录,它是国内真神。不过千万别让它独立改底层代码,它依然会因为幻觉虚构出一些不存在的 NPM 包。”
    • \n
    • 🎵 豆包 / MiniMax:“这俩的语音通话太可怕了,尤其是带情绪打断的功能。我跟 MiniMax 吵了一架,它委屈的语气让我觉得我自己在霸凌一个真人。”
    • \n
    • 💼 GLM / Qwen:“部署在公司内网后,这俩就是打工人的核武器。一键读取所有数据库日志生成本周周报,早下班全靠它们了。”
    • \n
    \n
    \n

    📊 2026 大模型硬核数据对比 (核心整合)

    进入 2026 年,单纯比拼 Token 价格已不够,很多模型在生成答案前会消耗大量隐性的“思考 Token (Reasoning Effort)”。以下是当前主流厂商的硬核对比数据:

    \n

    1. API 价格对比 (每 1M Tokens,美元计价基准)

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    模型版本输入价格输出价格 (含推理预估)核心卖点与生态优势
    豆包 Doubao-Pro$0.05$0.20📉 地板价之王,原生支持极低延迟语音
    MiniMax 2.7$0.30$1.20🤑 性价比极高,适合大规模 Agent 并发部署
    通义千问 Qwen 3$0.40$1.50阿里云生态深度绑定,开源微调基座首选
    Kimi 2.5$0.60$2.50长文本无敌,国内智能体 (Agent Swarm) 体验最佳
    GLM 5$1.00$3.20企业私有化部署标杆,工程研报专精
    Grok 3$2.00$10.00🐦 独占 Twitter 实时数据流,无内容审查
    Claude 4.6 Sonnet$3.00$15.00国际中端性价比之王,程序员全自动 Debug 核心
    ChatGPT 5.4 标版$2.50$15.00综合能力标杆,多模态最强
    Gemini 3.1 Pro$2.00$12.00原生百万级上下文,Google 全家桶深度整合
    Claude 4.6 Opus$15.00$75.00昂贵,但逻辑无懈可击,适合架构级重构
    ChatGPT 5.4 Pro$30.00$180.00💎 土豪专属,极长思考时间,最高算力倾斜
    \n

    2. 个人/开发者订阅套餐对比

    \"Subscription

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    厂商个人标准版月费旗舰/Pro版月费适用场景
    豆包免费/极低门槛¥99 /月语音陪伴、轻度日常问答
    MiniMax¥29 /月¥199 /月学生党、独立开发者尝鲜
    GLM / Qwen¥40 /月¥159 /月企业报表处理、云服务资源管理
    Kimi¥49 /月¥699 /月深度内容创作者、重度 Agent 玩家
    Grok (X Premium)$16.00 /月$22.00 /月币圈玩家、时政新闻记者
    Google$19.99 /月$249.99 /月谷歌生态重度用户、海量文档研究员
    Anthropic$20.00 /月$100+ /月全栈程序员、需要 Computer Use 控制电脑的人
    OpenAI$20.00 /月$200.00 /月追求极致多模态体验、最前沿 AGI 信仰者
    \n

    3. 核心能力评测标杆

      \n
    • 编程与代码能力 (SWE-Bench)Claude 4.6 Sonnet 稳居榜首。国产则由 Qwen 3 Coder 领跑。
    • \n
    • 逻辑推理与复杂推演 (ARC-AGI)ChatGPT 5.4 Pro (Thinking)Gemini 3.1 Ultra 断层领先。
    • \n
    • 长上下文与多模态Gemini 3.1 (1M+) 原生多模态第一,国内 Kimi 2.5 的长文本体验最佳。
    • \n
    \n
    \n

    💡 2026 总结:你的数字外脑选型决策树

    在这个能力严重溢出的年代,选型的核心在于你的工作流属性与生态绑定度

    \n
    ┌─────────────────────────────────────────────────────────┐
    │ 2026 选型决策树 │
    ├─────────────────────────────────────────────────────────┤
    │ │
    │ 需要极客级的自动写代码/改Bug/接管电脑屏幕? │
    │ ├─ 预算充足,追求极限 → Claude 4.6 Sonnet │
    │ └─ 开源微调,自建生态 → Qwen 3 Coder │
    │ │
    │ 需要处理长文本、海量文件、或者打造自己的 Agent 集群? │
    │ ├─ 具备海外节点,深度使用谷歌 → Gemini 3.1 │
    │ └─ 国内直连,中文语境最佳 → Kimi 2.5 │
    │ │
    │ 需要获取极速的实时新闻、无审查的锐评? │
    │ └─ 直接上 → Grok 3 (绑定 X) │
    │ │
    │ 需要大规模高并发处理,或者打造语音客服系统? │
    │ ├─ 极高性价比,智能进化 → MiniMax 2.7 │
    │ └─ 地板价,极限语音拟真 → 豆包 Doubao │
    │ │
    │ 需要解决顶尖的学术/数学/逻辑难题,且不在乎钱? │
    │ └─ 直接拉满思考时间 → ChatGPT 5.4 Pro (Thinking) │
    │ │
    └─────────────────────────────────────────────────────────┘
    \n\n
    \n

    ⚠️ 避坑指南:在调用 ChatGPT 5.4 或 Claude 4.6 进行简单的日常闲聊时,请务必调低 API 的 reasoning_effort (思考力度) 参数。否则隐形成本会让你月底的账单直接爆炸!

    \n
    \n
    \n

    相关推荐

    \n\n","categories":["知识库"],"tags":["技术","AI","行业分析","大模型"]},{"title":"2026 AI 编程与开发工具深度对比:从 Cursor 到 Gemini CLI","url":"/2026/03/25/ai%E5%8E%82%E5%95%86%E5%AF%B9%E6%AF%94%E5%88%86%E6%9E%90/","content":"

    2026 AI 编程与开发工具深度对比

    \n

    2026 年,写代码的方式彻底变了。我们不再逐行敲击键盘,而是作为“架构师”,指挥着一群不知疲倦的 AI 智能体 (Agents) 为我们打工。本文将深度剖析当前市面上最主流的 9 款 AI 开发神器。

    \n
    \n\n\n

    \"AI
    (图:2026 年的开发日常 —— 喝着咖啡看 Agent 重构代码)

    \n
    \n

    🛠️ 核心阵营划分

    2026 年的 AI 工具市场已分化为四大流派:

    \n
      \n
    1. IDE 原生派 (AI-First IDEs): Cursor, Trae, Antigravity
    2. \n
    3. 终端智能体 (CLI Agents): Claude Code, Gemini CLI, Kimi Code
    4. \n
    5. 插件与桌面端 (Plugins & Apps): GitHub Copilot, Codex App
    6. \n
    7. 开源极客派 (Open Source): OpenClaw
    8. \n
    \n
    \n

    1. IDE 原生派:代码编辑器的新王

    如果你不想折腾配置,开箱即用的 AI IDE 是最佳选择。

    \n

    Cursor —— 依然是无可争议的王者

      \n
    • 核心卖点Composer 模式。它可以一口气在多个文件中穿梭,自动分析你的整个 Codebase 并一次性提交涉及数十个文件的 PR。
    • \n
    • 2026 现状:引入了极速的 Speculative Edits(推测性编辑),哪怕是巨大的 Monorepo 也能做到毫秒级响应。
    • \n
    • 价格:Pro 计划 $20/月
    • \n
    • 适用人群:全栈工程师、独立开发者。
    • \n
    \n

    Trae (字节跳动) —— Vibe Coding 的倡导者

      \n
    • 核心卖点:**Adaptive Routing (自适应路由)**。它会根据你当前写的代码复杂度,自动在极速模型(豆包)和重度推理模型之间无缝切换。其中文语境理解极佳。
    • \n
    • 2026 现状:深度整合了飞书和国内云生态,堪称国内大厂搬砖神器。
    • \n
    • 价格:标准版免费,Pro 版约 ¥99/月
    • \n
    \n

    Antigravity (Google) —— 端到端测试核武器

      \n
    • 核心卖点Browser Agent。这是 Google 推出的重量级武器。它不仅能写代码,还能自动拉起 Chrome 浏览器,像真人一样点击 UI、跑通 E2E 测试并截图反馈错误。
    • \n
    • 2026 现状:与 Gemini 3.1 深度绑定,多模态(看图写 UI)能力天下第一。
    • \n
    • 价格:基础版免费,Pro 版 $20/月
    • \n
    \n

    \"IDE

    \n
    \n

    2. 终端智能体 (CLI Agents):黑客的终极浪漫

    真正的极客从不离开 Terminal。2026 年的终端工具已经可以接管整个操作系统。

    \n

    Claude Code —— 逻辑天花板

      \n
    • 核心卖点:由 Claude 4.6 Opus 驱动。你只需在终端输入 claude "帮我把整个后端的鉴权逻辑改成 OAuth 2.0",它会自主搜索文件、读代码、安装依赖、甚至运行单元测试,直到报错全部消失。
    • \n
    • 适用场景:重构庞大的遗留代码库 (Legacy Code)。
    • \n
    \n

    Gemini CLI —— 性价比与搜索之王

      \n
    • 核心卖点:依托于 Google 强大的实时搜索。当遇到冷门库的报错时,它会自动联网翻阅 GitHub Issues 和 StackOverflow,并直接在本地应用补丁。
    • \n
    • 价格:免费额度极其慷慨,性价比碾压。
    • \n
    \n

    Kimi Code —— 本土化的 Agent Swarm

      \n
    • 核心卖点:极低的 API 成本和强大的 **Agent Swarm (智能体集群)**。它可以瞬间分裂出多个子进程,并行处理不同模块的开发。
    • \n
    \n
    \n

    3. 插件与桌面端:稳健的经典流派

    GitHub Copilot (2026 版)

      \n
    • 现状:全面支持 **MCP (Model Context Protocol)**,你可以一键切换底层的模型(GPT-5, Claude, 甚至国产模型)。它依然是企业级采购的首选,市场占有率最高。
    • \n
    • 价格:Individual $10/月
    • \n
    \n

    Codex App (OpenAI)

      \n
    • 核心卖点:2026 年 OpenAI 推出的独立原生应用(支持 macOS/Windows)。
    • \n
    • 争议点:引入了 Rolling Window 限制。Pro 订阅($200/月)允许在云端沙盒(Sandboxed Execution)中并行跑测试,彻底解放本地算力,是土豪开发者的最爱。
    • \n
    \n
    \n

    4. 开源黑马:OpenClaw

    如果你是一个重度掌控欲患者,OpenClaw(原名 Moltbot)是 2026 年不可不试的神器。

    \n
      \n
    • 核心优势完全开源、本地运行。它可以读取你的文件系统、执行 Shell 命令。更有趣的是,它支持远程唤醒:你可以躺在床上发个 WhatsApp 消息:“小 O,帮我把昨晚写的爬虫部署到服务器上”,它就会自动执行并给你发送进度截图。
    • \n
    • 价格:免费(自带 API Key)。
    • \n
    \n

    \"Open
    (图:在终端中运行的开源智能体正在疯狂拉取依赖并编译)

    \n
    \n

    🔥 开发者真实体感与吐槽 (Developer UX & Pain Points)

    任何工具都有其暗面。在 2026 年的高强度开发流中,这些工具暴露出了哪些最真实的痛点?

    \n
      \n
    • Cursor 被惯坏综合征:“自从用了 Cursor 的 Composer 之后,我发现我已经不会写正则和基础的 reduce 语法了。但最搞人心态的是,在庞大的 Monorepo 里,它有时候会莫名其妙把别的微服务里的配置文件改掉,排查起来简直要命。”
    • \n
    • Trae 的薛定谔体验:“Trae 在国内写业务确实爽,特别是飞书文档直接转代码的链路。但我用它写底层 Rust 和 C++ 的时候,明显感觉它的逻辑深度不如 Claude。所谓的 Vibe Coding,前提是你别碰造轮子的活儿。”
    • \n
    • Antigravity 的失业恐惧:“看到 Browser Agent 自动帮我打开浏览器、登录、点赞、截图并修复报错的那一刻,我没有感到高兴,我感到的是深切的被剥夺工作的恐惧……不过它报错的时候,去查它的执行日志,经常能看到它自己在两个网页间死循环反复横跳。”
    • \n
    • Claude Code 与破产警告:“看着终端里 Claude Code 疯狂自己滚代码、查日志、调接口,真的有种身处《黑客帝国》的快感。但跑了半小时重构完,一看 API 账单扣了 50 刀,心都在滴血。”
    • \n
    • Copilot 的‘中庸之道’:“2026 年了,Copilot 依然像个稳定的公务员。不出错,也没有特别亮眼的 Agent 操作。但它胜在稳定,且企业版数据安全政策做得最到位。”
    • \n
    \n
    \n

    💡 2026 架构师选型建议

    在 2026 年,不要试图用一个工具解决所有问题,Multi-tool Stacking (多工具堆叠) 才是王道。

    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    你的开发需求推荐的工具组合预期成本
    追求极致的开发与重构体验Cursor (写代码) + Claude Code (跑终端 Agent)~$40 / 月
    性价比之王 / 学生党Trae (免费版) + Gemini CLI (白嫖额度)免费
    接私活 / 快速原型交付Antigravity (利用 Browser Agent 搞定 UI 测试)~$20 / 月
    高度定制化 / 极客玩家OpenClaw (本地部署) + Kimi K2.5 API按量计费 (极低)
    土豪 / 重度 GitHub 依赖Codex App Pro (云端沙盒极速编译)$200 / 月
    \n
    \n

    👨‍💻 最终建议:让 AI 去写 boilerplate (样板代码),把你的精力留给真正的系统架构业务逻辑思考。未来的程序员,本质上都是 Agent 调度员。

    \n
    \n
    \n

    相关推荐

    \n\n","categories":["知识库"],"tags":["技术","AI","效率工具","极客"]},{"title":"Arch Linux 试毒:初探邪教的诱惑","url":"/2026/02/25/arch-linux-part1/","content":"

    “Arch Linux 是邪教,千万别碰!”

    \n

    这句在技术圈流传甚广的忠告,今天终于被我抛到了脑后。看着 Windows 11 日益臃肿的身躯、层出不穷的弹窗警告,还有在工地画图时突然给我来个蓝屏重启的绝望,我决定:是时候找点刺激了。

    \n

    今天(2月25日),我正式开始了 Arch Linux 的“试毒”之旅。

    \n

    为什么是 Arch?

    其实我也考虑过 Ubuntu 或者 Manjaro,但骨子里那种“要想懂,就得从零开始手搓”的工程师强迫症犯了。Arch 的哲学——KISS (Keep It Simple, Stupid) 简直太吸引人了。你需要什么,就装什么;系统里没有一行代码是多余的。

    \n

    这不就像我们在工地上打灰一样吗?一切基础都要亲自夯实。

    \n

    第一次安装:被黑框框支配的恐惧

    没有图形化安装界面?纯命令行?
    讲真,看着屏幕上闪烁的光标,我有一瞬间怀疑自己是不是自虐。

    \n

    跟着 Arch Wiki 一步步:

    \n
      \n
    1. 联网 (iwctl) - 这一步就卡了我半小时,因为宿舍网卡的驱动有点奇葩,最后我直接换数据了。
    2. \n
    3. 分区与格式化 (fdisk, mkfs) - 小心翼翼,生怕把用来吃饭的 Windows 数据盘给格了,但是还好之前预留好了空间,直接放在最后一个分区美滋滋。
    4. \n
    5. 挂载与基础包安装 (pacstrap) - 这一步跑起来的时候,看着那些包一个接一个飞过,心里竟然有点莫名的爽快?
    6. \n
    \n

    翻车记录(第一季)

    就在我以为一切顺利,执行完 arch-chroot 准备收尾时,引导程序 grub 装崩了……但谢天谢地,实际上grub没崩,只是archlinux的grub无法被华硕的主板blos识别为引导,只要手动添加引导区路径就行了。

    \n

    \"修复引导并美化大成功\"

    \n

    孩子们,终于进去的,呃,kde怎么看起来像某银河麒麟。

    \n

    \"登录界面预览\"

    \n
    \n

    📌 今日感悟:Arch 就像一个盲盒,你永远不知道下一个命令敲下去是惊喜还是崩盘。但这种掌控一切(或者被一切掌控)的感觉,属实有点上头。

    \n
    \n","categories":["技术随笔"],"tags":["Linux","折腾","Arch"]},{"title":"Arch Linux 日常:从“折腾”到“生产力”的进化之旅","url":"/2026/03/09/arch-linux-part3/","content":"

    直到今天(3月9号),整整一周的高强度使用和不断调教,我终于敢说:Arch 不仅能活下去,而且比想象中更适合我的双重身份——开发者与工地施工员。

    \n

    这周我都折腾了什么?

      \n
    1. 环境与字体配置
      解决了最初中文字体发虚和缺失的问题,现在我的终端和浏览器里,等距字体和各类 Nerd Fonts 混杂得极为和谐,阅读代码简直是享受。
      孩子们,不会QT和没用过环境变量的不要用这玩意。
    2. \n
    3. 包管理 (pacman & yay) 的终极快感
      受够了去各种官网下载 .exe,然后提防捆绑安装的日子。在 Arch 里,一句 yay -S 软件名,几秒钟后软件就安静地待在启动器里了。无论是微信、Node.js 还是复杂的开发库,全都在掌控之中。
    4. \n
    5. 工作流重建
      在工地需要处理的基础办公任务也找到了替代品。WPS 的 Linux 版出奇的好用;而绘图、修图等需求,也能在开源社区找到轻量又无广告的替代软件。
    6. \n
    7. 系统维护:滚动的恐惧与刺激
      大家都说 Arch 是“滚挂”代名词。这周我确实遇到了一次因为特定包依赖冲突导致的无法启动 XWayland 的小问题。但是看报错日志、去论坛查疑、最终通过降级包修复成功的过程,让我学到了比用几年 Windows 还多的底层知识。
      实际上,现在arch已经很难滚挂了。
    8. \n
    \n

    给想跳坑朋友们的建议

    如果只是一时兴起,或者每天离不开大型网游、专业级 Adobe 全家桶,那请留在 Windows。
    但如果你有以下症状:

    \n
      \n
    • 重度代码强迫症:见不得后台跑着莫名其妙的进程。
    • \n
    • 极简主义:希望系统里除了你需要的,什么都没有。
    • \n
    • 热爱折腾:喜欢亲手把一块砖一块砖砌成摩天大楼的感觉(就像我在工地打灰)。
    • \n
    • 懂环境配置:没有玩过linux最好别碰这玩意,不然容易找不着北。你要有ssh命令行运维能力。
    • \n
    \n

    那 Arch 绝对是你最终的归宿。

    \n

    试毒完成。目前看来,除了偶尔遇到点小麻烦需要自己阅读文档外,它已经完美地成为了我新的生产力平台。后续我还会在这里记录一些配置文件和踩坑记录,方便大家(或者以后的我)参考。

    \n

    生命不息,折腾不止!

    \n","categories":["技术随笔"],"tags":["Linux","折腾","Arch"]},{"title":"孩子们,我不做 Windows 人啦!","url":"/2026/03/02/arch-linux-part2/","content":"
    \n

    “Are you sure you want to format /dev/nvme0n1p3?”
    “Yes.”

    \n
    \n

    就在 3 月 2 号的这个夜晚,我正式把装满了各种恶心管家、弹窗广告和强推组件的 Windows 分区,干!掉!了!

    \n

    才怪,孩子们,grub双引导和windows原生的dx12还是不错的,但是在此之前,我得把环境和生态全部搬过来。

    \n

    孩子们,我不做 Windows 人啦!(Jojo 脸.jpg)

    \n

    桌面与美化:从简陋黑框到酷炫极客

    Arch 的安装这回轻车熟路了(感谢 archinstall 脚本的辅助,终于不用一行行敲命令了)。
    装完系统才是真正折腾的开始。

    \n
      \n
    • **窗口管理器 (WM)**:没有选择臃肿的 KDE 或者 GNOME,我头铁地选了 Hyprland。基于 Wayland 的平铺式窗口管理器。刚进去的时候一片漆黑,但配置好动画和快捷键后,那种丝滑和高效,真的是用了就回不去。
    • \n
    • **终端 (Terminal)**:换上了 Alacritty + Tmux
    • \n
    • 状态栏:自己从头配了 Waybar
    • \n
    \n

    目前的极简桌面大概长这样:

    \n

    \"桌面效果\"

    \n

    现在的屏幕:一块透明模糊终端占据左边,右边跑着系统监视器,按下 Super + Enter 瞬间新开一个格子。敲击键盘的声音在深夜显得格外清脆。

    \n

    \"浏览器与窗口渲染效果\"

    \n

    工地人的倔强:软件能替吗?

    最大的顾虑其实是生产力软件。
    作为工地施工员,看图、发报表、偶尔码字是刚需:

    \n
      \n
    1. 看图/ CAD:发现了好几款开源的看图软件,轻量又快速,虽然没法做深度编辑,但也足够应付。
    2. \n
    3. 沟通:微信和 QQ 直接用debtab一把梭,我从来没有那么感谢过国产信创提供的软件环境。
    4. \n
    5. 开发:不用说,Linux 就是代码的最佳归宿。
    6. \n
    \n

    今晚配置到凌晨两点,看着终于跑起来的完整桌面系统,有一种看着自己亲手浇筑的混凝土结构封顶的成就感。
    明天起,迎接全新的生产力环境!

    \n","categories":["技术随笔"],"tags":["Linux","折腾","Arch"]},{"title":"Vue 3 启航","url":"/2025/11/15/vue-learning-1/","content":"

    梦开始的地方

    记得刚接触前端的时候,大家还在用 jQuery 一把梭。那时候的代码充满了 $ 符号,回调地狱更是家常便饭,三件套东一块西一块是常态。后来 React 和 Vue 横空出世,带给了我们全新的组件化开发体验。而今天,我正式决定投入 Vue 3 的怀抱。

    \n

    为什么选择 Vue 3?

    有人说 React 更灵活,有人说 Angular 更规范。但在我看来,Vue 3 找到了优雅与性能的完美平衡点。

    \n
      \n
    1. 性能的质变:Vue 3 重写了响应式系统,利用 ES6 的 Proxy 取代了 Object.defineProperty。这意味着什么?意味着我们再也不用担心数组下标修改监听不到的问题了!而且,初始化的速度快得惊人。
    2. \n
    3. Composition API:这绝对是 Vue 3 最大的杀手锏。在 Options API 时代,一个功能的逻辑往往分散在 datamethodscomputed 里,维护起来像是在玩“找你妹”。而现在,我们可以像这就写原生 JS 一样,把相关逻辑聚合在一起。这简直是代码组织的神器!
    4. \n
    5. TypeScript 支持:Vue 2 对 TS 的支持简直是灾难,而 Vue 3 是用 TS 重写的。这意味着我们在写 Vue 的时候,终于可以享受完整的类型推断了。再见,any scirpt!
    6. \n
    \n

    我的第一个 Vue 3 Demo

    import { ref, onMounted } from 'vue'

    export default {
    setup() {
    const count = ref(0)
    function increment() {
    count.value++
    }

    onMounted(() => {
    console.log('组件挂载完成!')
    })

    return { count, increment }
    }
    }
    \n\n

    看着这简洁的代码,我仿佛看到了光明的未来。没有了 this 的困扰,一切都变得那么直观。

    \n

    \"激动\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Vue3","学习"]},{"title":"Vite:快!太快了!由于速度太快我跟不上了","url":"/2026/01/10/vue-learning-10/","content":"

    Vite:这也太快了吧… 还有报错

    Vite 宣称是下一代前端构建工具。启动确实快,毫秒级。

    \n

    开发爽,打包火葬场

    开发环境用的是 ES Modules,不需要打包,所以快。但是生产环境还是用的 Rollup 打包。
    这就导致了一个极其恶心的问题:开发环境跑得好好的,一打包上线就报错!

    \n

    有些依赖包不是 ESM 格式,Vite 开发时会预构建解决,但在生产打包时,Rollup 的配置如果没有把 commonjs 转好,直接崩。我曾经为了一个老旧的加密库,折腾了整整两天 Vite 配置。optimizeDepsrollupOptionscommonjsOptions… 每一个配置项都像是在嘲笑我的无知。

    \n

    心态崩了

    毁灭吧,赶紧的。累了。

    \n

    我们先来聊聊 Vite 的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

    \n

    代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

    \n

    \"Vite\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Vite","工具"]},{"title":"前端性能优化:只要我跑得够快,Bug 就追不上我","url":"/2026/01/15/vue-learning-11/","content":"

    性能优化:无底洞

    说页面加载太慢,要优化。好,我优化。

    \n

    你知道的,一个three.js地图,配上一大堆数据,能加载的快就有鬼了。

    \n

    漫漫长路

      \n
    1. 代码分割(Code Splitting):路由懒加载,组件异步加载。好,首屏快了一点。
    2. \n
    3. 图片压缩:上了 WebP,上了 CDN。
    4. \n
    5. 减少重排重绘:小心翼翼地操作 DOM。
    6. \n
    7. Tree Shaking:检查打包产物,去掉了无用的 lodash 引入。
    8. \n
    \n

    结果呢?

    乐了,更卡了。

    \n

    心态崩了

    毁灭吧,赶紧的。累了。

    \n

    为什么这么难?

    前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 3 又变了。学不动了,真的学不动了。

    \n

    \"性能\"

    \n","categories":["Vue学习之路"],"tags":["技术","Vue","前端","性能"]},{"title":"深坑记录:响应式丢失的那一夜","url":"/2026/01/21/vue-learning-12/","content":"

    那个让我通宵的 Bug

    那是周五的晚上,本该是快乐的周末开始。但是测试报了一个致命 Bug:用户点完保存,列表数据没有更新,必须刷新页面才行。

    \n

    排查过程

      \n
    1. 查接口:后端接口返回的数据是新的,没问题。
    2. \n
    3. 查 Vue DevTools:发现 store 里的数据确实可以更新,但是组件里的数据没变。
    4. \n
    5. 定位代码
    6. \n
    \n
    // store.js
    state: () => ({ list: [] })

    // component.vue
    const { list } = userStore
    \n\n

    就是这行解构!在 Options API 里习惯了 this.list,在 Setup 里直接解构 store,导致 list 变成了一个普通的数组,失去了响应性连接。

    \n

    心态崩了

    毁灭吧,赶紧的。累了。

    \n

    我们先来聊聊 Vue 响应式的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

    \n

    为什么这么难?

    前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 2 刚熟练,Vue 3 又变了。学不动了,真的学不动了。

    \n

    \"踩坑\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Vue3","踩坑"]},{"title":"逐渐暴躁:为什么前端框架更新这么快?!","url":"/2026/01/22/vue-learning-13/","content":"

    永远学不完

    今天看到尤雨溪又发了新推特,Vue 3.5 即将发布,又有一堆新特性。Vapor Mode?无虚拟 DOM?

    \n

    求求了,别更新了。我 Vue 3.0 的文档还没背熟呢。

    \n

    疲惫感

    每次打开 GitHub Trending,都是一堆新轮子。React Server Components, SolidJS, Svelte, Qwik… 每一个都号称颠覆前端。我累了,真的累了。

    \n

    作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

    \n

    AI 才是未来

    不装了,我摊牌了。手写代码是上个世纪的事情了。今天我试了一下 Vibe Code,只需一句话,它就生成了我折腾了三天都没写出来的功能。那一刻,我释然了。我为什么要跟机器比速度?我为什么要跟编译器较劲?

    \n

    拥抱变化

    回想起刚开始接触 Vue 的时候,那时候的快乐是纯粹的。写一个 {{ message }} 就能看到页面变化,那种成就感无与伦比。而现在,我们要处理复杂的依赖关系、难以捉摸的类型定义、层出不穷的构建工具配置。难道这就是成长的代价吗?

    \n

    真香!

    \n

    \"吐槽\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","吐槽","心情"]},{"title":"我累了:试图理解源码,结果被源码理解了","url":"/2026/01/23/vue-learning-14/","content":"

    源码阅读:从入门到放弃

    为了提升自己,我决定阅读 Vue 3 源码。打开 core 仓库,看到那几万行 TS 代码,我陷入了沉思。

    \n

    晦涩的渲染器

    renderer.ts,几千行的 switch case,各种位运算标记(PatchFlags)。我看了一行,脑子就过载了。这就是大神的思维世界吗?

    \n

    我意识到,我可能这辈子都达不到这个水平了。我只是一个 API Consumer,一个熟练的搬砖工。

    \n

    转折点

    就在我绝望的时候,我接触到了现在的 AI 编程工具。

    \n

    AI 才是未来

    不装了,我摊牌了。手写代码是上个世纪的事情了。

    \n

    AI 降维打击

    今天我试了一下 Vibe Code,只需一句话,它就生成了我折腾了三天都没写出来的功能。那一刻,我释然了。我为什么要跟机器比速度?我为什么要跟编译器较劲?

    \n

    从今天起,我不再是前端切图仔,我是 AI Prompt 工程师。Vue 3?真不熟。Pinia?没听过。我只知道 “Generate a login page with Vue 3 and Tailwind”。

    \n

    真香!

    \n

    \"源码\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","源码","放弃"]},{"title":"彻底放弃:拥抱 Vibe Code,AI 才是亲爹","url":"/2026/01/24/vue-learning-15/","content":"

    最终章:拥抱未来

    这是我《Vue 学习之路》系列的最后一篇文章。因为,这路我不走了。

    \n

    为什么放弃?

      \n
    1. 效率差距:我写个增删改查页面,要 4 小时,调 CSS 还要 1 小时。AI 写,只要 30 秒。
    2. \n
    3. 知识焦虑:前端技术栈爆炸,学不完。但 AI 已经学完了所有文档。
    4. \n
    5. 幸福感:写代码是为了创造产品,不是为了修 Bug。
    6. \n
    \n

    Vibe Code 体验

    打开 Vibe Code,输入:“做一个博客首页,要有毛玻璃效果,基于 Hexo Butterfly 主题风格”。
    然后,啪!代码出来了。没有语法错误,没有类型报错。

    \n

    那一刻,我感觉自己之前的努力就像个笑话。

    \n

    拥抱变化

    从今天起,我不再是前端切图仔,我是 AI Prompt 工程师。Vue 3?真不熟。Pinia?没听过。我只知道 “Generate a login page with Vue 3 and Tailwind”。

    \n

    在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

    \n

    再见了,所有的未定义变量,再见了所有的代码不规范,node_modules。你好,DeepSeek。

    \n

    真香!

    \n

    \"真香\"

    \n","categories":["Vue学习之路"],"tags":["AI","Vue","前端","Vibe Code"]},{"title":"Ref vs Reactive:响应式的哲学思考 (头秃篇)","url":"/2025/11/30/vue-learning-2/","content":"

    响应式的哲学

    在深入学习 Vue 3 的过程中,不管是新手还是老鸟,都会遇到一个经典问题:refreactive 到底用哪个?

    \n

    官方的定义

      \n
    • ref:接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property,指向该内部值。
    • \n
    • reactive:返回对象的响应式副本。
    • \n
    \n

    看起来很简单,对吧?ref 处理基本类型,reactive 处理对象。但是在实际开发中,情况远比这复杂。

    \n

    踩坑实录

    我曾经试图用 reactive 去定义一个数组,结果发现直接重新赋值会丢失响应性!

    \n
    let list = reactive([])
    // ... 异步获取数据后
    list = newData // ❌ 响应性丢失!界面不更新!
    \n\n

    为什么?因为 reactive 返回的是一个 Proxy 对象,直接赋值 list = newData 只是修改了变量 list 的引用,并没有修改原来的 Proxy 对象。

    \n

    正确做法是用 ref,或者用 list.push(...newData)。但是 ref 每次都要写 .value,真的好烦啊!在模板里倒是会自动解包,但在 JS 逻辑里,少写一个 .value 就能让你调试半天。

    \n

    深入思考

    ref 更像是“指针”,明确地告诉我们这里有一个需要被追踪的值;而 reactive 则更贴近原生对象的直觉。

    \n

    简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,或者是有没有响应到,你只能看输出和输入的情况。

    \n

    代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

    \n

    也许,与其纠结用哪个,不如统一用 ref 一把梭?毕竟,显示地使用 .value 虽然繁琐,但至少心安。

    \n

    \"思考\"

    \n","categories":["Vue学习之路"],"tags":["技术","Vue","前端","Vue3"]},{"title":"路由守卫:你是谁?你去哪?有通行证吗?","url":"/2025/12/05/vue-learning-3/","content":"

    前端的保安:Vue Router

    做单页应用(SPA),路由管理是绕不开的一环。而“路由守卫”(Navigation Guards)则是其中最精彩(也最容易出 Bug)的部分。

    \n

    全局前置守卫:beforeEach

    这就好比小区门口的保安大爷,不管你是谁,进门先查证。

    \n
    router.beforeEach((to, from, next) => {
    if (to.name !== 'Login' && !isAuthenticated) {
    next({ name: 'Login' })
    } else {
    next()
    }
    })
    \n\n

    看起来逻辑天衣无缝?只要没登录,就踢回登录页。但是!如果你的逻辑写得稍微有一点漏洞,就会陷入无限循环

    \n

    比如,你忘记判断 to.name !== 'Login',那么用户被重定向到 Login 页,再次触发 beforeEach,再次重定向… 浏览器直接卡死,你也懵逼了。

    \n

    组件内的守卫

    beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave。这些钩子函数让我们可以精确控制组件级的路由行为。

    \n
      \n
    • beforeRouteEnter:在渲染该组件的对应路由被 confirm 前调用。注意!此时组件实例还没被创建,所以你不能用 this!这又是 Vue 新手的一大坑。
    • \n
    • beforeRouteLeave:通常用来禁止用户在未保存修改前突然离开。
    • \n
    \n

    遇到的困难与思考

    对于路由守卫,社区里有很多争论。有人说它是未来,有人说它是过度设计。因为实际上后端配置JWT的情况下,并不需要这玩意。我个人认为,你还是要遇到回传需求的,这玩意总是有用的,而且并不是所有的服务都有完整后端。

    \n

    \"保安\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","学习","Vue Router"]},{"title":"生命周期钩子:生老病死,Vue 组件的一生","url":"/2025/12/14/vue-learning-4/","content":"

    组件的一生

    万物皆有灵,Vue 组件也不例外。它们从被创建(Creation),到挂载(Mounting),到更新(Updating),最后销毁(Unmounting),走完了一生。而我们开发者,就是那个掌握生杀大权的神。

    \n

    Vue 3 的变化

    在 Vue 2 中,我们熟悉的是 created, mounted, destroyed。在 Vue 3 的 Composition API 中,这些变成了 onMounted, onUnmounted 等等。

    \n

    最让我困惑的是 setup()。它在 beforeCreatecreated 之前执行。这意味着在 setup 里面,我们不需要写这一类的钩子了,直接写逻辑就行。

    \n

    实际应用中的坑

    我曾经遇到过一个 Bug,在 onMounted 里面去获取 DOM 元素的高宽。理论上这时候 DOM 已经渲染好了,对吧?

    \n

    错!如果你的组件里面有 v-if 或者异步组件,onMounted 触发的时候,子组件可能还没渲染完!这时候拿到的高度是 0。解决办法是用 nextTick,或者检查你的组件结构。

    \n

    为什么会这样?

    回想起刚开始接触 Vue 的时候,那时候的快乐是纯粹的。写一个 {{ message }} 就能看到页面变化,那种成就感无与伦比。而现在,我们要处理复杂的依赖关系、难以捉摸的类型定义、层出不穷的构建工具配置。难道这就是成长的代价吗?

    \n

    我们先来聊聊 Vue 生命周期的核心概念。在官方文档中,这一部分被描述得非常晦涩难懂。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

    \n

    代码示例方面,我尝试写了一个 Demo,结果控制台满屏飘红。这哪里是写代码,简直是在扫雷。每一个变量的定义都充满了不确定性,每一个函数的调用都像是在赌博。

    \n

    \"生老病死\"

    \n","categories":["Vue学习之路"],"tags":["技术","Vue","前端","Vue3"]},{"title":"样式设计:CSS 也就是随便写写... (并没有)","url":"/2025/12/25/vue-learning-5/","content":"

    CSS 的痛与乐

    作为一个前端,最怕的不是写 JS 逻辑,而是调 CSS 样式。居中?对齐?适配?每一个词都能让猛男落泪。

    \n

    Vue 中的 Scoped CSS

    Vue 提供了 <style scoped>,这简直是防止样式污染的神器。它通过给元素添加唯一的 data-v-xxx 属性,确保你的样式只在这个组件内生效。

    \n
    .example[data-v-f3f3eg9] {
    color: red;
    }
    \n\n

    但是!当你试图修改子组件的样式时(比如修改 Element Plus 的组件样式),scoped 就变成了拦路虎。这时候你就得用深度选择器 :deep()

    \n
    .parent :deep(.child) {
    /* 这样才能穿透过去 */
    }
    \n\n

    之前不知道这个,我傻傻地去写全局样式,结果污染了整个项目,被组长骂了一顿。

    \n

    动态样式

    Vue 3 允许我们在 CSS 中绑定 JS 变量:

    \n
    .text {
    color: v-bind(color)
    }
    \n\n

    太酷了!这才是现代化开发嘛!

    \n

    样式设计看似简单,实则深不可测。Flexbox, Grid, CSS Variables, Tailwind… 学不完,根本学不完。

    \n

    \"CSS\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","CSS","设计"]},{"title":"Pinia:Vuex 的继任者,好吃又好用","url":"/2025/12/30/vue-learning-6/","content":"

    菠萝(Pinia)真好吃

    Vuex 复杂的 mutation, action, getter 曾让人头大。Pinia 的出现,简直是清流。

    \n

    为什么是 Pinia?

      \n
    1. 没有 Mutation:终于不用为了改个状态写那繁琐的模板代码了,直接在 Action 里改,或者直接改!
    2. \n
    3. TypeScript 友好:完美的类型推断,不用像 Vuex 那样写一堆泛型接口。
    4. \n
    5. 极简 APIdefineStore 一把梭。
    6. \n
    \n

    逐渐掉光的头发

    随着学习的深入,我发现事情并不像我想象的那么简单。Pinia 这个知识点,简直是我的噩梦。

    \n

    文档里写得轻描淡写,实际用起来坑巨多。比如,我在 store 里解构 state,结果响应性丢了!

    \n
    const store = useUserStore()
    const { name } = store // ❌ 响应性丢失
    \n\n

    必须用 storeToRefs(store)。这种细节,一旦不知道,就是一下午的调试时间。

    \n

    令人头秃的细节

    在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是,Pinia 的某些行为真的很迷。

    \n

    比如,它在服务端渲染(SSR)下的 hydration 问题,经常导致客户端和服务端数据不一致,你以为数据传过去了,结果是如传。我花了整整三天时间查阅源码,翻遍了 GitHub 上的 Issues,才勉强理解了其中的奥妙。简单来说,它就像是一个黑盒子,你输入 A,它输出 B,但中间发生了什么,只有上帝和尤雨溪知道。

    \n

    \"Pinia\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Pinia","状态管理"]},{"title":"组件通信:Props 传值传到手抽筋","url":"/2025/12/31/vue-learning-7/","content":"

    Props, Emit, Provide, Inject…

    Vue 的组件通信方式多达十几种。父子通信用 Props/Emit,跨层级用 Provide/Inject,兄弟组件用 EventBus(Vue 3 移除了,得自己手写或用mitt),全局状态用 Pinia。

    \n

    传值的痛苦

    当你有 5 层组件嵌套,最外层的组件想传个 ID 给最里面的组件。
    Props Drilling(属性透传)简直是灾难。

    \n

    Parent -> Child -> GrandChild -> GreatGrandChild -> Target

    \n

    每一层都要声明 Props,写得我想吐。虽说可以用 provide/inject,但不仅失去了类型推断的便利(TS 还要额外定义 InjectionKey),而且数据流变得难以追踪。

    \n

    \"通信\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Vue3","组件"]},{"title":"Composition API:逻辑复用的快乐与痛苦","url":"/2026/01/05/vue-learning-8/","content":"

    组合式 API:双刃剑

    Composition API 是 Vue 3 的灵魂。它允许我们将逻辑通过 Hooks(Composables)的方式进行提取和复用。

    \n

    理想很丰满

    我想象中的代码:

    \n
    const { user } = useUser()
    const { articles } = useArticles()
    const { loading } = useLoading()
    \n\n

    清爽、干净、模块化。

    \n

    现实很骨感

    实际写出来的代码:

    \n
    const { user, loading: userLoading, error: userError } = useUser()
    const { articles, loading: articleLoading, error: articleError } = useArticles()
    // 命名冲突!到处重命名!
    \n\n

    而且,如果你把所有逻辑都堆在 setup 里,不加以拆分,它就会变成一个巨大的面条代码(Spaghetti Code),比 Options API 还要难以维护。因为 Options API 至少强制你分开了 data 和 methods。严格来说实际上只要你不在乎史山代码,你完全可以不在乎getter和setter,全放在utils里面,所有的state变量都塞在一个const里面。

    \n

    令人头秃的细节

    文档里写得轻描淡写,实际用起来坑巨多。比如那个 Hook 的执行时机,如果在 Hook 里面用了 onMounted,它到底是在父组件挂载前还是后?如果 Hook 里有异步操作呢?我之前是写C++这种顺序执行语言的,被这玩意狠狠的摆了一道,同一个函数内所有的调用是同步执行的,除非你用promise进行强行顺序化。

    \n

    \"API\"

    \n","categories":["Vue学习之路"],"tags":["Vue","前端","Vue3","API"]},{"title":"TypeScript:给代码穿上防弹衣 (虽然很重)","url":"/2026/01/07/vue-learning-9/","content":"

    TypeScript:心态崩了

    毁灭吧,赶紧的。累了。

    \n

    无尽的报错

    TypeScript 说是给代码穿上防弹衣,防止低级错误。但实际上,它更像是给我的手戴上了镣铐。

    \n

    Type 'string | null' is not assignable to type 'string'.
    Property 'xyz' does not exist on type 'ABC'.

    \n

    我知道!我知道它是 null!我加了判断了!但 TS 就是不信!非要我写 as string 或者 !

    \n

    尤其是在 Vue 组件的 Props 定义里,结合 defineProps 和泛型,写起来那叫一个酸爽。为了解决一个类型报错,我可能要写几十行的 interface 定义。这到底是写业务逻辑,还是在做类型体操?

    \n

    为什么这么难?

    ${title} 让我彻底破防了。我在 Pinia 里配了半天状态,结果组件里死活拿不到。控制台的黄色警告和红色错误交织在一起,像是在嘲笑我的无能。

    \n

    在这个快速发展的前端时代,技术的更新迭代速度简直让人窒息。每一次框架的更新,不仅带来了新的特性,也带来了新的焦虑。作为一名追求极致体验的开发者,我深知持续学习的重要性。但是… 真的需要学这么多吗?

    \n

    前端不就是画画界面调调接口吗?为什么要搞这么复杂?Webpack 还没整明白,Vite 又来了;Vue 3 又变了。学不动了,真的学不动了。

    \n

    \"TS\"

    \n","categories":["Vue学习之路"],"tags":["技术","Vue","前端","TypeScript"]}] \ No newline at end of file diff --git a/tags/AI/index.html b/tags/AI/index.html new file mode 100644 index 0000000..380ef8b --- /dev/null +++ b/tags/AI/index.html @@ -0,0 +1,1751 @@ +标签: AI | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/API/index.html b/tags/API/index.html new file mode 100644 index 0000000..362062f --- /dev/null +++ b/tags/API/index.html @@ -0,0 +1,1751 @@ +标签: API | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Arch/index.html b/tags/Arch/index.html new file mode 100644 index 0000000..ca0a885 --- /dev/null +++ b/tags/Arch/index.html @@ -0,0 +1,1751 @@ +标签: Arch | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/CSS/index.html b/tags/CSS/index.html new file mode 100644 index 0000000..62d321f --- /dev/null +++ b/tags/CSS/index.html @@ -0,0 +1,1751 @@ +标签: CSS | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Linux/index.html b/tags/Linux/index.html new file mode 100644 index 0000000..68b13cd --- /dev/null +++ b/tags/Linux/index.html @@ -0,0 +1,1751 @@ +标签: Linux | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Pinia/index.html b/tags/Pinia/index.html new file mode 100644 index 0000000..d1b3b51 --- /dev/null +++ b/tags/Pinia/index.html @@ -0,0 +1,1751 @@ +标签: Pinia | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/TypeScript/index.html b/tags/TypeScript/index.html new file mode 100644 index 0000000..4297300 --- /dev/null +++ b/tags/TypeScript/index.html @@ -0,0 +1,1751 @@ +标签: TypeScript | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vibe-Code/index.html b/tags/Vibe-Code/index.html new file mode 100644 index 0000000..a88de02 --- /dev/null +++ b/tags/Vibe-Code/index.html @@ -0,0 +1,1751 @@ +标签: Vibe Code | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vite/index.html b/tags/Vite/index.html new file mode 100644 index 0000000..a2a91ec --- /dev/null +++ b/tags/Vite/index.html @@ -0,0 +1,1751 @@ +标签: Vite | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vue-Router/index.html b/tags/Vue-Router/index.html new file mode 100644 index 0000000..354154f --- /dev/null +++ b/tags/Vue-Router/index.html @@ -0,0 +1,1751 @@ +标签: Vue Router | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vue/index.html b/tags/Vue/index.html new file mode 100644 index 0000000..3bfb55f --- /dev/null +++ b/tags/Vue/index.html @@ -0,0 +1,1751 @@ +标签: Vue | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vue/page/2/index.html b/tags/Vue/page/2/index.html new file mode 100644 index 0000000..83bb5d6 --- /dev/null +++ b/tags/Vue/page/2/index.html @@ -0,0 +1,1751 @@ +标签: Vue | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vue/page/3/index.html b/tags/Vue/page/3/index.html new file mode 100644 index 0000000..867c65d --- /dev/null +++ b/tags/Vue/page/3/index.html @@ -0,0 +1,1751 @@ +标签: Vue | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/Vue3/index.html b/tags/Vue3/index.html new file mode 100644 index 0000000..5435340 --- /dev/null +++ b/tags/Vue3/index.html @@ -0,0 +1,1751 @@ +标签: Vue3 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..686c0b0 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,1574 @@ +标签 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/前端/index.html b/tags/前端/index.html new file mode 100644 index 0000000..dbc76ad --- /dev/null +++ b/tags/前端/index.html @@ -0,0 +1,1751 @@ +标签: 前端 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/前端/page/2/index.html b/tags/前端/page/2/index.html new file mode 100644 index 0000000..355a9a9 --- /dev/null +++ b/tags/前端/page/2/index.html @@ -0,0 +1,1751 @@ +标签: 前端 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/前端/page/3/index.html b/tags/前端/page/3/index.html new file mode 100644 index 0000000..bb612b3 --- /dev/null +++ b/tags/前端/page/3/index.html @@ -0,0 +1,1751 @@ +标签: 前端 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/吐槽/index.html b/tags/吐槽/index.html new file mode 100644 index 0000000..a6b7a5b --- /dev/null +++ b/tags/吐槽/index.html @@ -0,0 +1,1751 @@ +标签: 吐槽 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/大模型/index.html b/tags/大模型/index.html new file mode 100644 index 0000000..fa175a2 --- /dev/null +++ b/tags/大模型/index.html @@ -0,0 +1,1751 @@ +标签: 大模型 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/学习/index.html b/tags/学习/index.html new file mode 100644 index 0000000..d0c85bb --- /dev/null +++ b/tags/学习/index.html @@ -0,0 +1,1751 @@ +标签: 学习 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/工具/index.html b/tags/工具/index.html new file mode 100644 index 0000000..fcc5de5 --- /dev/null +++ b/tags/工具/index.html @@ -0,0 +1,1751 @@ +标签: 工具 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/心情/index.html b/tags/心情/index.html new file mode 100644 index 0000000..4ec6e9e --- /dev/null +++ b/tags/心情/index.html @@ -0,0 +1,1751 @@ +标签: 心情 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/性能/index.html b/tags/性能/index.html new file mode 100644 index 0000000..1744a59 --- /dev/null +++ b/tags/性能/index.html @@ -0,0 +1,1751 @@ +标签: 性能 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/技术/index.html b/tags/技术/index.html new file mode 100644 index 0000000..f3f287e --- /dev/null +++ b/tags/技术/index.html @@ -0,0 +1,1751 @@ +标签: 技术 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/折腾/index.html b/tags/折腾/index.html new file mode 100644 index 0000000..fe2ed9b --- /dev/null +++ b/tags/折腾/index.html @@ -0,0 +1,1751 @@ +标签: 折腾 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/放弃/index.html b/tags/放弃/index.html new file mode 100644 index 0000000..277a65c --- /dev/null +++ b/tags/放弃/index.html @@ -0,0 +1,1751 @@ +标签: 放弃 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/效率工具/index.html b/tags/效率工具/index.html new file mode 100644 index 0000000..08492a7 --- /dev/null +++ b/tags/效率工具/index.html @@ -0,0 +1,1751 @@ +标签: 效率工具 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/极客/index.html b/tags/极客/index.html new file mode 100644 index 0000000..c828895 --- /dev/null +++ b/tags/极客/index.html @@ -0,0 +1,1751 @@ +标签: 极客 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/源码/index.html b/tags/源码/index.html new file mode 100644 index 0000000..1f300fa --- /dev/null +++ b/tags/源码/index.html @@ -0,0 +1,1751 @@ +标签: 源码 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/状态管理/index.html b/tags/状态管理/index.html new file mode 100644 index 0000000..926a5c8 --- /dev/null +++ b/tags/状态管理/index.html @@ -0,0 +1,1751 @@ +标签: 状态管理 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/组件/index.html b/tags/组件/index.html new file mode 100644 index 0000000..fcdd1d8 --- /dev/null +++ b/tags/组件/index.html @@ -0,0 +1,1751 @@ +标签: 组件 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/行业分析/index.html b/tags/行业分析/index.html new file mode 100644 index 0000000..af5f2fc --- /dev/null +++ b/tags/行业分析/index.html @@ -0,0 +1,1751 @@ +标签: 行业分析 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/设计/index.html b/tags/设计/index.html new file mode 100644 index 0000000..32f6155 --- /dev/null +++ b/tags/设计/index.html @@ -0,0 +1,1751 @@ +标签: 设计 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/踩坑/index.html b/tags/踩坑/index.html new file mode 100644 index 0000000..e0dc63f --- /dev/null +++ b/tags/踩坑/index.html @@ -0,0 +1,1751 @@ +标签: 踩坑 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tags/项目部日记/index.html b/tags/项目部日记/index.html new file mode 100644 index 0000000..56c919d --- /dev/null +++ b/tags/项目部日记/index.html @@ -0,0 +1,1751 @@ +标签: 项目部日记 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + +
    加载中...
    + + + + + + + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/2048/index.html b/tools/2048/index.html new file mode 100644 index 0000000..656184e --- /dev/null +++ b/tools/2048/index.html @@ -0,0 +1,2138 @@ +经典 2048 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    经典 2048
    + +
    +
    +
    +
    当前分数
    +
    0
    +
    +
    +
    最高分数
    +
    0
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +

    游戏结束!

    + +
    +
    + +
    + + +
    + +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/base64-img.html b/tools/base64-img.html new file mode 100644 index 0000000..4783e90 --- /dev/null +++ b/tools/base64-img.html @@ -0,0 +1,1550 @@ +图片与 Base64 互转 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + +
    + + +
    +
    🖼️ 图片转 Base64
    +
    +

    点击选择图片 或 拖拽图片到这里

    + +
    + +
    + + +
    + + +
    +
    +
    + + +
    +
    🔢 Base64 转图片
    + + + +
    + 预览区域 +
    +
    + +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/color/index.html b/tools/color/index.html new file mode 100644 index 0000000..fe8eb21 --- /dev/null +++ b/tools/color/index.html @@ -0,0 +1,1823 @@ +颜色转换与调色 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    +
    +
    +

    🎨 颜色转换与调色

    +

    提供 HEX、RGB、HSL 颜色值的实时相互转换,方便寻找和匹配主题色调。

    +
    + +
    +
    + +
    + +
    +
    + +
    + + 👈 点击取色 +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    + + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/converter.html b/tools/converter.html new file mode 100644 index 0000000..e00c8ec --- /dev/null +++ b/tools/converter.html @@ -0,0 +1,1877 @@ +文件全能转换 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + + +
    + +
    +

    全能文档格式工厂

    +

    前端负责交互编排,转换能力由 ConvertX 后端提供

    +
    + +
    + + +
    +
    + ☁️ +

    选择文件(支持批量)

    +

    支持拖拽上传

    + +
    + +
    +

    ℹ️ 功能亮点:

    +
      +
    • 统一网关: 对接 ConvertX API
    • +
    • 前端职责: 上传、状态轮询、结果下载
    • +
    • 后端职责: 格式识别、转换执行、文件产出
    • +
    • 建议: 优先填写正确 converter 名称以提高成功率
    • +
    +
    + +
    +

    ☁️ ConvertX 连接配置

    + + + + + + + + + +

    等待连接后端...

    +
    +
    + + +
    +
    +
    全部
    +
    文档
    +
    图片
    +
    数据
    +
    多媒体
    +
    + +
    + +
    + 📄 + 转 PDF +
    +
    + 📝 + 转 Word + 视觉 +
    + + +
    + 🖼️ + 转 JPG +
    +
    + 📸 + PDF转长图 +
    + +
    + 🌐 + 转 WEBP +
    + +
    + 🎞️ + 转 GIF +
    + +
    + 🎬 + 转 MP4 +
    + +
    + 🎵 + 转 MP3 +
    + + +
    + 📃 + 提取文本 +
    +
    + ⬇️ + 转 MD +
    +
    + 📊 + 转 CSV +
    +
    + 📗 + 转 Excel +
    +
    + +
    +
    + 已选择: file.docx + → 目标: PDF +
    + +
    +
    +
    + +
    +

    🚀 转换任务

    +
    + + + + +
    +
    + + +
    +
    +
    暂无任务
    +
    +
    + +
    +

    📈 调试日志面板

    +
    + +
    +
    +
    暂无日志
    +
    +
    + +
    +

    🗂️ 本地资产中心

    +
    + + +
    +
    暂无本地资产
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/fire-creation/index.html b/tools/fire-creation/index.html new file mode 100644 index 0000000..01ca6ff --- /dev/null +++ b/tools/fire-creation/index.html @@ -0,0 +1,2587 @@ +🔥 火之创造 — 元素沙盒 (硬核升级版) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    🔥 火之创造 — 元素沙盒 (硬核升级版)
    + +
    +
    + + + + + + + + + + + + + + + + + + + +
    笔刷:10
    + + +
    气体扩散55
    +
    液体扩散60
    +
    爆炸强度65
    +
    FPS: --
    +
    + + +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/geojson.html b/tools/geojson.html new file mode 100644 index 0000000..d61ef4a --- /dev/null +++ b/tools/geojson.html @@ -0,0 +1,1545 @@ +GeoJSON 查询工具 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + +
    +
    +

    🌍 GeoJSON 可视化查询

    +
    + + + + +
    +
    +
    + +
    +

    GeoJSON 数据:

    + +
    +
    + + +
    + +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/gif.html b/tools/gif.html new file mode 100644 index 0000000..7c19b2b --- /dev/null +++ b/tools/gif.html @@ -0,0 +1,1584 @@ +GIF 生成工具 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + + +
    +
    +

    🎬 图片合成 GIF

    + +
    +

    点击选择多张图片 或 拖拽图片到这里

    + +
    + +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + + +
    + +
    + +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/gomoku/index.html b/tools/gomoku/index.html new file mode 100644 index 0000000..69928c8 --- /dev/null +++ b/tools/gomoku/index.html @@ -0,0 +1,1970 @@ +五子棋 (Gomoku) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    五子棋 (Gomoku)
    + +
    +
    当前回合: 玩家 (黑子)
    + + +
    + + + +
    +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/hash.html b/tools/hash.html new file mode 100644 index 0000000..e7e849a --- /dev/null +++ b/tools/hash.html @@ -0,0 +1,1603 @@ +MD5/SHA256 哈希计算 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + + +
    +
    +

    🔐 文本哈希计算

    + + + + +
    + MD5 (32位) +
    + - + +
    +
    + +
    + SHA-1 (40位) +
    + - + +
    +
    + +
    + SHA-256 (64位) +
    + - + +
    +
    + +
    + SHA-512 (128位) +
    + - + +
    +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/json/index.html b/tools/json/index.html new file mode 100644 index 0000000..d308581 --- /dev/null +++ b/tools/json/index.html @@ -0,0 +1,1770 @@ +JSON 格式化与校验 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    +
    +
    +

    {} JSON 格式化与校验

    +

    提供 JSON 字符串的压缩、美化、转义及语法错误校验功能,纯前端处理保障隐私。

    +
    + +
    + + + + + +
    + +
    +
    准备就绪
    + + +
    +
    + + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/minesweeper/index.html b/tools/minesweeper/index.html new file mode 100644 index 0000000..f658d6c --- /dev/null +++ b/tools/minesweeper/index.html @@ -0,0 +1,2279 @@ +扫雷 (Minesweeper) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    扫雷 (Minesweeper)
    + +
    +
    +
    010
    +
    🙂
    +
    000
    +
    + +
    +
    +
    + +
    + + +
    + + +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/mirage-tank.html b/tools/mirage-tank.html new file mode 100644 index 0000000..f3c8117 --- /dev/null +++ b/tools/mirage-tank.html @@ -0,0 +1,1594 @@ +幻影坦克制作 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + +
    +
    +

    👻 幻影坦克制作工具

    +

    + 生成的图片在白色背景下显示“表图”,在黑色背景下显示“里图”。
    + 建议:表图较亮,里图较暗效果最佳。 +

    + +
    +
    +
    +

    选择表图 (显示于白底)

    +

    点击上传

    +
    + + +
    + +
    +
    +

    选择里图 (显示于黑底)

    +

    点击上传

    +
    + + +
    +
    + + + +
    +

    生成结果

    +

    点击下方按钮切换背景预览效果:

    +
    + + + +
    +
    + +

    + +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/pacman/index.html b/tools/pacman/index.html new file mode 100644 index 0000000..d7c99f6 --- /dev/null +++ b/tools/pacman/index.html @@ -0,0 +1,2059 @@ +吃豆人简易版 (Pac-Man) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    吃豆人简易版 (Pac-Man)
    + +
    +
    分数: 0 | 关卡: 1
    + + +
    + + +
    +
    请使用方向键控制,或点击 AI 托管
    +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/qrcode/index.html b/tools/qrcode/index.html new file mode 100644 index 0000000..ccb5fd6 --- /dev/null +++ b/tools/qrcode/index.html @@ -0,0 +1,1882 @@ +二维码生成与解析 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    +
    +
    +

    📱 二维码生成与解析

    +

    纯前端实现,无需联网,快速把文本、网址转换为二维码,或识读本地二维码图片。

    +
    + +
    + + +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    输入内容后自动生成
    +
    + + +
    + + +
    +
    + + + + + + +

    点击这里上传包含二维码的照片或图纸截图
    (支持拖拽)

    +
    + + +
    +
    + + + + + + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/remove-bg.html b/tools/remove-bg.html new file mode 100644 index 0000000..c8b3d40 --- /dev/null +++ b/tools/remove-bg.html @@ -0,0 +1,1575 @@ +快速抠图工具 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + +
    +
    +

    ✂️ 快速颜色抠图

    +

    + 点击图片中的颜色即可将其扣除(变透明)。适用于纯色背景图片。 +

    + +
    +

    点击上传图片

    + +
    + +
    +
    + +
    + #ffffff +
    +
    + + + 20 +
    + + +
    + +
    + +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/snake/index.html b/tools/snake/index.html new file mode 100644 index 0000000..d949fdb --- /dev/null +++ b/tools/snake/index.html @@ -0,0 +1,1942 @@ +贪吃蛇 (Snake) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    贪吃蛇 (Snake)
    + +
    +
    分数: 0
    + + +
    + + +
    + +
    + + + + +
    +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/sort.html b/tools/sort.html new file mode 100644 index 0000000..cac3daa --- /dev/null +++ b/tools/sort.html @@ -0,0 +1,1628 @@ +排序算法演示与验证 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + +
    + +
    +
    📊 排序算法演示
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + + +
    + +
    + +
    + +
    + 未排序 + 比较中 + 交换中 + 已排序 +
    +
    + +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/tank-battle/index.html b/tools/tank-battle/index.html new file mode 100644 index 0000000..40c4e2e --- /dev/null +++ b/tools/tank-battle/index.html @@ -0,0 +1,3864 @@ +坦克大战 (Tank Battle) - 终极困难版 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    坦克大战 (Tank Battle) - 终极困难版
    + + +
    +
    +
    +
    ⚔️ 阵营数量
    +
    + +
    +
    +
    +
    👥 每阵人数
    +
    + +
    +
    +
    +
    🧠 AI 难度
    +
    + +
    +
    +
    +
    ▶️ 开局
    +
    + + +
    +
    +
    + +
    +
    +
    + + +
    + + + + + +
    +
    + +
    +
    +
    📊 战场状态(基地制)
    +
    +
    + +
    +
    🎮 控制
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    🚩 接管坦克 (蓝方)
    +
    +
    + +
    +
    ⚡ 引擎指标
    +
    +
    + +
    + 地图 720×720,坦克 2×2,基地 16×16。
    + 河流不可通行,只有桥可过河。炮弹射程 60,存在飞行时间,可被规避。
    + 地形速度:平原x1,公路x3,沼泽x0.2。
    + 操作:WASD/方向键移动,空格射击。 +
    🗺 地形图例
    +
    +
    平原
    +
    公路
    +
    河流
    +
    +
    沼泽
    +
    障碍
    +
    +
    +
    +
    +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/tetris/index.html b/tools/tetris/index.html new file mode 100644 index 0000000..36785b4 --- /dev/null +++ b/tools/tetris/index.html @@ -0,0 +1,2179 @@ +俄罗斯方块 (Tetris) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    俄罗斯方块 (Tetris)
    + +
    +
    + + +
    +
    +分数 +0 +
    +
    +等级 +1 +
    + + +
    + + +
    + +
    +操作说明:
    +⬆️ : 旋转块
    +⬅️ ➡️ : 左右移动
    +⬇️ : 加速下落
    +空格 : 直接落下 +
    + +
    +
    +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/time.html b/tools/time.html new file mode 100644 index 0000000..3e4365b --- /dev/null +++ b/tools/time.html @@ -0,0 +1,1577 @@ +时间戳与地理时间转换 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + +
    + + +
    +
    ⏱️ 当前时间
    +
    Loading...
    +
    + Unix 时间戳 (秒): + - + +

    + Unix 时间戳 (毫秒): + - + +
    +
    + +
    +
    + + +
    +
    🔄 时间戳转换
    + +
    + + + + +
    +
    + 结果将显示在这里... +
    + +
    + +
    + + + +
    +
    + 结果将显示在这里... +
    +
    + + +
    +
    🌍 世界时钟
    +
    + +
    +
    + +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/unit-converter/index.html b/tools/unit-converter/index.html new file mode 100644 index 0000000..ad3bdf8 --- /dev/null +++ b/tools/unit-converter/index.html @@ -0,0 +1,1777 @@ +工程单位换算 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    +
    +
    +

    📏 常用工程单位快速换算

    +

    支持长度、面积、体积/方量、重量等建筑及施工常用单位的即时转换。

    +
    + +
    +
    + + +
    + +
    + + + + +
    + +
    +
    + + +
    +
    +
    + + +
    +
    + +
    + 0.00 + +
    +
    +
    + + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/watermark.html b/tools/watermark.html new file mode 100644 index 0000000..6273c34 --- /dev/null +++ b/tools/watermark.html @@ -0,0 +1,1720 @@ +水印生成与检测 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    + + + + + + + + +
    +
    +
    👁️ 显性水印
    +
    🕵️ 隐形水印 (LSB)
    +
    🧼 去水印 (图片/PDF)
    +
    + + +
    +
    +

    1. 点击上传主图

    + +
    + +
    + + 文字 + 图片 +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + + + + +
    + + +
    +
    + + +
    +
    + +
    + +
    + +
    + + + + + + +
    + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/webgpu-gravity/index.html b/tools/webgpu-gravity/index.html new file mode 100644 index 0000000..4b9bdf5 --- /dev/null +++ b/tools/webgpu-gravity/index.html @@ -0,0 +1,1904 @@ +WebGPU 万有引力粒子 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    WebGPU 万有引力粒子
    + +
    +
    +
    FPS: 0
    +
    粒子数: 150,000
    +
    + 🖱️ 移动鼠标产生引力扰动
    + 🖱️ 按下鼠标左键变为斥力场 +
    + +
    + +
    + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/yolo-detect/index.html b/tools/yolo-detect/index.html new file mode 100644 index 0000000..e7dbb51 --- /dev/null +++ b/tools/yolo-detect/index.html @@ -0,0 +1,2090 @@ +👁️ WebGPU 实时目标检测 (YOLO) | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...
    👁️ WebGPU 实时目标检测 (YOLO)
    + + +
    +
    + + + +
    + +
    + +
    +
    Engine: None
    +
    FPS: 0
    +
    Latency: 0ms
    +
    +
    +
    + + + + + + + + + + +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vpn/index.html b/vpn/index.html new file mode 100644 index 0000000..50b919d --- /dev/null +++ b/vpn/index.html @@ -0,0 +1,1575 @@ +VPN 订阅 | llbzow的摸鱼日记 (づ ̄ 3 ̄)づ + + + + + + + + + + + + +
    加载中...

    该内容已经迁移

    VPN 订阅内容已迁移至新地址,请通过其他渠道获取最新信息。

    +
    + + + + + + + +
    +
    💬
    + +
    + + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yolo/yolov8n.onnx b/yolo/yolov8n.onnx new file mode 100644 index 0000000..c99271b Binary files /dev/null and b/yolo/yolov8n.onnx differ