diff --git a/.project b/.project new file mode 100644 index 0000000..b398a5e --- /dev/null +++ b/.project @@ -0,0 +1,37 @@ + + + tcp_website + + + + + + com.aptana.ide.core.unifiedBuilder + + + + + + com.aptana.projects.webnature + + + + 1513401616387 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-node_modules + + + + 1513404767963 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-node_modules + + + + diff --git a/2019/12/Hi-Im-Cortana/index.html b/2019/12/Hi-Im-Cortana/index.html deleted file mode 100644 index 5f2b4ff..0000000 --- a/2019/12/Hi-Im-Cortana/index.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hi, I'm Cortana. | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- Hi, I'm Cortana. -

- - -
- - - - -
- - -

2020即将来临了,作为群贫困人口,在2019年再来看各位群友最后一面

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/2020gaokaojiayou/index.html b/2020/02/2020gaokaojiayou/index.html deleted file mode 100644 index 13da33b..0000000 --- a/2020/02/2020gaokaojiayou/index.html +++ /dev/null @@ -1,636 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2020 高考加油 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 2020 高考加油 -

- - -
- - - - -
- - -

2020-02-28,距离 2020高考还有100天。

- - - - - - - - -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/access-google-from-nothing/index.html b/2020/02/access-google-from-nothing/index.html deleted file mode 100644 index 4113c2e..0000000 --- a/2020/02/access-google-from-nothing/index.html +++ /dev/null @@ -1,754 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 无中生有访问 Google | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 无中生有访问 Google -

- - -
- - - - -
- - -

由于众所周知的原因,[数据删除] 。并且在搜索引擎方面,Google 也是搜索知识的一个优秀工具。

-

关于搜索引擎之间的瓜葛,Baidu、Bing、Google 究竟谁优谁劣,以后我有空的话再来谈这个话题,欢迎和我 issue 交流。

-

今天就来介绍一下如何“无中生有访问 Google”。

-

一个“不存在的” chrome 插件

能访问 Google,当然是多亏了一个插件,名字叫做“谷歌上网助手”,它大概长这个样子:

-

image-20191113170312

-

可以在 Google 网上应用点搜索到,然后点击“添加至Chrome”按钮就可以添加插件了

-

https://chrome.google.com/webstore/detail/谷歌上网助手/nonmafimegllfoonjgplbabhmgfanaka

-

它的介绍文字是:

-
-

专门为科研、外贸、跨境电商、海淘人员、开发人员服务的上网加速工具,chrome内核浏览器专用!可以解决chrome扩展无法自动更新的问题,同时可>以访问谷歌google搜索,gmail邮箱,google+等谷歌产品

-

简单易用的《谷歌上网助手》,可以解决chrome扩展无法自动更新的问题,同时可以访问谷歌google搜索,gmail邮箱,google+等谷歌服务。

-

《谷歌上网助手》一键安装,无需其他配置,即可访问谷歌。

-

使用本插件可以免费上:

-
    -
  • google.com 谷歌搜索
  • -
  • mail.google.com gmail邮箱
  • -
  • chrome商店访问
  • -
-
-

当然,以上链接是不存在的。

-

无中生有?

chrome 的插件是一个后缀名为 .crx 的文件,文件结构与 zip 相同,这意味着,你可以用压缩软件打开 .crx 文件。

-

我们有了 crx 文件,就可以添加到 chrome 浏览器了。

-

从哪儿去得到 crx 文件?从 Google 应用商店。当然,Google 应用商店是不存在的。

-

更新:插件官网也可以下载,快速下载方式请直接翻到文尾“#写在后面”部分,再从此处继续阅读。

-

这里介绍一个网站,可以看作 Google应用商店翻版,也就是镜像站。https://www.gugeapps.net/

-

我的网站也提供了一个副本(划掉)谷歌上网助手.zip ,如果添加 chrome 失败请转至下面方法下载,

-

bing 搜索 gugeapps.net,第一个链接是 www.gugeapps.net 就是了

-

打开是长这个样子的:

-

image-20191114102230

-

我们可以在这里的搜索框搜索谷歌上网助手,回车搜索,或者在 bing 搜索 谷歌上网助手 site:gugeapps.net 第一个就是对应的页面了。

-

image-20191114102822

-

这里不能直接安装到 chrome ,点击下载按钮,转到页面底端开始下载。

-

下载完成后会出现红色提示,保留就可以了
image-20191114102910

-

Ps:最新的下载下来好像后缀名是 zip ,不过不影响后续操作。

-

然后在文件夹中打开,可以看到文件夹里面有个 .crx 文件了

-

image-20191114103010

-

导入

一般来说,crx 可以直接拖入 chrome 的扩展程序页面,会提示是否添加插件,确定添加就可以添加,不过,对于自己下载的插件,大多数是不行的,会提示“程序包无效”,

-

image-20191114103110

-

不能导入?

这里需要通过 chrome 的开发者模式,添加插件。

-

首先打开 chrome 的扩展程序页面:chrome://extensions ,开启页面右上方的“开发者模式”开关。

-

然后点左边的“加载已解压的扩展程序”

-

image-20191114103117

-

切换到刚才的下载文件夹,复制一份 crx 文件,后缀名改为 zip ,随后解压到压缩文件同名文件夹。

-

如果看不到后缀名,在查看这里把文件扩展名选项勾选。

-

image-20191114103616

-

切换到 chrome 的选择文件夹窗口,打开刚才的文件夹,可以看到文件夹里面的结构是

-
1
2
3
_locales
_metadata
assets
- -

然后添加文件夹。

-

image-20191114103357

-

回到 chrome ,就可以看到新插件添加成功,

-

可以看到有提示错误,但是可以用,

-

可以看到, chrome 右上方增加了一个插件的图标了

-

同时可以看到图标下面有一个标志,鼠标悬浮提示:“未封装的扩展程序”。

-

另外,如果关闭 chrome 再打开,会提示移除插件,所以正常使用起来的话,还是有一些麻烦的

-

image-20191114104215

-

点击右上角图标,会弹出插件菜单,首次需要注册登录,在登录页面找到新用户注册,填入邮箱和新账户密码注册

-

image-20191114104439

-

然后进入插件 控制面板 ,有红色提示“邮箱未激活”,此时前往邮箱,点击新收到的邮件激活账户即可

-

image-20191114104528

-

再点开插件菜单,把开关打开即可

-image-20191114104755 - -

然后 www.google.com 可以访问了。

-

image-20191114104855

-

后续操作

关闭浏览器再打开就会提示“请停用以开发者模式添加的插件”,影响使用,所以需要再“操作”一下

-

Ps:如果没有注册登录插件,现在的新版浏览器是直接移除插件,影响使用,所以需要再“操作”一下

-

image-20200213214020573

-

这个提示框每次打开 chrome 都会弹出,极其 讨厌。

-

我们可以通过:从 Google 应用商店安装正规插件,的方式,替换这个插件,就不会再提示辣

-

打开 Google网上应用店 https://chrome.google.com/webstore/category/extensions

-

搜索 谷歌上网助手 ,找到第一个就是正规插件(开发版也可以用),点“添加至 chrome”按钮就可以添加,点添加扩展程序 按钮

-

image-20200213214703542

-

接着我们可以看到 chrome 左下方出现了一个 crx 下载进度条,但是这个下载完之后并不会提示下载完成,会自动消失(在下载记录也不会留下记录),而是自动安装

-

image-20200213214909741

-

然后会看到页面里面“谷歌上网助手”变成了“已添加”,“添加至chrome”变成了“评分”,就是安装完成了

-

image-20200213215254798

-

然后需要删除旧插件,打开插件管理页面,chrome://extensions/

-

也可以在右上角插件图标处鼠标右键,管理扩展程序,然后返回按钮

-

找到刚才提示“未封装的扩展程序”的插件,删除,

-

image-20200213215852988

-

点击右上角新安装的插件的图标,弹出登陆页面,进去再用刚注册的账号登陆一次就可以了

-

至此,全部安装完成!

-

写在后面

插件官网:http://googlehelper.net/ ,也可以在这里下载 zip 然后按上述方法导入

-

image-20200213221452052

-

点击 download ,下载此网站最新插件压缩包,也可以下载我保存的副本, Ghelper2.0.4.all.zip

-

压缩包解压之后可以看到:

-
1
2
3
ghelper_source
Ghelper2.0.5.crx
中国大陆安装方法.txt
- -

其中 ghelper_source 和上文提到的解压后文件夹是一样的,

-

其中的 crx 文件可以用于直接拖拽导入插件(2020/02/13测试这个crx可以直接导入没有问题)

-

点击此处回到 “无中生有?” 部分继续阅读

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/getting-start-52pojie/index.html b/2020/02/getting-start-52pojie/index.html deleted file mode 100644 index 4134754..0000000 --- a/2020/02/getting-start-52pojie/index.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 吾爱破解入门帖子 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 吾爱破解入门帖子 -

- - -
- - - - -
- - -

今日探索吾爱破解论坛,整理了两篇入门指导文章,当备忘录了

-

内容来自:吾爱破解 论坛

-
-

吾爱破解论坛官方入门教学培训第一期开始啦!【已更新到第十课】

培训课表–讲师:

《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》

-

讲师:Hmily,链接:http://www.52pojie.cn/thread-378612-1-1.html

-

《吾爱破解培训第二课:实战去广告、弹窗及主页锁定》

-

讲师:Kido,链接:http://www.52pojie.cn/thread-384195-1-1.html

-

《吾爱破解培训第三课:改头换面之修改版权和资源》

-

讲师:Kido,链接:http://www.52pojie.cn/thread-389996-1-1.html

-

《吾爱破解培训第四课:击破程序最坚固的堡垒–实战去程序自校验》

-

讲师:小生我怕怕,链接:http://www.52pojie.cn/thread-392395-1-1.html

-

《吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证》

-

讲师:我是用户,链接:http://www.52pojie.cn/thread-396068-1-1.html

-

《吾爱破解培训第六课:潜伏在程序身边的黑影–实战给程序补丁》

-

讲师:我是用户,链接:http://www.52pojie.cn/thread-405758-1-1.html

-

《吾爱破解培训第七课:手把手教你从实例看如何攻破常见的网络验证》

-

讲师:珈蓝夜雨,链接:http://www.52pojie.cn/thread-408475-1-1.html

-

《吾爱破解培训第八课:短兵相接–深入浅出探讨脱壳细节(上)》

-

讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

-

《吾爱破解培训第九课:短兵相接–深入浅出探讨脱壳细节(下)》

-

讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

-

《吾爱破解培训第十课:探寻逆向新航标—x64平台脱壳与破解实战》

-

讲师:Kido,链接:http://www.52pojie.cn/thread-422192-1-1.html

-

视频下载:

-

360云盘下载:
https://yunpan.360.cn/surl_y3GCKpiI2fX 提取码:7693

-

百度网盘下载:
链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg 提取码: e2su

-

爱盘下载:
http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/

-
-
-

解压密码(请使用新版7z解压缩):
www.52pojie.cn

-
-
- -
- -
- -
- -
- -
- -
- -
- -

零基础新手破解学习指导教程

吾爱破解论坛官方入门培训:http://www.52pojie.cn/thread-349073-1-1.html
整理一些论坛脱壳破解相关入门教程及需要用到的相关工具,方便新手同学查看学习

-

工欲善其事必先利其器,下面是破解需要用到的工具

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OllyDbg(OD):http://www.52pojie.cn/thread-350397-1-1.html
PEIDhttp://www.52pojie.cn/thread-170387-1-1.html
Exeinfo PEhttp://www.52pojie.cn/thread-169779-1-1.html
樱花补丁制作工具:http://www.52pojie.cn/thread-62307-1-1.html
内存补丁生成器:http://www.52pojie.cn/thread-162411-1-1.html
注册机生成器:http://www.52pojie.cn/thread-159470-1-1.html
IDA Pro v6.5:http://www.52pojie.cn/thread-284145-1-1.html
破解工具包http://www.52pojie.cn/thread-190698-1-1.html
吾爱云盘【最牛逼的在线工具包】:http://down.52pojie.cn/Tools/
-

也可以点击下面的连接进去逆向资源区寻找工具哦

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Android | Tools安卓程序逆向所用到的相关工具
Debuggers动态调试工具
Disassemblers反编译工具(静态分析为主)
PEtoolsPE文件分析相关工具
Packers给程序加壳相关工具
Patchers给程序做补丁相关工具
Editors程序资源编辑、文本操作相关工具
Crptography算法相关工具
Unpackers脱壳机相关
Dongle加密狗相关
.NET微软.Net程序逆向相关工具
OllyDbg | 1.x | Plugin动态调试工具OllyDbg | 1.x的插件程序
OllyDbg | 2.x | Plugin动态调试工具OllyDbg | 2.x的插件程序
IDA | Plugin反编译工具IDA的插件程序
Other其他相关程序
-

NO.1

Hmily 【初学者教程】破解基础知识之认识壳与程序的特征。
新手一看教程就在说程序破解应该先脱壳,那到底程序有没有加壳?加了什么壳?看看大H的文章你就懂了!
http://www.52pojie.cn/thread-234739-1-1.html

-

NO.2

ximo 脱壳教程(24集全)
http://pan.baidu.com/s/1cebVOU 密码: fxia
http://down.52pojie.cn/吾爱破解视频教程/ximo脱壳基础.7z
来自吾爱破解论坛LCG组织成员也是VMP脱壳插件作者ximo做的脱壳教程,堪称经典,入门脱壳必学!
压缩包为7Z格式,7Z官方网站

-

NO.3

小生我怕怕 脱壳练习系列附带对应文章的动画视频教程,方便学习交流脱壳知识。
教程对应动画视频:http://www.52pojie.cn/thread-11642-1-1.html

-

[编者注]:视频爱盘下载地址:https://down.52pojie.cn/吾爱破解视频教程/吾爱破解脱壳练习系列动画/

-

吾爱专题脱壳练习一—-压缩壳练习之一:http://www.52pojie.cn/thread-10496-1-1.html
吾爱专题脱壳练习二—-压缩壳练习之二:http://www.52pojie.cn/thread-10607-1-1.html
吾爱专题脱壳练习三—-压缩壳练习之三:http://www.52pojie.cn/thread-10688-1-1.html
吾爱破解脱壳练习四——简单加密壳:http://www.52pojie.cn/thread-10850-1-1.html
吾爱专题脱壳练习五—-upx壳:http://www.52pojie.cn/thread-10990-1-1.html
吾爱专题脱壳练习六—-TElock V0.99 :http://www.52pojie.cn/thread-11112-1-1.html
吾爱专题脱壳练习七—-ORiEN:http://www.52pojie.cn/thread-11244-1-1.html
吾爱专题脱壳练习八—-MoleBox V2.6.5:http://www.52pojie.cn/thread-11306-1-1.html
吾爱专题脱壳练习九—-CRYPToCRACk’s PE Protector:http://www.52pojie.cn/thread-11446-1-1.html
吾爱专题脱壳练习十—-PESpin 1.32:http://www.52pojie.cn/thread-11585-1-1.html
吾爱专题脱壳练习十一—-VB自效验的处理:http://www.52pojie.cn/thread-11747-1-1.html
吾爱专题脱壳练习十二—-delphi自效验的处理:http://www.52pojie.cn/thread-11883-1-1.html
吾爱专题脱壳练习十三—-GHF Protector V1.0:http://www.52pojie.cn/thread-12011-1-1.html
吾爱专题脱壳练习十四—-Armadillo 6.04:http://www.52pojie.cn/thread-12135-1-1.html
吾爱专题脱壳练习十五—-ACProtector系列保护:http://www.52pojie.cn/thread-12279-1-1.html
吾爱专题脱壳练习十六—-ACProtector系列保护:http://www.52pojie.cn/thread-12362-1-1.html
吾爱专题脱壳练习十七—-PEBundle 2.0b5 - 3.0x:http://www.52pojie.cn/thread-12498-1-1.html
吾爱专题脱壳练习十八—-Armadillo 4.40:http://www.52pojie.cn/thread-12620-1-1.html
吾爱专题脱壳练习十九—-PUNiSHER 1.5:http://www.52pojie.cn/thread-12822-1-1.html
吾爱专题脱壳练习二十—-未知壳一:http://www.52pojie.cn/thread-12936-1-1.html
吾爱专题脱壳练习二十一—-未知壳二:http://www.52pojie.cn/thread-13494-1-1.html
吾爱专题脱壳练习二十二—-未知壳三:http://www.52pojie.cn/thread-13770-1-1.html

-

NO.4

我是用户 破解实战(10集全)
破解实战演练教程
第一战:http://www.52pojie.cn/thread-197281-1-1.html
第二战:http://www.52pojie.cn/thread-197598-1-1.html
第三战:http://www.52pojie.cn/thread-197957-1-1.html
第四战:http://www.52pojie.cn/thread-198203-1-1.html
第五战:http://www.52pojie.cn/thread-198365-1-1.html
第六战:http://www.52pojie.cn/thread-198930-1-1.html
第七战:http://www.52pojie.cn/thread-199459-1-1.html
第八战:http://www.52pojie.cn/thread-199834-1-1.html
第九战:http://www.52pojie.cn/thread-200655-1-1.html
第十战:http://www.52pojie.cn/thread-200798-1-1.html

-

NO.5

Blue .NET系列教程(4集全)
图文教程分析.net程序!
第一课 http://www.52pojie.cn/thread-248348-1-1.html
第二课 http://www.52pojie.cn/thread-249034-1-1.html
第三课 http://www.52pojie.cn/thread-250626-1-1.html
第四课 http://www.52pojie.cn/thread-250633-1-1.html

-

NO.6

去软件弹窗系列教程(共两集)
第一课 http://www.52pojie.cn/thread-316180-1-1.html
第二课 http://www.52pojie.cn/thread-323346-1-1.html

-

NO.7

R4ndom破解教程全文翻译(共七集)
第一课 http://www.52pojie.cn/thread-344925-1-1.html
第二课 http://www.52pojie.cn/thread-345839-1-1.html
第三课 http://www.52pojie.cn/thread-346455-1-1.html
第四课 http://www.52pojie.cn/thread-350727-1-1.html
第五课 http://www.52pojie.cn/thread-352818-1-1.html
第六课 http://www.52pojie.cn/thread-354029-1-1.html
第七课 http://www.52pojie.cn/thread-355207-1-1.html

-

希望大家在本论坛发现新手容易理解的系列教程通知我,我会陆续加进来。(转载的朋友请标注:吾爱破解原创作品)

- -
- - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/hexo-changes/index.html b/2020/02/hexo-changes/index.html deleted file mode 100644 index 80eacfb..0000000 --- a/2020/02/hexo-changes/index.html +++ /dev/null @@ -1,714 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hexo 大换血 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- hexo 大换血 -

- - -
- - - - -
- - -

今天闲来无事,折腾博客(其实是写 gdb 结果得更新一下 hexo ),然后这个博客就大换血了。

-

我干了啥呢:

-
-

Typora 的图片存放路径

Typora 的图片存放路径和文章图片 URL 的问题

- -

hexo 添加主页页面,tags等

hexo 主页上的 tags、categories、archive、about 等页面,手动添加。

- -

hexo 打赏

设置 next 主题配置下的 reward_settings,但和文章中说的有些小不同

- -

hexo 添加版权

这里我遵循知识共享(Creative Commons) 署名 4.0 协议国际版,可以在next主题的 config.yml 里面的 creative_commons 配置

- -

hexo 添加版权后链接错误问题

本来应该是 http:// blog.tcpsoft.app/2020/02/06/hexo-changes/,

-

但是变成了 /http:/blog.tcpsoft.app/2020/02/06/hexo-changes/

-

所以就手动写了个 js 脚本,添加到 source/js 文件夹,并修改 next 的一个配置文件。

-
1
2
3
4
5
6
//添加<script>到 \themes\next\layout\_scripts\index.swig
//<script src="/js/diy.js"></script>

link = document.getElementsByClassName("post-copyright-link")[0].children[1];
href = link.getAttribute("href").replace("/http:/","http://");
link.setAttribute("href",href);
- -

解决了显示混乱问题

我之前的博客迁移,导致了显示混乱问题(即我已有 css 而 hexo 又给我加上一套主题的显示方案),此处用 hexo 的 skip_render 设置即可,不过要匹配文件文件夹还是有点小坑的 [坑爹预警]

- -

博客 CDN 加速

看了百度云加速,知道创宇云加速,cloud flare,暂时还是不弄了,现阶段博客是基于 GitHub Pages + Hexo ,图片使用腾讯云存储。后期可能考虑加 CDN 或整站迁移腾讯云存储(因域名无法备案及COS网站的处理问题已放弃此方案)

-

sitemap 功能

hexo、next 主题的 sitemap 功能,帮助搜索引擎收录站点(不用修改 hexo 配置文件)
注:这些 npm 命令都是在本地博客根目录下执行,下同

-
1
2
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
- - -

RSS 订阅功能

(不用修改 hexo 配置文件)(修改next主题配置以显示按钮)

-
1
npm install hexo-generator-feed --save
-
1
2
3
4
"/themes/next/_config.yml"
menu:
......
rss: /atom.xml
- -

站点搜索功能

安装插件,然后修改 next 配置文件,,,

-
1
npm install hexo-generator-searchdb --save
- - -

相关文章推荐

同样的,安装插件,修改配置

-
1
npm install hexo-related-popular-posts --save
- -

参考链接1: Hexo+NexT(v7.0+) 搭建博客:功能强化 | Chingow’s Blog

-

文章字数统计和阅读时间估计

1
npm install hexo-symbols-count-time --save
- -

参考链接1: o(五):个性化 next theme | 执行者的博客

-

社交按钮

参考链接1: o(五):个性化 next theme | 执行者的博客

-

阅读进度

设置 next 主题配置:

-
1
2
reading_progress:
enable: true
- -

hexo 设置阅读全文

其实也和文章的有点不一样,可能是因为 next 版本不一样,我设置的是 next 配置文件

-
1
2
3
4
5
6
# Automatically excerpt description in homepage as preamble text.
excerpt_description: true

# Read more button
# If true, the read more button will be displayed in excerpt section.
read_more_btn: true
- -

参考链接1: Hexo-设置阅读全文 - 简书

-

修改标签样式

只需要修改模板/themes/next/layout/_macro/post.swig,搜索 rel="tag">#,将 # 换成<i class="fa fa-tag"></i> 。(好像改了更丑了,后来改回来了)

-

参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

-

设置博客底部布局

参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

-

设置代码样式

没有改,后面需要再说

-

参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

-

结语

终于配置完了,要死,(其实我是想写点 gdb 的来着?)

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/hexo-seo/index.html b/2020/02/hexo-seo/index.html deleted file mode 100644 index 7faa79b..0000000 --- a/2020/02/hexo-seo/index.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hexo seo 优化 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- hexo seo 优化 -

- - -
- - - - -
- - -

害呀,hexo 都做了这么多了,干脆把google 统计一起加上去得了。Google Analytics、Google添加站点,baidu 添加站点、bing 添加站点,通通加上!

- - -

google analytics

    -
  • 访问Google Analytics,需要科学上网并用google账号登录,之后按照提示填写网站信息开通GA服务,获取统计ID。

    -
  • -
  • 编辑主题配置文件, 找到关键字google_analytics , 删除注释#并填写获取到的统计ID

    -
    1
    2
    google_analytics:
    tracking_id: UA-XXXXXXXXX-X # <app_id>
    - -
  • -
-

robots.txt

在 source 目录下添加 robots.txt ,编写爬虫规则,下面是我的 robots.txt

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
User-agent: *
Allow: /
Allow: /archives/
Allow: /tags/
Allow: /categories/

Disallow: /vendors/
Disallow: /js/
Disallow: /lib/
Disallow: /css/
Disallow: /fonts/
Disallow: /vendors/
Disallow: /fancybox/
Disallow: /old/

Sitemap: http://blog.tcpsoft.app/sitemap.xml
Sitemap: http://blog.tcpsoft.app/baidusitemap.xml
- -

Google Search Console

image-20200209180807809

-

提交整个域名或者某个子域名到 google,我这里提交“网域”即整个域名。

-

输入tcpsoft.app,点继续,会开始验证。

-

image-20200209181014294

-

在域名购买处修改 DNS 记录或者自己的 DNS 托管商处修改,添加一条特定的 TXT 记录。

-

小贴士 用 linux 命令dig hostnamenslookup -q=TXT hostname可查询DNS是否生效(后者windows也可用)

-

这个地方有一点坑的是需要设置 name 为 @,值为 google-site-verification=XXXXXX ,而不是 name 为 google-site-verification

-

image-20200209184813570

-

设置记录,稍等片刻(或者等半天)记录生效之后,点击验证,验证成功

-

image-20200209184707276

-

之后就可以进行管理辣。

-

接下来提交 sitemap,站点地图,帮助机器人抓取网站

-

之后就可以通过 google 搜索命令 site:blog.tcpsoft.app 查看站点收录情况

-

image-20200209185519286

-

Baidu搜索资源平台

打开Baidu搜索资源平台,添加网站

-

image-20200209201555631

-

填入主域名 https://tcpsoft.app 选择网站分类,准备验证,可通过文件验证,html 标签验证,CNAME 验证,此处我选择 CNAME 验证,将 H9JpujyZsP.tcpsoft.app 使用 CNAME 解析到 ziyuan.baidu.com。和之前一样,在托管商添加DNS记录。

-

小贴士 可用 dig hostnamenslookup -q=CNAME hostname 可查看DNS是否生效,同上文。

-

image-20200209202629054

-

添加记录生效后就点击完成验证,稍等一会儿,提示验证成功,可以选择批量添加子站。

-

和 google 不同,这里的需要手动一条条添加。(还有一点隐私保护的味道呢 [滑稽] )手动填入子域名即可。

-

image-20200209203148808

-

通过 html 标签验证添加,会要求 head 中添加标签,此处 hexo 有集成,在 hexo 修改配置就可。

-

image-20200209204126442

-

复制 baidu 提供的 content,在 next 主题的 _config.yml中搜索 baidu_site_verification: 填入,然后再 hexo g -d 发布一次,检查有标签后,点击完成验证。

-

验证完成 ,就可以查看站点,我等了半天 Baidu 也抓不到站点,到处看了一圈发现是 github 屏蔽了Baidu 爬虫,所以需要其他方式。

-

首先是把根目录下的 baidusitemap.xml 提交给Baidu平台,不多介绍,自己摸索

-

Baidu 自动推送

于是就手动提交 sitemap 并且开启 hexo next 集成的自动推送链接功能,打开站点主题theme/next/_config.yml文件:

-
1
2
# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO
baidu_push: true
- -

however~,貌似 uBlock Origin 会拦截 Google Analytics 和 Baidu 自动提交,这就比较悲催了

-

hexo 自动提交 Baidu

1
npm install hexo-baidu-url-submit --save
- -

然后修改 hexo 的配置文件,添加 baidu_url_submit: ,并修改 deploy

-

注意:本插件的配置文件中包含秘钥, 如果要把 hexo 博客整体放在 github ,需要放在私有仓库。

-

注意:这里 host 里填入的域名是在 Baidu站长平台 添加好的域名

-
1
2
3
4
5
6
7
8
baidu_url_submit:
count: 5 ## 提交最新的5个链接
host: blog.tcpsoft.app ## 在百度站长平台中注册的域名
token: your_token ## 请注意这是您的秘钥, 请不要发布在公众仓库里!
path: baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
# xz_appid: 'xxxxxx' ## 你的熊掌号 appid
# xz_token: 'xxxxxx' ## 你的熊掌号 token
# xz_count: 10 ## 从所有的提交的数据当中选取最新的10条,该数量跟你的熊掌号而定
- -

不过我认为熊掌号没什么用,需要的话可以添加

-
1
2
3
4
5
deploy:
- type: git
repository: https://github.com/XXXX/XXXX
- type: baidu_url_submitter # 百度
# - type: baidu_xz_url_submitter # 百度熊掌号
- -

执行hexo deploy的时候,新的链接就会被推送了。

-

当你 hexo g -d,看到这个的时候,说明配置成功了

-

image-20200209224126611

-

其他的中国特色搜索引擎

不说了,想设置Sougou、360、神马可以参考这篇: Hexo-NexT 博客提交搜索引擎收录 | 小丁的个人博客

-

Bing

搜索并打开 Bing - Webmaster Tools,Bing网站搜索管理。然后登陆微软账号或者 google 账号,看起来像这样:

-

image-20200209235529136

-

由于我已经有了 Google Search Console(第三条提到的),就直接绑定 Google 账号同步数据就可以了。

-

image-20200209235651847

-

点击“继续访问”之后会跳转到 google 登陆,登录之后授权 Bing 就可以了。读取到站点数据,导入。

-

image-20200209235919325

-

然后也需要向 Bing 提交sitemap,同上 Google。

-

修改 url 格式

-

seo搜索引擎优化认为,网站的最佳结构是用户从首页点击三次就可以到达任何一个页面

-
-

但是我们使用hexo编译的站点打开文章的url是:sitename/year/mounth/day/title四层的结构,这样的url结构很不利于seo,爬虫就会经常爬不到我们的文章,所以我把url格式改为 sitename/year/mounth/title。

-

修改 hexo 配置文件:

-
1
permalink: :year/:month/:title/
- -

出站链接 “nofollow”

外链越多,搜索引擎给此站点的权重就越低,即排位越后。为了提高权重,可以禁止搜索引擎跟进外链,添加 nofollow 属性就可以做到。一个一个页面添加跟定是不现实的,当然是选择用插件。

-

先在 hexo 博客根目录安装插件,插件有hexo-autonofollowhexo-filter-nofollow ,filter要好用一些,他们两个的差别可以参考作者的博客:hexo-filter-nofollow - Hexo 官方的 nofollow 插件 | Sukka’s Blog

-
1
npm install hexo-filter-nofollow --save
- -

编辑 hexo 配置文件,添加:

-
1
2
3
4
5
6
nofollow:
enable: true
field: post # post:仅处理文章内容,site:处理全站所有页面
exclude:
- 'exclude1.com'
- 'exclude2.com'
- - -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/hexo-with-cloudflare/index.html b/2020/02/hexo-with-cloudflare/index.html deleted file mode 100644 index a086bfe..0000000 --- a/2020/02/hexo-with-cloudflare/index.html +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hexo + CloudFlare = 速度飞起 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- hexo + CloudFlare = 速度飞起 -

- - -
- - - - -
- - -

昨天配置了 Google、Baidu、Bing搜索引擎提交,不过比较悲催的是 Github Pages 服务器拒绝 BaiduSpider ,整个站点根本不能出现在 Baidu 里面好么!! 另一方面,速度过慢,github pages 在国内速度,不太理想,所以用 CloudFlare 老牌 cdn 加速整站,还可以被 BaiduSpider 收录。

-

参考了这篇文章: 基于 Hexo 的 GitHub Pages 配置 CloudFlare CDN_qhh0205-CSDN博客

-

准备好 GitHub 和 CloudFlare

有一个 github 账户,添加 username.github.io 库,把 hexo 发布到存储库,不多说了。

-

注册 CloudFlare 账号并登录。

-

在 CloudFlare 添加站点

在 CloudFlare 添加站点,并检查 DNS 记录,确认导入 CloudFlare 中。

-

在域名购买商处修改 DNS 服务器为 CloudFlare 提供的两个 DNS 服务器,等待生效之后继续操作

-

注意 :修改 DNS 服务器可能会导致某些记录丢失(像 Google 域名验证、letsencrypt 域名验证)(因为不是全部同步过去),所以在更改之前可以在旧 DNS 控制台,记录下各个 DNS 记录(截屏或手抄),后期可再写入新纪录

-

Ps:实验表明: CloudFlare 会同步大部分DNS记录,但是还是有部分子域名会漏掉,看个人情况是否手动记录原 DNS

-

image-20200210152724656

-

image-20200210112341702

-

修改 DNS 服务器:

-

image-20200210112513410

-

等待生效,可用 nslookup -q=ns tcpsoft.app 查询 DNS 解析服务器情况(本地的好像更新有点慢),其实 CloudFlare 在检测到 DNS 服务器修改成功之后会发邮件通知的。

-

然后在 CloudFlare 检查域名服务器,进行下一步操作,设置一些网站的自定义选项,包括是否开启浏览器到CF

-

的安全连接,是否开启CF到源服务器的安全连接,是否启用 Brotli 压缩来传输数据等。

-

然后就可以查看 DNS 设置,有黄色云图标的就是 CloudFlare 开启代理的

-

image-20200210120918605

-

我们可以用 dig (linux)或 nslookup (linux、Windows)查看域名解析情况。

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
root@Mi-CP /m/c/U/CP# dig blog.tcpsoft.app

; <<>> DiG 9.10.3-P4-Ubuntu <<>> blog.tcpsoft.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45170
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;blog.tcpsoft.app. IN A

;; ANSWER SECTION:
blog.tcpsoft.app. 900 IN CNAME tcpsoftware.github.io.
tcpsoftware.github.io. 900 IN A 185.199.110.153
tcpsoftware.github.io. 900 IN A 185.199.108.153
tcpsoftware.github.io. 900 IN A 185.199.111.153
tcpsoftware.github.io. 900 IN A 185.199.109.153

;; Query time: 1990 msec
;; SERVER: 223.5.5.5#53(223.5.5.5)
;; WHEN: Mon Feb 10 12:12:47 CST 2020
;; MSG SIZE rcvd: 133

root@Mi-CP /m/c/U/CP# nslookup blog.tcpsoft.app
Server: 223.5.5.5
Address: 223.5.5.5#53

Non-authoritative answer:
blog.tcpsoft.app canonical name = tcpsoftware.github.io.
Name: tcpsoftware.github.io
Address: 185.199.110.153
Name: tcpsoftware.github.io
Address: 185.199.108.153
Name: tcpsoftware.github.io
Address: 185.199.109.153
Name: tcpsoftware.github.io
Address: 185.199.111.153

root@Mi-CP /m/c/U/CP#
- -

我们可以看到解析了四个 IP,而我的 DNS 设置只有一个 CNAME,查询这个 IP,发现是 CDN,设置成功。

-

开启DNSSEC,防止 DNS 劫持

在 CloudFlare 的 DNS 管理面板往下翻可以看到 DNSSEC 选项,DNSSEC 是 DNS 安全扩展,采用加密方式,防止 DNS 劫持

-

image-20200210122448916

-

CF 提供了十多个参数,转到域名注册商处,填入注册商要求的对应参数即可。

-

等待十多分钟至一个小时,CloudFlare 上的 DNSSEC 会检测到设置成功,提示 Success!

-

image-20200210125156256

-

又掉坑:“重定向次数过多”

刚才的配置好之后,满以为可以运行的飞起来了,结果,打 !不 !开 !了 !

-image-20200210143346231 - -

一番查询发现是:CloudFlare SSL 选项开的是 Flexible。

-

image-20200210143616798

-

下面文字摘自 参考链接:WordPress 网站使用 CloudFlare 后提示“将您重定向的次数过多” 的原因及解决办法 _WordPress智库

-

Cloudflare CDN 配置

-
    -
  • Off:不开启https。

    -
  • -
  • Flexible:当我们的源网站没有配置 HTTPS 支持时,启用这个选项,Cloudflare 会在回源的时候通过 HTTP 协议访问我们的网站。

    -
  • -
  • Full:当我们的源网站支持 HTTPS,但是 HTTPS 证书和域名不匹配或者是自签名证书时,Cloudflare 会通过 HTTPS 协议访问源网站,但不会验证证书,也就是说,即使我们的源网站提供的 HTTPS 证书不受浏览器信任,Cloudflare 也会通过 HTTPS 回源网站。

    -
  • -
  • Full(strict):当我们的源网站支持 HTTP ,并且证书有效时(未过期且受信任)。Cloudflare 会通过 HTTPS 协议访问源网站,并在每个请求过程中验证证书。

    -
  • -
-

了解了上面各个设置的功能,我们来看一下 Cloudflare 的循环重定向问题是怎么出现的,在 Cloudflare 中开启了 SSL 后,访问网站时出现循环重定向需满足下面两个条件:

-
    -
  1. SSL 中设置了 Flexible,CDN 以 HTTP 协议回源网站。
  2. -
  3. 源网站支持 HTTPS,并且设置了通过 HTTP 协议访问时,自动跳转到 HTTPS 协议。
  4. -
-

到这里,可能就有朋友发现问题了,我们访问 Cloudflare 的 CDN 服务器的时候,是通过 HTTPS 访问的,CDN 访问源网站的时候,是通过 HTTP 访问的,源网站上 HTTP 又自动跳转了 HTTPS,完美的一个循环重定向。重定向的次数多了,浏览器就撂挑子报出了 ERR_TOO_MANY_REDIRECTS 的错误。

-

CloudFlare 造成重定向的次数过多问题的解决办法

知道了循环重定向的原因,我们也就知道了怎么解决这个问题,通过测试,下面的两种设置方法都可以解决 Cloudflare 循环重定向的问题。

-
    -
  • SSL 中选择 Full 或者 Full(strict),让 CDN 回源的时候使用 HTTPS 的方式回源,没有 HTTP 什么事了,就不会跳来跳去了
  • -
  • 源网站不设置 HTTPS 支持或者 不设置 HTTP 跳转 HTTPS,让 Cloudflare 回源的时候使用 HTTP 方式获取资源。
  • -
-

修改了 CloudFlare 设置后,可能需要过几分钟或清理浏览器缓存后才能生效。

-

除了 Cloudflare,使用其他 CDN 提供商的时候,也可能会出现这个问题,如果设置了 CDN 后,遇到了 Chrome 报重定向次数过多的问题,可以通过上面的思路查找问题。

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/hexo-with-gitalk/index.html b/2020/02/hexo-with-gitalk/index.html deleted file mode 100644 index 710916a..0000000 --- a/2020/02/hexo-with-gitalk/index.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hexo + gitalk,满满的都是坑。 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- hexo + gitalk,满满的都是坑。 -

- - -
- - - - -
- - -

今日看到博客的评论功能,就想整一个,本以为跟前两天添加hexo插件查不多,结果,,爬坑,又掉坑,爬坑又掉坑……

-
-

安装gitalk

安装gitalk没什么,有很多博文有介绍,这里贴一篇就好,修改主题配置的部分很精简,我喜欢。

- -

注意域名是自己的 github pages 或者自定义域名就好。

-

注意每一次发布新文章之后都需要去博客登陆刷新一下评论,插件会在你的 repo 里面新建 issue。

-

我之前有篇文章叫《Hi, I’m Cortana.》,我点开这个做实验看能不能使用评论功能,原地址是

-
https://blog.tcpsoft.app/2019/12/29/Hi,%20I'm%20Cortana/
-
-

艰难爬坑

[ 以下多链接警告,请选择性阅读 ]

-

报错:redirect_uri_mismatch

-

看了感觉也没啥用,根据指示转到下面这篇,写的比较详细,但是是没有解决问题

- -

我看了看我的配置,根据前面的指导写的最初的配置是这样子的:

-

github-config

-

http https 的问题?

又看了看我的请求 url,确实是都是 https,没有问题啊

-

后来又找到这个 gitalk issue 115 和 162,貌似是个很“权威”的解答

- -

加 / ?

好像回调地址里面要加个 / ?加就加吧,然后

-
1
2
Authorization callback URL:
https://blog.tcpsoft.app/
- -

也不行。仍然跳回主页,并提示 redirect_uri_mismatch

-

后来我又尝试了:

-
1
2
3
4
5
6
7
8
9
10
11
12
http://tcpsoftware.github.io
https://tcpsoftware.github.io
http://tcpsoftware.github.io/
https://tcpsoftware.github.io/
http://blog.tcpsoft.app
https://blog.tcpsoft.app
http://blog.tcpsoft.app/
https://blog.tcpsoft.app/
tcpsoftware.github.io
tcpsoftware.github.io
blog.tcpsoft.app
blog.tcpsoft.app
- -

心累

-

然后忽然在 issue 162 翻到这个?

-

image-20200209140447713

-

中文??!

🤨

-

🤔

-

回头看了看我的 url,貌似并没有中文。

-
https://blog.tcpsoft.app/2019/12/29/Hi,%20I'm%20Cortana/
-

url 编码导致的问题?

-

我尝试换一个文章,在上一篇 hexo 里,可了!!它的链接是,

-
https://blog.tcpsoft.app/2020/02/06/hexo-changes/
-

呐,没有 url 编码,没有中文

-

🤔

-

issue

-

编码问题。

url 里面不要有特殊符号,刚才链接里面完美命中(而且链接看起来很丑可读性很差)

-

有特殊符号不能被匹配规则匹配到(像我刚才链接里面的 , '

-
-

解决方案

hexo new passage_name

-

新建文章的时候想好一个优雅的名字,如果遇到符号或者多单词,可以考虑用:

-
驼峰式命名法(小驼峰命名法)

hexo new helloImCortana

-
帕斯卡命名法(大驼峰命名法)

hexo new HelloImCortana

-
匈牙利命名法(本文无关)

hexo new sHelloImCortana

-

变量类型+变量名(逃)

-
下划线命名法

hexo new hello_Im_Cortana

-
短横线分隔(Github风格 编程必报错)

hexo new hello-Im-Cortana

-
-

再说一句

(其实上面尝试的那一大堆链接,除了最后四个没有 http https 协议的之外,其他的都是可以的)

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/let-git-fly-scientifically/index.html b/2020/02/let-git-fly-scientifically/index.html deleted file mode 100644 index 8e6cf34..0000000 --- a/2020/02/let-git-fly-scientifically/index.html +++ /dev/null @@ -1,693 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 科学地让 Git 飞,git clone 速度 5Mb/s | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 科学地让 Git 飞,git clone 速度 5Mb/s -

- - -
- - - - -
- - -

写本文原因:Git 太慢。看最后,14 KiB/s

-

image-20200214101358632

- - -

首先拥有一个代理服务器

代理分为正向代理和反向代理,

-

正向代理就是代理用户端,改变用户端的身份(IP)。

-

反向代理就是代理服务端,改变服务器的身份(IP)。

-

目前的代理大多数用的都是正向代理。

-

获得服务器方法很多,不讲了,然后你就可以通过软件转发流量来进行“代理”

-

这里使用 ShadowsocksR 配置一个本地 HTTP 代理。

-

然后,设置代理

运行SSR,在软件中添加已获得的服务器,然后进行一些常见的设置如 PAC 。

-

Tips:PAC:Proxy Auto Config

-

然后 Win + R ,输入 inetcpl.cpl 或是找到系统设置里面的代理设置,可以看到类似这样子的界面:

-

image-20200214104604088

-

这样子就是说明本地 1080 端口正在被代理软件使用。

-

然后,修改 Git 配置

git 客户端可以使用代理来改善连接速度,Git 的所有配置都是存储在一个文件中的,可以通过修改配置文件或者通过 Git 命令行来修改配置。

-

Git 命令行主要有几种存在形式:

-
    -
  • Windows命令行调用,主要是Windows安装版 Git 或在有 Git 的文件夹中运行 Git
  • -
  • 软件自带的 Git,这种多是在开发工具或 IDE 中,提供一个 Git 的命令行,如 Visual Studio、Git desktop 等,可能是自带了一份 Git 副本,可能是调用系统的 Git。
  • -
  • Linux 系统中的 Git ,Linux 系统大多自带 Git 命令
  • -
-

Git 的配置文件是一个名字叫 .gitconfig 的文件,上述的第1、3种的配置文件比较好找,第二种就存在不确定性。

-

在Windows中,.gitconfig%userprofile% 文件夹,即用户文件夹。用notepad++ 打开,看起来像这样子:

-image-20200214111535140 - -

在Linux中,.gitconfig~ 文件夹,即用户文件夹,看起来像这样子:(截图为 WSL Ubuntu16.04 + Windows Terminal )

-

image-20200214113002933

-

已知本地端口的情况下,(比如我的是1080),可以配置文件手动添加如下内容:

-
1
2
3
4
[http]
proxy = http://127.0.0.1:1080
[https]
proxy = http://127.0.0.1:1080
- -

注意修改后格式像图中即可

-

另一种方式是在 Git 命令行设置,上面的三种情况都可以使用。

-

打开命令行,输入:

-
1
2
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080
- -

如果要取消代理设置,输入:

-
1
2
git config --global --unset http.proxy
git config --global --unset https.proxy
- -

(打开配置文件会发现对应的也自动修改好了)

-

然后就可以打开命令行开始 git clone 辣。

-

请注意 Github 的两种 clone 方式的区别:

-

https 方式,是通过本地的 http 链接,是会通过代理软件的

-

ssh 方式,是通过 ssh.exe 收发流量,不会通过代理软件,所以依然很慢

-

(截图为我开始 ssh 方式 clone 的时候,网络防火墙提示 ssh.exe 联网)

-image-20200214125336775 - -

用 https 方式速度就会达到接近带宽的峰值。比如我们来 clone 一个 ctf-wiki

-

image-20200214133923497

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/02/wooyun-on-github/index.html b/2020/02/wooyun-on-github/index.html deleted file mode 100644 index d3108b7..0000000 --- a/2020/02/wooyun-on-github/index.html +++ /dev/null @@ -1,1069 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wooyun.org lives on Github | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- Wooyun.org lives on Github -

- - -
- - - - -
- - -

翻阅 Wooyun ,然后找到了Github上。。。不得不说,Github 上确实有大量镜像资源

-

在这里做一个总结吧。按 Star 排序,把每个库的 Readme.md 剪辑到了这里。

-

文尾有彩蛋!

- - -
- -
- -

No.1 https://github.com/hanc00l/wooyun_public

-

Watch:224___Star:3586___Fork:1.8k

-

wooyun_public

乌云公开漏洞、知识库爬虫和搜索
crawl and search for wooyun.org public bug(vulnerability) and drops

-

1.wooyun公开漏洞爬虫版

index

-

search

-

源自2016年6月底使用scrapy爬虫爬取的4W公开漏洞和知识库,虚拟机为ubuntu14.04,采用python2+mongodb+flask(tornado)和Elasticsearch搜索引擎。

-

虚拟机下载地址:

-

https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)

-

安装、使用指南(点我)

-

2.wooyun公开漏洞纪念版

index_final

-

search_final

-

漏洞信息和代码来自于m0l1ce的wooyun_all_bugs_8.8W,包含8.8W漏洞信息(不含知识库);搜索和漏洞信息代码位于wooyun_final,对代码进行了部份修改:

-
    -
  • 修改了搜索功能,支持多关键字搜索和在漏洞详情中搜索
  • -
  • 修改了离线图片文件的位置,搜索结果直接使用虚拟机中的离线图片
  • -
  • 修改了代码以适应PHP5.6及更新版本
  • -
-

虚拟机为ubuntu16.04,PHP5.6+MySQL5.7+Apache2。虚拟机下载地址:
https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)

-

虚拟机用户名、密码为hancool/qwe123

-

3.其它

    -
  • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。
  • -
-
- -
- -

No.2 https://github.com/Xyntax/1000php

-

Watch:31___Star:759___Fork:481

-

1000php

1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

-

说明

    -
  • 数据取自3.8W乌云已公开漏洞(截至2016.7)
  • -
  • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
  • -
  • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
  • -
  • 愿乌云早日回归
  • -
-
- -
- -

No.3 https://github.com/starnightcyber/1000php

-

Watch:1___Star:759___Fork:481

-

1000php

1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

-

在原来的基础上Xyntax/1000php添加了简单的漏洞索引,并且加入了原css文件,方便查看

-

Sample

wooyun-index

-

点击其中某个漏洞,查看

-

bug

-

刚才试过了,直接打开index.html好像并不会简单按照我们的意愿显示,可以重新再执行一下代码:

-

python script.py

-

这样会重新生成index.html,在本地打开应该就没有问题,另外可能会出现乱码,可以用谷歌浏览器打开。

-

说明

    -
  • 数据取自3.8W乌云已公开漏洞(截至2016.7)
  • -
  • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
  • -
  • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
  • -
  • 愿乌云早日回归
  • -
-
- -
- -

No.4 https://github.com/jiji262/wooyun_articles

-

Watch:27___Star:640___Fork:506

-

wooyun_articles

drops.wooyun.org 乌云Drops文章备份

-

(乌云网站已经离我们而去,可能再也不会回来了!谨以此纪念乌云!)

-

线上版本

(已更新图片)

-

https://wooyun.js.org/

-

线上版本源码

https://github.com/jiji262/wooyun_articles/tree/gh-pages

-

关于branches

gh-pages

https://wooyun.js.org/ 源码。

-

由于wooyun服务器已经无法访问,所以文章中图片已经无法显示。所幸,之前已经将图片抓取下来,可以在这里查看所有图片。

-

master

目录如下:

-

wooyun.js:用于抓取 drops.wooyun.org 上文章的脚本;

-

drops:抓取下来的文章原文;

-

image_download:单独下载文章中图片的方法, bagpipe_versionasync_version为多并发下载图片的解决方案。

-

Todo

[x]更新本地图片链接到文章中

-
- -
- -

No.5 https://github.com/boy-hack/wooyun-payload

-

Watch:12___Star:465___Fork:90

-

WooYun-Payload

从乌云漏洞库中提取的扫描规则,内容介绍: https://mp.weixin.qq.com/s/9RHVsw-HtAfo1UuPAqXZEw

-

Burpsuite 辅助插件

通过http请求包中域名,路径,参数等获取乌云历史漏洞中类似的数据。

-

wooyunpayload

-

数据说明

-
- -
- -

No.6 https://github.com/m0l1ce/wooyunallbugs

-

Watch:21___Star:398___Fork:154

-

wooyunallbugs

wooyun_all_bugs_8.8W

-
-

链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw

-

代码在bugs文件里
ps:php version 5.3
库解压到wooyun库里即可
ps:注意修改数据库连接密码 conn.php

-
-

ps:图片资源解压到根目录/upload/下 本地绑定下host 你的图片服务器 static.loner.fm
static.loner.fm 不会关掉的 大家可以放心使用

-

漏洞查询链接 www.loner.fm/bugs/

-
- -
- -

No.7 https://github.com/SuperKieran/WooyunDrops

-

Watch:13___Star:346___Fork:243

-

Wooyun Drops

DEMO: https://wooyun.kieran.top

-

静态版乌云 Drops

OPTIONS:
1.默认开启 https,如果不需要可以在 index.html 删掉
2.图片依赖于 https://github.com/SuperKieran/wooyun-img

-

全文搜索有想法还但没想好怎么做
最先想到的自然是写个后台,搜搜搜就完工了,但这不太方便
静态页面的搜索 我暂时没有好的方案,如果有好的想法的话可以在 issue 里提

-
- -
- -

No.8 https://github.com/SuperKieran/wooyun-img

-

Watch:0___Star:20___Fork:33

-

WooYun Drops 图片库

DEMO: https://superkieran.github.io/WooyunDrops
Github: https://github.com/SuperKieran/WooyunDrops
(编者注:图片在gh-pages分支)

-
- -
- -

No.9 https://github.com/grt1st/wooyun_search

-

Watch:22___Star:327___Fork:157

-

乌云公开漏洞、知识库搜索

-

index

-

search

-

author

-

0x00.介绍

    -
  • 灵感来源于hanc00l的github项目wooyun_public

    -
  • -
  • wooyun_public基于flask或者tornado,而本项目可以布置在apache、nginx等web服务器上。

    -
  • -
  • 如果你有wooyun的静态网页数据,那么我们可以开始了!

    -
  • -
  • 整个项目包括两个部分,第一部分是索引,将网页信息存储进数据库;第二部分是搜索,从数据库中查找信息。轻量级,支持进行二次开发。

    -
  • -
  • 静态网页网盘链接:

    -
    1
    2
    bugs   链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
    drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)
    - -
  • -
-

0x01.依赖组件及说明

    -
  • python 2.7和pip

    -
  • -
  • python依赖:MySQLdb,lxml(推荐)

    -
  • -
  • mysql,php及任意web服务器(php需开启pdo-mysql模块

    -
  • -
  • 将本项目放进web服务器目录下,bugs目录下为漏洞库文件,drops目录下为知识库文件。

    -
    1
    2
    3
    4
    5
    6
    7
    8
    文件说明:
    app_bugs.py bugs的索引,依赖lxml
    app_drops.py drops的索引,依赖lxml
    index.html 搜索的主页
    search.php 执行搜索的页面
    config.php php配置文件
    ./bugs bugs静态文件的目录
    ./drops drops静态文件的目录
    - -
  • -
-

0x02.索引配置

    -
  • app_bugs.py为建立bugs索引的脚本,app_drops为建立drops索引的脚本。

    -
  • -
  • 因为python脚本中open()函数打开的文件名不能为中文,建议将drops目录下的中文文件名改为英文(例如,安全运维-xxxx.html=>safe-xxxx.html)

    -
  • -
  • python脚本运行前需要修改如下语句,更改参数如主机、端口号、用户名、密码。

    -
    1
    conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='',db='wooyun',charset='utf8')
    -
  • -
  • 在mysql中建立数据库wooyun,数据表bugs、drops,分别建立字段title,dates,author,type,corp,doc与title,dates,author,type,doc。

    -
    1
    2
    3
    CREATE DATABASE `wooyun` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    create table bugs(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),corp CHAR(255),doc VARCHAR(200) PRIMARY KEY);
    create table drops(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),doc VARCHAR(200) PRIMARY KEY);
  • -
  • 注意mysql编码如下,需要为utf-8(character_set_server不为utf-8要修改mysql配置文件

    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use wooyun;
    show variables like 'character%'; #查看编码
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    -

    如果编码错误会报错,比如:

    -
    1
    2
    Warning: Incorrect string value: '\xE5\xBB\xB6\xE9\x95\xBF...' for column 'title' at row 1
    cur.execute("INSERT INTO `drops`(`title`,`dates`,`author`,`type`,`doc`) VALUES(%s,%s,%s,%s,%s)", tmp)
    -

    在mysql里查看会发现有一堆???

    -
  • -
  • 之后就可以建立索引了

    -
    1
    2
    sudo python ./app_bugs.py
    sudo python ./app_drops.py
  • -
  • bugs数目为40280,drops数目为1264

    -
    1
    2
    3
    use wooyun;
    select count(*) from bugs;
    select count(*) from drops;
    - -
  • -
-

0x03.搜索配置

    -
  • 修改config.php中修改如下语句中参数,分别是主机、端口、用户名、密码与数据库。

    -
    1
    2
    3
    4
    5
    $config['host'] = '127.0.0.1';
    $config['port'] = '3306';
    $config['user'] = 'root';
    $config['passwd'] = '';
    $config['database'] = 'wooyun';
    -
  • -
  • index.html与search.php样式来自于前端静态资源托管库。f12进入开发者模式,如果样式文件访问不到可以使用本地或cdn的样式(bootstrap3.3.7、jquery3.1.0)。只需要更改两个网页里面的如下内容。

    -
  • -
-
1
2
3
<link href="//lib.baomitu.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="//lib.baomitu.com/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript" src="//lib.baomitu.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
- -
    -
  • 为了防止因为web服务器配置不正确,导致访问http(s)://example.link/bugs/或者http(s)://example.link/drops/而进入index of页面泄露所有文件,在目录下放置内容为空的index.html即可。

    -
  • -
  • linux下由于selinux可能会导致无法连接数据库,可以使用如下命令:

    -
    1
    2
    getenforce   //查看selinux状态
    setenforce 0 //暂时关闭selinux
    - -
  • -
-

0x04.问题

    -
  • drops很奇怪的会都需web目录下的js而不是本身目录里的js,所以drops的页面会有些乱。开发者模式看一下,缺少的js为web目录/static/drops/css与web目录/static/drops/js。新建目录再把drops下的css、js文件夹复制过去即可
  • -
-

0x05.更新日志

    -
  • 2016.10.08更新:上传了bugs.py。由于bugs部分页面(约143条)的author带有js,正则匹配出的信息出错,所以上传了bugs.py用于修正,在app.py后执行,python bugs.py。(2016.11.09已修正,无需执行bugs.py)

    -
  • -
  • 2016.10.10更新:重写了search.php和search.css,基本适配了各种浏览器和移动端。

    -
  • -
  • 2016.11.09更新:匹配索引将BeautifulSoup换成了lxml,运行速度更快。优化了匹配(感谢@tuola)。

    -
  • -
  • 2017.01.01更新:增加了作者搜索,优化了分页逻辑。

    -
  • -
  • 2017.3.7更新:重写了前端,优化了php代码。

    -
  • -
  • 欢迎反馈问题。可以提问issue也可以通过grt1stnull@gmail.com联系我。后续也会进行其他细节优化。

    -
  • -
-

0x06.后记

    -
  • 本来打算把wooyun_public布置在我的树莓派上,因为一些原因失败,所以萌生了自己搭建的念头

    -
  • -
  • 总共搭建了十天,接触了js、bootstarap、beautifulsoup、mysqldb、mysqli和pdo。虽然以前也会css与php,但这是第一次真正写一个动态网页,感觉很棒。

    -
  • -
-

0x07.其他

    -
  • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。

    -
  • -
  • 新浪微博:http://weibo.com/grt1st

    -
  • -
  • 个人邮箱:grt1stnull@gmail.com

    -
  • -
-
- -
- -

No.10 https://github.com/LubyRuffy/wyquery

-

Watch:12___Star:109___Fork:92

-

wyquery

Wooyun公开的漏洞详情是一个很好的资源,但是没有提供很好的搜索引擎和排序功能来进行数据分析,所以,这个项目用户镜像wooyun上已经对外公开的漏洞详情,并提供更多搜索和排序的功能。

-

你有没有想完成如下功能?

-
    -
  • 我想只看给钱的漏洞
  • -
  • 我想只看带乌云标志的漏洞
  • -
  • 我想按照rank排序漏洞
  • -
-

如果有,那你跟我遇到的问题一样,不妨试试这个项目!线上已经搭建好的DEMO环境如下:http://120.27.41.90/

-

搭建环境

建议在Linux下运行,当然Windows下也可以。Ruby 2.0+

-
1
2
3
4
5
git clone https://github.com/LubyRuffy/wyquery.git
cd wyquery
bundle install
rake db:migrate
rails s
- -

然后访问http://0.0.0.0:3000

-

初次抓取数据

1
2
cd wyquery
ruby ./tools/import_bugs.rb
- -

同步数据

这时可以建立定时任务

-
1
2
crontab -e
*/10 * * * * <wyquery路径>/tools/import_bugs.rb
- -
- -
- -

No.11 https://github.com/jas502n/fuzz-wooyun-org

-

Watch:3___Star:96___Fork:49

-

fuzz-wooyun-org

WooYun Fuzz 库

-
- -
- -

No.12 https://github.com/xinali/wooyun

-

Watch:6___Star:95___Fork:42

-

wooyun

wooyun datasets

    -
  • usernames
  • -
  • passwords
  • -
  • URLs
  • -
  • sensitive data patterns
  • -
  • fuzzing payloads
  • -
  • web shells
  • -
-
- -
- -

No.13 https://github.com/l3m0n/wooyun-wiki

-

Watch:5___Star:75___Fork:55

-

wooyun-wiki

wiki.wooyun.org的部分快照网页

-
- -
- -

No.14 https://github.com/fxfactorial/wooyun.github.io

-

Watch:6___Star:44___Fork:33

-

【没有 Readme.md 介绍】


- -
- -

No.15 https://github.com/CaledoniaProject/wooyun_offline_ui

-

Watch:4___Star:40___Fork:19

-

说明

花了10分钟重做了一套乌云离线Web UI,重做总共有两个目的,

-
    -
  1. 没必要使用14GB的虚拟机,经过处理,40K漏洞只占用500MB mongodb 硬盘空间
  2. -
  3. 上述作者没有提取 关注数、是否为有奖励或者漏洞预警的漏洞 等几个关键字段
  4. -
-

特性

支持漏洞标题搜索、漏洞wooyun id搜索

-

screen

-

支持漏洞查看(删除了评论),原始 wooyun UI

-

screen2

-

安装

复制 src 到 web 目录,e.g

-
1
cp -R src ~/web/wooyun_offline
- -

安装 php-mongo 扩展

-

mongo 默认为 127.0.0.1:27017,如有不同,修改 src/config.php 即可

-
1
2
3
4
5
<?php
$config = array(
'mongodb' => 'mongodb://127.0.0.1:27017'
);
?>
- -

导入数据

导入到 wooyun 数据库,bugs 表即可

-

由于政策风险,我不能提供数据,可以用网上的14GB虚拟机导出

-

然后使用 src/scripts/minify.pl 精简 mongo 数据库

-

已知问题

    -
  1. 缺少 images/blood.png
  2. -
  3. 漏洞库不全,可惜没用高权限账号爬
  4. -
-
- -
- -

No.16 https://github.com/lxj616/DVWA-WooYun

-

Watch:1___Star:23___Fork:16

-

DVWA-WooYun

DVWA-WooYun is a plugin-set for DVWA , with plugins based on wooyun.org real bug reports

-

It should have been a fork of the RandomStorm/DVWA , But while I was coding it , I didn’t know a thing about github :(

-

And now I do , so scavenged old codes to github

-

And I modified lot of things , can’t remember why , just messed around , It seems to be not able to merge with the original DVWA now

-

DAMN VULNERABLE WEB APP

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment.

-

WARNING!

Damn Vulnerable Web App is damn vulnerable! Do not upload it to your hosting provider’s public html folder or any working web
server as it will be hacked. I recommend downloading and installing XAMPP onto a local machine inside your LAN which is used solely for testing.

-

We do not take responsibility for the way in which any one uses Damn Vulnerable Web App (DVWA). We have made the purposes of the application clear and it should not be used maliciously. We have given warnings and taken measures to prevent users from installing DVWA on to live web servers. If your web server is compromised via an installation of DVWA it is not our responsibility it is the responsibility of the person/s who uploaded and installed it.

-

License

This file is part of Damn Vulnerable Web App (DVWA).

-

Damn Vulnerable Web App (DVWA) is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

-

Damn Vulnerable Web App (DVWA) is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

-

You should have received a copy of the GNU General Public License
along with Damn Vulnerable Web App (DVWA). If not, see http://www.gnu.org/licenses/.

-

Download

DVWA is available either as a package that will run on your own web server or as a Live CD

-
    -
  • DVWA v1.0.8 (latest) - (1.3MB) Download
  • -
  • DVWA v1.0.7 LiveCD - (480MB) Download
  • -
-

Installation

Default username = admin

-

Default password = password

-

Installation video:
http://www.youtube.com/watch?v=GzIj07jt8rM

-

The easiest way to install DVWA is to download and install ‘XAMPP’ if you do not already have a web server setup.

-

XAMPP is a very easy to install Apache Distribution for Linux, Solaris, Windows and Mac OS X. The package includes the Apache web server, MySQL, PHP, Perl, a FTP server and phpMyAdmin.

-

XAMPP can be downloaded from:
http://www.apachefriends.org/en/xampp.html

-

Simply unzip dvwa.zip, place the unzipped files in your public html folder, then point your browser to http://127.0.0.1/dvwa/index.php

-

Database Setup

To set up the database, simply click on the Setup button in the main menu, then click on the ‘Create / Reset Database’ button. This will create / reset the database for you with some data in.

-

If you receive an error while trying to create your database, make sure your database credentials are correct within /config/config.inc.php

-

The variables are set to the following by default:

-
1
2
3
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = '';
$_DVWA[ 'db_database' ] = 'dvwa';
- -

Troubleshooting

For the latest troubleshooting information please visit:
http://code.google.com/p/dvwa/issues/list

-

+Q. SQL Injection wont work on PHP version 5.2.6.

-

-A.If you are using PHP version 5.2.6 you will need to do the following in order for SQL injection and other vulnerabilities to work.

-

In .htaccess:

-

Replace:

-
1
2
3
4
5
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
#php_flag allow_url_fopen on
#php_flag allow_url_include on
</IfModule>
-

With:

-
1
2
3
4
5
<IfModule mod_php5.c>
magic_quotes_gpc = Off
allow_url_fopen = On
allow_url_include = On
</IfModule>
-

+Q. Command execution won’t work.

-

-A. Apache may not have high enough priviledges to run commands on the web server. If you are running DVWA under linux make sure you are logged in as root. Under Windows log in as Administrator.

-

+Q. My XSS payload won’t run in IE.

-

-A. If your running IE8 or above IE actively filters any XSS. To disable the filter you can do so by setting the HTTP header ‘X-XSS-Protection: 0’ or disable it from internet options. There may also be ways to bypass the filter.

-

Homepage: http://www.dvwa.co.uk

-

Project Home: https://github.com/RandomStorm/DVWA

-

Created by the DVWA team

-
- -
- -

No.17 https://github.com/neargle/SecNewsBak

-

Watch:2___Star:20___Fork:17

-

README

该项目只用于备份Sec-News上Drops乌云知识库的失效文章,并非Drops整站文章。

-

文章列表如下:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
drops_arti_list = [
"SQL注入速查表(上)",
"WMI Attacks",
"攻击洋葱路由(Tor)匿名服务的一些综述",
"SQL注入速查表(下)与Oracle注入速查表",
"Hacking ipcam like Harold in POI",
"海豚浏览器与水星浏览器远程代码执行漏洞详解",
"WMI Backdoor",
"手把手教你当微信运动第一名 – 利用Android Hook进行微信运动作弊",
"WMI Defense",
"Tomcat安全配置",
"利用Weblogic进行入侵的一些总结",
"工控安全入门分析",
"利用被入侵的路由器获取网络流量",
"利用白名单绕过360实例",
"浅析大规模DDOS防御架构-应对T级攻防",
"XCode编译器里有鬼 – XCodeGhost样本分析",
"借用UAC完成的提权思路分享",
"TcpDump使用手册",
"被人遗忘的Memcached内存注射",
"利用被入侵的路由器迈入内网",
"Android sqlite load_extension漏洞解析",
"CTF主办方指南之对抗搅屎棍",
"域渗透的金之钥匙",
"比葫芦娃还可怕的百度全系APP SDK漏洞 - WormHole虫洞漏洞分析报告",
"那些年做过的ctf之加密篇",
"从一个锁主页木马里挖出的惊天“暗杀黑名单”",
"C&C控制服务的设计和侦测方法综述",
"Python安全编码指南",
"翻墙路由器的原理与实现",
"几期『三个白帽』小竞赛的writeup",
"拆分密码",
"变种XSS:持久控制",
"使用32位64位交叉编码混淆来打败静态和动态分析工具",
"給初學者的DLL Side Loading的UAC繞過",
"Joomla远程代码执行漏洞分析",
"网络小黑揭秘系列之黑色SEO初探",
"一步一步学ROP之Android ARM 32位篇",
"Linux入侵检测基础",
"Android WebView File域攻击杂谈",
"小议Linux安全防护(一)",
"Powershell 提权框架-Powerup",
"Android Linker学习笔记",
"MD5碰撞的演化之路",
"Android应用安全开发之源码安全",
"Ruby on Rails 动态渲染远程代码执行漏洞 (CVE-2016-0752)(翻译)",
"中间人攻击 -- Cookie喷发",
"域渗透——Security Support Provider",
"LUA脚本虚拟机逃逸技术分析",
"我的通行你的证",
"在不需要知道密码的情况下 Hacking MSSQL",
"代码审计入门总结",
"Linux服务器应急事件溯源报告",
"Head First FILE Stream Pointer Overflow",
"从 WTForm 的 URLXSS 谈开源组件的安全性",
"网络小黑揭秘系列之黑产江湖黑吃黑—中国菜刀的隐形把手",
"简单验证码识别及工具编写思路",
"中国菜刀仿冒官网三百万箱子爆菊记",
"Rails Security (上) ",
"富文本存储型XSS的模糊测试之道",
"主机被入侵分析过程报告",
"Exploring SSTI in Flask/Jinja2 | WooYun知识库",
"0ctf writeup",
"一个支付宝木马的分析溯源之旅",
"QQ模拟登录实现后篇",
"渗透技巧——通过cmd上传文件的N种方法",
"通过ELF动态装载构造ROP链 ( Return-to-dl-resolve)",
"Mysql报错注入原理分析(count()、rand()、group by)",
"利用反射型XSS二次注入绕过CSP form-action限制",
"渗透Hacking Team过程",
"“信任“之殇――安全软件的“白名单”将放大恶意威胁",
"百脑虫之hook技术",
"内网渗透中转发工具总结",
"TCP安全测试指南-魔兽3找联机0day",
"CVE-2016-3714 - ImageMagick 命令执行分析",
"CVE-2016-1897/8 - FFMpeg漏洞分析",
"漫谈流量劫持",
"新姿势之Docker Remote API未授权访问漏洞分析和利用",
"利用CouchDB未授权访问漏洞执行任意系统命令",
"利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令",
"CTF中比较好玩的stego",
"linux下tomcat安全配置",
"MySQL和PostgreSQL数据库安全配置",
"内网渗透思路探索之新思路的探索与验证",
"小窥TeslaCrypt密钥设计",
"Do Evil Things with gopher://",
"三个白帽条条大路通罗马系列2之二进制题分析",
"Android安全开发之Provider组件安全",
"漏洞检测的那些事儿 ",
"QQ浏览器隐私泄露报告",
"三个白帽之从pwn me调试到Linux攻防学习",
"渗透中寻找突破口的那些事",
"Struts2 S033与最新S037详细分析",
"DB2在渗透中的应用",
"Python urllib HTTP头注入漏洞 (中文翻译)",
"SQL注入关联分析",
"Anti-debugging Skills in APK",
"玩转Metasploit之Automated Persistent Backdoor",
"Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪!",
"玩转Metasploit之Automated Persistent Backdoor",
"Docker安全那些事 ",
"Use bitsadmin to maintain persistence and bypass Autoruns ",
"CTF中那些脑洞大开的编码和加密 ",
"Jenkins RCE 2(CVE-2016-0788)分析及利用",
"小议安卓定位伪造-实战足不出户畅玩pokemon go",
"三个白帽挑战赛之[续集]火币网2W大挑战Writeup"
]
- -
- -
- -

No.18 https://github.com/acgpiano/wooyun-node

-

Watch:2___Star:9___Fork:8

-

wooyun-node

这是wooyun.org镜像的node.js版本,用的mysql,支持标题,作者,类型,厂商检索。
方便新手小白使用,搭建方法非常简单。
首先需要安装mysql,要把数据库语言设置成utf8(非常重要,不然会出错)。由于各个系统设置方法不同,需自行百度。检测是否成功可以登进数据库,执行

-
1
status;
-

如果是以下状态,就代表可以下一步了。
把该项目克隆到本地

-
1
git clone https://github.com/acgpiano/wooyun-node.git
-

修改config.js里面的用户名和密码,改为你的mysql的用户名和密码,port是服务的端口,可以自行修改。
下载wooyun的静态资源:
链接: 百度网盘 密码: mqnp
需要解压到wooyun-node/static/bugs/
文件夹下面(自行新建bugs文件夹)
接下来安装node.js,去官网下载就好了。
接下来安装cnpm(如果可以连Internet这一步可以忽略,以下命令的cnpm全都可以用npm代替)

-
1
npm install -g cnpm --registry=https://registry.npm.taobao.org
-

然后在wooyun-node里执行

-
1
cnpm install
-

等所有的依赖装完再执行

-
1
npm run db
-

等数据库建表完后,共40293条,再执行

-
1
npm start
-

默认port端口是9999,可以在config.js里面修改
打开浏览器 http://127.0.0.1:9999就可以使用了。

-

仅供自学使用,如果要部署到公网可以自己改用orm,修改表结构加速查询,防注入。

-
- -
- -

当然是彩蛋辣~

上面提到的 Baidu网盘 链接整理:

-

https://github.com/hanc00l/wooyun_public
Watch:224___Star:3586___Fork:1.8k

-
-
1
2
3
4
5
6
7
虚拟机下载地址:
https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)
【文件名:ooyun_vmware_201606_es】

虚拟机下载地址: https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)
【文件名:wooyun_final】
虚拟机用户名、密码为hancool/qwe123
-
-

https://github.com/m0l1ce/wooyunallbugs
Watch:21___Star:398___Fork:154

-
-
1
2
链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw
【文件名:wooyun-15-a.zip等】
- -
-

https://github.com/grt1st/wooyun_search
Watch:22___Star:327___Fork:157

-
-
1
2
3
4
5
静态网页网盘链接:
bugs 链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
【文件名:WooYun_Bugs(漏洞库)】
drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)
【文件名:WooYun_Drops(知识库)】
- -
-

https://github.com/acgpiano/wooyun-node
Watch:2___Star:9___Fork:8

-
-
1
2
链接: https://pan.baidu.com/share/init?shareid=3613354206&uk=4113422303 密码: mqnp
【文件名:WooYun_Bugs(漏洞库)】
- -
- -
- -

当然还有彩蛋辣~

新建一个文件夹,在里面打开终端,复制粘贴下面代码,或者保存为 .sh (linux)、 .bat (Windows),命令行调用辣

-

注意:最后三个库特别大,如果网络不好,可能出现 git 连接超时,可以连接更优网络,或参考我的文章

- -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
echo .
git clone https://github.com/hanc00l/wooyun_public
echo .
git clone https://github.com/boy-hack/wooyun-payload
echo .
git clone https://github.com/m0l1ce/wooyunallbugs
echo .
git clone https://github.com/SuperKieran/WooyunDrops
echo .
git clone https://github.com/SuperKieran/wooyun-img
echo .
git clone https://github.com/grt1st/wooyun_search
echo .
git clone https://github.com/LubyRuffy/wyquery
echo .
git clone https://github.com/jas502n/fuzz-wooyun-org
echo .
git clone https://github.com/xinali/wooyun
echo .
git clone https://github.com/l3m0n/wooyun-wiki
echo .
git clone https://github.com/fxfactorial/wooyun.github.io
echo .
git clone https://github.com/CaledoniaProject/wooyun_offline_ui
echo .
git clone https://github.com/lxj616/DVWA-WooYun
echo .
git clone https://github.com/neargle/SecNewsBak
echo .
git clone https://github.com/acgpiano/wooyun-node
echo .
git clone https://github.com/Xyntax/1000php 1000php-Xyntax
echo .
git clone https://github.com/starnightcyber/1000php 1000php-starnightcyber
echo .
git clone https://github.com/jiji262/wooyun_articles
echo .
- - -
- - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/03/cpp-with-Visual-Studio-2019/index.html b/2020/03/cpp-with-Visual-Studio-2019/index.html deleted file mode 100644 index 33893c1..0000000 --- a/2020/03/cpp-with-Visual-Studio-2019/index.html +++ /dev/null @@ -1,669 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 用 Visual Studio 2019 写 C++ 基础代码 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 用 Visual Studio 2019 写 C++ 基础代码 -

- - -
- - - - -
- - -

什么?你不会用VS?

-

准备工作

安装 Visual Studio2019 Community,不多说了,虽然可能出现很多问题。这里假定你已经有安装好的 VS2019。

-

打开VS,创建项目

打开VS2019,看到如下界面。

-

image-20200306134632068

-

选择C++,Windows,选择控制台应用。

-

image-20200306134730096

-

填写项目名称和存储位置,点击创建。

-

image-20200306134821590

-

然后就会打开工程界面,在右边的解决方案资源管理器,源文件,可以找到刚才填写的名字的cpp文件,双击打开(默认会打开的),在左边正常编写代码,按 F5 运行,或点击上面绿色三角形,“本地Windows调试器”,(可以直接点也可以菜单栏选择调试,开始执行不调试(快捷键Ctrl+F5))

-

image-20200306134954770

-

没有“控制台应用”选项?

创建项目窗口,拉到最下面,找到安装

-

image-20200306135632223

-

在打开的窗口,勾选安装这三个。(其他的可以根据需要添加)(如果你确实不用VS开发高级应用,只勾选“使用C++的桌面开发”也就可以了)

-

image-20200306135706897

-

另外需要注意的是,如果想要图形化设计程序界面,(即MFC),需要在勾选“使用C++的桌面开发”之后,勾选右边的 C++ MFC v142

-

image-20200306135751221

-

,然后开始安装即可。可以选择下载时安装(下载一个安装一个),下载完成安装(全部下载完再一起装),我个人偏好后一种

-

(等待巨长时间,安装完成后再同理创建项目。)

-

用VS进行简单调试

断点

在需要暂停的代码这一行前面灰色区域鼠标单击,出现一个红色圆点,就是下断点。

-

image-20200306141237786

-

F5 开始调试,或点上方“本地Windows调试器”或菜单栏调试,开始调试。

-

VS界面会发生变化,且之前下断点位置会变成橙色箭头,表示程序当前正在执行这一行代码。此时程序暂停,可以查看变量值和一行一行运行程序。

-
    -
  • 鼠标悬停在变量上,可以查看变量值。

    -
  • -
  • 选中变量,右键,添加监视,可以在下方监视面板自动显示变量值

    -
  • -
  • 在代码里鼠标右键,快速监视,输入变量名,可以添加多个变量监视,也可以添加表达式监视,比如a+b+c

    -
  • -
-

image-20200306142152438

-

单步运行

图示的四个按钮。

-
    -
  • 显示下一条语句
  • -
  • 逐语句
  • -
  • 逐过程
  • -
  • 跳出
  • -
-

image-20200306142607239

- -
- - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/03/how-to-ask-in-group-chat/index.html b/2020/03/how-to-ask-in-group-chat/index.html deleted file mode 100644 index 82c4266..0000000 --- a/2020/03/how-to-ask-in-group-chat/index.html +++ /dev/null @@ -1,733 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 群里提问的艺术 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 群里提问的艺术 -

- - -
- - - - -
- - -

现在互联网发达的时代,大家都会有很多的群,xxx 交流群、xxx 技术交流、xxx开发群、xxx技术学习群等,大家的初心可能都是想交流的,遇到点问题然后就可以在群里问。

-

然而很多时候你问的问题没人回答;也有时候问了半天还是没找到答案;也有时候当你把问题发出来了,别人正准备回答你的时候,你说知道了;然后刚开始群里很活跃,慢慢的就死了。

-

其实以上问题,都是大家不想看到的,然而在群里提问是我们加入群的初心,但是很多人做不好,最终导致你的问题无人解答,群慢慢的失去意义。

-

今天我所谈的就是群里提问的艺术,让你的问题快速得到解决。

-

我将今天的问题分成以下三部分进行介绍:

-
    -
  • 提问之前
  • -
  • 提问之时,怎么提问
  • -
  • 注意事项
  • -
-

提问之前

在群里提问之前首先我们应该做好功课,看自己是否完成以下步骤,否则你的提问将一塌糊涂,大概率得不到想要 的答案。

-
    -
  1. 尝试自己解决
  2. -
  3. 不能自己解决应该准备的哪些
  4. -
-

尝试自己解决

尝试自己解决是非常重要的一步,这也是我们能否经过这个问题能够成长的关键所在。

-
    -
  1. 通过搜索引擎搜索:baidu 或者 google(推荐),搜索结果中前三页如果找不到你想要的信息,就进行下一步吧。对于成熟的开源项目,你遇到的问题,很可能别人也遇到过。这时通过 Google、StackOverflow 等网站的搜索服务,可以帮你快速定位并解决问题。永远记住,地球上的你并不孤单,包括你遇到的问题。
  2. -
  3. 查阅手册/文档:确保自己阅读过至少一次官方文档。这样在遇到问题时,如果能回忆起只言片语,就可以再去读一遍相关文档,问题往往也就解决了。
  4. -
  5. 查阅社区/论坛:阅读常见问题文件(FAQ)或者开源项目的 issue,或者论坛(类似 react china)
  6. -
  7. 询问朋友:如果你使用的开源软件,在朋友圈或同事圈里也有人使用,那么抬起你的脚、或拿起你的电话,真挚诚恳的探讨不会遭遇拒绝,而会增进友谊。不要犹豫,你的内心渴望面对面交流,你的朋友也是。
  8. -
  9. 自检并不断测试:试自己检查或试验以找到答案。
  10. -
  11. 阅读源码(这步非必须):如果你是程序开发者,尽量尝试阅读源码以找到答案。
  12. -
-

经过以上 6 步或者 5 步你都无法解决遇到的问题,那么你确实针对这个问题能力有限,准备去群里请教了,那么在尝试自己解决之后无果,应该做哪些准备呢?

-

不能自己解决应该准备的哪些

    -
  1. 一定要明白自己想要问什么问题:不能自己都说不清自己想要问什么问题,那么群里提问你也问不出什么来。
  2. -
  3. 梳理准备您的问题:要说明之前你都干了些什么。
  4. -
  5. 要用言简意赅的语言:这个是我们作为职场一个必备的技能,说重点,言简意赅。
  6. -
-

怎么提问

抱着平和对等的心态,找到合适的途径后,就得静下心来将遇到的问题写成文字。书写文字不是一件简单的事情,我们可以从遵循一些简单的规则开始。

-

用词准确,问题明确

标题要简洁清晰,要言之有物。

-
-

Bad:救命呀/急/跪求,遇到了一个 react 问题,xxx 组件渲染不出来

-

Good:在使用 xxx 版本的 react ,我操作了 xxx,也写了 xxx,但是 xxx 组件渲染不出来

-
-

一个好标题范例是目标 —— 差异式的描述,许多技术支持组织就是这样做的。在目标部分指出是哪一个或哪一组东西有问题,在差异部分则描述与期望的行为不一致的地方。

-

描述清晰,信息充足

    -
  1. 准确有效的信息:描述事实,而不是猜测,如果你想给出你的猜测,一定要先描述事实,给你的猜测一些证据,不然就不要猜测。
  2. -
  3. 问题表现/内容:按照时间顺序列出问题症状。问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。
  4. -
  5. 简单的做过什么尝试:在描述你做过什么尝试的时候,简单的你描述你做了哪些尝试就行,为什么要这么做其实不是那么重要。
  6. -
-

如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标,然后才陈述重现你所卡住的特定步骤。

-

经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

-

玉伯有句话是这么说的:

-
-

提问者选择的路本身就是一条崎岖之路,对于要解决的问题,实际上有更好的方式。这种情况下,描述清楚目标,讲清楚要干什么非常重要。

-
-
    -
  1. 想要问到什么:提供建议?发送一段代码?检查你的补丁或者别的?在群里经常会出现这种情况,当某个人发了一段文字,另外的人说:你想问什么?
  2. -
-

所以我们在问问题的时候一定要把你想要问到什么,这个目标想清楚。

-
    -
  1. 提供尽量多的信息:尽量提供可重现的例子,你可以在 jsbin)、runjsjsfiddle)、codepen 等这些地方提供一个可重现的例子。即使你是一个很大的项目,想办法把你需要验证的点提取出来,如果确实无法提取,就贴一些代码,出现问题那行代码周围的代码(周围的相关代码都要,因为你可能觉得不是他们的问题,但也许就是,不然你觉得的都是对的,你就不会不知道怎么解决了)。
  2. -
-

避免一些毫无意义的问题

经常会有人问一些毫无意义的问题,比如这样的:

-
-

Bad:有没有人会xxx?

-

Bad: 有没有人在?

-

Bad: 谁能帮我解决一个问题?

-
-

面对这种问题,别人就很难预估你这个问题需要解决多久,也很难判断自己是否能解决这个问题,如果他回答了你,意味着你就是有空而且很在行,所以他还是选择不出声。这个就跟微信私聊的时候说:”在吗?“ 这种一个意思。

-
-

Bad: 什么是 JavaScript?

-
-

这种问题也是,很明显通过搜索引擎就能搞定的,要是下次还有这种问题,你就把这个图发给它。

-

img

-

建议的问法:

    -
  1. 有问题直接问。比如:ES6什么时候雄霸天下,前端什么时候一统江湖?
  2. -
  3. 直接说场景:我在做xx端东西的时候,在 window 7 平台的 IE7 版本下遇到了左右不对齐问题,具体如图所示img,代码地址:http://www.jsbin.com/xxxx,在百度中找到的答案,试了之后还是有同样的问题。请有空的同学帮我看看是什么问题?
  4. -
-

注意事项

    -
  • 提前做好冷场的准备:也许别人在忙,也许这个问题太简单了,也许没人做过这块,如果冷场了,没人回答,赶紧换下一个群。
  • -
  • 谦虚,别人没有义务帮你解决问题,往往大牛的时间比你少,比你珍贵。
  • -
  • 没有一定的自学能力,问到问题就伸手的不适合玩这个。
  • -
  • 群唯一的作用就是:扯淡、交流、分享,以上几条为前提。
  • -
-

如果觉得问题记不住,收藏一下这个图吧:

-

img

-

最后

其实对于问问题,我们换位思考一下就更好了,这其实也是人际交往的方式,站在看你提问题的角度,想想当别人提问题的时候,你想让他问什么,你才愿意去回答。

-

当然除了在群里提问,在社区里提问,论坛里提问都有一定的规范,后面再慢慢补充吧。

-
-
-

版权属于:桃翁

-

本文链接:http://taoweng.site/index.php/archives/215/

-

转载时须注明出处及本声明,欢迎关注我的公众号「前端桃园」

-
-

.

-

(这真就原封不动的照搬呗)

-
-

《提问的智慧》

另外还想再贴一个,最经典的,最最经典的(也最长最复杂的):

-

《提问的智慧》,来自 Github 。其实最初是 Eric S. Raymond, Rick Moen 创作的,然后 ryanhanwu 翻译了并放在 Github 上作为一个开源项目,截止本文写作时,该项目已有 10.2k Star,2.8k Fork。

-

另外,由于这个是国外作者创作的,所以其中出现的案例论坛等一般是国外常见论坛,也可以了解一下。

-

【警告】:本文十分冗长,建议在有闲暇时间时仔细浏览。

-

https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/03/let-onedrive-fly-scientifically/index.html b/2020/03/let-onedrive-fly-scientifically/index.html deleted file mode 100644 index 52b8a8d..0000000 --- a/2020/03/let-onedrive-fly-scientifically/index.html +++ /dev/null @@ -1,705 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 科学地让 OneDrive 飞,下载速度 5Mb/s | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 科学地让 OneDrive 飞,下载速度 5Mb/s -

- - -
- - - - -
- - -

OneDrive 是 Microsoft 的一个云存储服务,安装后集成在 Windows 资源管理器,所以比其他任何网盘都更有其与生俱来的优势。但由于众所周知的原因,OneDrive 的访问速度也极低。
访问速度慢还不算了,还经常会死在某个进度,一直下不动,这是最**的

-image-20200321165324494 -
你看这 243KB/秒 长得多标致啊
- - -

解决方案

    -
  1. ShadowsocksR
  2. -
  3. Proxifier
  4. -
  5. 设置 OneDrive 多线程
  6. -
-

1. ShadowsocksR

略。

-

配置好之后应该是会开启 127.0.0.1:1080 ,HTTP、Socks5 均有(没出问题的话默认就是这个配置)

-

2. Proxifier

搜索Proxifier找到官网:https://www.proxifier.com/download/

-image-20200321172127587 - -

下载 Proxifier Standard Edition ,这个是安装版,Portable是绿色版,这里不用绿色版。

-

下载下来exe双击安装,安装过程中勾选Create a desktop shortcut,完了之后会默认打开软件,关掉它(你也可以在最后一步取消勾选Launch Proxifier)

-

在桌面快捷方式右键,用管理员权限运行。打开之后是长这个样子的:

-image-20200321175935712 - -

选择31天试用,或者输入注册码,如果输入注册码,最好是勾选All userss on this computer(require administrator),然后就会打开程序主界面

-

image-20200321180424905

-

我们当然是希望开机启动,所以开启Autostart

-image-20200321191843270 - -

通过Profile->Proxy Servers,添加 HTTPS 和 Socks5 代理配置

-image-20200321181035454 - -

通过Profile->Proxification Rules,配置软件代理规则

-

image-20200321182841860

-

我们在这里添加OneDrive。

-

先找到OneDrive的可执行文件的位置。一般应该是在%localappdata%\Microsoft\OneDrive\

-

如果没有,运行OneDrive,打开任务管理器,在详细信息标签页,找到onedrive.exe,右键打开文件所在位置

-

点击上面窗口的Add,添加配置。点击Browse输入OneDrive目录,选择onedrive.exe,action选择通过socks5代理

-image-20200321183611160 - -

保存,并把 default 的 action 设置为 direct(你也不希望所有程序都通过代理对吧)

-image-20200321183553240 - -

任务栏里面右键 OneDrive,更多,关闭 OneDrive,再找到刚才的OneDrive程序位置,开启OneDrive。

-

我们随便下载一个文件看看:

-

image-20200321191651660

-

3. 设置 OneDrive 多线程

你好像速度没我快?那肯定是你氪金不够(bushi),那就试试开启 OneDrive 多线程

-
1
2
3
4
修改这个文件:
"%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"
可通过win r运行,或cmd里运行下面直接打开修改:
notepad "%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"
- -

第一行加入:

-
1
numberOfConcurrentUploads=3
- -
-

PS:数值项即为线程数,最小值为1,最大值为3,根据实际需要选择即可

-
-image-20200321193422745 - -

效果:(奇怪的网速增加了)

-

image-20200321213449574

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/03/why-linux/index.html b/2020/03/why-linux/index.html deleted file mode 100644 index 6b20d9f..0000000 --- a/2020/03/why-linux/index.html +++ /dev/null @@ -1,727 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Why linux | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- Why linux -

- - -
- - - - -
- - -

学习Linux之前,了解Linux哲学和Linux设计思想是必要的。

-

然后就是开始敲命令了啦

-

Linux哲学

知乎:《unix/linux 设计哲学》

https://zhuanlan.zhihu.com/p/57521605

-

内容太多,不要求完全记住。可以以后回来再翻阅

-

博客园:Linux的哲学思想

Linux哲学思想:

-
    -
  1. 一切皆文件;
  2. -
  3. 小型,单一用途的程序;
  4. -
  5. 连接程序,共同完成复杂功能;
  6. -
  7. 避免令人困惑的用户界面;
  8. -
  9. 配置数据存储在文本中;
  10. -
-

解释:
一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

-

小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行

-

连接程序,共同完成复杂功能:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的

-

避免令人困惑的用户界面:如windows那样出了问题一般人选择的会是重启,实在是不行的话就是 重新 安装系统了,因为对于windows那样不是开源的,并且用户界面比较 复杂操作系统出了问题,一般的人是根本没有办法解决的。但是linux就不一样了,第一linux是开源的,无论什么问题都可以通过简洁的命令行实现 排错,修改系统的配置,一切都是简洁明了为基础。

-

配置数据存储在文本中:linux所有的配置文件都存放在文本配置文件当中,无论什么配置修改都只需修改其配置文件即可,配置文件时文本形式的只需任意一款文本编辑器修改即可而不是类似于windows那样将保存在注册表中,并且windows的注册表需要专门的二进制或十六进制的编辑器才可编辑,修改比较复杂

-

bilibili:Linux哲学视频资料1:

哲学的魅力 | 非Windows系统家族的魅力之所在:“一切皆文件”

-

https://www.bilibili.com/video/BV1Yb411g79x

-

(命令不会没关系,了解一下“哲学”就好)

-

bilibili:Linux哲学视频资料2

TED-Linux背后的精神 _ Linus Torvalds

-

https://www.bilibili.com/video/BV1a4411t7Kt?p=1

-

(一个有英文字幕的双语版本:)

-

https://www.bilibili.com/video/BV1J7411v7BD

-
-

系统目录结构

Linux 里面最重要的概念估计就是“一切皆文件”了,我们来看看Linux系统的根目录结构。

-

首先是 Linux 不像 Windows 这种,系统里面看起来有多个“盘”,C,D,E,F,什么的,

-

在 Linux,只有一个“盘”(可以假想成 C盘),但是里面文件夹却有很多。

-

img

-

我们来看看菜鸟教程 Linux 部分是怎么说的:

-

https://www.runoob.com/linux/linux-system-contents.html

-

其中用得比较多的文件夹也不是很多啦:

-
1
2
3
4
5
6
7
/dev	虚拟的,你的硬件设备会列出在这里
/etc 配置文件的集散地
/home 用户目录,相当于 Windows 的 %USERPROFILE% (你可以试试把这个输入资源管理器的地址栏回车)
/media 一些设备出现在这里
/mnt 用于挂载文件系统(插入U盘并挂载后在这里找)(wsl可以在这里访问主系统文件)
/bin | /usr/bin | /usr/sbin 你看到文件出现在这里,那大概率是可执行程序这样的东西了
/var 做 web 你会爱死的
- -
-

Linux终端

终端(Terminal),也叫命令行,顾名思义,输入命令的地方。就是经常见到的黑窗口(当然并不见得都是黑的)

-

命令行是 Linux 最常见的状态,GUI (Graphical User Interface,图形用户界面) 反而不是

-

在 Linux 终端干得最多的一件事当然是敲命令了,命令一般是如下格式:

-

command [-option] parameter1 parameter2...

-

我们来看几个参考链接:

-

图示直观的:https://blog.csdn.net/pl0020/article/details/82012881

-

分析有理的:https://blog.csdn.net/wangjianno2/article/details/16344807

-

详细深入的:http://c.biancheng.net/view/720.html

-

这里还想 bb 几句:

-
    -
  1. Windows Linux都有命令行(Windows早期DOS也是命令行系统),但是操作习惯有些小不同
  2. -
  3. Windows 参数一般是 /option,Linux 大多是 -option --option
  4. -
  5. Windows 获取帮助一般是 /? ,Linux 大多是 -h -help --help
  6. -
  7. Windows 路径以反斜杠 \ 分隔,Linux 路径由正斜杠 / 分隔
  8. -
  9. Windows 命令行能运行 .bat 批处理脚本,Linux终端能运行 .sh 批处理脚本,语法大部分不同,少数相同
  10. -
-
-

开始背命令吧

必学的少数命令

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lsllcdtouchclearpwdmkdircatmore
lesstailcpmvrm(谨慎)findvi/vim|grep
pskillipconfigtarrebootshutdownhaltchmod
-

这里是一些介绍:https://blog.csdn.net/weixin_44706512/article/details/90604635

-

菜鸟教程:Linux 命令大全

其他的,少见的,忘了的,可以在这里速查,也可以学习积累:

-

https://www.runoob.com/linux/linux-command-manual.html

-

Linux常用命令大全(和用法)

https://www.cnblogs.com/fnlingnzb-learner/p/5831284.html

-
-

Q&A

Linux 怎么装?

必应搜索“WSL安装”:https://cn.bing.com/search?q=wsl%E5%AE%89%E8%A3%85

-

必应搜索“VMware 安装 Linux”:https://cn.bing.com/search?q=VMware+%E5%AE%89%E8%A3%85+Linux

-

想知道VMware安装详细某版本,把上面 Linux 换成你的对应详细版本即可,如:Ubuntu18.04

-

发行版这么多,用哪个版本好?

初学者:Ubuntu、deepin。极客:Arch。服务器用户:CentOS。发烧玩家:Steam OS。

-

哪儿去获取 Linux 镜像?

千万别再去XX下载站了。

-

必应搜索你想要的系统名字,搜索结果第一条都是官方网站了,一般他们域名都是 系统名.org,这是非营利组织的域名,也有部分是 系统.com,如Ubuntu,因为它包含了商业发行版。

-

打开网站,在醒目的位置,都能找到 Download 这种东西,仔细寻找,可以找到 .iso 镜像下载链接。如果下载慢,可以使用 国内镜像站 ,他们提供了高速的软件下载和软件源服务,像 清华源阿里云网易等等

-

我应该使用 root 用户吗?

不建议。应当在系统安装过程中设置好用户名和密码,以后使用需要高权限的命令应该使用 sudosu

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/05/Mi9-SE-screen-problem-self-rescue/index.html b/2020/05/Mi9-SE-screen-problem-self-rescue/index.html deleted file mode 100644 index a8abbd0..0000000 --- a/2020/05/Mi9-SE-screen-problem-self-rescue/index.html +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 手机差点报废后的自救 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 手机差点报废后的自救 -

- - -
- - - - -
- - -

今天手机屏幕出问题手机差点变砖

- - -

莫名其妙的自动点击

今天(前几天开始),手机使用的时候总是有莫名其妙的自动的点击,造成了一些困扰。

-

今天下午开始直接十点同时点击,在屏幕最下方!

-

脑补一下:打开输入法,啪啦啪啦给我按一堆 ,.,.,,,

-

打开设置,啪啦啪啦给我点进去不知道什么设置选项了

-

打开 Minecraft ,选中TNT,刚想摆,结果在右边给我放了一堆了(然后切换成火石…)

-

(事后模拟了一下,大概就像这样:)

-

-img - - - -

考虑是不是系统卡顿

img

-

锁屏,解锁。无效

-

关机,重启。无效。开机一会儿后又开始了,而且频繁的点击影响锁屏解锁!

-

什么?你想叫我重买?

-不可能想都不要想_不要_可能表情 - - - -

考虑是不是有病毒软件恶意程序

浩浩荡荡开始卸载(半年了终于清理一次手机)

-
-

顺手发现了小米系统的自动启动程序是真的恶心。刚关了几个,又给我打开了几个程序

-
-

检查并卸载了:白鲸V₱N、老王V₱N、蚂蚁V₱N、旋风V₱N、Minecraft网易版、adbd insecure(系统使用过程中提示授予了root权限 所以严重怀疑这个)、VMOS(占用空间大,顺手卸了吧)、轻启动(有模拟点击,所以也怀疑这个,而且长得还丑,顺手卸了吧)

-

莫 有 卵 用 !

-

还是那么自由的十点暴击

-

冻结系统程序

浏览小米系统管家,看到了下面的程序然后冻结了

- - -

心想重启一下才能停止运行系统服务呢。重启手机。结果:

-

触 摸 完 全 没 反 应 了 !

-

下图是网上随便找的,脑补一下随便怎么划都没反应的状态。当时我心里就直接:噔噔咚

- - -

咋办??????????????????

-

adb ?试试就逝世。

连接电脑,adb shell进入命令行。

-

input,模拟触摸。不管用

-

-

通过搜索,知道了如何列出已停用的系统程序

-

-

通过搜索知道了启用已冻结的系统程序的方法,启用了两个,然后reboot重启

-

-

还是不行。又启用了两个

-

-

-

重启,还是不行

-

突然想到鼠标

摸出手机 USB-C OTG 转接头,拔掉电脑无线鼠标插上OTG插上TypeC口,

-

能用!

- - -

啊这?? 这变成巴掌大的 Android显示器了么

-

所幸是能用了

-希望人没事_没事_希望表情 - -

现在又咋办呢????????????

-

进入TRWP看看?

截图就不截图了,脑补一下。

-

重启进入TRWP,各种操作都是正常的,甚至还很流畅。

-

判定硬件没有问题。

-

判定TRWP手机驱动正常可用。

-

MIUI系统有问题。

-

通过搜索,我们知道…

搜你妹,上莆田医院啊

-

img

-

重装。。。系统?

-

然后又搜了一堆新版系统,又搜了刷系统。

-

不行,我程序还没备份。

-

于是打算开始用鼠标操作进行本地备份( 如何操作

-

此处省略 1w 字 …

-

浏览器历史记录:(信息量很大)image-20200526165743064

-

image-20200526165817077

-

image-20200526165855658

-

image-20200526165952401

-

image-20200526170059829

-

我想起高兴的细情

手机发烫了。

-

想起前面哪篇文章说过触摸不行可能是屏幕上电荷什么的。。。

-

终于找到这篇文章了

-

解决方案:湿抹布,上下左右前前后后擦一遍,重启。

-

问题解决。

-

意不意外!惊不惊喜! - 没想到吧?我想到了哈哈哈!意不意外?惊不惊喜?刺不刺激?_想不到_装逼_斗图_怼人表情表情

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/05/adb-auto-make-money/index.html b/2020/05/adb-auto-make-money/index.html deleted file mode 100644 index e6a29f6..0000000 --- a/2020/05/adb-auto-make-money/index.html +++ /dev/null @@ -1,711 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - adb自动刷钱 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- adb自动刷钱 -

- - -
- - - - -
- - -

这是一款名字叫“Zen Idle”的游戏。来尝试下自动刷钱

-image-20200505094215251 - - - -

【adb获取包名以及当前运行的activity】

-
1
adb shell dumpsys window | findstr mCurrentFocus
- -

输出:

-
1
mCurrentFocus=Window{98555ab u0 com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity}
- -

由包名获取apk路径

-
1
adb shell pm path io.ionic.starter
- -

【adb命令行启动应用程序】

-
1
adb shell am start -n 包名/类名
- -

如:

-
1
adb shell am start -n com.android.music/com.android.music.MusicBrowserActivity
- -

【adb shell 修改系统时间】
下面命令亲测可用,假如当前时间 01月05号08点23分改成 01月05号12点23分

-
1
adb shell date "01051223"
- -

【按钮的位置】
找到开发者选项,开启“指针位置”,在游戏里找到按钮的范围
Claim按钮
X: 390-690 300 540
Y: 1212-1362 150 1287
关闭广告按钮
x 915
y 835

-

【Android adb 模拟滑动 按键 点击事件】

-

关于tap的话,他模拟的是touch屏幕的事件,只需给出x、y坐标即可。
此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:

-
1
adb shell input tap 250 250
- -

此处我:

-
1
input tap 540 1287
- -
1
input tap 915 835
- -

【总命令】

-
1
adb shell date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
- -

加点循环

-
1
2
3
for I in $(seq 1 20);do
echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
done
- -

写入sh脚本,懒得每次输入了

-
1
echo 'for I in $(seq 1 20);do\n    echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3\ndone' >zen.sh
- -

【adb 安装卸载程序】
adb root 失败,提示adbd cannot run as root in production builds
网上说安装adbd-Insecure-v2.00.apk,亲测无效。还是每次adb shell然后su吧。

-
1
2
3
4
5
6
adb install ./adbd-Insecure-v2.00.apk

adb shell pm list packages|grep adb
输出: package:eu.chainfire.adbd

adb uninstall eu.chainfire.adbd
- -

【尝试只改时间】

-
1
date "01010101" ; date "01010601"
- -

并不能让程序显示奖励窗口(必须先退出这个页面再进入)

-

并不能让程序显示奖励窗口(必须先退出这个页面再进入)

-

【进一步的集成】
通过命令行参数决定要循环几次

-
1
2
3
4
5
6
7
echo 'CNT=10
if [ $# != 0 ] ; then
CNT=$1
fi
for I in $(seq 1 $CNT);do
echo $I/$CNT ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
done' >zen.sh
- -

然后:

-
1
2
3
4
adb shell
cd /sdcard/_sh
su
. ./zen.sh 20
- -

【手机闹钟BUG级响起】
无解
可以关闭闹钟

-

【尝试只在date的时候用su执行】

-
1
2
3
4
5
6
7
8
mkdir /sdcard/_sh
echo 'CNT=10
if [ $# != 0 ] ; then
CNT=$1
fi
for I in $(seq 1 $CNT);do
echo $I/$CNT ; su -c date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; su -c date "01010101" ; input keyevent 3
done' >/sdcard/_sh/zen.sh
- -

完美~
但是会每次date的时候显示“已授予shell超级用户权限”,看着很难受
先su再执行脚本就不会了

-

可以在电脑上adb shell进去执行脚本,也可以用手机啦

-

【视频演示】

- - - - -

- - -
- - -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/05/dajubao/index.html b/2020/05/dajubao/index.html deleted file mode 100644 index 4bf0b3f..0000000 --- a/2020/05/dajubao/index.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 大举报:仿佛那个时代又来临了 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 大举报:仿佛那个时代又来临了 -

- - -
- - - - -
- - -

转自 豆瓣 : 2019-05-25 03:37:45

-
-

大举报:仿佛那个时代又来临了

原创:梅骁

-

1

-

之前我很想写一篇文章,写举报是时代变坏的开始。

-

但最近我的想法变了,我们的时代不是在开始变坏,而是已经变得很坏了。

-

最近一个让我有这种感觉的事件是王晨艺的点赞事件。

-

王晨艺是今年《创造营2019》的一个选手,是个没什么背景的舞蹈老师,在《创造营2019》这个整体很糊的节目里人气排名很靠前。

-

你不知道他没关系,因为我其实对他也没那么熟悉。

-

但这两天他身上发生了一个事情,有人扒出他六年前曾经在微博点赞过荤段子,所以认为他点赞涉及“敏感问题”,认为他是劣迹艺人,要求他立刻退赛。

-

img

-

看到这条新闻的时候,我觉得这一切都荒谬透顶。

-

最可怕的还不是有人认为一个人点赞荤段子所以他就是劣迹艺人,最可怕的是居然有人为了寻找一个人的“劣迹”而去疯狂翻查这个人过去多年的人生经历,试图寻找出一个黑料、一个过失,并对此大加举报攻击,以达到封杀、退赛的目的。

-

这个画面实在太可怕了。

-

一个人,他面无表情地盯着手机、盯着电脑,去从另一个人过往的茫茫人生经历里寻找一个错漏之处,就为了攻击他、打垮他。

-

你十年前说过脏话、你五年前垃圾没扔进垃圾桶、你三年前打过人一拳……这些全部都有可能成为你被攻击的素材。

-

这太可怕了,这画面的恐怖程度不亚于任何一部恐怖片。

-

因为我们谁都不能保证自己过往人生里从没有过任何错漏不当之处,所以我们任何人都有可能成为被这种手段打倒的那个。

-

2

-

时间稍微往前推一下。

-

今年三月份时,曾经发生过一件事,重庆一所高校里,有个老师因为课堂上发表损害国家声誉的过激言论而被学生举报。

-

学校很快发布公告,认为他违反教师职业道德,撤销了他的教师资格。

-

img

-

这是举报者的又一次胜利,可我看得特别害怕。

-

试想一下,当一个大学老师在课堂上讲话都可能会被举报的时候,他会怎么办?

-

他会只敢讲那些最安全、最无聊也最没有价值的东西,因为只有那些东西才是不会被举报的,与传道授业解惑相比,当然是个人的安全最重要。

-

这次是撤销教师资格,下次可能就是被判刑入狱,不,据我所知,已经有大学老师因为这个而入狱三年了。

-

img

-

所以,会越来越少人敢冒这个风险。

-

可是,你知道吗,现代大学教育跟中世纪大学教育的区别就在于,中世纪大学是传授已有知识的场所,而现代大学则担负着不断开拓新的知识和学科的职能。

-

所以,从1809年现代大学由柏林大学创立开始,“自由”都是大学最核心的关键词。

-

曾经在清华大学里,闻一多是言论最激进的教授,动不动就要在课堂上发表演说,后来更是在西南联大的广场集会上高声呼喊,对学校大肆批评。

-

img

-

闻一多

-

当时政府要求学校解聘闻一多,时任校长梅贻琦根本不理会,即便他自己也对闻一多的言行很不满,但他知道“自由”才是让大学教育保持活力的唯一动力。

-

而当“举报”出现在大学课堂上,当大学老师的每一句话都可能成为被举报的理由和材料时,还谈什么自由,谈什么进步。

-

我们的年轻一代在面对自己不认可的言论时第一反应已经不是“与他辩论”“将他驳倒”,而是熟练的使用举报手段“我要举报他,堵上他说话的嘴巴”。

-

并且他们一次又一次的成功做到了。

-

他们毁掉的不只是一个又一个老师,他们毁掉的更是教育本身。

-

这真的很可悲。

-

3

-

前两天,在豆瓣鹅组有这么一个帖子,内容是一个投票。

-

帖子的作者问大家,如果你发现你的父母、爱人、师长、朋友发表了不当言论,你要不要举报ta?

-

那个帖子里甚至详细地把这些人分成了“关系亲近的父母”“有过过节的朋友”“分手分得不愉快的前任”等等,把这些人分门别类地做了投票,问当这些发表了不当言论,你要不要举报。

-

这还不是最可怕的,最可怕的是下面的跟帖是真的认真在讨论。

-

有人说,父母是绝对不会举报的。

-

有人说,就算是爸妈,说了不当言论,也不能姑息。

-

有人说,分得不愉快的前任、有过节的朋友当然要举报啊。

-

诸如此类,林林总总,这些讨论才是我觉得最可怕的地方,因为大家都默认了“举报”的合法性,默认了当一个人发表了不当言论,他就应该被举报。

-

这实在太荒谬了。

-

没有任何一个人应该因为他的言论而被举报

-

当你遇到一个人说了你不认可的、甚至你极端厌恶的言论,你要做的事情应该是去反驳他、去驳倒他,去用你的思想、你的知识、你的言论去和他正面对决。

-

“我看不惯你的言论,所以我要反驳你”,这才是一个文明社会的人应该做的事情。

-

而“举报”是“我看不惯你的言论,所以我要堵上你的嘴,不让你说话,我堵不上,我就让更高的权力去堵你的嘴”。

-

这是个太可怕的思路。

-

一旦你把对言论正确与否的决定权交给了更高的权力,那今天被打倒的是你看不惯的人,明天被打倒的就可能是你自己。

-

不要觉得自己一辈子都不可能有任何错漏,任何人都会有错漏,任何人都会在某些情况下发表不当言论。

-

甚至,很可能今天还是很合情合理合法的言论,明天就会变成不当言论。

-

枪口不会因为你曾经是举报者,就对你网开一面。

-

4

-

其实,最近这两年来,举报已经越来越常见

-

有粉丝为了打击别家偶像,就去举报对方主演的作品有思想问题,有的就去挖对方多年前的微博、文章,试图找出蛛丝马迹、错漏之处。

-

我们其实是眼看着这股风气越兴越胜的。

-

有人因言获罪入狱,有人靠举报他人以达到打击报复的目的。

-

有人讨论当父母发表不当言论时,要不要与父母划清界线。

-

有人认真觉得堵上越来越多的嘴,这世界才会变得更好。

-

我们已经可以看到那个可预见的未来了。

-

在那个未来里,大家会因为不知道自己哪天因为哪句话被举报,所以大学老师会越来越不敢说话,亲人、爱人、朋友之间会越来越无法相信彼此。

-

甚至,就连你用滴滴打个车,都可能被司机举报你有不当言论,只因为你在车上和朋友讨论了一下性少数群体的话题。

-

img

-

我们已经能看到那个人人自危的未来就在不远处了。

-

你我都知道那会是个糟糕、邪恶的时代,我们早就见识过了。

-

但你我也都知道,我们是很难阻挡举报时代的来临的。

-

不,其实风行举报的时代早就已经在我们没注意时来临了,它早就已经深入到了我们生活的方方面面。

-

可这是不对的,无论多少人这么做,它都依然是不对的。

-

它会毁掉教育,毁掉创造和文化,毁掉人与人之间的信任,毁掉所有自由进步的可能性。

-

它不是将要到来,它是已经到来了。

-

你我都拦不住这个糟糕时代的来临。

-

但至少,我们可以选择不使用它,我们可以选择不做这个糟糕时代的共犯。

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/07/batch-shortcuts/index.html b/2020/07/batch-shortcuts/index.html deleted file mode 100644 index 488ae50..0000000 --- a/2020/07/batch-shortcuts/index.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - batch-shortcuts | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- batch-shortcuts -

- - -
- - - - -
- - -

教你设置 batch-shortcuts

-

img

-

PATH 环境变量介绍

搬运自 知乎

-

PATH 环境变量

经常使用命令行工具的话,对PATH等环境变量应该会非常熟悉;但现今的日常开发,接触到这一概念的机会越来越少。

-

时不时还是会遇到小朋友问我:“什么是PATH?”

-

这里记录一下,以供参考。

-

什么是环境变量?

环境变量是操作系统提供给应用程序访问的简单 key / value字符串;windows/linux/mac都有同样的概念。

-

一般用于提供参数值给不同的应用程序。

-

什么是PATH变量?

我们从命令行想要运行一个程序的时候,待运行的程序往往不是在当前目录。

-

PATH变量就是用于保存可以搜索的目录路径,如果待运行的程序不在当前目录,操作系统便可以去依次搜索PATH变量变量中记录的目录,如果在这些目录中找到待运行的程序,操作系统便可以运行。

-

Go开发为例,但我们使用go install命令编译、安装go程序后,可执行文件是会被保存在$GOPATH/bin路径下;那么我们可以把这个路径加入PATH变量中,这样我们便可以在任意路径中运行go安装的程序。

-

GOPATH

GOPATH又是一个环境变量,用于保存go的主目录,go默认安装之后,GOPATH会是当前用户的主工作目录中的go子目录,即:%HOME/go

-

查看环境变量

假设我们要查看GOPATH这个环境变量的值:

-
    -
  • windows command prompt: echo %GOPATH%
  • -
  • windows powershell: $env:GOPATH
  • -
  • linux & mac: echo $GOPATH
  • -
-

设置PATH变量

windows

假设我们当前登陆操作系统的用户名是:xiaomin

-

然后我们要把c:\users\xiaomin\go\bin路径加入到PATH变量中,在windows下我们可以在PowerShell中执行:

-
1
$env:Path += ";c:\users\xiaomin\go\bin"
- -

注意,这样仅仅只是临时修改当前的PATH变量,当我们关闭、重开PowerShell时,就需要重新设置。

-

如果要永久的修改,需要使用管理员权限启动PowerShell,然后执行:

-
1
setx /M PATH "%PATH%;c:\users\xiaomin\go\bin"
- -

Linux & Mac

同样假设我们当前登陆用户名是:xiaomin

-

然后我们要把/home/xiaomin/go/bin路径加入到PATH变量

-
1
export PATH=$PATH:/home/xiaomin/go/bin
- -

这同样是临时修改,重开shell之后,会被重置;要永久改变的话,一般是将上面的命令加入到我们使用的shell初始化文件中。

-

以bash为例,那么就是将上述命令加到/home/xiaomin/.bash_profile文件中。

-
-

设置步骤

1. pathext

Windows上的另一个变量。这里存储可直接运行的文件类型,一般需要添加 .lnk 进去

-

2. 建立一个目录

建立: D:\bin\batch-shortcuts

-

D:\bin\ 路径又简洁又舒服

-

3. 把目录写入path

参照百度经验:windows10设置环境变量PATH

-

注意,设置完后,需要重启资源管理器和命令行来应用更改。

-

可以在任务管理器,选中资源管理器,选择重新启动

-

可以注销,然后登陆

-

可以重启

-

4. 然后就可以用了

怎么用?

-

在上面那个文件夹内的所有文件,都是命令行可以访问到的。

-

一般可以创建:.bat .lnk ,.exe也阔以哇

-

举个栗子:

-
1
2
文件名:batch-shortcuts.bat
explorer "D:\bin\batch-shortcuts"
- -

模仿Linux ctrl d 一键关闭风格,创建的 d.bat

-
1
2
文件名:d.bat
exit
- -

比如md5

-
1
2
文件名:md5.lnk
指向:"D:\Program Fies (Green)\WinMD5校验器.exe"
- -

还有一些调用程序的,比如安装Ubuntu后,写一个脚本来调用Ubuntu执行命令

-
1
2
3
4
5
6
7
8
9
文件名:ubuntu.bat
@echo off

echo.
echo Usage:
echo use "ubuntu run $code$" to run shell command

echo.
"C:/Program Files/WindowsApps/CanonicalGroupLimited.Ubuntu16.04onWindows_2020.1604.14.0_x64__79rhkp1fndgsc/ubuntu1604.exe" %*
- -

%* 是传递所有命令行参数,这个了解一下会有很大的帮助

-

如果不用这个,就得用 %1 %2 %3 %4 %5 %6 %7 %8 %9 ,而超过9的就不能再处理了

-

还有其他玩法,自己探索吧!

-
-

关于 D:\bin 文件夹

我一般把命令行调用的,编程语言类的,放在这里面,

-

(还有一些绿色IDE为代表的,可以一套带走的,我也放里面)

-

(还有DOS系统盘为代表的,系统级的底层的,我也放里面)

-

一方面是,这个路径他没有空格,不容易导致命令行调用出错。

-

第二是,他真的又简洁又舒服哇

-

列出一下目前为止我的 D:\bin 的内容

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
D:\bin>dir
驱动器 D 中的卷没有标签。
卷的序列号是 9E68-267B

D:\bin 的目录

2020/05/25 16:24 <DIR> .
2020/05/25 16:24 <DIR> ..
2020/05/25 16:25 <DIR> .gradle
2020/03/17 20:23 <DIR> Anaconda3
2020/03/23 01:30 <DIR> Android_SDK
2020/06/05 10:42 <DIR> batch-shortcuts
2020/07/16 17:22 <DIR> DOS-16bit
2020/02/15 14:21 <DIR> eclipse-cpp
2020/02/15 14:18 <DIR> eclipse-java
2020/05/21 17:14 <DIR> ESP_8266
2019/07/01 00:43 <DIR> HBuilder.9.0.1.windows
2020/03/31 23:31 <DIR> HBuilderX.2.6.8.20200330.full
2020/04/21 01:06 <DIR> Java
2020/07/17 11:56 <DIR> nodejs
2019/11/28 13:53 <DIR> Perl
2020/03/18 23:53 <DIR> PortableApps
2020/02/19 23:47 <DIR> Python
2020/03/12 21:23 <DIR> Qt
2020/03/10 23:30 <DIR> Ruby27-x64
2020/03/23 21:16 <DIR> texlive
0 个文件 0 字节
20 个目录 57,676,476,416 可用字节

D:\bin>
- - - - -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/07/gdb-operation/index.html b/2020/07/gdb-operation/index.html deleted file mode 100644 index 79ff5a0..0000000 --- a/2020/07/gdb-operation/index.html +++ /dev/null @@ -1,673 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 简简单单的记录一下gdb的亿点点常用的操作 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 简简单单的记录一下gdb的亿点点常用的操作 -

- - -
- - - - -
- - -

.

-

gdb操作:


-

gdb ./xxx

开始调试xxx程序,如果不能运行,需要先 chmod +x ./xxx

-
-

gdb attach [pid]

通过程序id即pid,gdb附加到一个正在运行的程序,并对其进行调试

-
-

start

运行程序并断点在第一条指令

-

输出寄存器,反汇编等信息

-
-

list

有源码的情况下 输出源码

-
1
2
3
4
5
6
7
8
9
10
11
12
pwndbg> list
warning: Source file is more recent than executable.
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int main(){
5 char num='0';
6 char str[10];
7 read(0,str,0x10);
8 if(num=='1'){
9 puts("great.\n");
10 fflush(stdout);
- -
-

b *内存地址

在内存地址处下断点

-
-

b 函数名/*函数名

下断点

-
1
2
pwndbg> b main
Breakpoint 1 at 0x80484dc: file pwn05_char[]_overflow.cpp, line 5.
- -
-

info b

查看断点信息

-
1
2
3
pwndbg> info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080484dc in main() at pwn05_char[]_overflow.cpp:5
- -
-

step

step(in),步入,在有源码调试时,执行下一行源码,有函数调用时进入函数调用

-
-

next

步过,在有源码调试时,执行下一行源码,有函数调用时执行完函数并执行到函数调用的下一行

-
-

nexti/ni

next instruction,步过,执行下一行汇编指令

-
-

stepi/si

step into,步入,执行下一行汇编指令,如果有函数调用时进入函数的第一行汇编指令

-
-

finish

运行完当前的函数,停在最后一句汇编代码

-
-

info registers

寄存器信息

-
-

x/<n/f/u> <addr>

格式:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u格式:
b表示单字节
h表示双字节
w表示四字节
g表示八字节。
- -
-

一些GDB参考链接:

https://blog.csdn.net/tzshlyt/article/details/53668885

-

https://www.jianshu.com/p/b7896e9afeb7

-

https://blog.csdn.net/u013525455/article/details/52813637

-

https://www.jianshu.com/p/e6af28e2566f

-

https://www.cnblogs.com/xiaoshiwang/p/10755199.html

-

https://www.cnblogs.com/xsln/p/gdb_instructions1.html

-

https://man.linuxde.net/gdb

-

https://www.cnblogs.com/tangtangde12580/p/8045980.html

-

https://www.cnblogs.com/zhoug2020/p/7283169.html

-

https://www.jianshu.com/p/adcf474f5561

-

https://blog.csdn.net/songchuwang1868/article/details/86132281

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/07/qzone-faster-like/index.html b/2020/07/qzone-faster-like/index.html deleted file mode 100644 index 05e9e65..0000000 --- a/2020/07/qzone-faster-like/index.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QQ空间辅助点赞 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- QQ空间辅助点赞 -

- - -
- - - - -
- - -

QQ空间手滑点赞太麻烦,用键盘吧。

-

嗯,我文思枯竭了,编不出什么内容充实的文章,就写下过程贴代码吧

-

浏览器检查元素

通过完成的审查元素发现:

-
1
2
3
4
所有的列表,元素的id:     feed_friend_list
一个说说的,元素的class: f-single
点赞按钮,元素的class: qz_like_btn_v3
评论按钮,元素的class: qz_btn_reply
- -

写脚本

之前考虑用jQuery实现,用油猴脚本,但是脚本对于加载jQuery有一点问题

-

因为QQ空间用了 $ 这个名字,但是不是jQuery,所以考虑用纯 js 实现。

-

后来啊。$ 不是可以用jQuery写么。就改成了jQuery实现

-

(jQuery真香)

-

用纯 js 添加点赞按钮的css

1
2
3
4
var style = document.createElement('style');
style.innerHTML="a.item-on {background-color: red;}"
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(style);
- -

完整脚本 v0.1

(还没想好怎么解释这个脚本。直接贴代码)

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.1
// @description try to take over the world!
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==
(function () {
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
function up(){
console.log("上");
}
function left(){
console.log("左");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
var first=jQuery(".f-single").eq(0);
console.log(first);
first.slideUp(function(){this.remove()});
//if(jQuery(".f-single").length==0){
// window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
first.slideUp(function(){this.remove()});
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div>\
<style>\
#rect {\
height: 100px; width: 160px; border:red 5px solid; position:fixed;\
z-index: 999; top:40px; margin-left:40%; margin-right:40%;\
}\
#rect:focus{ border:5px green solid; }\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea></div>');
jQuery("body").append($rect);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();
- - - -

2020-08-01更新 v0.2

增加了修复网络的功能。妈妈再也不用担心更新不出来啦

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.2
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
function up(){
console.log("上");
}
function left(){
console.log("左");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
var first=jQuery(".f-single").eq(0);
console.log(first);
first.slideUp(function(){this.remove()});
//if(jQuery(".f-single").length==0){
// window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
first.slideUp(function(){this.remove()});
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
}\
#rect {\
height: 100px; width: 200px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#qzone_fix_button{\
float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
}\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea>\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button></div>');
jQuery("body").append($rect);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();
- - - -

2020-08-16更新 v0.3

0.3版本,增加了简单的去除顶部的已点赞用户

-

代码:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.3
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
var list=["Cortana","Cortana"];
function getFirstTime(){
var first=jQuery(".f-single").eq(0);
var timetime = first.find(".info-detail .ui-mr8.state").html();
console.log(timetime);
}
function faded(first){
getFirstTime();
first.slideUp(100,function(){this.remove()});
}
function clearLiked(){
jQuery("#finishedClearLiked").html("pending.");
var first=jQuery(".f-single").eq(0);
console.log(first);
if(first.length==0){
jQuery("#finishedClearLiked").html("finished.");
return;
}
var nickName = first.find(".f-nick a").html();
console.log(nickName);
var matchList = false;
for(i=0;i<list.length;i++){
if(nickName.indexOf(list[i])>-1){
matchList=true;
break;
}
}
if(matchList==true){
console.log("进入{pass}分支");
var second=jQuery(".f-single").eq(1);
var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
console.log(nextZan.length);
if(nextZan.length!=0){ //下面有取消赞
console.log("下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,100);
}
else{ //下面没有取消赞,停止
console.log("下面无取消赞,所以停止");
var nickName = second.find(".f-nick a").html();
console.log("下一个人是:",nickName);
jQuery("#finishedClearLiked").html("finished.");
}
}
else{
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
jQuery("#finishedClearLiked").html("finished.");
}
else{
first.remove();
setTimeout(clearLiked,100);
}
}
}
function up(){
console.log("上");
jQuery("#finishedClearLiked").html("pending.");
clearLiked();
}
function left(){
console.log("左");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
faded(first);
//if(jQuery(".f-single").length==0){
// window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
faded(first);
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
}\
#rect {\
height: 120px; width: 200px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#qzone_fix_button{\
float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
}\
#clearLikedDiv{\
vertical-align: top;border: 2px solid yellow;width: 150px;height: 80px;\
display: inline-flex;flex-direction: column;background-color: wheat;\
}\
#finishedClearLiked{\
border: skyblue 2px inset; font-size: 1.5em;\
}\
#startClearLiked{\
width: 100%;flex-grow: 1;\
}\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
<div id="clearLikedDiv">\
<span id="finishedClearLiked">free.</span>\
<button id="startClearLiked">清理已点赞</button>\
</div>\
</div>');
jQuery("body").append($rect);
jQuery("#startClearLiked").click(clearLiked);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();
- - - -

2020-08-16更新 v0.4

增加显示最顶部五条动态内容,修复网络和状态条和删除顶部已点赞都放在最左边了

-

代码:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app
// @version 0.4
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
var list=["Cortana","今日百色","易锦教育","易锦大学","CUIT网络空间安全学院","丁凌娜","黄恋茹","Victor","墙"];
function getFirstTime(){
var first=jQuery(".f-single").eq(0);
var timetime = first.find(".info-detail .ui-mr8.state").html();
console.log(timetime);
}
function matchList(nickName){
var match = false;
for(i=0;i<list.length;i++){
if(nickName.indexOf(list[i])>-1){
match=true;
break;
}
}
return match;
}
function faded(first){
getFirstTime();
first.slideUp(100,function(){this.remove()});
}
function clearLiked(){
jQuery("#finishedClearLiked").html("pending.");
var first=jQuery(".f-single").eq(0);
console.log(first);
if(first.length==0){ //好友动态已经空了
jQuery("#finishedClearLiked").html("finished.");
return;
}
var nickName1 = first.find(".f-nick a").html();
console.log(nickName1);
var match1 = matchList(nickName1);
if(match1==true){ // 第一个人是列表
console.log("进入{pass}分支");
var second=jQuery(".f-single").eq(1);
var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//查找取消赞
console.log("第二个人有无取消赞:",nextZan.length);
if(nextZan.length!=0){ //下面有取消赞
console.log("下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,125);
}
else{ //第二个人下面没有取消赞,
console.log("第二个人下面无取消赞,");
var nickName2 = second.find(".f-nick a").html();
console.log("第二个人:",nickName2);
var match2 = matchList(nickName2);
if(match2==true){ // 第二个人也是列表
console.log("进入{pass}分支");
var third=jQuery(".f-single").eq(2);
var nickName3 = second.find(".f-nick a").html();
console.log("第三个人:",nickName3);
var thirdZan=third.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
console.log("第三个人有无取消赞:",thirdZan.length);
if(thirdZan.length!=0){ //下面有取消赞
console.log("第三个人下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,125);
}
else{ //下面没有取消赞,停止
console.log("下面无取消赞,所以停止");
jQuery("#finishedClearLiked").html("finished.");
}
}
}
}
else{
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log("第一个人有无点赞按钮:",zan.length);
if(zan.length!=0){ // 有点赞按钮,结束
jQuery("#finishedClearLiked").html("finished.");
}
else{
first.remove();
setTimeout(clearLiked,125);
}
}
setTimeout(space,100);
}
function space(){
for(var iii=0;iii<5;iii++){
var one=jQuery(".f-single").eq(iii);
if(one.length==0){
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html("nickName");
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html("timestamp");
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html("content");
}
else{
var nickName = one.find(".f-nick a").html();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html(nickName);
var time = one.find(".info-detail .ui-mr8.state").html();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html(time);
var summary = one.find(".f-info").text();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html(summary);
}
}
}
function up(){
console.log("上");
jQuery("#finishedClearLiked").html("pending.");
clearLiked();
setTimeout(space,100);
jQuery("#finishedClearLiked").html("finished.");
}
function left(){
console.log("左");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
setTimeout(space,100);
}
function down(){
console.log("下");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
faded(first);
setTimeout(space,100);
//if(jQuery(".f-single").length==0){
// window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
faded(first);
setTimeout(space,150);
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position: fixed; z-index: 999;top: 40px; width: 90%; text-align: center; left: 0px; right: 0px; margin-left: auto; margin-right: auto;\
}\
#rect {\
height: 140px; width: 210px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#clearLikedDiv{\
vertical-align: top;border: 4px solid darkseagreen;width: 100px;height: 120px;\
display: inline-flex;flex-direction: column;background-color: wheat;\
}\
#qzone_fix_button{\
height: 50px; width: 100px; \
}\
#finishedClearLiked{\
border: skyblue 3px inset; font-size: 1.5em;\
}\
#startClearLiked{\
width: 100%;flex-grow: 1;\
}\
\
#statusTable{\
border-collapse: collapse;\
display: inline-table;\
vertical-align: top;\
}\
#statusTable tr td:nth-child(1){\
background-color: #FFFFCC;\
width: 100px;\
}\
#statusTable tr td:nth-child(2){\
background-color: #DDDDDD;\
width: 100px;\
}\
#statusTable tr td:nth-child(3){\
background-color: #CCFFCC;\
width: 300px;\
}\
</style>\
<div id="clearLikedDiv">\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
<span id="finishedClearLiked">free.</span>\
<button id="startClearLiked">清理已点赞</button>\
</div>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n空格 加载前五条动态信息\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
<table id="statusTable" border="2"><tr>\
<td>100</td><td>100</td><td>100</td>\
</tr><tr>\
<td>200</td><td>200</td><td>200</td>\
</tr><tr>\
<td>300</td><td>300</td><td>300</td>\
</tr><tr>\
<td>400</td><td>400</td><td>400</td>\
</tr><tr>\
<td>500</td><td>500</td><td>500</td>\
</tr></table>\
</div>');
jQuery("body").append($rect);
jQuery("#startClearLiked").click(clearLiked);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 32){//空格
console.log("空格");
space();
}else if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();
- - -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/07/time-management/index.html b/2020/07/time-management/index.html deleted file mode 100644 index 9333d6e..0000000 --- a/2020/07/time-management/index.html +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 亿分钟成为时间管理大师 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 亿分钟成为时间管理大师 -

- - -
- - - - -
- - -

使用一个叫 manicTime 的软件

-

(好像最近越来越喜欢挖坑不填了哇)

-

(想了解的小伙伴请发邮件催更,联系方式在about页面有)

-

image-20200716102927688

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2020/08/welcome-pwn-partition/index.html b/2020/08/welcome-pwn-partition/index.html deleted file mode 100644 index 6dec8ca..0000000 --- a/2020/08/welcome-pwn-partition/index.html +++ /dev/null @@ -1,733 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 欢迎 pwn 分区(P盘) | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 欢迎 pwn 分区(P盘) -

- - -
- - - - -
- - -

今天再次尝试 wsl+gdb 调试,照舅失败

-

于是我搞了一个 “P分区”

-
-

wsl+gdb,不行. ❌

咕了很久还是想继续尝试gdb,wsl+gdb当然是最方便的一种方式了,打开命令行就可以用,都不需要开启 vmware。

-

但是很快的就遇到了问题。首先就是 wsl (我用的是Ubuntu16.04) 装好时是不支持32位程序的,通过搜索知道了安装启动 binfmt-support 就可以,让 wsl 能运行32位程序。

-

让64位的WSL(windows 子 linux系统)支持运行32位程序 - 简书

-

正准备开心的打开gdb调试,布星了。

-

在 gdb 里 start 可以,但是 ni 就不行了:

-

image-20200804185229605

-
1
2
3
4
5
6
pwndbg> ni
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x80484a0

Command aborted.
- -

查询了一波,感觉大概可能应该或许是 wsl 他就不能调试32位程序?

-image-20200804184759075 - -

你品你细品,wsl 装好的时候是只有64位程序支持的,32位直接给砍掉了,如果要运行32位还需要安装 binfmt-support ,32位程序仿佛不是 wsl 本来所支持的功能?

-

你品你再品,gcc编译成32位程序还需要加 -m32 编译参数,那么默认编译出来就是64位?32位是不是”过时”了?

-

阅读 binfmt-support 的介绍,可以看到

-

https://packages.debian.org/stretch/binfmt-support 上,写道:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
==========原文==========
软件包:binfmt-support(2.1.6-2)
Support for extra binary formats
The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

This package provides an 'update-binfmts' script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian
==========google机翻==========
软件包:binfmt-support(2.1.6-2)
支持额外的二进制格式
版本2.1.43和更高版本的Linux内核中包含的binfmt_misc内核模块,使系统管理员可以根据幻数或文件扩展名注册各种二进制格式的解释器,并在匹配文件时调用适当的解释器。被执行。将其视为#的更灵活版本!可执行解释器机制。

该软件包提供了一个'update-binfmts'脚本,软件包维护者可以使用该脚本注册要与此模块一起使用的解释器,而不必担心编写自己的init.d脚本,并且sysadmin可以将其用于稍高级别的接口。模块。

标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian
- -

http://binfmt-support.nongnu.org/ 上,写道:

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
==========原文==========
binfmt-support
The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

binfmt-support provides an update-binfmts script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

Versions 1.2.0 and above also support a mechanism for extending the range of binary formats among which the kernel can distinguish with the aid of a userspace helper, called a detector.

The source code to binfmt-support can be retrieved from its Git repository (if you don't have Git, follow the link for installation instructions).

This Web page is created and maintained by Colin Watson.
Last modified: $Date: 2017/07/09 13:30:47 $
==========google机翻==========
binfmt-支持
binfmt_miscLinux内核版本2.1.43和更高版本中包含的内核模块,允许系统管理员基于幻数或其文件扩展名注册各种二进制格式的解释器,并在匹配文件被调用时调用适当的解释器。被执行。可以将其视为#!可执行解释器机制的更灵活版本 。

binfmt-support提供了一个update-binfmts 脚本,程序包维护人员可以使用该脚本来注册要与此模块一起使用的解释程序,而不必担心编写自己的 init.d脚本,并且sysadmins可以将其用于该模块的更高级别的界面。

1.2.0及更高版本还支持一种扩展二进制格式范围的机制,内核可以借助一种称为检测器的用户空间助手来区分二进制格式 。

binfmt-support可以从其Git存储库中检索要获取 的源代码(如果您没有Git,请遵循链接以获取安装说明)。

该网页由Colin Watson创建和维护 。
上次修改时间:$日期:2017/07/09 13:30:47 $
- -

这两个网页说,binfmt-support 是32位程序的解释器,安装后将32位程序绑定使用它打开。这是不是有点像虚拟机风格? gdb和Linux内核应该还是不能支持32位(我猜的)

-
-

vmware,好用!✅

不多说了吧,VMware装一个Ubuntu来进行调试,肯定没问题

-

但是我还是想快速的访问Windows上那些文件夹。

-

https://cn.bing.com/search?q=vmware添加共享文件夹

-

由于我会常用到下载文件夹,所以把下载文件夹映射到share目录。

-image-20200804221417612 - -

Linux里面,文件夹在哪儿呢?

-

/mnt/hgfs/share

-

但是文件管理器进入这个目录,还是不能右键新建文件夹。

-

ls -al 查看权限,chmod 777 share授予最宽的权限,再次 ls -al查看权限

-

image-20200804222350672

-

image-20200804222407950

-

设置完后就可以像正常使用一样读写这个文件夹了,所做的更改,在Windows上全部同步。

-

可是,这个目录不太好打啊

-

我在 ~/.bash_aliases 里设置了share,来方便地命令行打开文件夹 alias share="cd /mnt/hgfs/share"

-

那么下次运行share命令就可以了,

-

(感觉还是哪里不太方便?)

-
-

P盘 与 /pwn

干脆把那个文件夹抽出来,用一个分区存?

-

好处:

-
    -
  1. Windows上好找,单独一个分区呢,二进制文件放里面就好啦
  2. -
  3. 虚拟机里好找,vmware设置挂在文件夹时输入分区就行了,不用担心如果文件夹被移动,会导致虚拟机内不可用
  4. -
  5. wsl 里好找,众所周知,wsl 和Windows共享文件系统,是通过把Windows上的盘符,挂载到 /mnt,那么P盘对应就是 /mnt/p,可以说目录已经灰常好打了
  6. -
  7. 稳定不容易坏,他就是个单独分区,不存在移动文件夹导致找不到的问题,只要这个盘还在,就能用(盘不在就创建一个分区呗)
  8. -
-

在此电脑,右键,管理,磁盘管理,搞个新分区,我选的4G大小差不多了。大概像酱紫:

-

image-20200804164302218

-

操作完之后就多出来一个P分区。

-
-

这里有一点经验教训就是新建分区后进去然后打开wsl是不行的,wsl还不能识别到分区,如果要识别,需要重启wsl,在管理员权限的cmd里运行:

-
1
2
net stop LxssManager
net start LxssManager
-
-

虚拟机设置挂载文件夹,同上文。然后运行 ls -al 就可以看到 p 文件夹:

-

image-20200804234159560

-

这次就,不设置 alias 命令了吧,直接,把这个文件夹,映射到根目录下的 /pwn

-

创建符号链接

-
1
sudo ln -s /mnt/hgfs/p /pwn
- -

image-20200804234628952

-

运行 ls -al

-

image-20200804234748499

-

来试一下好了没,运行 cd /pwn

-

image-20200804234951886

-

(这里新建p分区的时候应该应该选择exFat文件系统的。。)

-

(然后用 DiskGenius 格式化成了exFat。亲测可用)

-

image-20200805000450165

-

听说win10可以直接读取ext4 U盘,硬盘应该也快了。我试试格式化成ext4格式。

-

读取不了,资源管理器都不显示

-

尝试安装了一个 Ext2Fsd-0.69.exe,在 https://sourceforge.net/projects/ext2fsd/ 下载的

-

安装完成需要重启电脑,不敢重启,就算了不试了

-

格式化回exFat格式,可正常使用

-

下一步,放进文件

-image-20200805002113063 - -

下一步,在Linux中使用

-

image-20200805002130947

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2021/07/wsl2-and-proxifier/index.html b/2021/07/wsl2-and-proxifier/index.html deleted file mode 100644 index ec227cc..0000000 --- a/2021/07/wsl2-and-proxifier/index.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 解决 WSL2 和 proxifier 的相互报错问题 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 解决 WSL2 和 proxifier 的相互报错问题 -

- - -
- - - - -
- - -

转载自知乎:https://zhuanlan.zhihu.com/p/151392411

-

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

- - -

问题:

参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)

-

解决方法:

1. 常见临时解决方案(不推荐):

-

以管理员身份运行CMD,输入:

-
-

netsh winsock reset

-
-

重启计算机即可修复。

-

2. 长期解决的方案(推荐):

-

(1)下载此软件:

-

http://www.proxifier.com/tmp/Test20200228/NoLsp.exe

-

(需要挂代理访问下载)

-

(2)管理员身份运行CMD输入:

-
-

NoLsp.exe C:\windows\system32\wsl.exe

-
-

请自行注意NoLsp.exe程序的位置,以及你的wsl.exe位置。

-

产生原因和解决方法分析:

-
    -
  1. 代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
  2. -
  3. Proxifer开发人员解释如下:
  4. -
-
-

如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使用WSCSetApplicationCategory WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
这将告诉Windows不要将LSP DLL加载到wsl.exe进程中

-
-

上述解决方案来自于:

-

https://github.com/microsoft/WSL/issues/4177

-

https://answers.microsoft.com/zh-hans/insider/forum/all/wsl2%E5%AE%89%E8%A3%85kali/b6dd4c62-1130-4a7c-9462-1e9e5f38dab2

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2022/03/my-disk-crushed/index.html b/2022/03/my-disk-crushed/index.html deleted file mode 100644 index 6d1766f..0000000 --- a/2022/03/my-disk-crushed/index.html +++ /dev/null @@ -1,677 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 硬盘损坏(物理)和事件分析 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 硬盘损坏(物理)和事件分析 -

- - -
- - - - -
- - -

寒假期间,本人的电脑硬盘坏掉了。

-

总结一点经验吧,希望能帮助到您。

- - -

事件经过

​ 起初是偶尔的找不到系统分区找不到 winload.efi 从而无法启动。后来启不动,BIOS也识别不到,多重启几次可以开机。最后直接无法识别,换卡槽换机器也完全无法识别。 本人猜测可能是主控坏掉的原因。

-

​ 硬盘是西数SN550,容量是1TB,由于是在淘宝小店买的便宜货,店铺的售后就不可能了,尝试西数官方联保,在线申请一直提示网络问题无法申请。尝试看一下数据恢复服务,在系数官方的数据恢复里找到了ontrack公司,在线填写信息后客服发邮件提供了报价,约合人民币5500多。奈何本人,钱包不足,遂放弃。

-

​ 邮件如下(也可以参考一下使用昂贵的数据恢复服务的操作流程):

-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
您好XXX,

多謝你使用KLDiscovery Ontrack (HK) Ltd. 數據修復服務.
Ontrack 35年歷史,在美國上市,是全球最大的數據恢復公司,每年恢復超過50,000個成功個案。

數據恢復服務的程序如下:
1. 請郵寄你的硬盤到我們的辦公室.
2. 數據修復服務開始後, 你會收到我們發出的郵件, 你可登入查核數據修復進度.
3. 當修復服務完成後, 我們會傳送修復報告及報價單到你的電子郵箱.
4. 如你對報告感到滿意, 請簽回報價單. 修復好的數據將會儲存於全新1TB 移動硬盤.
5. 標準服務的檢查費為HKD800恢復數據費用為 HKD6000. 時間約為5-7個工作天 (不包括速遞運輸時間時間).
6. 如因為硬件事故或需配備零件, 需時可能會更長.
7. 如未能恢復成功, 不會收取恢復數據費用
8. 如Ontrack 成功恢復數據, 而客戶拒絕恢復服務, 我們會收取 HKD1000 行政費.
9. 如客戶於一個月內未有取回硬盤, ONTRACK 會將硬盤消磁並销毁.

以下是我們的辦公室地址,
To: KLDiscovery Ontrack (HK) Limited
香港北角電器道148 號12樓1203A室
ATTN: Andrew Sin
Tel: +852 3704 8688

請包好你的硬盤及貼上我們的Job編號 (6389167)
請確認以上的報價並回覆以上的電郵, 多謝!
希望收到您的好消息!
如需要任何協助, 請致電聯絡我們+852 3704 8688.

Thank you!
- -

丢失的数据

​ 这一块硬盘里面包含了:

-
    -
  • 200G的Windows系统盘(C),
  • -
  • 200G的硬件技术资料(O),
  • -
  • 200G的游戏分区GTA(V),
  • -
  • 200G的多媒体文件(W),
  • -
  • 50G的一些备份文件(X),
  • -
-

​ 这些数据和资料全部丢失了。虽然说恰好这些资料不是最重要的,但是C盘仍然是很多重要文件的集散地,不管是重装还是格盘,都会丢失大量的程序数据,包括但不限于:

-
    -
  • appdata(相当大一部分程序的数据都在appdata),
  • -
  • documents(QQ接收文件 微信接收文件,QQ和微信的聊天记录数据库,一部分IDE的项目文件),
  • -
  • User目录(相当于Linux的~目录,程序员IDE的配置,一部分项目文件,一部分程序的配置文件都会在这里,尤其是ssh密钥和xshell的服务器记录,如果丢失损失非常大)
  • -
  • Download目录(相信很多人的下载文件都是放在这里的吧,如果丢失也会损失很多内容)
  • -
  • chrome的文件夹(书签 历史记录 扩展程序和油猴插件的脚本)(虽然说你登陆了账户并且开启了chrome同步,那书签和一小段时间的历史记录和你的扩展程序可以从远程恢复,但是扩展程序里面的数据 配置 手撕脚本等可能就付之一炬了特别是油猴(当事人:现在就是后悔 非常的后悔))
  • -
-

总结一些

-

后记

一怒之下在 jd 购买了三星980,1TB硬盘,感觉比西数更靠谱一点。

-
-

西数,🐕都不用

-

真香~.jpg

-
- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2022/04/adb-picture-transfer/index.html b/2022/04/adb-picture-transfer/index.html deleted file mode 100644 index 81a0012..0000000 --- a/2022/04/adb-picture-transfer/index.html +++ /dev/null @@ -1,756 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 使用adb从手机传输相片到电脑 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- 使用adb从手机传输相片到电脑 -

- - -
- - - - -
- - -

随着手机照片越来越多,手机空间越来越小,把手机照片腾到电脑上或许是一个减小空间的办法。

-

将安卓手机上的照片复制到电脑上有几种方法:

-
    -
  • 手机连电脑,使用文件模式复制照片
  • -
  • 手机连电脑,使用照片模式复制照片
  • -
  • 手机插U盘,复制照片
  • -
  • 手机插电脑,用adb命令行复制
  • -
-

前两种方法,由于Windows垃圾的安卓数据传输协议,极有可能中途失败或者传输错误。不考虑

-

第三种方法,可行,但需要手机支持插U盘以及需要USB口转typeC口等,不是很方便

-

第四种方法,步骤稍多,但是不需要U盘中转,速度快,可以方便的查看结果等优势

-
-

本文所使用和举例的机型是 MIUI 系统的手机,其他的系统路径不同,但是方法是一样的。

-

adb工具在这里放一个链接: https://cdutsec.lanzouw.com/ixnfb02yij7g

-

adb工具的版本太旧会影响传输速度和命令行的交互,所以尽量使用新版本的adb

-
-

0. 准备工作

0.1 电脑上adb工具

在此文件夹中,这三个文件,打开命令行即可操作。

-

image-20220410171522377

-

在文件夹按住shift然后鼠标右键,选择在此处打开命令行,可以运行adb

-

(如果打开的是powershell,运行cmd进入cmd命令行)

-image-20220410113046875 - - - -

0.2 手机上开启开发者模式和USB调试

0.2.1 开启开发者模式

如果手机没有开启开发者模式,按照这个操作开启开发者模式。

-

打开设置,点开我的设备

-IMG_20220405_210341 - -

点开全部参数

-IMG_20220405_210406 - -

一直点击MIUI版本,会进入开发者模式。

-IMG_20220405_210501 - -

0.2.2 打开开发者模式后打开USB调试

点开设置,打开更多设置,

-IMG_20220405_210522 - -

找到开发者选项

-IMG_20220405_210531 - -

首先开启开发者选项,手机可能提示有危险,选择确定。

-

然后打开USB调试的开关

-Screenshot_2022-04-10-16-46-22-788_com.miui.securitycenter - -IMG_20220405_210546 - - - - - -

1. 手机创建相册和分类照片

将手机中需要传到电脑的图片选中,点击添加到,新相册,创建相册

-

注意这里命名需要是:英文或数字,不能有空格 ,如果是带有汉字或者有空格,选中其中的图片,重新创建相册。

-IMG_20220410_113421 - -IMG_20220410_113442 - -

选择移动相片的方式

-IMG_20220410_113507 - - - -

2. 电脑连接adb,搬运相片

把手机用原厂充电线插上电脑(杂牌线可能识别不了或数据传输有问题!)

-

运行adb devices ,可以看到设备ID。

-

(这时候手机可能谈弹出提示:是否允许这台计算机调试,选择允许。)

-

image-20220410165018191

-

adb shell 进入手机空间

-

cd /sdcard/Pictures/Gallery/owner/,进入到相册的目录。ls 可以看到各个创建的相册

-

(在MIUI旧版本上需要运行的可能是:cd /sdcard/MIUI/Gallery/cloud/owner/

-

image-20220410165325479

-

cd 文件夹名字 进入文件夹,例如在这里我的文件夹是usb,那么我运行:cd usb

-

pwd 查看当前目录的路径,

-

image-20220410171122349

-

复制完整路径备用。

-

exit或 ctrl d 退出shell命令行,回到Windows命令行,运行:

-

adb pull 完整路径 来拉取文件,例如在此处我运行:adb pull /sdcard/Pictures/Gallery/owner/usb

-

image-20220410171324243

-

过程中没有报错,如果报错需要根据提示解决问题。

-

打开文件夹可以看到,相片文件夹已经有了:

-

image-20220410171541286

-

3. 手机和电脑确认文件夹信息

3.1 手机上查看相册文件夹信息

打开re文件管理器(如果没有 安装一个)

-IMG_20220410_113744 - -

和上面的路径一样,打开找到owner,找到自己创建的文件夹,

-

长按选中文件夹,点击右上方三个点,点击属性

-IMG_20220410_113858 - -IMG_20220410_113908 - -

可以看到文件夹里面有多少个文件,多少个文件夹,多少字节

-image-20220410173129131 - -

3.2 电脑上查看文件夹信息

打开刚才的文件夹,右键刚收到的文件夹,属性,

-

或者按住键盘alt键然后双击文件夹,打开文件夹属性

-image-20220410172952180 - -

对比两个信息,观察文件数、文件夹数、字节数都是一样的,就是完全复制到电脑上了,手机上的可以删除掉了

-

4. 手机上删除相册

这里快到结尾了,但还是要多说几句

-

删除相册的方式用且仅用:系统自带的相册app,来删除相册

-IMG_20220410_113959 - -

如图所示,MIUI是可能开启了云备份的,如果你恰好开了云备份并且这个相册里的一些图片已经备份,那么在使用文件管理器删除相册所在的文件夹,可能有两个问题:

-
    -
  • 相册运行错误。相册找不到文件夹,但是配置中是有文件夹的,所以会显示一个相册,但是打不开
  • -
  • 云备份恢复。如果一些图片删除了,手机联网会自动从云备份恢复图片。那你这个相册就删不干净了。
  • -
-

如图所示,相册app删除的时候会同时删除远程备份,所以,,干净(并且不会导致相册运行错误)

- -
- - - - - - - - -
-
坚持原创技术分享,您的支持将鼓励我继续创作!
- - -
- - - -
- -
- - - - -
- - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old/520/css/index.css b/520/css/index.css similarity index 100% rename from old/520/css/index.css rename to 520/css/index.css diff --git a/old/520/css/struct.css b/520/css/struct.css similarity index 100% rename from old/520/css/struct.css rename to 520/css/struct.css diff --git a/old/520/img/01.jpg b/520/img/01.jpg similarity index 100% rename from old/520/img/01.jpg rename to 520/img/01.jpg diff --git a/old/520/img/01.png b/520/img/01.png similarity index 100% rename from old/520/img/01.png rename to 520/img/01.png diff --git a/old/520/img/012.jpg b/520/img/012.jpg similarity index 100% rename from old/520/img/012.jpg rename to 520/img/012.jpg diff --git a/old/520/img/013.jpg b/520/img/013.jpg similarity index 100% rename from old/520/img/013.jpg rename to 520/img/013.jpg diff --git a/old/520/img/014.jpg b/520/img/014.jpg similarity index 100% rename from old/520/img/014.jpg rename to 520/img/014.jpg diff --git a/old/520/img/015.jpg b/520/img/015.jpg similarity index 100% rename from old/520/img/015.jpg rename to 520/img/015.jpg diff --git a/old/520/img/016.jpg b/520/img/016.jpg similarity index 100% rename from old/520/img/016.jpg rename to 520/img/016.jpg diff --git a/old/520/img/02.png b/520/img/02.png similarity index 100% rename from old/520/img/02.png rename to 520/img/02.png diff --git a/old/520/img/body-background.gif b/520/img/body-background.gif similarity index 100% rename from old/520/img/body-background.gif rename to 520/img/body-background.gif diff --git a/old/520/img/body-background.png b/520/img/body-background.png similarity index 100% rename from old/520/img/body-background.png rename to 520/img/body-background.png diff --git a/old/520/img/search-white.png b/520/img/search-white.png similarity index 100% rename from old/520/img/search-white.png rename to 520/img/search-white.png diff --git a/old/520/img/search.png b/520/img/search.png similarity index 100% rename from old/520/img/search.png rename to 520/img/search.png diff --git a/old/520/index.html b/520/index.html similarity index 100% rename from old/520/index.html rename to 520/index.html diff --git a/old/520/js/canvas.js b/520/js/canvas.js similarity index 100% rename from old/520/js/canvas.js rename to 520/js/canvas.js diff --git a/old/520/js/define.js b/520/js/define.js similarity index 100% rename from old/520/js/define.js rename to 520/js/define.js diff --git a/old/520/js/index.js b/520/js/index.js similarity index 100% rename from old/520/js/index.js rename to 520/js/index.js diff --git a/old/520/js/music.js b/520/js/music.js similarity index 100% rename from old/520/js/music.js rename to 520/js/music.js diff --git a/old/520/music/mp3/yesterday once more.mp3 b/520/music/mp3/yesterday once more.mp3 similarity index 100% rename from old/520/music/mp3/yesterday once more.mp3 rename to 520/music/mp3/yesterday once more.mp3 diff --git "a/old/520/music/mp3/\346\265\231\346\261\237\346\235\255\345\267\236\347\275\221\346\230\223\344\272\222\350\201\224\347\275\221\346\213\233\350\201\230\345\225\246.mp3" "b/520/music/mp3/\346\265\231\346\261\237\346\235\255\345\267\236\347\275\221\346\230\223\344\272\222\350\201\224\347\275\221\346\213\233\350\201\230\345\225\246.mp3" similarity index 100% rename from "old/520/music/mp3/\346\265\231\346\261\237\346\235\255\345\267\236\347\275\221\346\230\223\344\272\222\350\201\224\347\275\221\346\213\233\350\201\230\345\225\246.mp3" rename to "520/music/mp3/\346\265\231\346\261\237\346\235\255\345\267\236\347\275\221\346\230\223\344\272\222\350\201\224\347\275\221\346\213\233\350\201\230\345\225\246.mp3" diff --git "a/old/520/music/mp3/\351\261\274.mp3" "b/520/music/mp3/\351\261\274.mp3" similarity index 100% rename from "old/520/music/mp3/\351\261\274.mp3" rename to "520/music/mp3/\351\261\274.mp3" diff --git a/old/520/music/song_name.js b/520/music/song_name.js similarity index 100% rename from old/520/music/song_name.js rename to 520/music/song_name.js diff --git a/old/520/txt/music.txt b/520/txt/music.txt similarity index 100% rename from old/520/txt/music.txt rename to 520/txt/music.txt diff --git a/BingSiteAuth.xml b/BingSiteAuth.xml new file mode 100644 index 0000000..09e2b60 --- /dev/null +++ b/BingSiteAuth.xml @@ -0,0 +1,4 @@ + + + 93659E2CB2EFFE2A39D3AF95BD378A51 + diff --git a/CNAME b/CNAME index 6329106..e5d8480 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -blog.tcpsoft.app \ No newline at end of file +tcpsoft.me \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c0f5c4c --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# here is the website of TCPSoft ,thanks for your reaching ! diff --git a/old/SiNanKeJiShe/index.html b/SiNanKeJiShe/index.html similarity index 100% rename from old/SiNanKeJiShe/index.html rename to SiNanKeJiShe/index.html diff --git a/about/index.html b/about/index.html deleted file mode 100644 index 965e660..0000000 --- a/about/index.html +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - about me. | Hi, I'm Cortana. - - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - - - -
- - -
- - - -
-
- -

about me. -

- - - -
- - - - -
-

学生族,00后,生卒年不详。

-

网络空间安全专业本科生

-

邮箱 tcpsoft@outlook.com

-

近几日闲来无事竟然开始写博文,这都得从一只蝙蝠说起……

- -
- - - -
- - - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/12/index.html b/archives/2019/12/index.html deleted file mode 100644 index 5f6b648..0000000 --- a/archives/2019/12/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2019

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/index.html b/archives/2019/index.html deleted file mode 100644 index 356e966..0000000 --- a/archives/2019/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2019

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/02/index.html b/archives/2020/02/index.html deleted file mode 100644 index 5f524ac..0000000 --- a/archives/2020/02/index.html +++ /dev/null @@ -1,637 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/03/index.html b/archives/2020/03/index.html deleted file mode 100644 index e42a749..0000000 --- a/archives/2020/03/index.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/05/index.html b/archives/2020/05/index.html deleted file mode 100644 index 4afdb02..0000000 --- a/archives/2020/05/index.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/07/index.html b/archives/2020/07/index.html deleted file mode 100644 index 3830fca..0000000 --- a/archives/2020/07/index.html +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/08/index.html b/archives/2020/08/index.html deleted file mode 100644 index 458262c..0000000 --- a/archives/2020/08/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/index.html b/archives/2020/index.html deleted file mode 100644 index 89820be..0000000 --- a/archives/2020/index.html +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/page/2/index.html b/archives/2020/page/2/index.html deleted file mode 100644 index 1600ccb..0000000 --- a/archives/2020/page/2/index.html +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2020/page/3/index.html b/archives/2020/page/3/index.html deleted file mode 100644 index ff1aed2..0000000 --- a/archives/2020/page/3/index.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2021/07/index.html b/archives/2021/07/index.html deleted file mode 100644 index ef4fd56..0000000 --- a/archives/2021/07/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2021

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2021/index.html b/archives/2021/index.html deleted file mode 100644 index a0e57d2..0000000 --- a/archives/2021/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2021

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2022/03/index.html b/archives/2022/03/index.html deleted file mode 100644 index f4c28b0..0000000 --- a/archives/2022/03/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2022

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2022/04/index.html b/archives/2022/04/index.html deleted file mode 100644 index fb50e0c..0000000 --- a/archives/2022/04/index.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2022

-
- - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2022/index.html b/archives/2022/index.html deleted file mode 100644 index 6581ed5..0000000 --- a/archives/2022/index.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2022

-
- - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/index.html b/archives/index.html deleted file mode 100644 index bae4c85..0000000 --- a/archives/index.html +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2022

-
- - - - -
-

2021

-
- - -
-

2020

-
- - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/page/2/index.html b/archives/page/2/index.html deleted file mode 100644 index 71d62d0..0000000 --- a/archives/page/2/index.html +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/page/3/index.html b/archives/page/3/index.html deleted file mode 100644 index ad27657..0000000 --- a/archives/page/3/index.html +++ /dev/null @@ -1,571 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 归档 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
- 嗯..! 目前共计 25 篇日志。 继续努力。 -
- - -
-

2020

-
- - - - - - - - -
-

2019

-
- - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/atom.xml b/atom.xml deleted file mode 100644 index 90c62ae..0000000 --- a/atom.xml +++ /dev/null @@ -1,519 +0,0 @@ - - - Hi, I'm Cortana. - - - - - - 2022-04-10T10:19:04.915Z - https://blog.tcpsoft.app/ - - - tcpsoft - - - - Hexo - - - 使用adb从手机传输相片到电脑 - - https://blog.tcpsoft.app/2022/04/adb-picture-transfer/ - 2022-04-10T10:07:32.000Z - 2022-04-10T10:19:04.915Z - - 随着手机照片越来越多,手机空间越来越小,把手机照片腾到电脑上或许是一个减小空间的办法。

将安卓手机上的照片复制到电脑上有几种方法:

  • 手机连电脑,使用文件模式复制照片
  • 手机连电脑,使用照片模式复制照片
  • 手机插U盘,复制照片
  • 手机插电脑,用adb命令行复制

前两种方法,由于Windows垃圾的安卓数据传输协议,极有可能中途失败或者传输错误。不考虑

第三种方法,可行,但需要手机支持插U盘以及需要USB口转typeC口等,不是很方便

第四种方法,步骤稍多,但是不需要U盘中转,速度快,可以方便的查看结果等优势

本文所使用和举例的机型是 MIUI 系统的手机,其他的系统路径不同,但是方法是一样的。

adb工具在这里放一个链接: https://cdutsec.lanzouw.com/ixnfb02yij7g

adb工具的版本太旧会影响传输速度和命令行的交互,所以尽量使用新版本的adb

0. 准备工作

0.1 电脑上adb工具

在此文件夹中,这三个文件,打开命令行即可操作。

image-20220410171522377

在文件夹按住shift然后鼠标右键,选择在此处打开命令行,可以运行adb

(如果打开的是powershell,运行cmd进入cmd命令行)

image-20220410113046875

0.2 手机上开启开发者模式和USB调试

0.2.1 开启开发者模式

如果手机没有开启开发者模式,按照这个操作开启开发者模式。

打开设置,点开我的设备

IMG_20220405_210341

点开全部参数

IMG_20220405_210406

一直点击MIUI版本,会进入开发者模式。

IMG_20220405_210501

0.2.2 打开开发者模式后打开USB调试

点开设置,打开更多设置,

IMG_20220405_210522

找到开发者选项

IMG_20220405_210531

首先开启开发者选项,手机可能提示有危险,选择确定。

然后打开USB调试的开关

Screenshot_2022-04-10-16-46-22-788_com.miui.securitycenterIMG_20220405_210546

1. 手机创建相册和分类照片

将手机中需要传到电脑的图片选中,点击添加到,新相册,创建相册

注意这里命名需要是:英文或数字,不能有空格 ,如果是带有汉字或者有空格,选中其中的图片,重新创建相册。

IMG_20220410_113421IMG_20220410_113442

选择移动相片的方式

IMG_20220410_113507

2. 电脑连接adb,搬运相片

把手机用原厂充电线插上电脑(杂牌线可能识别不了或数据传输有问题!)

运行adb devices ,可以看到设备ID。

(这时候手机可能谈弹出提示:是否允许这台计算机调试,选择允许。)

image-20220410165018191

adb shell 进入手机空间

cd /sdcard/Pictures/Gallery/owner/,进入到相册的目录。ls 可以看到各个创建的相册

(在MIUI旧版本上需要运行的可能是:cd /sdcard/MIUI/Gallery/cloud/owner/

image-20220410165325479

cd 文件夹名字 进入文件夹,例如在这里我的文件夹是usb,那么我运行:cd usb

pwd 查看当前目录的路径,

image-20220410171122349

复制完整路径备用。

exit或 ctrl d 退出shell命令行,回到Windows命令行,运行:

adb pull 完整路径 来拉取文件,例如在此处我运行:adb pull /sdcard/Pictures/Gallery/owner/usb

image-20220410171324243

过程中没有报错,如果报错需要根据提示解决问题。

打开文件夹可以看到,相片文件夹已经有了:

image-20220410171541286

3. 手机和电脑确认文件夹信息

3.1 手机上查看相册文件夹信息

打开re文件管理器(如果没有 安装一个)

IMG_20220410_113744

和上面的路径一样,打开找到owner,找到自己创建的文件夹,

长按选中文件夹,点击右上方三个点,点击属性

IMG_20220410_113858IMG_20220410_113908

可以看到文件夹里面有多少个文件,多少个文件夹,多少字节

image-20220410173129131

3.2 电脑上查看文件夹信息

打开刚才的文件夹,右键刚收到的文件夹,属性,

或者按住键盘alt键然后双击文件夹,打开文件夹属性

image-20220410172952180

对比两个信息,观察文件数、文件夹数、字节数都是一样的,就是完全复制到电脑上了,手机上的可以删除掉了

4. 手机上删除相册

这里快到结尾了,但还是要多说几句

删除相册的方式用且仅用:系统自带的相册app,来删除相册

IMG_20220410_113959

如图所示,MIUI是可能开启了云备份的,如果你恰好开了云备份并且这个相册里的一些图片已经备份,那么在使用文件管理器删除相册所在的文件夹,可能有两个问题:

  • 相册运行错误。相册找不到文件夹,但是配置中是有文件夹的,所以会显示一个相册,但是打不开
  • 云备份恢复。如果一些图片删除了,手机联网会自动从云备份恢复图片。那你这个相册就删不干净了。

如图所示,相册app删除的时候会同时删除远程备份,所以,,干净(并且不会导致相册运行错误)

]]>
- - - - <p>随着手机照片越来越多,手机空间越来越小,把手机照片腾到电脑上或许是一个减小空间的办法。 - - - - - - - - - -
- - - 硬盘损坏(物理)和事件分析 - - https://blog.tcpsoft.app/2022/03/my-disk-crushed/ - 2022-03-04T11:40:09.000Z - 2022-03-04T15:08:17.232Z - - 寒假期间,本人的电脑硬盘坏掉了。

总结一点经验吧,希望能帮助到您。

事件经过

​ 起初是偶尔的找不到系统分区找不到 winload.efi 从而无法启动。后来启不动,BIOS也识别不到,多重启几次可以开机。最后直接无法识别,换卡槽换机器也完全无法识别。 本人猜测可能是主控坏掉的原因。

​ 硬盘是西数SN550,容量是1TB,由于是在淘宝小店买的便宜货,店铺的售后就不可能了,尝试西数官方联保,在线申请一直提示网络问题无法申请。尝试看一下数据恢复服务,在系数官方的数据恢复里找到了ontrack公司,在线填写信息后客服发邮件提供了报价,约合人民币5500多。奈何本人,钱包不足,遂放弃。

​ 邮件如下(也可以参考一下使用昂贵的数据恢复服务的操作流程):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
您好XXX,

多謝你使用KLDiscovery Ontrack (HK) Ltd. 數據修復服務.
Ontrack 35年歷史,在美國上市,是全球最大的數據恢復公司,每年恢復超過50,000個成功個案。

數據恢復服務的程序如下:
1. 請郵寄你的硬盤到我們的辦公室.
2. 數據修復服務開始後, 你會收到我們發出的郵件, 你可登入查核數據修復進度.
3. 當修復服務完成後, 我們會傳送修復報告及報價單到你的電子郵箱.
4. 如你對報告感到滿意, 請簽回報價單. 修復好的數據將會儲存於全新1TB 移動硬盤.
5. 標準服務的檢查費為HKD800恢復數據費用為 HKD6000. 時間約為5-7個工作天 (不包括速遞運輸時間時間).
6. 如因為硬件事故或需配備零件, 需時可能會更長.
7. 如未能恢復成功, 不會收取恢復數據費用
8. 如Ontrack 成功恢復數據, 而客戶拒絕恢復服務, 我們會收取 HKD1000 行政費.
9. 如客戶於一個月內未有取回硬盤, ONTRACK 會將硬盤消磁並销毁.

以下是我們的辦公室地址,
To: KLDiscovery Ontrack (HK) Limited
香港北角電器道148 號12樓1203A室
ATTN: Andrew Sin
Tel: +852 3704 8688

請包好你的硬盤及貼上我們的Job編號 (6389167)
請確認以上的報價並回覆以上的電郵, 多謝!
希望收到您的好消息!
如需要任何協助, 請致電聯絡我們+852 3704 8688.

Thank you!

丢失的数据

​ 这一块硬盘里面包含了:

  • 200G的Windows系统盘(C),
  • 200G的硬件技术资料(O),
  • 200G的游戏分区GTA(V),
  • 200G的多媒体文件(W),
  • 50G的一些备份文件(X),

​ 这些数据和资料全部丢失了。虽然说恰好这些资料不是最重要的,但是C盘仍然是很多重要文件的集散地,不管是重装还是格盘,都会丢失大量的程序数据,包括但不限于:

  • appdata(相当大一部分程序的数据都在appdata),
  • documents(QQ接收文件 微信接收文件,QQ和微信的聊天记录数据库,一部分IDE的项目文件),
  • User目录(相当于Linux的~目录,程序员IDE的配置,一部分项目文件,一部分程序的配置文件都会在这里,尤其是ssh密钥和xshell的服务器记录,如果丢失损失非常大)
  • Download目录(相信很多人的下载文件都是放在这里的吧,如果丢失也会损失很多内容)
  • chrome的文件夹(书签 历史记录 扩展程序和油猴插件的脚本)(虽然说你登陆了账户并且开启了chrome同步,那书签和一小段时间的历史记录和你的扩展程序可以从远程恢复,但是扩展程序里面的数据 配置 手撕脚本等可能就付之一炬了特别是油猴(当事人:现在就是后悔 非常的后悔))

总结一些

后记

一怒之下在 jd 购买了三星980,1TB硬盘,感觉比西数更靠谱一点。

西数,🐕都不用

真香~.jpg

]]>
- - - - <p>寒假期间,本人的电脑硬盘坏掉了。</p> -<p>总结一点经验吧,希望能帮助到您。</p> - - - - - - - - - -
- - - 解决 WSL2 和 proxifier 的相互报错问题 - - https://blog.tcpsoft.app/2021/07/wsl2-and-proxifier/ - 2021-07-21T02:00:00.000Z - 2021-07-21T02:12:20.832Z - - 转载自知乎:https://zhuanlan.zhihu.com/p/151392411

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

问题:

参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)

解决方法:

1. 常见临时解决方案(不推荐):

以管理员身份运行CMD,输入:

netsh winsock reset

重启计算机即可修复。

2. 长期解决的方案(推荐):

(1)下载此软件:

http://www.proxifier.com/tmp/Test20200228/NoLsp.exe

(需要挂代理访问下载)

(2)管理员身份运行CMD输入:

NoLsp.exe C:\windows\system32\wsl.exe

请自行注意NoLsp.exe程序的位置,以及你的wsl.exe位置。

产生原因和解决方法分析:

  1. 代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
  2. Proxifer开发人员解释如下:

如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使用WSCSetApplicationCategory WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
这将告诉Windows不要将LSP DLL加载到wsl.exe进程中

上述解决方案来自于:

https://github.com/microsoft/WSL/issues/4177

https://answers.microsoft.com/zh-hans/insider/forum/all/wsl2%E5%AE%89%E8%A3%85kali/b6dd4c62-1130-4a7c-9462-1e9e5f38dab2

]]>
- - - - <p>转载自知乎:<code>https://zhuanlan.zhihu.com/p/151392411</code> </p> -<h2 id="关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。"><a href="#关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。" class="headerlink" title="关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。"></a>关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。</h2><p><img src="https://blogsrc-1301043685.cos.ap-chengdu.myqcloud.com/v2-7fc4f91dc113fc84a7115c2f8661b8f6_1440w.jpg" alt="关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。"></p> - - - - - - - - - - - - - -
- - - 欢迎 pwn 分区(P盘) - - https://blog.tcpsoft.app/2020/08/welcome-pwn-partition/ - 2020-08-04T08:24:29.000Z - 2020-08-05T04:20:56.561Z - - 今天再次尝试 wsl+gdb 调试,照舅失败

于是我搞了一个 “P分区”


wsl+gdb,不行. ❌

咕了很久还是想继续尝试gdb,wsl+gdb当然是最方便的一种方式了,打开命令行就可以用,都不需要开启 vmware。

但是很快的就遇到了问题。首先就是 wsl (我用的是Ubuntu16.04) 装好时是不支持32位程序的,通过搜索知道了安装启动 binfmt-support 就可以,让 wsl 能运行32位程序。

让64位的WSL(windows 子 linux系统)支持运行32位程序 - 简书

正准备开心的打开gdb调试,布星了。

在 gdb 里 start 可以,但是 ni 就不行了:

image-20200804185229605

1
2
3
4
5
6
pwndbg> ni
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x80484a0

Command aborted.

查询了一波,感觉大概可能应该或许是 wsl 他就不能调试32位程序?

image-20200804184759075

你品你细品,wsl 装好的时候是只有64位程序支持的,32位直接给砍掉了,如果要运行32位还需要安装 binfmt-support ,32位程序仿佛不是 wsl 本来所支持的功能?

你品你再品,gcc编译成32位程序还需要加 -m32 编译参数,那么默认编译出来就是64位?32位是不是”过时”了?

阅读 binfmt-support 的介绍,可以看到

https://packages.debian.org/stretch/binfmt-support 上,写道:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
==========原文==========
软件包:binfmt-support(2.1.6-2)
Support for extra binary formats
The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

This package provides an 'update-binfmts' script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian
==========google机翻==========
软件包:binfmt-support(2.1.6-2)
支持额外的二进制格式
版本2.1.43和更高版本的Linux内核中包含的binfmt_misc内核模块,使系统管理员可以根据幻数或文件扩展名注册各种二进制格式的解释器,并在匹配文件时调用适当的解释器。被执行。将其视为#的更灵活版本!可执行解释器机制。

该软件包提供了一个'update-binfmts'脚本,软件包维护者可以使用该脚本注册要与此模块一起使用的解释器,而不必担心编写自己的init.d脚本,并且sysadmin可以将其用于稍高级别的接口。模块。

标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian

http://binfmt-support.nongnu.org/ 上,写道:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
==========原文==========
binfmt-support
The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

binfmt-support provides an update-binfmts script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

Versions 1.2.0 and above also support a mechanism for extending the range of binary formats among which the kernel can distinguish with the aid of a userspace helper, called a detector.

The source code to binfmt-support can be retrieved from its Git repository (if you don't have Git, follow the link for installation instructions).

This Web page is created and maintained by Colin Watson.
Last modified: $Date: 2017/07/09 13:30:47 $
==========google机翻==========
binfmt-支持
binfmt_miscLinux内核版本2.1.43和更高版本中包含的内核模块,允许系统管理员基于幻数或其文件扩展名注册各种二进制格式的解释器,并在匹配文件被调用时调用适当的解释器。被执行。可以将其视为#!可执行解释器机制的更灵活版本 。

binfmt-support提供了一个update-binfmts 脚本,程序包维护人员可以使用该脚本来注册要与此模块一起使用的解释程序,而不必担心编写自己的 init.d脚本,并且sysadmins可以将其用于该模块的更高级别的界面。

1.2.0及更高版本还支持一种扩展二进制格式范围的机制,内核可以借助一种称为检测器的用户空间助手来区分二进制格式 。

binfmt-support可以从其Git存储库中检索要获取 的源代码(如果您没有Git,请遵循链接以获取安装说明)。

该网页由Colin Watson创建和维护 。
上次修改时间:$日期:2017/07/09 13:30:47 $

这两个网页说,binfmt-support 是32位程序的解释器,安装后将32位程序绑定使用它打开。这是不是有点像虚拟机风格? gdb和Linux内核应该还是不能支持32位(我猜的)


vmware,好用!✅

不多说了吧,VMware装一个Ubuntu来进行调试,肯定没问题

但是我还是想快速的访问Windows上那些文件夹。

https://cn.bing.com/search?q=vmware添加共享文件夹

由于我会常用到下载文件夹,所以把下载文件夹映射到share目录。

image-20200804221417612

Linux里面,文件夹在哪儿呢?

/mnt/hgfs/share

但是文件管理器进入这个目录,还是不能右键新建文件夹。

ls -al 查看权限,chmod 777 share授予最宽的权限,再次 ls -al查看权限

image-20200804222350672

image-20200804222407950

设置完后就可以像正常使用一样读写这个文件夹了,所做的更改,在Windows上全部同步。

可是,这个目录不太好打啊

我在 ~/.bash_aliases 里设置了share,来方便地命令行打开文件夹 alias share="cd /mnt/hgfs/share"

那么下次运行share命令就可以了,

(感觉还是哪里不太方便?)


P盘 与 /pwn

干脆把那个文件夹抽出来,用一个分区存?

好处:

  1. Windows上好找,单独一个分区呢,二进制文件放里面就好啦
  2. 虚拟机里好找,vmware设置挂在文件夹时输入分区就行了,不用担心如果文件夹被移动,会导致虚拟机内不可用
  3. wsl 里好找,众所周知,wsl 和Windows共享文件系统,是通过把Windows上的盘符,挂载到 /mnt,那么P盘对应就是 /mnt/p,可以说目录已经灰常好打了
  4. 稳定不容易坏,他就是个单独分区,不存在移动文件夹导致找不到的问题,只要这个盘还在,就能用(盘不在就创建一个分区呗)

在此电脑,右键,管理,磁盘管理,搞个新分区,我选的4G大小差不多了。大概像酱紫:

image-20200804164302218

操作完之后就多出来一个P分区。

这里有一点经验教训就是新建分区后进去然后打开wsl是不行的,wsl还不能识别到分区,如果要识别,需要重启wsl,在管理员权限的cmd里运行:

1
2
net stop LxssManager
net start LxssManager

虚拟机设置挂载文件夹,同上文。然后运行 ls -al 就可以看到 p 文件夹:

image-20200804234159560

这次就,不设置 alias 命令了吧,直接,把这个文件夹,映射到根目录下的 /pwn

创建符号链接

1
sudo ln -s /mnt/hgfs/p /pwn

image-20200804234628952

运行 ls -al

image-20200804234748499

来试一下好了没,运行 cd /pwn

image-20200804234951886

(这里新建p分区的时候应该应该选择exFat文件系统的。。)

(然后用 DiskGenius 格式化成了exFat。亲测可用)

image-20200805000450165

听说win10可以直接读取ext4 U盘,硬盘应该也快了。我试试格式化成ext4格式。

读取不了,资源管理器都不显示

尝试安装了一个 Ext2Fsd-0.69.exe,在 https://sourceforge.net/projects/ext2fsd/ 下载的

安装完成需要重启电脑,不敢重启,就算了不试了

格式化回exFat格式,可正常使用

下一步,放进文件

image-20200805002113063

下一步,在Linux中使用

image-20200805002130947

]]>
- - - - <p>今天再次尝试 wsl+gdb 调试,照舅失败</p> -<p>于是我搞了一个 “P分区” - - - - - - - - - - - - - -
- - - 简简单单的记录一下gdb的亿点点常用的操作 - - https://blog.tcpsoft.app/2020/07/gdb-operation/ - 2020-07-28T13:35:52.000Z - 2020-07-28T14:21:11.448Z - - .

gdb操作:


gdb ./xxx

开始调试xxx程序,如果不能运行,需要先 chmod +x ./xxx


gdb attach [pid]

通过程序id即pid,gdb附加到一个正在运行的程序,并对其进行调试


start

运行程序并断点在第一条指令

输出寄存器,反汇编等信息


list

有源码的情况下 输出源码

1
2
3
4
5
6
7
8
9
10
11
12
pwndbg> list
warning: Source file is more recent than executable.
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int main(){
5 char num='0';
6 char str[10];
7 read(0,str,0x10);
8 if(num=='1'){
9 puts("great.\n");
10 fflush(stdout);

b *内存地址

在内存地址处下断点


b 函数名/*函数名

下断点

1
2
pwndbg> b main
Breakpoint 1 at 0x80484dc: file pwn05_char[]_overflow.cpp, line 5.

info b

查看断点信息

1
2
3
pwndbg> info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x080484dc in main() at pwn05_char[]_overflow.cpp:5

step

step(in),步入,在有源码调试时,执行下一行源码,有函数调用时进入函数调用


next

步过,在有源码调试时,执行下一行源码,有函数调用时执行完函数并执行到函数调用的下一行


nexti/ni

next instruction,步过,执行下一行汇编指令


stepi/si

step into,步入,执行下一行汇编指令,如果有函数调用时进入函数的第一行汇编指令


finish

运行完当前的函数,停在最后一句汇编代码


info registers

寄存器信息


x/<n/f/u> <addr>

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u格式:
b表示单字节
h表示双字节
w表示四字节
g表示八字节。

一些GDB参考链接:

https://blog.csdn.net/tzshlyt/article/details/53668885

https://www.jianshu.com/p/b7896e9afeb7

https://blog.csdn.net/u013525455/article/details/52813637

https://www.jianshu.com/p/e6af28e2566f

https://www.cnblogs.com/xiaoshiwang/p/10755199.html

https://www.cnblogs.com/xsln/p/gdb_instructions1.html

https://man.linuxde.net/gdb

https://www.cnblogs.com/tangtangde12580/p/8045980.html

https://www.cnblogs.com/zhoug2020/p/7283169.html

https://www.jianshu.com/p/adcf474f5561

https://blog.csdn.net/songchuwang1868/article/details/86132281

]]>
- - - - <p>. - - - - - - - - - -
- - - batch-shortcuts - - https://blog.tcpsoft.app/2020/07/batch-shortcuts/ - 2020-07-28T13:19:40.000Z - 2020-07-28T13:28:21.725Z - - 教你设置 batch-shortcuts

img

PATH 环境变量介绍

搬运自 知乎

PATH 环境变量

经常使用命令行工具的话,对PATH等环境变量应该会非常熟悉;但现今的日常开发,接触到这一概念的机会越来越少。

时不时还是会遇到小朋友问我:“什么是PATH?”

这里记录一下,以供参考。

什么是环境变量?

环境变量是操作系统提供给应用程序访问的简单 key / value字符串;windows/linux/mac都有同样的概念。

一般用于提供参数值给不同的应用程序。

什么是PATH变量?

我们从命令行想要运行一个程序的时候,待运行的程序往往不是在当前目录。

PATH变量就是用于保存可以搜索的目录路径,如果待运行的程序不在当前目录,操作系统便可以去依次搜索PATH变量变量中记录的目录,如果在这些目录中找到待运行的程序,操作系统便可以运行。

Go开发为例,但我们使用go install命令编译、安装go程序后,可执行文件是会被保存在$GOPATH/bin路径下;那么我们可以把这个路径加入PATH变量中,这样我们便可以在任意路径中运行go安装的程序。

GOPATH

GOPATH又是一个环境变量,用于保存go的主目录,go默认安装之后,GOPATH会是当前用户的主工作目录中的go子目录,即:%HOME/go

查看环境变量

假设我们要查看GOPATH这个环境变量的值:

  • windows command prompt: echo %GOPATH%
  • windows powershell: $env:GOPATH
  • linux & mac: echo $GOPATH

设置PATH变量

windows

假设我们当前登陆操作系统的用户名是:xiaomin

然后我们要把c:\users\xiaomin\go\bin路径加入到PATH变量中,在windows下我们可以在PowerShell中执行:

1
$env:Path += ";c:\users\xiaomin\go\bin"

注意,这样仅仅只是临时修改当前的PATH变量,当我们关闭、重开PowerShell时,就需要重新设置。

如果要永久的修改,需要使用管理员权限启动PowerShell,然后执行:

1
setx /M PATH "%PATH%;c:\users\xiaomin\go\bin"

Linux & Mac

同样假设我们当前登陆用户名是:xiaomin

然后我们要把/home/xiaomin/go/bin路径加入到PATH变量

1
export PATH=$PATH:/home/xiaomin/go/bin

这同样是临时修改,重开shell之后,会被重置;要永久改变的话,一般是将上面的命令加入到我们使用的shell初始化文件中。

以bash为例,那么就是将上述命令加到/home/xiaomin/.bash_profile文件中。


设置步骤

1. pathext

Windows上的另一个变量。这里存储可直接运行的文件类型,一般需要添加 .lnk 进去

2. 建立一个目录

建立: D:\bin\batch-shortcuts

D:\bin\ 路径又简洁又舒服

3. 把目录写入path

参照百度经验:windows10设置环境变量PATH

注意,设置完后,需要重启资源管理器和命令行来应用更改。

可以在任务管理器,选中资源管理器,选择重新启动

可以注销,然后登陆

可以重启

4. 然后就可以用了

怎么用?

在上面那个文件夹内的所有文件,都是命令行可以访问到的。

一般可以创建:.bat .lnk ,.exe也阔以哇

举个栗子:

1
2
文件名:batch-shortcuts.bat
explorer "D:\bin\batch-shortcuts"

模仿Linux ctrl d 一键关闭风格,创建的 d.bat

1
2
文件名:d.bat
exit

比如md5

1
2
文件名:md5.lnk
指向:"D:\Program Fies (Green)\WinMD5校验器.exe"

还有一些调用程序的,比如安装Ubuntu后,写一个脚本来调用Ubuntu执行命令

1
2
3
4
5
6
7
8
9
文件名:ubuntu.bat
@echo off

echo.
echo Usage:
echo use "ubuntu run $code$" to run shell command

echo.
"C:/Program Files/WindowsApps/CanonicalGroupLimited.Ubuntu16.04onWindows_2020.1604.14.0_x64__79rhkp1fndgsc/ubuntu1604.exe" %*

%* 是传递所有命令行参数,这个了解一下会有很大的帮助

如果不用这个,就得用 %1 %2 %3 %4 %5 %6 %7 %8 %9 ,而超过9的就不能再处理了

还有其他玩法,自己探索吧!


关于 D:\bin 文件夹

我一般把命令行调用的,编程语言类的,放在这里面,

(还有一些绿色IDE为代表的,可以一套带走的,我也放里面)

(还有DOS系统盘为代表的,系统级的底层的,我也放里面)

一方面是,这个路径他没有空格,不容易导致命令行调用出错。

第二是,他真的又简洁又舒服哇

列出一下目前为止我的 D:\bin 的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
D:\bin>dir
驱动器 D 中的卷没有标签。
卷的序列号是 9E68-267B

D:\bin 的目录

2020/05/25 16:24 <DIR> .
2020/05/25 16:24 <DIR> ..
2020/05/25 16:25 <DIR> .gradle
2020/03/17 20:23 <DIR> Anaconda3
2020/03/23 01:30 <DIR> Android_SDK
2020/06/05 10:42 <DIR> batch-shortcuts
2020/07/16 17:22 <DIR> DOS-16bit
2020/02/15 14:21 <DIR> eclipse-cpp
2020/02/15 14:18 <DIR> eclipse-java
2020/05/21 17:14 <DIR> ESP_8266
2019/07/01 00:43 <DIR> HBuilder.9.0.1.windows
2020/03/31 23:31 <DIR> HBuilderX.2.6.8.20200330.full
2020/04/21 01:06 <DIR> Java
2020/07/17 11:56 <DIR> nodejs
2019/11/28 13:53 <DIR> Perl
2020/03/18 23:53 <DIR> PortableApps
2020/02/19 23:47 <DIR> Python
2020/03/12 21:23 <DIR> Qt
2020/03/10 23:30 <DIR> Ruby27-x64
2020/03/23 21:16 <DIR> texlive
0 个文件 0 字节
20 个目录 57,676,476,416 可用字节

D:\bin>
]]>
- - - - <p>教你设置 batch-shortcuts</p> -<p><img src="https://blogsrc-1301043685.cos.ap-chengdu.myqcloud.com/006APoFYly1geysc9gpjmj305i058749.jpg" alt="img"> - - - - - - - - - -
- - - 亿分钟成为时间管理大师 - - https://blog.tcpsoft.app/2020/07/time-management/ - 2020-07-16T02:27:30.000Z - 2020-07-16T04:57:23.701Z - - 使用一个叫 manicTime 的软件

(好像最近越来越喜欢挖坑不填了哇)

(想了解的小伙伴请发邮件催更,联系方式在about页面有)

image-20200716102927688

]]>
- - - - <p>使用一个叫 manicTime 的软件 - - - - - - - - - -
- - - QQ空间辅助点赞 - - https://blog.tcpsoft.app/2020/07/qzone-faster-like/ - 2020-07-11T01:05:01.000Z - 2020-08-16T10:30:11.292Z - - QQ空间手滑点赞太麻烦,用键盘吧。

嗯,我文思枯竭了,编不出什么内容充实的文章,就写下过程贴代码吧

浏览器检查元素

通过完成的审查元素发现:

1
2
3
4
所有的列表,元素的id:     feed_friend_list
一个说说的,元素的class: f-single
点赞按钮,元素的class: qz_like_btn_v3
评论按钮,元素的class: qz_btn_reply

写脚本

之前考虑用jQuery实现,用油猴脚本,但是脚本对于加载jQuery有一点问题

因为QQ空间用了 $ 这个名字,但是不是jQuery,所以考虑用纯 js 实现。

后来啊。$ 不是可以用jQuery写么。就改成了jQuery实现

(jQuery真香)

用纯 js 添加点赞按钮的css

1
2
3
4
var style = document.createElement('style');
style.innerHTML="a.item-on {background-color: red;}"
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(style);

完整脚本 v0.1

(还没想好怎么解释这个脚本。直接贴代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.1
// @description try to take over the world!
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==
(function () {
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
function up(){
console.log("上");
}
function left(){
console.log("左");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
var first=jQuery(".f-single").eq(0);
console.log(first);
first.slideUp(function(){this.remove()});
//if(jQuery(".f-single").length==0){
//window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
first.slideUp(function(){this.remove()});
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div>\
<style>\
#rect {\
height: 100px; width: 160px; border:red 5px solid; position:fixed;\
z-index: 999; top:40px; margin-left:40%; margin-right:40%;\
}\
#rect:focus{ border:5px green solid; }\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea></div>');
jQuery("body").append($rect);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();

2020-08-01更新 v0.2

增加了修复网络的功能。妈妈再也不用担心更新不出来啦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.2
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
function up(){
console.log("上");
}
function left(){
console.log("左");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
var first=jQuery(".f-single").eq(0);
console.log(first);
first.slideUp(function(){this.remove()});
//if(jQuery(".f-single").length==0){
//window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
first.slideUp(function(){this.remove()});
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
}\
#rect {\
height: 100px; width: 200px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#qzone_fix_button{\
float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
}\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea>\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button></div>');
jQuery("body").append($rect);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();

2020-08-16更新 v0.3

0.3版本,增加了简单的去除顶部的已点赞用户

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app/
// @version 0.3
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
var list=["Cortana","Cortana"];
function getFirstTime(){
var first=jQuery(".f-single").eq(0);
var timetime = first.find(".info-detail .ui-mr8.state").html();
console.log(timetime);
}
function faded(first){
getFirstTime();
first.slideUp(100,function(){this.remove()});
}
function clearLiked(){
jQuery("#finishedClearLiked").html("pending.");
var first=jQuery(".f-single").eq(0);
console.log(first);
if(first.length==0){
jQuery("#finishedClearLiked").html("finished.");
return;
}
var nickName = first.find(".f-nick a").html();
console.log(nickName);
var matchList = false;
for(i=0;i<list.length;i++){
if(nickName.indexOf(list[i])>-1){
matchList=true;
break;
}
}
if(matchList==true){
console.log("进入{pass}分支");
var second=jQuery(".f-single").eq(1);
var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
console.log(nextZan.length);
if(nextZan.length!=0){ //下面有取消赞
console.log("下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,100);
}
else{ //下面没有取消赞,停止
console.log("下面无取消赞,所以停止");
var nickName = second.find(".f-nick a").html();
console.log("下一个人是:",nickName);
jQuery("#finishedClearLiked").html("finished.");
}
}
else{
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
jQuery("#finishedClearLiked").html("finished.");
}
else{
first.remove();
setTimeout(clearLiked,100);
}
}
}
function up(){
console.log("上");
jQuery("#finishedClearLiked").html("pending.");
clearLiked();
}
function left(){
console.log("左");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
}
function down(){
console.log("下");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
faded(first);
//if(jQuery(".f-single").length==0){
//window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
faded(first);
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
}\
#rect {\
height: 120px; width: 200px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#qzone_fix_button{\
float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
}\
#clearLikedDiv{\
vertical-align: top;border: 2px solid yellow;width: 150px;height: 80px;\
display: inline-flex;flex-direction: column;background-color: wheat;\
}\
#finishedClearLiked{\
border: skyblue 2px inset; font-size: 1.5em;\
}\
#startClearLiked{\
width: 100%;flex-grow: 1;\
}\
</style>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
<div id="clearLikedDiv">\
<span id="finishedClearLiked">free.</span>\
<button id="startClearLiked">清理已点赞</button>\
</div>\
</div>');
jQuery("body").append($rect);
jQuery("#startClearLiked").click(clearLiked);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();

2020-08-16更新 v0.4

增加显示最顶部五条动态内容,修复网络和状态条和删除顶部已点赞都放在最左边了

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// ==UserScript==
// @name QQ空间快速操作
// @namespace https://blog.tcpsoft.app
// @version 0.4
// @description QQ空间用键盘操作,岂不美哉
// @author tcpsoft
// @match https://user.qzone.qq.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';
// Your code here...
/* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
var list=["Cortana","今日百色","易锦教育","易锦大学","CUIT网络空间安全学院","丁凌娜","黄恋茹","Victor","墙"];
function getFirstTime(){
var first=jQuery(".f-single").eq(0);
var timetime = first.find(".info-detail .ui-mr8.state").html();
console.log(timetime);
}
function matchList(nickName){
var match = false;
for(i=0;i<list.length;i++){
if(nickName.indexOf(list[i])>-1){
match=true;
break;
}
}
return match;
}
function faded(first){
getFirstTime();
first.slideUp(100,function(){this.remove()});
}
function clearLiked(){
jQuery("#finishedClearLiked").html("pending.");
var first=jQuery(".f-single").eq(0);
console.log(first);
if(first.length==0){ //好友动态已经空了
jQuery("#finishedClearLiked").html("finished.");
return;
}
var nickName1 = first.find(".f-nick a").html();
console.log(nickName1);
var match1 = matchList(nickName1);
if(match1==true){ // 第一个人是列表
console.log("进入{pass}分支");
var second=jQuery(".f-single").eq(1);
var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//查找取消赞
console.log("第二个人有无取消赞:",nextZan.length);
if(nextZan.length!=0){ //下面有取消赞
console.log("下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,125);
}
else{ //第二个人下面没有取消赞,
console.log("第二个人下面无取消赞,");
var nickName2 = second.find(".f-nick a").html();
console.log("第二个人:",nickName2);
var match2 = matchList(nickName2);
if(match2==true){ // 第二个人也是列表
console.log("进入{pass}分支");
var third=jQuery(".f-single").eq(2);
var nickName3 = second.find(".f-nick a").html();
console.log("第三个人:",nickName3);
var thirdZan=third.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
console.log("第三个人有无取消赞:",thirdZan.length);
if(thirdZan.length!=0){ //下面有取消赞
console.log("第三个人下面有取消赞,所以pass");
first.remove();
setTimeout(clearLiked,125);
}
else{ //下面没有取消赞,停止
console.log("下面无取消赞,所以停止");
jQuery("#finishedClearLiked").html("finished.");
}
}
}
}
else{
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log("第一个人有无点赞按钮:",zan.length);
if(zan.length!=0){ // 有点赞按钮,结束
jQuery("#finishedClearLiked").html("finished.");
}
else{
first.remove();
setTimeout(clearLiked,125);
}
}
setTimeout(space,100);
}
function space(){
for(var iii=0;iii<5;iii++){
var one=jQuery(".f-single").eq(iii);
if(one.length==0){
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html("nickName");
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html("timestamp");
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html("content");
}
else{
var nickName = one.find(".f-nick a").html();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html(nickName);
var time = one.find(".info-detail .ui-mr8.state").html();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html(time);
var summary = one.find(".f-info").text();
jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html(summary);
}
}
}
function up(){
console.log("上");
jQuery("#finishedClearLiked").html("pending.");
clearLiked();
setTimeout(space,100);
jQuery("#finishedClearLiked").html("finished.");
}
function left(){
console.log("左");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
first.find(".qz_btn_reply").click();
setTimeout(space,100);
}
function down(){
console.log("下");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
faded(first);
setTimeout(space,100);
//if(jQuery(".f-single").length==0){
//window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
//}
}
function right(){
console.log("右 点赞");
jQuery("#finishedClearLiked").html("free.");
var first=jQuery(".f-single").eq(0);
console.log(first);
var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
console.log(zan.length);
if(zan.length!=0){
zan.eq(0).click();
}
faded(first);
setTimeout(space,150);
}
function beg(){
console.clear();
console.log("【【【【【】】】】】");
/*插入输入框*/
var $rect = jQuery('<div id="rect_div">\
<style>\
#rect_div{\
position: fixed; z-index: 999;top: 40px; width: 90%; text-align: center; left: 0px; right: 0px; margin-left: auto; margin-right: auto;\
}\
#rect {\
height: 140px; width: 210px; border:red 5px solid; \
}\
#rect:focus{ border:5px green solid; }\
#clearLikedDiv{\
vertical-align: top;border: 4px solid darkseagreen;width: 100px;height: 120px;\
display: inline-flex;flex-direction: column;background-color: wheat;\
}\
#qzone_fix_button{\
height: 50px; width: 100px; \
}\
#finishedClearLiked{\
border: skyblue 3px inset; font-size: 1.5em;\
}\
#startClearLiked{\
width: 100%;flex-grow: 1;\
}\
\
#statusTable{\
border-collapse: collapse;\
display: inline-table;\
vertical-align: top;\
}\
#statusTable tr td:nth-child(1){\
background-color: #FFFFCC;\
width: 100px;\
}\
#statusTable tr td:nth-child(2){\
background-color: #DDDDDD;\
width: 100px;\
}\
#statusTable tr td:nth-child(3){\
background-color: #CCFFCC;\
width: 300px;\
}\
</style>\
<div id="clearLikedDiv">\
<button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
<span id="finishedClearLiked">free.</span>\
<button id="startClearLiked">清理已点赞</button>\
</div>\
<textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n空格 加载前五条动态信息\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
<table id="statusTable" border="2"><tr>\
<td>100</td><td>100</td><td>100</td>\
</tr><tr>\
<td>200</td><td>200</td><td>200</td>\
</tr><tr>\
<td>300</td><td>300</td><td>300</td>\
</tr><tr>\
<td>400</td><td>400</td><td>400</td>\
</tr><tr>\
<td>500</td><td>500</td><td>500</td>\
</tr></table>\
</div>');
jQuery("body").append($rect);
jQuery("#startClearLiked").click(clearLiked);
/*红色点赞*/
jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
/*红色提示和文字
jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
*/
/*监听document的回车操作 37左 38上 39右 40下*/
jQuery("#rect").keydown(function(e){
//获取键盘输入的keyCode
//console.log(e)
var keycode = (Number)(e.keyCode);
console.log(keycode);
if(keycode == 32){//空格
console.log("空格");
space();
}else if(keycode == 37){//左
left();
}else if(keycode == 38){//上
up();
}else if(keycode == 39){//右
right();
}else if(keycode == 40){//下
down();
}
return false;
});
}
console.log("----等两秒----");
setTimeout(beg,2000);
})();
]]>
- - - - <p>QQ空间手滑点赞太麻烦,用键盘吧。</p> -<p>嗯,我文思枯竭了,编不出什么内容充实的文章,就写下过程贴代码吧 - - - - - - - - - -
- - - 手机差点报废后的自救 - - https://blog.tcpsoft.app/2020/05/Mi9-SE-screen-problem-self-rescue/ - 2020-05-26T11:28:30.000Z - 2020-05-26T13:04:34.854Z - - 今天手机屏幕出问题手机差点变砖

莫名其妙的自动点击

今天(前几天开始),手机使用的时候总是有莫名其妙的自动的点击,造成了一些困扰。

今天下午开始直接十点同时点击,在屏幕最下方!

脑补一下:打开输入法,啪啦啪啦给我按一堆 ,.,.,,,

打开设置,啪啦啪啦给我点进去不知道什么设置选项了

打开 Minecraft ,选中TNT,刚想摆,结果在右边给我放了一堆了(然后切换成火石…)

(事后模拟了一下,大概就像这样:)

img

考虑是不是系统卡顿

img

锁屏,解锁。无效

关机,重启。无效。开机一会儿后又开始了,而且频繁的点击影响锁屏解锁!

什么?你想叫我重买?

不可能想都不要想_不要_可能表情

考虑是不是有病毒软件恶意程序

浩浩荡荡开始卸载(半年了终于清理一次手机)

顺手发现了小米系统的自动启动程序是真的恶心。刚关了几个,又给我打开了几个程序

检查并卸载了:白鲸V₱N、老王V₱N、蚂蚁V₱N、旋风V₱N、Minecraft网易版、adbd insecure(系统使用过程中提示授予了root权限 所以严重怀疑这个)、VMOS(占用空间大,顺手卸了吧)、轻启动(有模拟点击,所以也怀疑这个,而且长得还丑,顺手卸了吧)

莫 有 卵 用 !

还是那么自由的十点暴击

冻结系统程序

浏览小米系统管家,看到了下面的程序然后冻结了

心想重启一下才能停止运行系统服务呢。重启手机。结果:

触 摸 完 全 没 反 应 了 !

下图是网上随便找的,脑补一下随便怎么划都没反应的状态。当时我心里就直接:噔噔咚

咋办??????????????????

adb ?试试就逝世。

连接电脑,adb shell进入命令行。

input,模拟触摸。不管用

通过搜索,知道了如何列出已停用的系统程序

通过搜索知道了启用已冻结的系统程序的方法,启用了两个,然后reboot重启

还是不行。又启用了两个

重启,还是不行

突然想到鼠标

摸出手机 USB-C OTG 转接头,拔掉电脑无线鼠标插上OTG插上TypeC口,

能用!

啊这?? 这变成巴掌大的 Android显示器了么

所幸是能用了

希望人没事_没事_希望表情

现在又咋办呢????????????

进入TRWP看看?

截图就不截图了,脑补一下。

重启进入TRWP,各种操作都是正常的,甚至还很流畅。

判定硬件没有问题。

判定TRWP手机驱动正常可用。

MIUI系统有问题。

通过搜索,我们知道…

搜你妹,上莆田医院啊

img

重装。。。系统?

然后又搜了一堆新版系统,又搜了刷系统。

不行,我程序还没备份。

于是打算开始用鼠标操作进行本地备份( 如何操作

此处省略 1w 字 …

浏览器历史记录:(信息量很大)image-20200526165743064

image-20200526165817077

image-20200526165855658

image-20200526165952401

image-20200526170059829

我想起高兴的细情

手机发烫了。

想起前面哪篇文章说过触摸不行可能是屏幕上电荷什么的。。。

终于找到这篇文章了

解决方案:湿抹布,上下左右前前后后擦一遍,重启。

问题解决。

意不意外!惊不惊喜! - 没想到吧?我想到了哈哈哈!意不意外?惊不惊喜?刺不刺激?_想不到_装逼_斗图_怼人表情表情

]]>
- - - - <p>今天手机屏幕出问题手机差点变砖</p> - - - - - - - - - -
- - - 大举报:仿佛那个时代又来临了 - - https://blog.tcpsoft.app/2020/05/dajubao/ - 2020-05-11T06:35:55.000Z - 2020-05-26T11:57:51.419Z - - 转自 豆瓣 : 2019-05-25 03:37:45


大举报:仿佛那个时代又来临了

原创:梅骁

1

之前我很想写一篇文章,写举报是时代变坏的开始。

但最近我的想法变了,我们的时代不是在开始变坏,而是已经变得很坏了。

最近一个让我有这种感觉的事件是王晨艺的点赞事件。

王晨艺是今年《创造营2019》的一个选手,是个没什么背景的舞蹈老师,在《创造营2019》这个整体很糊的节目里人气排名很靠前。

你不知道他没关系,因为我其实对他也没那么熟悉。

但这两天他身上发生了一个事情,有人扒出他六年前曾经在微博点赞过荤段子,所以认为他点赞涉及“敏感问题”,认为他是劣迹艺人,要求他立刻退赛。

img

看到这条新闻的时候,我觉得这一切都荒谬透顶。

最可怕的还不是有人认为一个人点赞荤段子所以他就是劣迹艺人,最可怕的是居然有人为了寻找一个人的“劣迹”而去疯狂翻查这个人过去多年的人生经历,试图寻找出一个黑料、一个过失,并对此大加举报攻击,以达到封杀、退赛的目的。

这个画面实在太可怕了。

一个人,他面无表情地盯着手机、盯着电脑,去从另一个人过往的茫茫人生经历里寻找一个错漏之处,就为了攻击他、打垮他。

你十年前说过脏话、你五年前垃圾没扔进垃圾桶、你三年前打过人一拳……这些全部都有可能成为你被攻击的素材。

这太可怕了,这画面的恐怖程度不亚于任何一部恐怖片。

因为我们谁都不能保证自己过往人生里从没有过任何错漏不当之处,所以我们任何人都有可能成为被这种手段打倒的那个。

2

时间稍微往前推一下。

今年三月份时,曾经发生过一件事,重庆一所高校里,有个老师因为课堂上发表损害国家声誉的过激言论而被学生举报。

学校很快发布公告,认为他违反教师职业道德,撤销了他的教师资格。

img

这是举报者的又一次胜利,可我看得特别害怕。

试想一下,当一个大学老师在课堂上讲话都可能会被举报的时候,他会怎么办?

他会只敢讲那些最安全、最无聊也最没有价值的东西,因为只有那些东西才是不会被举报的,与传道授业解惑相比,当然是个人的安全最重要。

这次是撤销教师资格,下次可能就是被判刑入狱,不,据我所知,已经有大学老师因为这个而入狱三年了。

img

所以,会越来越少人敢冒这个风险。

可是,你知道吗,现代大学教育跟中世纪大学教育的区别就在于,中世纪大学是传授已有知识的场所,而现代大学则担负着不断开拓新的知识和学科的职能。

所以,从1809年现代大学由柏林大学创立开始,“自由”都是大学最核心的关键词。

曾经在清华大学里,闻一多是言论最激进的教授,动不动就要在课堂上发表演说,后来更是在西南联大的广场集会上高声呼喊,对学校大肆批评。

img

闻一多

当时政府要求学校解聘闻一多,时任校长梅贻琦根本不理会,即便他自己也对闻一多的言行很不满,但他知道“自由”才是让大学教育保持活力的唯一动力。

而当“举报”出现在大学课堂上,当大学老师的每一句话都可能成为被举报的理由和材料时,还谈什么自由,谈什么进步。

我们的年轻一代在面对自己不认可的言论时第一反应已经不是“与他辩论”“将他驳倒”,而是熟练的使用举报手段“我要举报他,堵上他说话的嘴巴”。

并且他们一次又一次的成功做到了。

他们毁掉的不只是一个又一个老师,他们毁掉的更是教育本身。

这真的很可悲。

3

前两天,在豆瓣鹅组有这么一个帖子,内容是一个投票。

帖子的作者问大家,如果你发现你的父母、爱人、师长、朋友发表了不当言论,你要不要举报ta?

那个帖子里甚至详细地把这些人分成了“关系亲近的父母”“有过过节的朋友”“分手分得不愉快的前任”等等,把这些人分门别类地做了投票,问当这些发表了不当言论,你要不要举报。

这还不是最可怕的,最可怕的是下面的跟帖是真的认真在讨论。

有人说,父母是绝对不会举报的。

有人说,就算是爸妈,说了不当言论,也不能姑息。

有人说,分得不愉快的前任、有过节的朋友当然要举报啊。

诸如此类,林林总总,这些讨论才是我觉得最可怕的地方,因为大家都默认了“举报”的合法性,默认了当一个人发表了不当言论,他就应该被举报。

这实在太荒谬了。

没有任何一个人应该因为他的言论而被举报

当你遇到一个人说了你不认可的、甚至你极端厌恶的言论,你要做的事情应该是去反驳他、去驳倒他,去用你的思想、你的知识、你的言论去和他正面对决。

“我看不惯你的言论,所以我要反驳你”,这才是一个文明社会的人应该做的事情。

而“举报”是“我看不惯你的言论,所以我要堵上你的嘴,不让你说话,我堵不上,我就让更高的权力去堵你的嘴”。

这是个太可怕的思路。

一旦你把对言论正确与否的决定权交给了更高的权力,那今天被打倒的是你看不惯的人,明天被打倒的就可能是你自己。

不要觉得自己一辈子都不可能有任何错漏,任何人都会有错漏,任何人都会在某些情况下发表不当言论。

甚至,很可能今天还是很合情合理合法的言论,明天就会变成不当言论。

枪口不会因为你曾经是举报者,就对你网开一面。

4

其实,最近这两年来,举报已经越来越常见

有粉丝为了打击别家偶像,就去举报对方主演的作品有思想问题,有的就去挖对方多年前的微博、文章,试图找出蛛丝马迹、错漏之处。

我们其实是眼看着这股风气越兴越胜的。

有人因言获罪入狱,有人靠举报他人以达到打击报复的目的。

有人讨论当父母发表不当言论时,要不要与父母划清界线。

有人认真觉得堵上越来越多的嘴,这世界才会变得更好。

我们已经可以看到那个可预见的未来了。

在那个未来里,大家会因为不知道自己哪天因为哪句话被举报,所以大学老师会越来越不敢说话,亲人、爱人、朋友之间会越来越无法相信彼此。

甚至,就连你用滴滴打个车,都可能被司机举报你有不当言论,只因为你在车上和朋友讨论了一下性少数群体的话题。

img

我们已经能看到那个人人自危的未来就在不远处了。

你我都知道那会是个糟糕、邪恶的时代,我们早就见识过了。

但你我也都知道,我们是很难阻挡举报时代的来临的。

不,其实风行举报的时代早就已经在我们没注意时来临了,它早就已经深入到了我们生活的方方面面。

可这是不对的,无论多少人这么做,它都依然是不对的。

它会毁掉教育,毁掉创造和文化,毁掉人与人之间的信任,毁掉所有自由进步的可能性。

它不是将要到来,它是已经到来了。

你我都拦不住这个糟糕时代的来临。

但至少,我们可以选择不使用它,我们可以选择不做这个糟糕时代的共犯。

]]>
- - - - <p>转自 <a href="https://www.douban.com/note/719813875/" rel="external nofollow noopener noreferrer" target="_blank">豆瓣</a> : 2019-05-25 03:37:45 - - - - - - - - - -
- - - adb自动刷钱 - - https://blog.tcpsoft.app/2020/05/adb-auto-make-money/ - 2020-05-05T01:31:03.000Z - 2020-05-05T05:27:20.987Z - - 这是一款名字叫“Zen Idle”的游戏。来尝试下自动刷钱

image-20200505094215251

【adb获取包名以及当前运行的activity】

1
adb shell dumpsys window | findstr mCurrentFocus

输出:

1
mCurrentFocus=Window{98555ab u0 com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity}

由包名获取apk路径

1
adb shell pm path io.ionic.starter

【adb命令行启动应用程序】

1
adb shell am start -n 包名/类名

如:

1
adb shell am start -n com.android.music/com.android.music.MusicBrowserActivity

【adb shell 修改系统时间】
下面命令亲测可用,假如当前时间 01月05号08点23分改成 01月05号12点23分

1
adb shell date "01051223"

【按钮的位置】
找到开发者选项,开启“指针位置”,在游戏里找到按钮的范围
Claim按钮
X: 390-690 300 540
Y: 1212-1362 150 1287
关闭广告按钮
x 915
y 835

【Android adb 模拟滑动 按键 点击事件】

关于tap的话,他模拟的是touch屏幕的事件,只需给出x、y坐标即可。
此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:

1
adb shell input tap 250 250

此处我:

1
input tap 540 1287
1
input tap 915 835

【总命令】

1
adb shell date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3

加点循环

1
2
3
for I in $(seq 1 20);do
echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
done

写入sh脚本,懒得每次输入了

1
echo 'for I in $(seq 1 20);do\n    echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3\ndone' >zen.sh

【adb 安装卸载程序】
adb root 失败,提示adbd cannot run as root in production builds
网上说安装adbd-Insecure-v2.00.apk,亲测无效。还是每次adb shell然后su吧。

1
2
3
4
5
6
adb install ./adbd-Insecure-v2.00.apk

adb shell pm list packages|grep adb
输出:package:eu.chainfire.adbd

adb uninstall eu.chainfire.adbd

【尝试只改时间】

1
date "01010101" ; date "01010601"

并不能让程序显示奖励窗口(必须先退出这个页面再进入)

并不能让程序显示奖励窗口(必须先退出这个页面再进入)

【进一步的集成】
通过命令行参数决定要循环几次

1
2
3
4
5
6
7
echo 'CNT=10
if [ $# != 0 ] ; then
CNT=$1
fi
for I in $(seq 1 $CNT);do
echo $I/$CNT ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
done' >zen.sh

然后:

1
2
3
4
adb shell
cd /sdcard/_sh
su
. ./zen.sh 20

【手机闹钟BUG级响起】
无解
可以关闭闹钟

【尝试只在date的时候用su执行】

1
2
3
4
5
6
7
8
mkdir /sdcard/_sh
echo 'CNT=10
if [ $# != 0 ] ; then
CNT=$1
fi
for I in $(seq 1 $CNT);do
echo $I/$CNT ; su -c date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; su -c date "01010101" ; input keyevent 3
done' >/sdcard/_sh/zen.sh

完美~
但是会每次date的时候显示“已授予shell超级用户权限”,看着很难受
先su再执行脚本就不会了

可以在电脑上adb shell进去执行脚本,也可以用手机啦

【视频演示】

]]>
- - - - <p>这是一款名字叫“Zen Idle”的游戏。来尝试下自动刷钱</p> -<img src="../../blog-images/2020/adb-auto-make-money/image-20200505094215251.png" alt="image-20200505094215251" style="zoom: 33%;"> - - - - - - - - - -
- - - Why linux - - https://blog.tcpsoft.app/2020/03/why-linux/ - 2020-03-27T17:35:58.000Z - 2020-03-28T05:37:39.960Z - - 学习Linux之前,了解Linux哲学和Linux设计思想是必要的。

然后就是开始敲命令了啦

Linux哲学

知乎:《unix/linux 设计哲学》

https://zhuanlan.zhihu.com/p/57521605

内容太多,不要求完全记住。可以以后回来再翻阅

博客园:Linux的哲学思想

Linux哲学思想:

  1. 一切皆文件;
  2. 小型,单一用途的程序;
  3. 连接程序,共同完成复杂功能;
  4. 避免令人困惑的用户界面;
  5. 配置数据存储在文本中;

解释:
一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行

连接程序,共同完成复杂功能:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的

避免令人困惑的用户界面:如windows那样出了问题一般人选择的会是重启,实在是不行的话就是 重新 安装系统了,因为对于windows那样不是开源的,并且用户界面比较 复杂操作系统出了问题,一般的人是根本没有办法解决的。但是linux就不一样了,第一linux是开源的,无论什么问题都可以通过简洁的命令行实现 排错,修改系统的配置,一切都是简洁明了为基础。

配置数据存储在文本中:linux所有的配置文件都存放在文本配置文件当中,无论什么配置修改都只需修改其配置文件即可,配置文件时文本形式的只需任意一款文本编辑器修改即可而不是类似于windows那样将保存在注册表中,并且windows的注册表需要专门的二进制或十六进制的编辑器才可编辑,修改比较复杂

bilibili:Linux哲学视频资料1:

哲学的魅力 | 非Windows系统家族的魅力之所在:“一切皆文件”

https://www.bilibili.com/video/BV1Yb411g79x

(命令不会没关系,了解一下“哲学”就好)

bilibili:Linux哲学视频资料2

TED-Linux背后的精神 _ Linus Torvalds

https://www.bilibili.com/video/BV1a4411t7Kt?p=1

(一个有英文字幕的双语版本:)

https://www.bilibili.com/video/BV1J7411v7BD


系统目录结构

Linux 里面最重要的概念估计就是“一切皆文件”了,我们来看看Linux系统的根目录结构。

首先是 Linux 不像 Windows 这种,系统里面看起来有多个“盘”,C,D,E,F,什么的,

在 Linux,只有一个“盘”(可以假想成 C盘),但是里面文件夹却有很多。

img

我们来看看菜鸟教程 Linux 部分是怎么说的:

https://www.runoob.com/linux/linux-system-contents.html

其中用得比较多的文件夹也不是很多啦:

1
2
3
4
5
6
7
/dev虚拟的,你的硬件设备会列出在这里
/etc配置文件的集散地
/home用户目录,相当于 Windows 的 %USERPROFILE% (你可以试试把这个输入资源管理器的地址栏回车)
/media一些设备出现在这里
/mnt用于挂载文件系统(插入U盘并挂载后在这里找)(wsl可以在这里访问主系统文件)
/bin | /usr/bin | /usr/sbin 你看到文件出现在这里,那大概率是可执行程序这样的东西了
/var做 web 你会爱死的

Linux终端

终端(Terminal),也叫命令行,顾名思义,输入命令的地方。就是经常见到的黑窗口(当然并不见得都是黑的)

命令行是 Linux 最常见的状态,GUI (Graphical User Interface,图形用户界面) 反而不是

在 Linux 终端干得最多的一件事当然是敲命令了,命令一般是如下格式:

command [-option] parameter1 parameter2...

我们来看几个参考链接:

图示直观的:https://blog.csdn.net/pl0020/article/details/82012881

分析有理的:https://blog.csdn.net/wangjianno2/article/details/16344807

详细深入的:http://c.biancheng.net/view/720.html

这里还想 bb 几句:

  1. Windows Linux都有命令行(Windows早期DOS也是命令行系统),但是操作习惯有些小不同
  2. Windows 参数一般是 /option,Linux 大多是 -option --option
  3. Windows 获取帮助一般是 /? ,Linux 大多是 -h -help --help
  4. Windows 路径以反斜杠 \ 分隔,Linux 路径由正斜杠 / 分隔
  5. Windows 命令行能运行 .bat 批处理脚本,Linux终端能运行 .sh 批处理脚本,语法大部分不同,少数相同

开始背命令吧

必学的少数命令

lsllcdtouchclearpwdmkdircatmore
lesstailcpmvrm(谨慎)findvi/vim|grep
pskillipconfigtarrebootshutdownhaltchmod

这里是一些介绍:https://blog.csdn.net/weixin_44706512/article/details/90604635

菜鸟教程:Linux 命令大全

其他的,少见的,忘了的,可以在这里速查,也可以学习积累:

https://www.runoob.com/linux/linux-command-manual.html

Linux常用命令大全(和用法)

https://www.cnblogs.com/fnlingnzb-learner/p/5831284.html


Q&A

Linux 怎么装?

必应搜索“WSL安装”:https://cn.bing.com/search?q=wsl%E5%AE%89%E8%A3%85

必应搜索“VMware 安装 Linux”:https://cn.bing.com/search?q=VMware+%E5%AE%89%E8%A3%85+Linux

想知道VMware安装详细某版本,把上面 Linux 换成你的对应详细版本即可,如:Ubuntu18.04

发行版这么多,用哪个版本好?

初学者:Ubuntu、deepin。极客:Arch。服务器用户:CentOS。发烧玩家:Steam OS。

哪儿去获取 Linux 镜像?

千万别再去XX下载站了。

必应搜索你想要的系统名字,搜索结果第一条都是官方网站了,一般他们域名都是 系统名.org,这是非营利组织的域名,也有部分是 系统.com,如Ubuntu,因为它包含了商业发行版。

打开网站,在醒目的位置,都能找到 Download 这种东西,仔细寻找,可以找到 .iso 镜像下载链接。如果下载慢,可以使用 国内镜像站 ,他们提供了高速的软件下载和软件源服务,像 清华源阿里云网易等等

我应该使用 root 用户吗?

不建议。应当在系统安装过程中设置好用户名和密码,以后使用需要高权限的命令应该使用 sudosu

]]>
- - - - <p>学习Linux之前,了解Linux哲学和Linux设计思想是必要的。</p> -<p>然后就是开始敲命令了啦 - - - - - - - - - -
- - - 科学地让 OneDrive 飞,下载速度 5Mb/s - - https://blog.tcpsoft.app/2020/03/let-onedrive-fly-scientifically/ - 2020-03-21T07:06:27.000Z - 2020-03-22T04:21:35.300Z - - OneDrive 是 Microsoft 的一个云存储服务,安装后集成在 Windows 资源管理器,所以比其他任何网盘都更有其与生俱来的优势。但由于众所周知的原因,OneDrive 的访问速度也极低。
访问速度慢还不算了,还经常会死在某个进度,一直下不动,这是最**的

image-20200321165324494
你看这 243KB/秒 长得多标致啊

解决方案

  1. ShadowsocksR
  2. Proxifier
  3. 设置 OneDrive 多线程

1. ShadowsocksR

略。

配置好之后应该是会开启 127.0.0.1:1080 ,HTTP、Socks5 均有(没出问题的话默认就是这个配置)

2. Proxifier

搜索Proxifier找到官网:https://www.proxifier.com/download/

image-20200321172127587

下载 Proxifier Standard Edition ,这个是安装版,Portable是绿色版,这里不用绿色版。

下载下来exe双击安装,安装过程中勾选Create a desktop shortcut,完了之后会默认打开软件,关掉它(你也可以在最后一步取消勾选Launch Proxifier)

在桌面快捷方式右键,用管理员权限运行。打开之后是长这个样子的:

image-20200321175935712

选择31天试用,或者输入注册码,如果输入注册码,最好是勾选All userss on this computer(require administrator),然后就会打开程序主界面

image-20200321180424905

我们当然是希望开机启动,所以开启Autostart

image-20200321191843270

通过Profile->Proxy Servers,添加 HTTPS 和 Socks5 代理配置

image-20200321181035454

通过Profile->Proxification Rules,配置软件代理规则

image-20200321182841860

我们在这里添加OneDrive。

先找到OneDrive的可执行文件的位置。一般应该是在%localappdata%\Microsoft\OneDrive\

如果没有,运行OneDrive,打开任务管理器,在详细信息标签页,找到onedrive.exe,右键打开文件所在位置

点击上面窗口的Add,添加配置。点击Browse输入OneDrive目录,选择onedrive.exe,action选择通过socks5代理

image-20200321183611160

保存,并把 default 的 action 设置为 direct(你也不希望所有程序都通过代理对吧)

image-20200321183553240

任务栏里面右键 OneDrive,更多,关闭 OneDrive,再找到刚才的OneDrive程序位置,开启OneDrive。

我们随便下载一个文件看看:

image-20200321191651660

3. 设置 OneDrive 多线程

你好像速度没我快?那肯定是你氪金不够(bushi),那就试试开启 OneDrive 多线程

1
2
3
4
修改这个文件:
"%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"
可通过win r运行,或cmd里运行下面直接打开修改:
notepad "%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"

第一行加入:

1
numberOfConcurrentUploads=3

PS:数值项即为线程数,最小值为1,最大值为3,根据实际需要选择即可

image-20200321193422745

效果:(奇怪的网速增加了)

image-20200321213449574

]]>
- - - - <p>OneDrive 是 Microsoft 的一个云存储服务,安装后集成在 Windows 资源管理器,所以比其他任何网盘都更有其与生俱来的优势。但由于众所周知的原因,OneDrive 的访问速度也极低。<br>访问速度慢还不算了,还经常会死在某个进度,一直下不动,这是最**的</p> -<img src="../../blog-images/2020/let-onedrive-fly-scientifically/image-20200321165324494.png" alt="image-20200321165324494" style="zoom:67%;"> -<div style="text-align:center">你看这 243KB/秒 长得多标致啊</div> - - - - - - - - - - - -
- - - 用 Visual Studio 2019 写 C++ 基础代码 - - https://blog.tcpsoft.app/2020/03/cpp-with-Visual-Studio-2019/ - 2020-03-06T06:30:00.000Z - 2020-03-06T06:45:52.168Z - - 什么?你不会用VS?

准备工作

安装 Visual Studio2019 Community,不多说了,虽然可能出现很多问题。这里假定你已经有安装好的 VS2019。

打开VS,创建项目

打开VS2019,看到如下界面。

image-20200306134632068

选择C++,Windows,选择控制台应用。

image-20200306134730096

填写项目名称和存储位置,点击创建。

image-20200306134821590

然后就会打开工程界面,在右边的解决方案资源管理器,源文件,可以找到刚才填写的名字的cpp文件,双击打开(默认会打开的),在左边正常编写代码,按 F5 运行,或点击上面绿色三角形,“本地Windows调试器”,(可以直接点也可以菜单栏选择调试,开始执行不调试(快捷键Ctrl+F5))

image-20200306134954770

没有“控制台应用”选项?

创建项目窗口,拉到最下面,找到安装

image-20200306135632223

在打开的窗口,勾选安装这三个。(其他的可以根据需要添加)(如果你确实不用VS开发高级应用,只勾选“使用C++的桌面开发”也就可以了)

image-20200306135706897

另外需要注意的是,如果想要图形化设计程序界面,(即MFC),需要在勾选“使用C++的桌面开发”之后,勾选右边的 C++ MFC v142

image-20200306135751221

,然后开始安装即可。可以选择下载时安装(下载一个安装一个),下载完成安装(全部下载完再一起装),我个人偏好后一种

(等待巨长时间,安装完成后再同理创建项目。)

用VS进行简单调试

断点

在需要暂停的代码这一行前面灰色区域鼠标单击,出现一个红色圆点,就是下断点。

image-20200306141237786

F5 开始调试,或点上方“本地Windows调试器”或菜单栏调试,开始调试。

VS界面会发生变化,且之前下断点位置会变成橙色箭头,表示程序当前正在执行这一行代码。此时程序暂停,可以查看变量值和一行一行运行程序。

  • 鼠标悬停在变量上,可以查看变量值。

  • 选中变量,右键,添加监视,可以在下方监视面板自动显示变量值

  • 在代码里鼠标右键,快速监视,输入变量名,可以添加多个变量监视,也可以添加表达式监视,比如a+b+c

image-20200306142152438

单步运行

图示的四个按钮。

  • 显示下一条语句
  • 逐语句
  • 逐过程
  • 跳出

image-20200306142607239

]]>
- - - - <p>什么?你不会用VS? - - - - - - - - - - - -
- - - 群里提问的艺术 - - https://blog.tcpsoft.app/2020/03/how-to-ask-in-group-chat/ - 2020-03-05T15:17:52.000Z - 2020-03-06T17:10:35.817Z - - 现在互联网发达的时代,大家都会有很多的群,xxx 交流群、xxx 技术交流、xxx开发群、xxx技术学习群等,大家的初心可能都是想交流的,遇到点问题然后就可以在群里问。

然而很多时候你问的问题没人回答;也有时候问了半天还是没找到答案;也有时候当你把问题发出来了,别人正准备回答你的时候,你说知道了;然后刚开始群里很活跃,慢慢的就死了。

其实以上问题,都是大家不想看到的,然而在群里提问是我们加入群的初心,但是很多人做不好,最终导致你的问题无人解答,群慢慢的失去意义。

今天我所谈的就是群里提问的艺术,让你的问题快速得到解决。

我将今天的问题分成以下三部分进行介绍:

  • 提问之前
  • 提问之时,怎么提问
  • 注意事项

提问之前

在群里提问之前首先我们应该做好功课,看自己是否完成以下步骤,否则你的提问将一塌糊涂,大概率得不到想要 的答案。

  1. 尝试自己解决
  2. 不能自己解决应该准备的哪些

尝试自己解决

尝试自己解决是非常重要的一步,这也是我们能否经过这个问题能够成长的关键所在。

  1. 通过搜索引擎搜索:baidu 或者 google(推荐),搜索结果中前三页如果找不到你想要的信息,就进行下一步吧。对于成熟的开源项目,你遇到的问题,很可能别人也遇到过。这时通过 Google、StackOverflow 等网站的搜索服务,可以帮你快速定位并解决问题。永远记住,地球上的你并不孤单,包括你遇到的问题。
  2. 查阅手册/文档:确保自己阅读过至少一次官方文档。这样在遇到问题时,如果能回忆起只言片语,就可以再去读一遍相关文档,问题往往也就解决了。
  3. 查阅社区/论坛:阅读常见问题文件(FAQ)或者开源项目的 issue,或者论坛(类似 react china)
  4. 询问朋友:如果你使用的开源软件,在朋友圈或同事圈里也有人使用,那么抬起你的脚、或拿起你的电话,真挚诚恳的探讨不会遭遇拒绝,而会增进友谊。不要犹豫,你的内心渴望面对面交流,你的朋友也是。
  5. 自检并不断测试:试自己检查或试验以找到答案。
  6. 阅读源码(这步非必须):如果你是程序开发者,尽量尝试阅读源码以找到答案。

经过以上 6 步或者 5 步你都无法解决遇到的问题,那么你确实针对这个问题能力有限,准备去群里请教了,那么在尝试自己解决之后无果,应该做哪些准备呢?

不能自己解决应该准备的哪些

  1. 一定要明白自己想要问什么问题:不能自己都说不清自己想要问什么问题,那么群里提问你也问不出什么来。
  2. 梳理准备您的问题:要说明之前你都干了些什么。
  3. 要用言简意赅的语言:这个是我们作为职场一个必备的技能,说重点,言简意赅。

怎么提问

抱着平和对等的心态,找到合适的途径后,就得静下心来将遇到的问题写成文字。书写文字不是一件简单的事情,我们可以从遵循一些简单的规则开始。

用词准确,问题明确

标题要简洁清晰,要言之有物。

Bad:救命呀/急/跪求,遇到了一个 react 问题,xxx 组件渲染不出来

Good:在使用 xxx 版本的 react ,我操作了 xxx,也写了 xxx,但是 xxx 组件渲染不出来

一个好标题范例是目标 —— 差异式的描述,许多技术支持组织就是这样做的。在目标部分指出是哪一个或哪一组东西有问题,在差异部分则描述与期望的行为不一致的地方。

描述清晰,信息充足

  1. 准确有效的信息:描述事实,而不是猜测,如果你想给出你的猜测,一定要先描述事实,给你的猜测一些证据,不然就不要猜测。
  2. 问题表现/内容:按照时间顺序列出问题症状。问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。
  3. 简单的做过什么尝试:在描述你做过什么尝试的时候,简单的你描述你做了哪些尝试就行,为什么要这么做其实不是那么重要。

如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标,然后才陈述重现你所卡住的特定步骤。

经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

玉伯有句话是这么说的:

提问者选择的路本身就是一条崎岖之路,对于要解决的问题,实际上有更好的方式。这种情况下,描述清楚目标,讲清楚要干什么非常重要。

  1. 想要问到什么:提供建议?发送一段代码?检查你的补丁或者别的?在群里经常会出现这种情况,当某个人发了一段文字,另外的人说:你想问什么?

所以我们在问问题的时候一定要把你想要问到什么,这个目标想清楚。

  1. 提供尽量多的信息:尽量提供可重现的例子,你可以在 jsbin)、runjsjsfiddle)、codepen 等这些地方提供一个可重现的例子。即使你是一个很大的项目,想办法把你需要验证的点提取出来,如果确实无法提取,就贴一些代码,出现问题那行代码周围的代码(周围的相关代码都要,因为你可能觉得不是他们的问题,但也许就是,不然你觉得的都是对的,你就不会不知道怎么解决了)。

避免一些毫无意义的问题

经常会有人问一些毫无意义的问题,比如这样的:

Bad:有没有人会xxx?

Bad: 有没有人在?

Bad: 谁能帮我解决一个问题?

面对这种问题,别人就很难预估你这个问题需要解决多久,也很难判断自己是否能解决这个问题,如果他回答了你,意味着你就是有空而且很在行,所以他还是选择不出声。这个就跟微信私聊的时候说:”在吗?“ 这种一个意思。

Bad: 什么是 JavaScript?

这种问题也是,很明显通过搜索引擎就能搞定的,要是下次还有这种问题,你就把这个图发给它。

img

建议的问法:

  1. 有问题直接问。比如:ES6什么时候雄霸天下,前端什么时候一统江湖?
  2. 直接说场景:我在做xx端东西的时候,在 window 7 平台的 IE7 版本下遇到了左右不对齐问题,具体如图所示img,代码地址:http://www.jsbin.com/xxxx,在百度中找到的答案,试了之后还是有同样的问题。请有空的同学帮我看看是什么问题?

注意事项

  • 提前做好冷场的准备:也许别人在忙,也许这个问题太简单了,也许没人做过这块,如果冷场了,没人回答,赶紧换下一个群。
  • 谦虚,别人没有义务帮你解决问题,往往大牛的时间比你少,比你珍贵。
  • 没有一定的自学能力,问到问题就伸手的不适合玩这个。
  • 群唯一的作用就是:扯淡、交流、分享,以上几条为前提。

如果觉得问题记不住,收藏一下这个图吧:

img

最后

其实对于问问题,我们换位思考一下就更好了,这其实也是人际交往的方式,站在看你提问题的角度,想想当别人提问题的时候,你想让他问什么,你才愿意去回答。

当然除了在群里提问,在社区里提问,论坛里提问都有一定的规范,后面再慢慢补充吧。


版权属于:桃翁

本文链接:http://taoweng.site/index.php/archives/215/

转载时须注明出处及本声明,欢迎关注我的公众号「前端桃园」

.

(这真就原封不动的照搬呗)


《提问的智慧》

另外还想再贴一个,最经典的,最最经典的(也最长最复杂的):

《提问的智慧》,来自 Github 。其实最初是 Eric S. Raymond, Rick Moen 创作的,然后 ryanhanwu 翻译了并放在 Github 上作为一个开源项目,截止本文写作时,该项目已有 10.2k Star,2.8k Fork。

另外,由于这个是国外作者创作的,所以其中出现的案例论坛等一般是国外常见论坛,也可以了解一下。

【警告】:本文十分冗长,建议在有闲暇时间时仔细浏览。

https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

]]>
- - - - <p>现在互联网发达的时代,大家都会有很多的群,xxx 交流群、xxx 技术交流、xxx开发群、xxx技术学习群等,大家的初心可能都是想交流的,遇到点问题然后就可以在群里问。</p> -<p>然而很多时候你问的问题没人回答;也有时候问了半天还是没找到答案;也有时候当你把问题发出来了,别人正准备回答你的时候,你说知道了;然后刚开始群里很活跃,慢慢的就死了。</p> -<p>其实以上问题,都是大家不想看到的,然而<strong>在群里提问</strong>是我们加入群的初心,但是很多人做不好,最终导致你的问题无人解答,群慢慢的失去意义。</p> -<p>今天我所谈的就是<strong>群里提问的艺术</strong>,让你的问题快速得到解决。 - - - - - - - - - -
- - - 2020 高考加油 - - https://blog.tcpsoft.app/2020/02/2020gaokaojiayou/ - 2020-02-28T00:00:00.000Z - 2020-02-28T11:26:22.790Z - - 2020-02-28,距离 2020高考还有100天。

]]>
- - - - <p>2020-02-28,距离 2020高考还有100天。</p> - - - - - - - - - -
- - - 吾爱破解入门帖子 - - https://blog.tcpsoft.app/2020/02/getting-start-52pojie/ - 2020-02-22T16:40:00.000Z - 2020-02-22T16:53:57.174Z - - 今日探索吾爱破解论坛,整理了两篇入门指导文章,当备忘录了

内容来自:吾爱破解 论坛


吾爱破解论坛官方入门教学培训第一期开始啦!【已更新到第十课】

培训课表–讲师:

《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》

讲师:Hmily,链接:http://www.52pojie.cn/thread-378612-1-1.html

《吾爱破解培训第二课:实战去广告、弹窗及主页锁定》

讲师:Kido,链接:http://www.52pojie.cn/thread-384195-1-1.html

《吾爱破解培训第三课:改头换面之修改版权和资源》

讲师:Kido,链接:http://www.52pojie.cn/thread-389996-1-1.html

《吾爱破解培训第四课:击破程序最坚固的堡垒–实战去程序自校验》

讲师:小生我怕怕,链接:http://www.52pojie.cn/thread-392395-1-1.html

《吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证》

讲师:我是用户,链接:http://www.52pojie.cn/thread-396068-1-1.html

《吾爱破解培训第六课:潜伏在程序身边的黑影–实战给程序补丁》

讲师:我是用户,链接:http://www.52pojie.cn/thread-405758-1-1.html

《吾爱破解培训第七课:手把手教你从实例看如何攻破常见的网络验证》

讲师:珈蓝夜雨,链接:http://www.52pojie.cn/thread-408475-1-1.html

《吾爱破解培训第八课:短兵相接–深入浅出探讨脱壳细节(上)》

讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

《吾爱破解培训第九课:短兵相接–深入浅出探讨脱壳细节(下)》

讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

《吾爱破解培训第十课:探寻逆向新航标—x64平台脱壳与破解实战》

讲师:Kido,链接:http://www.52pojie.cn/thread-422192-1-1.html

视频下载:

360云盘下载:
https://yunpan.360.cn/surl_y3GCKpiI2fX 提取码:7693

百度网盘下载:
链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg 提取码: e2su

爱盘下载:
http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/

解压密码(请使用新版7z解压缩):
www.52pojie.cn









零基础新手破解学习指导教程

吾爱破解论坛官方入门培训:http://www.52pojie.cn/thread-349073-1-1.html
整理一些论坛脱壳破解相关入门教程及需要用到的相关工具,方便新手同学查看学习

工欲善其事必先利其器,下面是破解需要用到的工具

OllyDbg(OD):http://www.52pojie.cn/thread-350397-1-1.html
PEIDhttp://www.52pojie.cn/thread-170387-1-1.html
Exeinfo PEhttp://www.52pojie.cn/thread-169779-1-1.html
樱花补丁制作工具:http://www.52pojie.cn/thread-62307-1-1.html
内存补丁生成器:http://www.52pojie.cn/thread-162411-1-1.html
注册机生成器:http://www.52pojie.cn/thread-159470-1-1.html
IDA Pro v6.5:http://www.52pojie.cn/thread-284145-1-1.html
破解工具包http://www.52pojie.cn/thread-190698-1-1.html
吾爱云盘【最牛逼的在线工具包】:http://down.52pojie.cn/Tools/

也可以点击下面的连接进去逆向资源区寻找工具哦

Android | Tools安卓程序逆向所用到的相关工具
Debuggers动态调试工具
Disassemblers反编译工具(静态分析为主)
PEtoolsPE文件分析相关工具
Packers给程序加壳相关工具
Patchers给程序做补丁相关工具
Editors程序资源编辑、文本操作相关工具
Crptography算法相关工具
Unpackers脱壳机相关
Dongle加密狗相关
.NET微软.Net程序逆向相关工具
OllyDbg | 1.x | Plugin动态调试工具OllyDbg | 1.x的插件程序
OllyDbg | 2.x | Plugin动态调试工具OllyDbg | 2.x的插件程序
IDA | Plugin反编译工具IDA的插件程序
Other其他相关程序

NO.1

Hmily 【初学者教程】破解基础知识之认识壳与程序的特征。
新手一看教程就在说程序破解应该先脱壳,那到底程序有没有加壳?加了什么壳?看看大H的文章你就懂了!
http://www.52pojie.cn/thread-234739-1-1.html

NO.2

ximo 脱壳教程(24集全)
http://pan.baidu.com/s/1cebVOU 密码: fxia
http://down.52pojie.cn/吾爱破解视频教程/ximo脱壳基础.7z
来自吾爱破解论坛LCG组织成员也是VMP脱壳插件作者ximo做的脱壳教程,堪称经典,入门脱壳必学!
压缩包为7Z格式,7Z官方网站

NO.3

小生我怕怕 脱壳练习系列附带对应文章的动画视频教程,方便学习交流脱壳知识。
教程对应动画视频:http://www.52pojie.cn/thread-11642-1-1.html

[编者注]:视频爱盘下载地址:https://down.52pojie.cn/吾爱破解视频教程/吾爱破解脱壳练习系列动画/

吾爱专题脱壳练习一—-压缩壳练习之一:http://www.52pojie.cn/thread-10496-1-1.html
吾爱专题脱壳练习二—-压缩壳练习之二:http://www.52pojie.cn/thread-10607-1-1.html
吾爱专题脱壳练习三—-压缩壳练习之三:http://www.52pojie.cn/thread-10688-1-1.html
吾爱破解脱壳练习四——简单加密壳:http://www.52pojie.cn/thread-10850-1-1.html
吾爱专题脱壳练习五—-upx壳:http://www.52pojie.cn/thread-10990-1-1.html
吾爱专题脱壳练习六—-TElock V0.99 :http://www.52pojie.cn/thread-11112-1-1.html
吾爱专题脱壳练习七—-ORiEN:http://www.52pojie.cn/thread-11244-1-1.html
吾爱专题脱壳练习八—-MoleBox V2.6.5:http://www.52pojie.cn/thread-11306-1-1.html
吾爱专题脱壳练习九—-CRYPToCRACk’s PE Protector:http://www.52pojie.cn/thread-11446-1-1.html
吾爱专题脱壳练习十—-PESpin 1.32:http://www.52pojie.cn/thread-11585-1-1.html
吾爱专题脱壳练习十一—-VB自效验的处理:http://www.52pojie.cn/thread-11747-1-1.html
吾爱专题脱壳练习十二—-delphi自效验的处理:http://www.52pojie.cn/thread-11883-1-1.html
吾爱专题脱壳练习十三—-GHF Protector V1.0:http://www.52pojie.cn/thread-12011-1-1.html
吾爱专题脱壳练习十四—-Armadillo 6.04:http://www.52pojie.cn/thread-12135-1-1.html
吾爱专题脱壳练习十五—-ACProtector系列保护:http://www.52pojie.cn/thread-12279-1-1.html
吾爱专题脱壳练习十六—-ACProtector系列保护:http://www.52pojie.cn/thread-12362-1-1.html
吾爱专题脱壳练习十七—-PEBundle 2.0b5 - 3.0x:http://www.52pojie.cn/thread-12498-1-1.html
吾爱专题脱壳练习十八—-Armadillo 4.40:http://www.52pojie.cn/thread-12620-1-1.html
吾爱专题脱壳练习十九—-PUNiSHER 1.5:http://www.52pojie.cn/thread-12822-1-1.html
吾爱专题脱壳练习二十—-未知壳一:http://www.52pojie.cn/thread-12936-1-1.html
吾爱专题脱壳练习二十一—-未知壳二:http://www.52pojie.cn/thread-13494-1-1.html
吾爱专题脱壳练习二十二—-未知壳三:http://www.52pojie.cn/thread-13770-1-1.html

NO.4

我是用户 破解实战(10集全)
破解实战演练教程
第一战:http://www.52pojie.cn/thread-197281-1-1.html
第二战:http://www.52pojie.cn/thread-197598-1-1.html
第三战:http://www.52pojie.cn/thread-197957-1-1.html
第四战:http://www.52pojie.cn/thread-198203-1-1.html
第五战:http://www.52pojie.cn/thread-198365-1-1.html
第六战:http://www.52pojie.cn/thread-198930-1-1.html
第七战:http://www.52pojie.cn/thread-199459-1-1.html
第八战:http://www.52pojie.cn/thread-199834-1-1.html
第九战:http://www.52pojie.cn/thread-200655-1-1.html
第十战:http://www.52pojie.cn/thread-200798-1-1.html

NO.5

Blue .NET系列教程(4集全)
图文教程分析.net程序!
第一课 http://www.52pojie.cn/thread-248348-1-1.html
第二课 http://www.52pojie.cn/thread-249034-1-1.html
第三课 http://www.52pojie.cn/thread-250626-1-1.html
第四课 http://www.52pojie.cn/thread-250633-1-1.html

NO.6

去软件弹窗系列教程(共两集)
第一课 http://www.52pojie.cn/thread-316180-1-1.html
第二课 http://www.52pojie.cn/thread-323346-1-1.html

NO.7

R4ndom破解教程全文翻译(共七集)
第一课 http://www.52pojie.cn/thread-344925-1-1.html
第二课 http://www.52pojie.cn/thread-345839-1-1.html
第三课 http://www.52pojie.cn/thread-346455-1-1.html
第四课 http://www.52pojie.cn/thread-350727-1-1.html
第五课 http://www.52pojie.cn/thread-352818-1-1.html
第六课 http://www.52pojie.cn/thread-354029-1-1.html
第七课 http://www.52pojie.cn/thread-355207-1-1.html

希望大家在本论坛发现新手容易理解的系列教程通知我,我会陆续加进来。(转载的朋友请标注:吾爱破解原创作品)

]]>
- - - - <p>今日探索吾爱破解论坛,整理了两篇入门指导文章,当备忘录了</p> -<p>内容来自:<a href="http://www.52pojie.cn/" rel="external nofollow noopener noreferrer" target="_blank">吾爱破解</a> 论坛 - - - - - - - - - -
- - - 科学地让 Git 飞,git clone 速度 5Mb/s - - https://blog.tcpsoft.app/2020/02/let-git-fly-scientifically/ - 2020-02-13T17:46:15.000Z - 2020-03-21T08:40:38.967Z - - 写本文原因:Git 太慢。看最后,14 KiB/s

image-20200214101358632

首先拥有一个代理服务器

代理分为正向代理和反向代理,

正向代理就是代理用户端,改变用户端的身份(IP)。

反向代理就是代理服务端,改变服务器的身份(IP)。

目前的代理大多数用的都是正向代理。

获得服务器方法很多,不讲了,然后你就可以通过软件转发流量来进行“代理”

这里使用 ShadowsocksR 配置一个本地 HTTP 代理。

然后,设置代理

运行SSR,在软件中添加已获得的服务器,然后进行一些常见的设置如 PAC 。

Tips:PAC:Proxy Auto Config

然后 Win + R ,输入 inetcpl.cpl 或是找到系统设置里面的代理设置,可以看到类似这样子的界面:

image-20200214104604088

这样子就是说明本地 1080 端口正在被代理软件使用。

然后,修改 Git 配置

git 客户端可以使用代理来改善连接速度,Git 的所有配置都是存储在一个文件中的,可以通过修改配置文件或者通过 Git 命令行来修改配置。

Git 命令行主要有几种存在形式:

  • Windows命令行调用,主要是Windows安装版 Git 或在有 Git 的文件夹中运行 Git
  • 软件自带的 Git,这种多是在开发工具或 IDE 中,提供一个 Git 的命令行,如 Visual Studio、Git desktop 等,可能是自带了一份 Git 副本,可能是调用系统的 Git。
  • Linux 系统中的 Git ,Linux 系统大多自带 Git 命令

Git 的配置文件是一个名字叫 .gitconfig 的文件,上述的第1、3种的配置文件比较好找,第二种就存在不确定性。

在Windows中,.gitconfig%userprofile% 文件夹,即用户文件夹。用notepad++ 打开,看起来像这样子:

image-20200214111535140

在Linux中,.gitconfig~ 文件夹,即用户文件夹,看起来像这样子:(截图为 WSL Ubuntu16.04 + Windows Terminal )

image-20200214113002933

已知本地端口的情况下,(比如我的是1080),可以配置文件手动添加如下内容:

1
2
3
4
[http]
proxy = http://127.0.0.1:1080
[https]
proxy = http://127.0.0.1:1080

注意修改后格式像图中即可

另一种方式是在 Git 命令行设置,上面的三种情况都可以使用。

打开命令行,输入:

1
2
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080

如果要取消代理设置,输入:

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

(打开配置文件会发现对应的也自动修改好了)

然后就可以打开命令行开始 git clone 辣。

请注意 Github 的两种 clone 方式的区别:

https 方式,是通过本地的 http 链接,是会通过代理软件的

ssh 方式,是通过 ssh.exe 收发流量,不会通过代理软件,所以依然很慢

(截图为我开始 ssh 方式 clone 的时候,网络防火墙提示 ssh.exe 联网)

image-20200214125336775

用 https 方式速度就会达到接近带宽的峰值。比如我们来 clone 一个 ctf-wiki

image-20200214133923497

]]>
- - - - <p>写本文原因:Git 太慢。看最后,14 KiB/s</p> -<p><img src="../../blog-images/2020/let-git-fly-scientifically/image-20200214101358632.png" alt="image-20200214101358632"></p> - - - - - - - - - - - -
- - - 无中生有访问 Google - - https://blog.tcpsoft.app/2020/02/access-google-from-nothing/ - 2020-02-13T08:33:07.000Z - 2020-03-06T17:09:31.335Z - - 由于众所周知的原因,[数据删除] 。并且在搜索引擎方面,Google 也是搜索知识的一个优秀工具。

关于搜索引擎之间的瓜葛,Baidu、Bing、Google 究竟谁优谁劣,以后我有空的话再来谈这个话题,欢迎和我 issue 交流。

今天就来介绍一下如何“无中生有访问 Google”。

一个“不存在的” chrome 插件

能访问 Google,当然是多亏了一个插件,名字叫做“谷歌上网助手”,它大概长这个样子:

image-20191113170312

可以在 Google 网上应用点搜索到,然后点击“添加至Chrome”按钮就可以添加插件了

https://chrome.google.com/webstore/detail/谷歌上网助手/nonmafimegllfoonjgplbabhmgfanaka

它的介绍文字是:

专门为科研、外贸、跨境电商、海淘人员、开发人员服务的上网加速工具,chrome内核浏览器专用!可以解决chrome扩展无法自动更新的问题,同时可>以访问谷歌google搜索,gmail邮箱,google+等谷歌产品

简单易用的《谷歌上网助手》,可以解决chrome扩展无法自动更新的问题,同时可以访问谷歌google搜索,gmail邮箱,google+等谷歌服务。

《谷歌上网助手》一键安装,无需其他配置,即可访问谷歌。

使用本插件可以免费上:

  • google.com 谷歌搜索
  • mail.google.com gmail邮箱
  • chrome商店访问

当然,以上链接是不存在的。

无中生有?

chrome 的插件是一个后缀名为 .crx 的文件,文件结构与 zip 相同,这意味着,你可以用压缩软件打开 .crx 文件。

我们有了 crx 文件,就可以添加到 chrome 浏览器了。

从哪儿去得到 crx 文件?从 Google 应用商店。当然,Google 应用商店是不存在的。

更新:插件官网也可以下载,快速下载方式请直接翻到文尾“#写在后面”部分,再从此处继续阅读。

这里介绍一个网站,可以看作 Google应用商店翻版,也就是镜像站。https://www.gugeapps.net/

我的网站也提供了一个副本(划掉)谷歌上网助手.zip ,如果添加 chrome 失败请转至下面方法下载,

bing 搜索 gugeapps.net,第一个链接是 www.gugeapps.net 就是了

打开是长这个样子的:

image-20191114102230

我们可以在这里的搜索框搜索谷歌上网助手,回车搜索,或者在 bing 搜索 谷歌上网助手 site:gugeapps.net 第一个就是对应的页面了。

image-20191114102822

这里不能直接安装到 chrome ,点击下载按钮,转到页面底端开始下载。

下载完成后会出现红色提示,保留就可以了
image-20191114102910

Ps:最新的下载下来好像后缀名是 zip ,不过不影响后续操作。

然后在文件夹中打开,可以看到文件夹里面有个 .crx 文件了

image-20191114103010

导入

一般来说,crx 可以直接拖入 chrome 的扩展程序页面,会提示是否添加插件,确定添加就可以添加,不过,对于自己下载的插件,大多数是不行的,会提示“程序包无效”,

image-20191114103110

不能导入?

这里需要通过 chrome 的开发者模式,添加插件。

首先打开 chrome 的扩展程序页面:chrome://extensions ,开启页面右上方的“开发者模式”开关。

然后点左边的“加载已解压的扩展程序”

image-20191114103117

切换到刚才的下载文件夹,复制一份 crx 文件,后缀名改为 zip ,随后解压到压缩文件同名文件夹。

如果看不到后缀名,在查看这里把文件扩展名选项勾选。

image-20191114103616

切换到 chrome 的选择文件夹窗口,打开刚才的文件夹,可以看到文件夹里面的结构是

1
2
3
_locales
_metadata
assets

然后添加文件夹。

image-20191114103357

回到 chrome ,就可以看到新插件添加成功,

可以看到有提示错误,但是可以用,

可以看到, chrome 右上方增加了一个插件的图标了

同时可以看到图标下面有一个标志,鼠标悬浮提示:“未封装的扩展程序”。

另外,如果关闭 chrome 再打开,会提示移除插件,所以正常使用起来的话,还是有一些麻烦的

image-20191114104215

点击右上角图标,会弹出插件菜单,首次需要注册登录,在登录页面找到新用户注册,填入邮箱和新账户密码注册

image-20191114104439

然后进入插件 控制面板 ,有红色提示“邮箱未激活”,此时前往邮箱,点击新收到的邮件激活账户即可

image-20191114104528

再点开插件菜单,把开关打开即可

image-20191114104755

然后 www.google.com 可以访问了。

image-20191114104855

后续操作

关闭浏览器再打开就会提示“请停用以开发者模式添加的插件”,影响使用,所以需要再“操作”一下

Ps:如果没有注册登录插件,现在的新版浏览器是直接移除插件,影响使用,所以需要再“操作”一下

image-20200213214020573

这个提示框每次打开 chrome 都会弹出,极其 讨厌。

我们可以通过:从 Google 应用商店安装正规插件,的方式,替换这个插件,就不会再提示辣

打开 Google网上应用店 https://chrome.google.com/webstore/category/extensions

搜索 谷歌上网助手 ,找到第一个就是正规插件(开发版也可以用),点“添加至 chrome”按钮就可以添加,点添加扩展程序 按钮

image-20200213214703542

接着我们可以看到 chrome 左下方出现了一个 crx 下载进度条,但是这个下载完之后并不会提示下载完成,会自动消失(在下载记录也不会留下记录),而是自动安装

image-20200213214909741

然后会看到页面里面“谷歌上网助手”变成了“已添加”,“添加至chrome”变成了“评分”,就是安装完成了

image-20200213215254798

然后需要删除旧插件,打开插件管理页面,chrome://extensions/

也可以在右上角插件图标处鼠标右键,管理扩展程序,然后返回按钮

找到刚才提示“未封装的扩展程序”的插件,删除,

image-20200213215852988

点击右上角新安装的插件的图标,弹出登陆页面,进去再用刚注册的账号登陆一次就可以了

至此,全部安装完成!

写在后面

插件官网:http://googlehelper.net/ ,也可以在这里下载 zip 然后按上述方法导入

image-20200213221452052

点击 download ,下载此网站最新插件压缩包,也可以下载我保存的副本, Ghelper2.0.4.all.zip

压缩包解压之后可以看到:

1
2
3
ghelper_source
Ghelper2.0.5.crx
中国大陆安装方法.txt

其中 ghelper_source 和上文提到的解压后文件夹是一样的,

其中的 crx 文件可以用于直接拖拽导入插件(2020/02/13测试这个crx可以直接导入没有问题)

点击此处回到 “无中生有?” 部分继续阅读

]]>
- - - - <p>由于众所周知的原因,[数据删除] 。并且在搜索引擎方面,Google 也是搜索知识的一个优秀工具。</p> -<p>关于搜索引擎之间的瓜葛,Baidu、Bing、Google 究竟谁优谁劣,以后我有空的话再来谈这个话题,欢迎和我 issue 交流。</p> -<p>今天就来介绍一下如何“无中生有访问 Google”。 - - - - - - - - - - - - - - - -
- - - Wooyun.org lives on Github - - https://blog.tcpsoft.app/2020/02/wooyun-on-github/ - 2020-02-11T12:11:21.000Z - 2020-02-13T15:52:27.920Z - - 翻阅 Wooyun ,然后找到了Github上。。。不得不说,Github 上确实有大量镜像资源

在这里做一个总结吧。按 Star 排序,把每个库的 Readme.md 剪辑到了这里。

文尾有彩蛋!



No.1 https://github.com/hanc00l/wooyun_public

Watch:224___Star:3586___Fork:1.8k

wooyun_public

乌云公开漏洞、知识库爬虫和搜索
crawl and search for wooyun.org public bug(vulnerability) and drops

1.wooyun公开漏洞爬虫版

index

search

源自2016年6月底使用scrapy爬虫爬取的4W公开漏洞和知识库,虚拟机为ubuntu14.04,采用python2+mongodb+flask(tornado)和Elasticsearch搜索引擎。

虚拟机下载地址:

https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)

安装、使用指南(点我)

2.wooyun公开漏洞纪念版

index_final

search_final

漏洞信息和代码来自于m0l1ce的wooyun_all_bugs_8.8W,包含8.8W漏洞信息(不含知识库);搜索和漏洞信息代码位于wooyun_final,对代码进行了部份修改:

  • 修改了搜索功能,支持多关键字搜索和在漏洞详情中搜索
  • 修改了离线图片文件的位置,搜索结果直接使用虚拟机中的离线图片
  • 修改了代码以适应PHP5.6及更新版本

虚拟机为ubuntu16.04,PHP5.6+MySQL5.7+Apache2。虚拟机下载地址:
https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)

虚拟机用户名、密码为hancool/qwe123

3.其它

  • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。


No.2 https://github.com/Xyntax/1000php

Watch:31___Star:759___Fork:481

1000php

1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

说明

  • 数据取自3.8W乌云已公开漏洞(截至2016.7)
  • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
  • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
  • 愿乌云早日回归


No.3 https://github.com/starnightcyber/1000php

Watch:1___Star:759___Fork:481

1000php

1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

在原来的基础上Xyntax/1000php添加了简单的漏洞索引,并且加入了原css文件,方便查看

Sample

wooyun-index

点击其中某个漏洞,查看

bug

刚才试过了,直接打开index.html好像并不会简单按照我们的意愿显示,可以重新再执行一下代码:

python script.py

这样会重新生成index.html,在本地打开应该就没有问题,另外可能会出现乱码,可以用谷歌浏览器打开。

说明

  • 数据取自3.8W乌云已公开漏洞(截至2016.7)
  • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
  • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
  • 愿乌云早日回归


No.4 https://github.com/jiji262/wooyun_articles

Watch:27___Star:640___Fork:506

wooyun_articles

drops.wooyun.org 乌云Drops文章备份

(乌云网站已经离我们而去,可能再也不会回来了!谨以此纪念乌云!)

线上版本

(已更新图片)

https://wooyun.js.org/

线上版本源码

https://github.com/jiji262/wooyun_articles/tree/gh-pages

关于branches

gh-pages

https://wooyun.js.org/ 源码。

由于wooyun服务器已经无法访问,所以文章中图片已经无法显示。所幸,之前已经将图片抓取下来,可以在这里查看所有图片。

master

目录如下:

wooyun.js:用于抓取 drops.wooyun.org 上文章的脚本;

drops:抓取下来的文章原文;

image_download:单独下载文章中图片的方法, bagpipe_versionasync_version为多并发下载图片的解决方案。

Todo

[x]更新本地图片链接到文章中



No.5 https://github.com/boy-hack/wooyun-payload

Watch:12___Star:465___Fork:90

WooYun-Payload

从乌云漏洞库中提取的扫描规则,内容介绍: https://mp.weixin.qq.com/s/9RHVsw-HtAfo1UuPAqXZEw

Burpsuite 辅助插件

通过http请求包中域名,路径,参数等获取乌云历史漏洞中类似的数据。

wooyunpayload

数据说明



No.6 https://github.com/m0l1ce/wooyunallbugs

Watch:21___Star:398___Fork:154

wooyunallbugs

wooyun_all_bugs_8.8W


链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw

代码在bugs文件里
ps:php version 5.3
库解压到wooyun库里即可
ps:注意修改数据库连接密码 conn.php


ps:图片资源解压到根目录/upload/下 本地绑定下host 你的图片服务器 static.loner.fm
static.loner.fm 不会关掉的 大家可以放心使用

漏洞查询链接 www.loner.fm/bugs/



No.7 https://github.com/SuperKieran/WooyunDrops

Watch:13___Star:346___Fork:243

Wooyun Drops

DEMO: https://wooyun.kieran.top

静态版乌云 Drops

OPTIONS:
1.默认开启 https,如果不需要可以在 index.html 删掉
2.图片依赖于 https://github.com/SuperKieran/wooyun-img

全文搜索有想法还但没想好怎么做
最先想到的自然是写个后台,搜搜搜就完工了,但这不太方便
静态页面的搜索 我暂时没有好的方案,如果有好的想法的话可以在 issue 里提



No.8 https://github.com/SuperKieran/wooyun-img

Watch:0___Star:20___Fork:33

WooYun Drops 图片库

DEMO: https://superkieran.github.io/WooyunDrops
Github: https://github.com/SuperKieran/WooyunDrops
(编者注:图片在gh-pages分支)



No.9 https://github.com/grt1st/wooyun_search

Watch:22___Star:327___Fork:157

乌云公开漏洞、知识库搜索

index

search

author

0x00.介绍

  • 灵感来源于hanc00l的github项目wooyun_public

  • wooyun_public基于flask或者tornado,而本项目可以布置在apache、nginx等web服务器上。

  • 如果你有wooyun的静态网页数据,那么我们可以开始了!

  • 整个项目包括两个部分,第一部分是索引,将网页信息存储进数据库;第二部分是搜索,从数据库中查找信息。轻量级,支持进行二次开发。

  • 静态网页网盘链接:

    1
    2
    bugs   链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
    drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)

0x01.依赖组件及说明

  • python 2.7和pip

  • python依赖:MySQLdb,lxml(推荐)

  • mysql,php及任意web服务器(php需开启pdo-mysql模块

  • 将本项目放进web服务器目录下,bugs目录下为漏洞库文件,drops目录下为知识库文件。

    1
    2
    3
    4
    5
    6
    7
    8
    文件说明:
    app_bugs.py bugs的索引,依赖lxml
    app_drops.py drops的索引,依赖lxml
    index.html 搜索的主页
    search.php 执行搜索的页面
    config.php php配置文件
    ./bugs bugs静态文件的目录
    ./drops drops静态文件的目录

0x02.索引配置

  • app_bugs.py为建立bugs索引的脚本,app_drops为建立drops索引的脚本。

  • 因为python脚本中open()函数打开的文件名不能为中文,建议将drops目录下的中文文件名改为英文(例如,安全运维-xxxx.html=>safe-xxxx.html)

  • python脚本运行前需要修改如下语句,更改参数如主机、端口号、用户名、密码。

    1
    conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='',db='wooyun',charset='utf8')
  • 在mysql中建立数据库wooyun,数据表bugs、drops,分别建立字段title,dates,author,type,corp,doc与title,dates,author,type,doc。

    1
    2
    3
    CREATE DATABASE `wooyun` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    create table bugs(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),corp CHAR(255),doc VARCHAR(200) PRIMARY KEY);
    create table drops(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),doc VARCHAR(200) PRIMARY KEY);
  • 注意mysql编码如下,需要为utf-8(character_set_server不为utf-8要修改mysql配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use wooyun;
    show variables like 'character%'; #查看编码
    +--------------------------+----------------------------+
    | Variable_name | Value |
    +--------------------------+----------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    如果编码错误会报错,比如:

    1
    2
    Warning: Incorrect string value: '\xE5\xBB\xB6\xE9\x95\xBF...' for column 'title' at row 1
    cur.execute("INSERT INTO `drops`(`title`,`dates`,`author`,`type`,`doc`) VALUES(%s,%s,%s,%s,%s)", tmp)

    在mysql里查看会发现有一堆???

  • 之后就可以建立索引了

    1
    2
    sudo python ./app_bugs.py
    sudo python ./app_drops.py
  • bugs数目为40280,drops数目为1264

    1
    2
    3
    use wooyun;
    select count(*) from bugs;
    select count(*) from drops;

0x03.搜索配置

  • 修改config.php中修改如下语句中参数,分别是主机、端口、用户名、密码与数据库。

    1
    2
    3
    4
    5
    $config['host'] = '127.0.0.1';
    $config['port'] = '3306';
    $config['user'] = 'root';
    $config['passwd'] = '';
    $config['database'] = 'wooyun';
  • index.html与search.php样式来自于前端静态资源托管库。f12进入开发者模式,如果样式文件访问不到可以使用本地或cdn的样式(bootstrap3.3.7、jquery3.1.0)。只需要更改两个网页里面的如下内容。

1
2
3
<link href="//lib.baomitu.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="//lib.baomitu.com/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript" src="//lib.baomitu.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
  • 为了防止因为web服务器配置不正确,导致访问http(s)://example.link/bugs/或者http(s)://example.link/drops/而进入index of页面泄露所有文件,在目录下放置内容为空的index.html即可。

  • linux下由于selinux可能会导致无法连接数据库,可以使用如下命令:

    1
    2
    getenforce   //查看selinux状态
    setenforce 0 //暂时关闭selinux

0x04.问题

  • drops很奇怪的会都需web目录下的js而不是本身目录里的js,所以drops的页面会有些乱。开发者模式看一下,缺少的js为web目录/static/drops/css与web目录/static/drops/js。新建目录再把drops下的css、js文件夹复制过去即可

0x05.更新日志

  • 2016.10.08更新:上传了bugs.py。由于bugs部分页面(约143条)的author带有js,正则匹配出的信息出错,所以上传了bugs.py用于修正,在app.py后执行,python bugs.py。(2016.11.09已修正,无需执行bugs.py)

  • 2016.10.10更新:重写了search.php和search.css,基本适配了各种浏览器和移动端。

  • 2016.11.09更新:匹配索引将BeautifulSoup换成了lxml,运行速度更快。优化了匹配(感谢@tuola)。

  • 2017.01.01更新:增加了作者搜索,优化了分页逻辑。

  • 2017.3.7更新:重写了前端,优化了php代码。

  • 欢迎反馈问题。可以提问issue也可以通过grt1stnull@gmail.com联系我。后续也会进行其他细节优化。

0x06.后记

  • 本来打算把wooyun_public布置在我的树莓派上,因为一些原因失败,所以萌生了自己搭建的念头

  • 总共搭建了十天,接触了js、bootstarap、beautifulsoup、mysqldb、mysqli和pdo。虽然以前也会css与php,但这是第一次真正写一个动态网页,感觉很棒。

0x07.其他

  • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。

  • 新浪微博:http://weibo.com/grt1st

  • 个人邮箱:grt1stnull@gmail.com



No.10 https://github.com/LubyRuffy/wyquery

Watch:12___Star:109___Fork:92

wyquery

Wooyun公开的漏洞详情是一个很好的资源,但是没有提供很好的搜索引擎和排序功能来进行数据分析,所以,这个项目用户镜像wooyun上已经对外公开的漏洞详情,并提供更多搜索和排序的功能。

你有没有想完成如下功能?

  • 我想只看给钱的漏洞
  • 我想只看带乌云标志的漏洞
  • 我想按照rank排序漏洞

如果有,那你跟我遇到的问题一样,不妨试试这个项目!线上已经搭建好的DEMO环境如下:http://120.27.41.90/

搭建环境

建议在Linux下运行,当然Windows下也可以。Ruby 2.0+

1
2
3
4
5
git clone https://github.com/LubyRuffy/wyquery.git
cd wyquery
bundle install
rake db:migrate
rails s

然后访问http://0.0.0.0:3000

初次抓取数据

1
2
cd wyquery
ruby ./tools/import_bugs.rb

同步数据

这时可以建立定时任务

1
2
crontab -e
*/10 * * * * <wyquery路径>/tools/import_bugs.rb


No.11 https://github.com/jas502n/fuzz-wooyun-org

Watch:3___Star:96___Fork:49

fuzz-wooyun-org

WooYun Fuzz 库



No.12 https://github.com/xinali/wooyun

Watch:6___Star:95___Fork:42

wooyun

wooyun datasets

  • usernames
  • passwords
  • URLs
  • sensitive data patterns
  • fuzzing payloads
  • web shells


No.13 https://github.com/l3m0n/wooyun-wiki

Watch:5___Star:75___Fork:55

wooyun-wiki

wiki.wooyun.org的部分快照网页



No.14 https://github.com/fxfactorial/wooyun.github.io

Watch:6___Star:44___Fork:33

【没有 Readme.md 介绍】



No.15 https://github.com/CaledoniaProject/wooyun_offline_ui

Watch:4___Star:40___Fork:19

说明

花了10分钟重做了一套乌云离线Web UI,重做总共有两个目的,

  1. 没必要使用14GB的虚拟机,经过处理,40K漏洞只占用500MB mongodb 硬盘空间
  2. 上述作者没有提取 关注数、是否为有奖励或者漏洞预警的漏洞 等几个关键字段

特性

支持漏洞标题搜索、漏洞wooyun id搜索

screen

支持漏洞查看(删除了评论),原始 wooyun UI

screen2

安装

复制 src 到 web 目录,e.g

1
cp -R src ~/web/wooyun_offline

安装 php-mongo 扩展

mongo 默认为 127.0.0.1:27017,如有不同,修改 src/config.php 即可

1
2
3
4
5
<?php
$config = array(
'mongodb' => 'mongodb://127.0.0.1:27017'
);
?>

导入数据

导入到 wooyun 数据库,bugs 表即可

由于政策风险,我不能提供数据,可以用网上的14GB虚拟机导出

然后使用 src/scripts/minify.pl 精简 mongo 数据库

已知问题

  1. 缺少 images/blood.png
  2. 漏洞库不全,可惜没用高权限账号爬


No.16 https://github.com/lxj616/DVWA-WooYun

Watch:1___Star:23___Fork:16

DVWA-WooYun

DVWA-WooYun is a plugin-set for DVWA , with plugins based on wooyun.org real bug reports

It should have been a fork of the RandomStorm/DVWA , But while I was coding it , I didn’t know a thing about github :(

And now I do , so scavenged old codes to github

And I modified lot of things , can’t remember why , just messed around , It seems to be not able to merge with the original DVWA now

DAMN VULNERABLE WEB APP

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment.

WARNING!

Damn Vulnerable Web App is damn vulnerable! Do not upload it to your hosting provider’s public html folder or any working web
server as it will be hacked. I recommend downloading and installing XAMPP onto a local machine inside your LAN which is used solely for testing.

We do not take responsibility for the way in which any one uses Damn Vulnerable Web App (DVWA). We have made the purposes of the application clear and it should not be used maliciously. We have given warnings and taken measures to prevent users from installing DVWA on to live web servers. If your web server is compromised via an installation of DVWA it is not our responsibility it is the responsibility of the person/s who uploaded and installed it.

License

This file is part of Damn Vulnerable Web App (DVWA).

Damn Vulnerable Web App (DVWA) is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Damn Vulnerable Web App (DVWA) is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Damn Vulnerable Web App (DVWA). If not, see http://www.gnu.org/licenses/.

Download

DVWA is available either as a package that will run on your own web server or as a Live CD

Installation

Default username = admin

Default password = password

Installation video:
http://www.youtube.com/watch?v=GzIj07jt8rM

The easiest way to install DVWA is to download and install ‘XAMPP’ if you do not already have a web server setup.

XAMPP is a very easy to install Apache Distribution for Linux, Solaris, Windows and Mac OS X. The package includes the Apache web server, MySQL, PHP, Perl, a FTP server and phpMyAdmin.

XAMPP can be downloaded from:
http://www.apachefriends.org/en/xampp.html

Simply unzip dvwa.zip, place the unzipped files in your public html folder, then point your browser to http://127.0.0.1/dvwa/index.php

Database Setup

To set up the database, simply click on the Setup button in the main menu, then click on the ‘Create / Reset Database’ button. This will create / reset the database for you with some data in.

If you receive an error while trying to create your database, make sure your database credentials are correct within /config/config.inc.php

The variables are set to the following by default:

1
2
3
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = '';
$_DVWA[ 'db_database' ] = 'dvwa';

Troubleshooting

For the latest troubleshooting information please visit:
http://code.google.com/p/dvwa/issues/list

+Q. SQL Injection wont work on PHP version 5.2.6.

-A.If you are using PHP version 5.2.6 you will need to do the following in order for SQL injection and other vulnerabilities to work.

In .htaccess:

Replace:

1
2
3
4
5
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
#php_flag allow_url_fopen on
#php_flag allow_url_include on
</IfModule>

With:

1
2
3
4
5
<IfModule mod_php5.c>
magic_quotes_gpc = Off
allow_url_fopen = On
allow_url_include = On
</IfModule>

+Q. Command execution won’t work.

-A. Apache may not have high enough priviledges to run commands on the web server. If you are running DVWA under linux make sure you are logged in as root. Under Windows log in as Administrator.

+Q. My XSS payload won’t run in IE.

-A. If your running IE8 or above IE actively filters any XSS. To disable the filter you can do so by setting the HTTP header ‘X-XSS-Protection: 0’ or disable it from internet options. There may also be ways to bypass the filter.

Homepage: http://www.dvwa.co.uk

Project Home: https://github.com/RandomStorm/DVWA

Created by the DVWA team



No.17 https://github.com/neargle/SecNewsBak

Watch:2___Star:20___Fork:17

README

该项目只用于备份Sec-News上Drops乌云知识库的失效文章,并非Drops整站文章。

文章列表如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
drops_arti_list = [
"SQL注入速查表(上)",
"WMI Attacks",
"攻击洋葱路由(Tor)匿名服务的一些综述",
"SQL注入速查表(下)与Oracle注入速查表",
"Hacking ipcam like Harold in POI",
"海豚浏览器与水星浏览器远程代码执行漏洞详解",
"WMI Backdoor",
"手把手教你当微信运动第一名 – 利用Android Hook进行微信运动作弊",
"WMI Defense",
"Tomcat安全配置",
"利用Weblogic进行入侵的一些总结",
"工控安全入门分析",
"利用被入侵的路由器获取网络流量",
"利用白名单绕过360实例",
"浅析大规模DDOS防御架构-应对T级攻防",
"XCode编译器里有鬼 – XCodeGhost样本分析",
"借用UAC完成的提权思路分享",
"TcpDump使用手册",
"被人遗忘的Memcached内存注射",
"利用被入侵的路由器迈入内网",
"Android sqlite load_extension漏洞解析",
"CTF主办方指南之对抗搅屎棍",
"域渗透的金之钥匙",
"比葫芦娃还可怕的百度全系APP SDK漏洞 - WormHole虫洞漏洞分析报告",
"那些年做过的ctf之加密篇",
"从一个锁主页木马里挖出的惊天“暗杀黑名单”",
"C&C控制服务的设计和侦测方法综述",
"Python安全编码指南",
"翻墙路由器的原理与实现",
"几期『三个白帽』小竞赛的writeup",
"拆分密码",
"变种XSS:持久控制",
"使用32位64位交叉编码混淆来打败静态和动态分析工具",
"給初學者的DLL Side Loading的UAC繞過",
"Joomla远程代码执行漏洞分析",
"网络小黑揭秘系列之黑色SEO初探",
"一步一步学ROP之Android ARM 32位篇",
"Linux入侵检测基础",
"Android WebView File域攻击杂谈",
"小议Linux安全防护(一)",
"Powershell 提权框架-Powerup",
"Android Linker学习笔记",
"MD5碰撞的演化之路",
"Android应用安全开发之源码安全",
"Ruby on Rails 动态渲染远程代码执行漏洞 (CVE-2016-0752)(翻译)",
"中间人攻击 -- Cookie喷发",
"域渗透——Security Support Provider",
"LUA脚本虚拟机逃逸技术分析",
"我的通行你的证",
"在不需要知道密码的情况下 Hacking MSSQL",
"代码审计入门总结",
"Linux服务器应急事件溯源报告",
"Head First FILE Stream Pointer Overflow",
"从 WTForm 的 URLXSS 谈开源组件的安全性",
"网络小黑揭秘系列之黑产江湖黑吃黑—中国菜刀的隐形把手",
"简单验证码识别及工具编写思路",
"中国菜刀仿冒官网三百万箱子爆菊记",
"Rails Security (上) ",
"富文本存储型XSS的模糊测试之道",
"主机被入侵分析过程报告",
"Exploring SSTI in Flask/Jinja2 | WooYun知识库",
"0ctf writeup",
"一个支付宝木马的分析溯源之旅",
"QQ模拟登录实现后篇",
"渗透技巧——通过cmd上传文件的N种方法",
"通过ELF动态装载构造ROP链 ( Return-to-dl-resolve)",
"Mysql报错注入原理分析(count()、rand()、group by)",
"利用反射型XSS二次注入绕过CSP form-action限制",
"渗透Hacking Team过程",
"“信任“之殇――安全软件的“白名单”将放大恶意威胁",
"百脑虫之hook技术",
"内网渗透中转发工具总结",
"TCP安全测试指南-魔兽3找联机0day",
"CVE-2016-3714 - ImageMagick 命令执行分析",
"CVE-2016-1897/8 - FFMpeg漏洞分析",
"漫谈流量劫持",
"新姿势之Docker Remote API未授权访问漏洞分析和利用",
"利用CouchDB未授权访问漏洞执行任意系统命令",
"利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令",
"CTF中比较好玩的stego",
"linux下tomcat安全配置",
"MySQL和PostgreSQL数据库安全配置",
"内网渗透思路探索之新思路的探索与验证",
"小窥TeslaCrypt密钥设计",
"Do Evil Things with gopher://",
"三个白帽条条大路通罗马系列2之二进制题分析",
"Android安全开发之Provider组件安全",
"漏洞检测的那些事儿 ",
"QQ浏览器隐私泄露报告",
"三个白帽之从pwn me调试到Linux攻防学习",
"渗透中寻找突破口的那些事",
"Struts2 S033与最新S037详细分析",
"DB2在渗透中的应用",
"Python urllib HTTP头注入漏洞 (中文翻译)",
"SQL注入关联分析",
"Anti-debugging Skills in APK",
"玩转Metasploit之Automated Persistent Backdoor",
"Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪!",
"玩转Metasploit之Automated Persistent Backdoor",
"Docker安全那些事 ",
"Use bitsadmin to maintain persistence and bypass Autoruns ",
"CTF中那些脑洞大开的编码和加密 ",
"Jenkins RCE 2(CVE-2016-0788)分析及利用",
"小议安卓定位伪造-实战足不出户畅玩pokemon go",
"三个白帽挑战赛之[续集]火币网2W大挑战Writeup"
]


No.18 https://github.com/acgpiano/wooyun-node

Watch:2___Star:9___Fork:8

wooyun-node

这是wooyun.org镜像的node.js版本,用的mysql,支持标题,作者,类型,厂商检索。
方便新手小白使用,搭建方法非常简单。
首先需要安装mysql,要把数据库语言设置成utf8(非常重要,不然会出错)。由于各个系统设置方法不同,需自行百度。检测是否成功可以登进数据库,执行

1
status;

如果是以下状态,就代表可以下一步了。
把该项目克隆到本地

1
git clone https://github.com/acgpiano/wooyun-node.git

修改config.js里面的用户名和密码,改为你的mysql的用户名和密码,port是服务的端口,可以自行修改。
下载wooyun的静态资源:
链接: 百度网盘 密码: mqnp
需要解压到wooyun-node/static/bugs/
文件夹下面(自行新建bugs文件夹)
接下来安装node.js,去官网下载就好了。
接下来安装cnpm(如果可以连Internet这一步可以忽略,以下命令的cnpm全都可以用npm代替)

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

然后在wooyun-node里执行

1
cnpm install

等所有的依赖装完再执行

1
npm run db

等数据库建表完后,共40293条,再执行

1
npm start

默认port端口是9999,可以在config.js里面修改
打开浏览器 http://127.0.0.1:9999就可以使用了。

仅供自学使用,如果要部署到公网可以自己改用orm,修改表结构加速查询,防注入。



当然是彩蛋辣~

上面提到的 Baidu网盘 链接整理:

https://github.com/hanc00l/wooyun_public
Watch:224___Star:3586___Fork:1.8k

1
2
3
4
5
6
7
虚拟机下载地址:
https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)
【文件名:ooyun_vmware_201606_es】

虚拟机下载地址: https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)
【文件名:wooyun_final】
虚拟机用户名、密码为hancool/qwe123

https://github.com/m0l1ce/wooyunallbugs
Watch:21___Star:398___Fork:154

1
2
链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw
【文件名:wooyun-15-a.zip等】

https://github.com/grt1st/wooyun_search
Watch:22___Star:327___Fork:157

1
2
3
4
5
静态网页网盘链接:
bugs 链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
【文件名:WooYun_Bugs(漏洞库)】
drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)
【文件名:WooYun_Drops(知识库)】

https://github.com/acgpiano/wooyun-node
Watch:2___Star:9___Fork:8

1
2
链接: https://pan.baidu.com/share/init?shareid=3613354206&uk=4113422303 密码: mqnp
【文件名:WooYun_Bugs(漏洞库)】


当然还有彩蛋辣~

新建一个文件夹,在里面打开终端,复制粘贴下面代码,或者保存为 .sh (linux)、 .bat (Windows),命令行调用辣

注意:最后三个库特别大,如果网络不好,可能出现 git 连接超时,可以连接更优网络,或参考我的文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
echo .
git clone https://github.com/hanc00l/wooyun_public
echo .
git clone https://github.com/boy-hack/wooyun-payload
echo .
git clone https://github.com/m0l1ce/wooyunallbugs
echo .
git clone https://github.com/SuperKieran/WooyunDrops
echo .
git clone https://github.com/SuperKieran/wooyun-img
echo .
git clone https://github.com/grt1st/wooyun_search
echo .
git clone https://github.com/LubyRuffy/wyquery
echo .
git clone https://github.com/jas502n/fuzz-wooyun-org
echo .
git clone https://github.com/xinali/wooyun
echo .
git clone https://github.com/l3m0n/wooyun-wiki
echo .
git clone https://github.com/fxfactorial/wooyun.github.io
echo .
git clone https://github.com/CaledoniaProject/wooyun_offline_ui
echo .
git clone https://github.com/lxj616/DVWA-WooYun
echo .
git clone https://github.com/neargle/SecNewsBak
echo .
git clone https://github.com/acgpiano/wooyun-node
echo .
git clone https://github.com/Xyntax/1000php 1000php-Xyntax
echo .
git clone https://github.com/starnightcyber/1000php 1000php-starnightcyber
echo .
git clone https://github.com/jiji262/wooyun_articles
echo .
]]>
- - - - <p>翻阅 Wooyun ,然后找到了Github上。。。不得不说,Github 上确实有大量镜像资源</p> -<p>在这里做一个总结吧。按 Star 排序,把每个库的 Readme.md 剪辑到了这里。</p> -<p>文尾有彩蛋!</p> - - - - - - - - - - - -
- -
diff --git a/baidu_urls.txt b/baidu_urls.txt deleted file mode 100644 index 37ec21c..0000000 --- a/baidu_urls.txt +++ /dev/null @@ -1,5 +0,0 @@ -https://blog.tcpsoft.app/2022/04/adb-picture-transfer/ -https://blog.tcpsoft.app/2022/03/my-disk-crushed/ -https://blog.tcpsoft.app/2021/07/wsl2-and-proxifier/ -https://blog.tcpsoft.app/2020/08/welcome-pwn-partition/ -https://blog.tcpsoft.app/2020/07/gdb-operation/ \ No newline at end of file diff --git a/baidusitemap.xml b/baidusitemap.xml deleted file mode 100644 index 08fb8be..0000000 --- a/baidusitemap.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - https://blog.tcpsoft.app/2022/04/adb-picture-transfer/ - 2022-04-10 - - https://blog.tcpsoft.app/2022/03/my-disk-crushed/ - 2022-03-04 - - https://blog.tcpsoft.app/2021/07/wsl2-and-proxifier/ - 2021-07-21 - - https://blog.tcpsoft.app/2020/07/qzone-faster-like/ - 2020-08-16 - - https://blog.tcpsoft.app/2020/08/welcome-pwn-partition/ - 2020-08-05 - - https://blog.tcpsoft.app/2020/07/gdb-operation/ - 2020-07-28 - - https://blog.tcpsoft.app/2020/07/batch-shortcuts/ - 2020-07-28 - - https://blog.tcpsoft.app/2020/07/time-management/ - 2020-07-16 - - https://blog.tcpsoft.app/2020/05/Mi9-SE-screen-problem-self-rescue/ - 2020-05-26 - - https://blog.tcpsoft.app/2020/05/dajubao/ - 2020-05-26 - - https://blog.tcpsoft.app/2020/05/adb-auto-make-money/ - 2020-05-05 - - https://blog.tcpsoft.app/2020/03/why-linux/ - 2020-03-28 - - https://blog.tcpsoft.app/2020/03/let-onedrive-fly-scientifically/ - 2020-03-22 - - https://blog.tcpsoft.app/2020/02/let-git-fly-scientifically/ - 2020-03-21 - - https://blog.tcpsoft.app/2020/03/how-to-ask-in-group-chat/ - 2020-03-06 - - https://blog.tcpsoft.app/2020/02/access-google-from-nothing/ - 2020-03-06 - - https://blog.tcpsoft.app/2020/03/cpp-with-Visual-Studio-2019/ - 2020-03-06 - - https://blog.tcpsoft.app/2020/02/2020gaokaojiayou/ - 2020-02-28 - - https://blog.tcpsoft.app/2020/02/getting-start-52pojie/ - 2020-02-22 - - https://blog.tcpsoft.app/2020/02/wooyun-on-github/ - 2020-02-13 - - https://blog.tcpsoft.app/2019/12/Hi-Im-Cortana/ - 2020-02-11 - - https://blog.tcpsoft.app/2020/02/hexo-with-gitalk/ - 2020-02-11 - - https://blog.tcpsoft.app/2020/02/hexo-with-cloudflare/ - 2020-02-11 - - https://blog.tcpsoft.app/2020/02/hexo-seo/ - 2020-02-11 - - https://blog.tcpsoft.app/2020/02/hexo-changes/ - 2020-02-11 - - diff --git a/categories/index.html b/categories/index.html deleted file mode 100644 index 434509f..0000000 --- a/categories/index.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - categories | Hi, I'm Cortana. - - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - - - -
- - -
- - - -
-
- -

categories -

- - - -
- - - - -
-
-
- 目前共计 6 个分类 -
- -
- -
- - - -
- - - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/categories/none/index.html b/categories/none/index.html deleted file mode 100644 index 27abe0e..0000000 --- a/categories/none/index.html +++ /dev/null @@ -1,665 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: none | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

none - 分类 -

-
- - -
-

2022

-
- - - - -
-

2021

-
- - -
-

2020

-
- - - - - - - - - - - - - - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/categories/none/page/2/index.html b/categories/none/page/2/index.html deleted file mode 100644 index 5441e28..0000000 --- a/categories/none/page/2/index.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: none | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

none - 分类 -

-
- - -
-

2020

-
- - -
-

2019

-
- - - -
-
- - - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/categories/pwn/index.html b/categories/pwn/index.html deleted file mode 100644 index 4ac694c..0000000 --- a/categories/pwn/index.html +++ /dev/null @@ -1,530 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: pwn | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

pwn - 分类 -

-
- - -
-

2020

-
- - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/categories/\345\237\272\347\241\200/index.html" "b/categories/\345\237\272\347\241\200/index.html" deleted file mode 100644 index 4feefcd..0000000 --- "a/categories/\345\237\272\347\241\200/index.html" +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: 基础 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

基础 - 分类 -

-
- - -
-

2020

-
- - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/categories/\345\273\272\347\253\231/index.html" "b/categories/\345\273\272\347\253\231/index.html" deleted file mode 100644 index d68f63b..0000000 --- "a/categories/\345\273\272\347\253\231/index.html" +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: 建站 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

建站 - 分类 -

-
- - -
-

2020

-
- - - - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/categories/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" "b/categories/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" deleted file mode 100644 index d95f332..0000000 --- "a/categories/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" +++ /dev/null @@ -1,530 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: 科学上网 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

科学上网 - 分类 -

-
- - -
-

2020

-
- - - - - - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/categories/\351\200\206\345\220\221/index.html" "b/categories/\351\200\206\345\220\221/index.html" deleted file mode 100644 index 9f0d32d..0000000 --- "a/categories/\351\200\206\345\220\221/index.html" +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 分类: 逆向 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - - - - -
-
-
-

逆向 - 分类 -

-
- - -
-

2020

-
- - - -
-
- - - - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old/cdn/Cena-0.8.2.zip b/cdn/Cena-0.8.2.zip similarity index 100% rename from old/cdn/Cena-0.8.2.zip rename to cdn/Cena-0.8.2.zip diff --git a/old/cdn/img/github.png b/cdn/img/github.png similarity index 100% rename from old/cdn/img/github.png rename to cdn/img/github.png diff --git a/old/cdn/img/head.jpg b/cdn/img/head.jpg similarity index 100% rename from old/cdn/img/head.jpg rename to cdn/img/head.jpg diff --git a/old/cdn/index.html b/cdn/index.html similarity index 100% rename from old/cdn/index.html rename to cdn/index.html diff --git a/old/cdn/https.js b/cdn/js/https.js similarity index 79% rename from old/cdn/https.js rename to cdn/js/https.js index 2f6a103..30dad46 100644 --- a/old/cdn/https.js +++ b/cdn/js/https.js @@ -1,4 +1,4 @@ -/*if(location.protocol == "http:") +if(location.protocol == "http:") { var s = location.href; s = s.substring(4); @@ -6,4 +6,3 @@ // s = s.replace("http:","https:"); window.location = s; } -*/ \ No newline at end of file diff --git a/old/cdn/js/jquery.js b/cdn/js/jquery.js similarity index 100% rename from old/cdn/js/jquery.js rename to cdn/js/jquery.js diff --git a/old/cdn/lemon_v1.1_release_mingw.zip b/cdn/lemon_v1.1_release_mingw.zip similarity index 100% rename from old/cdn/lemon_v1.1_release_mingw.zip rename to cdn/lemon_v1.1_release_mingw.zip diff --git a/old/cdn/zlib1.zip b/cdn/zlib1.zip similarity index 100% rename from old/cdn/zlib1.zip rename to cdn/zlib1.zip diff --git "a/old/cdn/\347\244\274\345\214\205.rar" "b/cdn/\347\244\274\345\214\205.rar" similarity index 100% rename from "old/cdn/\347\244\274\345\214\205.rar" rename to "cdn/\347\244\274\345\214\205.rar" diff --git a/css/blog-encrypt.css b/css/blog-encrypt.css deleted file mode 100644 index 3efa275..0000000 --- a/css/blog-encrypt.css +++ /dev/null @@ -1,116 +0,0 @@ -.hbe-input-container { - width: 80%; - max-width: 800px; - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: reverse; - -ms-flex-flow: column-reverse; - flex-flow: column-reverse; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - margin: 100px auto; -} -.hbe-input-container input { - -webkit-box-ordinal-group: 11; - order: 10; - -ms-flex-order: 10; - outline: none; - border: none; - width: 100%; - padding: 15px 0; - font-size: 20px; - border-bottom: 1px solid #d5d5d5; - text-indent: 10px; -} -.hbe-input-container input::-moz-placeholder { - opacity: 0; -} -.hbe-input-container input::-webkit-input-placeholder { - opacity: 0; -} -.hbe-input-container input:-ms-input-placeholder { - opacity: 0; -} -.hbe-input-container input, -.hbe-input-container label { - transition: all 0.3s; -} -.hbe-input-container label { - -webkit-box-ordinal-group: 101; - -ms-flex-order: 100; - font-size: 18px; - order: 100; - color: #3f4f5b; - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: translate(10px, 40px); - transform: translate(0px, 40px); -} -.hbe-input-container .bottom-line { - order: 2; - width: 0; - height: 2px; - background: #658db5; - transition: all 0.3s; -} -.hbe-input-container input:focus { - border-bottom-color: #fff; -} -.hbe-input-container input:focus ~ div, -.hbe-input-container input:not(:placeholder-shown) ~ div { - width: 100%; -} -.hbe-input-container input:focus + label, -.hbe-input-container input:not(:placeholder-shown) + label { - color: #52616c; - -webkit-transform: translate(10px) scale(0.9); - transform: translate(10px) scale(0.9); -} - -.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; -} diff --git a/css/main.css b/css/main.css deleted file mode 100644 index 7570631..0000000 --- a/css/main.css +++ /dev/null @@ -1,2749 +0,0 @@ -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} -body { - margin: 0; -} -main { - display: block; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -a { - background: transparent; -} -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} -b, -strong { - font-weight: bolder; -} -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -img { - border-style: none; -} -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} -button, -input { -/* 1 */ - overflow: visible; -} -button, -select { -/* 1 */ - text-transform: none; -} -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} -button::-moz-focus-inner, -[type='button']::-moz-focus-inner, -[type='reset']::-moz-focus-inner, -[type='submit']::-moz-focus-inner { - border-style: none; - padding: 0; -} -button:-moz-focusring, -[type='button']:-moz-focusring, -[type='reset']:-moz-focusring, -[type='submit']:-moz-focusring { - outline: 1px dotted ButtonText; -} -fieldset { - padding: 0.35em 0.75em 0.625em; -} -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} -progress { - vertical-align: baseline; -} -textarea { - overflow: auto; -} -[type='checkbox'], -[type='radio'] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} -[type='number']::-webkit-inner-spin-button, -[type='number']::-webkit-outer-spin-button { - height: auto; -} -[type='search'] { - outline-offset: -2px; /* 2 */ - -webkit-appearance: textfield; /* 1 */ -} -[type='search']::-webkit-search-decoration { - -webkit-appearance: none; -} -::-webkit-file-upload-button { - font: inherit; /* 2 */ - -webkit-appearance: button; /* 1 */ -} -details { - display: block; -} -summary { - display: list-item; -} -template { - display: none; -} -[hidden] { - display: none; -} -::selection { - background: #262a30; - color: #fff; -} -html, -body { - height: 100%; -} -body { - background: #eee; - color: #555; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 1em; - line-height: 2; -} -@media (max-width: 991px) { - body { - padding-left: 0 !important; - padding-right: 0 !important; - } -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-weight: bold; - line-height: 1.5; - margin: 20px 0 15px; -} -h1 { - font-size: 1.5em; -} -h2 { - font-size: 1.375em; -} -h3 { - font-size: 1.25em; -} -h4 { - font-size: 1.125em; -} -h5 { - font-size: 1em; -} -h6 { - font-size: 0.875em; -} -p { - margin: 0 0 20px 0; -} -a, -span.exturl { - border-bottom: 1px solid #999; - color: #555; - outline: 0; - text-decoration: none; - overflow-wrap: break-word; - word-wrap: break-word; - cursor: pointer; -} -a:hover, -span.exturl:hover { - border-bottom-color: #222; - color: #222; -} -iframe, -img, -video { - display: block; - margin-left: auto; - margin-right: auto; - max-width: 100%; -} -hr { - background-color: #ddd; - background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px); - border: 0; - height: 3px; - margin: 40px 0; -} -blockquote { - border-left: 4px solid #ddd; - color: #666; - margin: 0; - padding: 0 15px; -} -blockquote cite::before { - content: '-'; - padding: 0 5px; -} -dt { - font-weight: 700; -} -dd { - margin: 0; - padding: 0; -} -kbd { - background-color: #f5f5f5; - background-image: linear-gradient(#eee, #fff, #eee); - border: 1px solid #ccc; - border-radius: 0.2em; - box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); - font-family: inherit; - padding: 0.1em 0.3em; - white-space: nowrap; -} -.table-container { - -webkit-overflow-scrolling: touch; - overflow: auto; -} -table { - border-collapse: collapse; - border-spacing: 0; - font-size: 0.875em; - margin: 0 0 20px 0; - width: 100%; -} -tbody tr:nth-of-type(odd) { - background: #f9f9f9; -} -tbody tr:hover { - background: #f5f5f5; -} -caption, -th, -td { - font-weight: normal; - padding: 8px; - text-align: left; - vertical-align: middle; -} -th, -td { - border: 1px solid #ddd; - border-bottom: 3px solid #ddd; -} -th { - font-weight: 700; - padding-bottom: 10px; -} -td { - border-bottom-width: 1px; -} -.btn { - background: #fff; - border: 2px solid #555; - border-radius: 2px; - color: #555; - display: inline-block; - font-size: 0.875em; - line-height: 2; - padding: 0 20px; - text-decoration: none; - transition-property: background-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.btn:hover { - background: #222; - border-color: #222; - color: #fff; -} -.btn + .btn { - margin: 0 0 8px 8px; -} -.btn .fa-fw { - text-align: left; - width: 1.285714285714286em; -} -.toggle { - line-height: 0; -} -.toggle .toggle-line { - background: #fff; - display: inline-block; - height: 2px; - left: 0; - position: relative; - top: 0; - transition: all 0.4s; - vertical-align: top; - width: 100%; -} -.toggle .toggle-line:not(:first-child) { - margin-top: 3px; -} -.toggle.toggle-arrow .toggle-line-first { - left: 50%; - top: 2px; - transform: rotate(45deg); - width: 50%; -} -.toggle.toggle-arrow .toggle-line-middle { - left: 2px; - width: 90%; -} -.toggle.toggle-arrow .toggle-line-last { - left: 50%; - top: -2px; - transform: rotate(-45deg); - width: 50%; -} -.toggle.toggle-close .toggle-line-first { - transform: rotate(-45deg); - top: 5px; -} -.toggle.toggle-close .toggle-line-middle { - opacity: 0; -} -.toggle.toggle-close .toggle-line-last { - transform: rotate(45deg); - top: -5px; -} -.highlight, -pre { - background: #f7f7f7; - color: #4d4d4c; - line-height: 1.6; - margin: 0 auto 20px; -} -pre, -code { - font-family: consolas, Menlo, monospace, "PingFang SC", "Microsoft YaHei"; -} -code { - background: #eee; - border-radius: 3px; - color: #555; - padding: 2px 4px; - overflow-wrap: break-word; - word-wrap: break-word; -} -.highlight *::selection { - background: #d6d6d6; -} -.highlight pre { - border: 0; - margin: 0; - padding: 10px 0; -} -.highlight table { - border: 0; - margin: 0; - width: auto; -} -.highlight td { - border: 0; - padding: 0; -} -.highlight figcaption { - background: #eee; - color: #4d4d4c; - font-size: 0.875em; - line-height: 1.2; - padding: 0.5em; -} -.highlight figcaption::before, -.highlight figcaption::after { - content: ' '; - display: table; -} -.highlight figcaption::after { - clear: both; -} -.highlight figcaption a { - color: #4d4d4c; - float: right; -} -.highlight figcaption a:hover { - border-bottom-color: #4d4d4c; -} -.highlight .gutter { - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; -} -.highlight .gutter pre { - background: #eff2f3; - color: #869194; - padding-left: 10px; - padding-right: 10px; - text-align: right; -} -.highlight .code pre { - background: #f7f7f7; - padding-left: 10px; - width: 100%; -} -.gist table { - width: auto; -} -.gist table td { - border: 0; -} -pre { - overflow: auto; - padding: 10px; -} -pre code { - background: none; - color: #4d4d4c; - font-size: 0.875em; - padding: 0; - text-shadow: none; -} -pre .deletion { - background: #fdd; -} -pre .addition { - background: #dfd; -} -pre .meta { - color: #eab700; - -moz-user-select: none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; -} -pre .comment { - color: #8e908c; -} -pre .variable, -pre .attribute, -pre .tag, -pre .name, -pre .regexp, -pre .ruby .constant, -pre .xml .tag .title, -pre .xml .pi, -pre .xml .doctype, -pre .html .doctype, -pre .css .id, -pre .css .class, -pre .css .pseudo { - color: #c82829; -} -pre .number, -pre .preprocessor, -pre .built_in, -pre .builtin-name, -pre .literal, -pre .params, -pre .constant, -pre .command { - color: #f5871f; -} -pre .ruby .class .title, -pre .css .rules .attribute, -pre .string, -pre .symbol, -pre .value, -pre .inheritance, -pre .header, -pre .ruby .symbol, -pre .xml .cdata, -pre .special, -pre .formula { - color: #718c00; -} -pre .title, -pre .css .hexcolor { - color: #3e999f; -} -pre .function, -pre .python .decorator, -pre .python .title, -pre .ruby .function .title, -pre .ruby .title .keyword, -pre .perl .sub, -pre .javascript .title, -pre .coffeescript .title { - color: #4271ae; -} -pre .keyword, -pre .javascript .function { - color: #8959a8; -} -.blockquote-center { - border-left: none; - margin: 40px 0; - padding: 0; - position: relative; - text-align: center; -} -.blockquote-center::before, -.blockquote-center::after { - background-repeat: no-repeat; - background-size: 22px 22px; - content: ' '; - display: block; - height: 24px; - opacity: 0.2; - position: absolute; - width: 100%; -} -.blockquote-center::before { - background-image: url("../images/quote-l.svg"); - background-position: 0 -6px; - border-top: 1px solid #ccc; - top: -20px; -} -.blockquote-center::after { - background-image: url("../images/quote-r.svg"); - background-position: 100% 8px; - border-bottom: 1px solid #ccc; - bottom: -20px; -} -.blockquote-center p, -.blockquote-center div { - text-align: center; -} -.post-body .group-picture img { - margin: 0 auto; - padding: 0 3px; -} -.group-picture-row { - margin-bottom: 6px; - overflow: hidden; -} -.group-picture-column { - float: left; - margin-bottom: 10px; -} -.post-body .label { - display: inline; - padding: 0 2px; -} -.post-body .label.default { - background: #f0f0f0; -} -.post-body .label.primary { - background: #efe6f7; -} -.post-body .label.info { - background: #e5f2f8; -} -.post-body .label.success { - background: #e7f4e9; -} -.post-body .label.warning { - background: #fcf6e1; -} -.post-body .label.danger { - background: #fae8eb; -} -.post-body .tabs { - margin-bottom: 20px; -} -.post-body .tabs, -.tabs-comment { - display: block; - padding-top: 10px; - position: relative; -} -.post-body .tabs ul.nav-tabs, -.tabs-comment ul.nav-tabs { - display: flex; - flex-wrap: wrap; - margin: 0; - margin-bottom: -1px; - padding: 0; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs, - .tabs-comment ul.nav-tabs { - display: block; - margin-bottom: 5px; - } -} -.post-body .tabs ul.nav-tabs li.tab, -.tabs-comment ul.nav-tabs li.tab { - background: #fff; - border-bottom: 1px solid #ddd; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-top: 3px solid transparent; - flex-grow: 1; - list-style-type: none; - border-radius: 0 0 0 0; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab, - .tabs-comment ul.nav-tabs li.tab { - border-bottom: 1px solid transparent; - border-left: 3px solid transparent; - border-right: 1px solid transparent; - border-top: 1px solid transparent; - } -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab, - .tabs-comment ul.nav-tabs li.tab { - border-radius: 0; - } -} -.post-body .tabs ul.nav-tabs li.tab a, -.tabs-comment ul.nav-tabs li.tab a { - border-bottom: initial; - display: block; - line-height: 1.8; - outline: 0; - padding: 0.25em 0.75em; - text-align: center; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-out; -} -.post-body .tabs ul.nav-tabs li.tab a i, -.tabs-comment ul.nav-tabs li.tab a i { - width: 1.285714285714286em; -} -.post-body .tabs ul.nav-tabs li.tab.active, -.tabs-comment ul.nav-tabs li.tab.active { - border-bottom: 1px solid transparent; - border-left: 1px solid #ddd; - border-right: 1px solid #ddd; - border-top: 3px solid #fc6423; -} -@media (max-width: 413px) { - .post-body .tabs ul.nav-tabs li.tab.active, - .tabs-comment ul.nav-tabs li.tab.active { - border-bottom: 1px solid #ddd; - border-left: 3px solid #fc6423; - border-right: 1px solid #ddd; - border-top: 1px solid #ddd; - } -} -.post-body .tabs ul.nav-tabs li.tab.active a, -.tabs-comment ul.nav-tabs li.tab.active a { - color: #555; - cursor: default; -} -.post-body .tabs .tab-content .tab-pane, -.tabs-comment .tab-content .tab-pane { - border: 1px solid #ddd; - padding: 20px 20px 0 20px; - border-radius: 0; -} -.post-body .tabs .tab-content .tab-pane:not(.active), -.tabs-comment .tab-content .tab-pane:not(.active) { - display: none; -} -.post-body .tabs .tab-content .tab-pane.active, -.tabs-comment .tab-content .tab-pane.active { - display: block; -} -.post-body .tabs .tab-content .tab-pane.active:nth-of-type(1), -.tabs-comment .tab-content .tab-pane.active:nth-of-type(1) { - border-radius: 0 0 0 0; -} -@media (max-width: 413px) { - .post-body .tabs .tab-content .tab-pane.active:nth-of-type(1), - .tabs-comment .tab-content .tab-pane.active:nth-of-type(1) { - border-radius: 0; - } -} -.post-body .note { - border-radius: 3px; - margin-bottom: 20px; - padding: 15px; - position: relative; - border: 1px solid #eee; - border-left-width: 5px; -} -.post-body .note h2, -.post-body .note h3, -.post-body .note h4, -.post-body .note h5, -.post-body .note h6 { - margin-top: 0; - border-bottom: initial; - margin-bottom: 0; - padding-top: 0; -} -.post-body .note p:first-child, -.post-body .note ul:first-child, -.post-body .note ol:first-child, -.post-body .note table:first-child, -.post-body .note pre:first-child, -.post-body .note blockquote:first-child, -.post-body .note img:first-child { - margin-top: 0; -} -.post-body .note p:last-child, -.post-body .note ul:last-child, -.post-body .note ol:last-child, -.post-body .note table:last-child, -.post-body .note pre:last-child, -.post-body .note blockquote:last-child, -.post-body .note img:last-child { - margin-bottom: 0; -} -.post-body .note.default { - border-left-color: #777; -} -.post-body .note.default h2, -.post-body .note.default h3, -.post-body .note.default h4, -.post-body .note.default h5, -.post-body .note.default h6 { - color: #777; -} -.post-body .note.primary { - border-left-color: #6f42c1; -} -.post-body .note.primary h2, -.post-body .note.primary h3, -.post-body .note.primary h4, -.post-body .note.primary h5, -.post-body .note.primary h6 { - color: #6f42c1; -} -.post-body .note.info { - border-left-color: #428bca; -} -.post-body .note.info h2, -.post-body .note.info h3, -.post-body .note.info h4, -.post-body .note.info h5, -.post-body .note.info h6 { - color: #428bca; -} -.post-body .note.success { - border-left-color: #5cb85c; -} -.post-body .note.success h2, -.post-body .note.success h3, -.post-body .note.success h4, -.post-body .note.success h5, -.post-body .note.success h6 { - color: #5cb85c; -} -.post-body .note.warning { - border-left-color: #f0ad4e; -} -.post-body .note.warning h2, -.post-body .note.warning h3, -.post-body .note.warning h4, -.post-body .note.warning h5, -.post-body .note.warning h6 { - color: #f0ad4e; -} -.post-body .note.danger { - border-left-color: #d9534f; -} -.post-body .note.danger h2, -.post-body .note.danger h3, -.post-body .note.danger h4, -.post-body .note.danger h5, -.post-body .note.danger h6 { - color: #d9534f; -} -.pagination .prev, -.pagination .next, -.pagination .page-number, -.pagination .space { - display: inline-block; - margin: 0 10px; - padding: 0 11px; - position: relative; - top: -1px; -} -@media (max-width: 767px) { - .pagination .prev, - .pagination .next, - .pagination .page-number, - .pagination .space { - margin: 0 5px; - } -} -.pagination { - border-top: 1px solid #eee; - margin: 120px 0 0; - text-align: center; -} -.pagination .prev, -.pagination .next, -.pagination .page-number { - border-bottom: 0; - border-top: 1px solid #eee; - transition-property: border-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.pagination .prev:hover, -.pagination .next:hover, -.pagination .page-number:hover { - border-top-color: #222; -} -.pagination .space { - margin: 0; - padding: 0; -} -.pagination .prev { - margin-left: 0; -} -.pagination .next { - margin-right: 0; -} -.pagination .page-number.current { - background: #ccc; - border-top-color: #ccc; - color: #fff; -} -@media (max-width: 767px) { - .pagination { - border-top: none; - } - .pagination .prev, - .pagination .next, - .pagination .page-number { - border-bottom: 1px solid #eee; - border-top: 0; - margin-bottom: 10px; - padding: 0 10px; - } - .pagination .prev:hover, - .pagination .next:hover, - .pagination .page-number:hover { - border-bottom-color: #222; - } -} -.comments { - margin: 60px 20px 0; - overflow: hidden; -} -.comment-button-group { - display: flex; - flex-wrap: wrap-reverse; - justify-content: center; - margin: 1em 0; -} -.comment-button-group .comment-button { - margin: 0.1em 0.2em; -} -.comment-button-group .comment-button.active { - background: #222; - border-color: #222; - color: #fff; -} -.comment-position { - display: none; -} -.comment-position.active { - display: block; -} -.tabs-comment { - background: #fff; - margin-top: 4em; - padding-top: 0; -} -.tabs-comment .comments { - border: 0; - box-shadow: none; - margin-top: 0; - padding-top: 0; -} -.container { - min-height: 100%; - position: relative; -} -.main-inner { - margin: 0 auto; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .main-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .main-inner { - width: 73%; - } -} -.header { - background: transparent; -} -.header-inner { - margin: 0 auto; - position: relative; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .header-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .header-inner { - width: 73%; - } -} -.headband { - background: #222; - height: 3px; -} -.site-meta { - margin: 0; - text-align: center; -} -@media (max-width: 767px) { - .site-meta { - text-align: center; - } -} -.brand { - background: #222; - border-bottom: none; - color: #fff; - display: inline-block; - line-height: 1.375em; - padding: 0 40px; - position: relative; -} -.brand:hover { - color: #fff; -} -.site-title { - display: inline-block; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 1.375em; - font-weight: normal; - line-height: 1.5; - vertical-align: top; -} -.site-subtitle { - color: #ddd; - font-size: 0.8125em; - margin-top: 10px; -} -.use-motion .brand { - opacity: 0; -} -.use-motion .site-title, -.use-motion .site-subtitle, -.use-motion .custom-logo-image { - opacity: 0; - position: relative; - top: -10px; -} -.site-nav-toggle { - display: none; - left: 10px; - position: absolute; -} -@media (max-width: 767px) { - .site-nav-toggle { - display: block; - } -} -.site-nav-toggle .toggle { - background: transparent; - border: 0; - margin-top: 2px; - padding: 10px; - width: 22px; -} -.site-nav-toggle .toggle .toggle-line { - background: #555; - border-radius: 1px; -} -.site-nav { - display: block; -} -@media (max-width: 767px) { - .site-nav { - clear: both; - display: none; - } -} -.site-nav.site-nav-on { - display: block; -} -.menu { - margin-top: 20px; - padding-left: 0; - text-align: center; -} -.menu-item { - display: inline-block; - list-style: none; - margin: 0 10px; -} -@media (max-width: 767px) { - .menu-item { - margin-top: 10px; - } -} -.menu-item a, -.menu-item span.exturl { - border-bottom: 0; - display: block; - font-size: 0.8125em; - transition-property: border-color; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -@media (hover: none) { - .menu-item a:hover, - .menu-item span.exturl:hover { - border-bottom-color: transparent !important; - } -} -.menu-item .fa { - margin-right: 8px; -} -.menu-item .badge { - display: inline-block; - font-weight: 700; - line-height: 1; - margin-left: 0.35em; - margin-top: 0.35em; - text-align: center; - white-space: nowrap; -} -@media (max-width: 767px) { - .menu-item .badge { - float: right; - margin-left: 0; - } -} -.use-motion .menu-item { - opacity: 0; -} -.sidebar { - background: #222; - bottom: 0; - box-shadow: inset 0 2px 6px #000; - position: fixed; - top: 0; - z-index: 1200; -} -.sidebar a, -.sidebar span.exturl { - border-bottom-color: #555; - color: #999; -} -.sidebar a:hover, -.sidebar span.exturl:hover { - border-bottom-color: #eee; - color: #eee; -} -@media (max-width: 991px) { - .sidebar { - display: none; - } -} -.sidebar-inner { - color: #999; - padding: 18px 10px; - text-align: center; -} -.site-overview-wrap { - overflow-x: hidden; - overflow-y: auto; -} -.cc-license { - margin-top: 10px; - text-align: center; -} -.cc-license .cc-opacity { - border-bottom: none; - opacity: 0.7; -} -.cc-license .cc-opacity:hover { - opacity: 0.9; -} -.cc-license img { - display: inline-block; -} -.site-author-image { - border: 1px solid #eee; - display: block; - height: auto; - margin: 0 auto; - max-width: 120px; - padding: 2px; -} -.site-author-name { - color: #222; - font-weight: 600; - margin: 0; - text-align: center; -} -.site-description { - color: #999; - font-size: 0.8125em; - margin-top: 0; - text-align: center; -} -.links-of-author { - margin-top: 15px; -} -.links-of-author a, -.links-of-author span.exturl { - border-bottom-color: #555; - display: inline-block; - font-size: 0.8125em; - margin-bottom: 10px; - margin-right: 10px; - vertical-align: middle; -} -.links-of-author a::before, -.links-of-author span.exturl::before { - background: #65e506; - border-radius: 50%; - content: ' '; - display: inline-block; - height: 4px; - margin-right: 3px; - vertical-align: middle; - width: 4px; -} -.sidebar-button { - margin-top: 15px; -} -.sidebar-button a { - border: 1px solid #fc6423; - border-radius: 4px; - color: #fc6423; - display: inline-block; - padding: 0 15px; -} -.sidebar-button a .fa { - margin-right: 5px; -} -.sidebar-button a:hover { - background: #fc6423; - border: 1px solid #fc6423; - color: #fff; -} -.sidebar-button a:hover .fa { - color: #fff; -} -.links-of-blogroll { - font-size: 0.8125em; - margin-top: 10px; -} -.links-of-blogroll-title { - font-size: 0.875em; - font-weight: 600; - margin-top: 0; -} -.links-of-blogroll-list { - list-style: none; - margin: 0; - padding: 0; -} -.links-of-blogroll-item { - padding: 2px 10px; -} -.links-of-blogroll-item a, -.links-of-blogroll-item span.exturl { - box-sizing: border-box; - display: inline-block; - max-width: 280px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -#sidebar-dimmer { - display: none; -} -@media (max-width: 767px) { - #sidebar-dimmer { - background: #000; - display: block; - height: 100%; - left: 100%; - opacity: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 1100; - } - .sidebar-active + #sidebar-dimmer { - opacity: 0.7; - transform: translateX(-100%); - transition: opacity 0.5s; - } -} -.sidebar-nav { - margin: 0; - padding-bottom: 20px; - padding-left: 0; -} -.sidebar-nav li { - border-bottom: 1px solid transparent; - color: #555; - cursor: pointer; - display: inline-block; - font-size: 0.875em; -} -.sidebar-nav li.sidebar-nav-overview { - margin-left: 10px; -} -.sidebar-nav li:hover { - color: #fc6423; -} -.sidebar-nav .sidebar-nav-active { - border-bottom-color: #fc6423; - color: #fc6423; -} -.sidebar-nav .sidebar-nav-active:hover { - color: #fc6423; -} -.sidebar-panel { - display: none; -} -.sidebar-panel-active { - display: block; -} -.sidebar-toggle { - background: #222; - bottom: 45px; - cursor: pointer; - height: 14px; - left: 30px; - padding: 5px; - position: fixed; - width: 14px; - z-index: 1300; -} -@media (max-width: 991px) { - .sidebar-toggle { - left: 20px; - opacity: 0.8; - display: none; - } -} -.sidebar-toggle:hover .toggle-line { - background: #fc6423; -} -.post-toc-wrap { - overflow-x: hidden; - overflow-y: auto; -} -.post-toc { - font-size: 0.875em; -} -.post-toc ol { - list-style: none; - margin: 0; - padding: 0 2px 5px 10px; - text-align: left; -} -.post-toc ol > ol { - padding-left: 0; -} -.post-toc ol a { - border-bottom-color: #ccc; - color: #666; - transition-property: all; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.post-toc ol a:hover { - border-bottom-color: #000; - color: #000; -} -.post-toc .nav-item { - line-height: 1.8; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.post-toc .nav .nav-child { - display: none; -} -.post-toc .nav .active > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child { - display: block; -} -.post-toc .nav .active-current > .nav-child > .nav-item { - display: block; -} -.post-toc .nav .active > a { - border-bottom-color: #fc6423; - color: #fc6423; -} -.post-toc .nav .active-current > a { - color: #fc6423; -} -.post-toc .nav .active-current > a:hover { - color: #fc6423; -} -.site-state { - display: flex; - justify-content: center; - line-height: 1.4; - margin-top: 10px; - overflow: hidden; - text-align: center; - white-space: nowrap; -} -.site-state-item { - padding: 0 15px; -} -.site-state-item:not(:first-child) { - border-left: 1px solid #eee; -} -.site-state-item a { - border-bottom: none; -} -.site-state-item-count { - color: inherit; - display: block; - font-size: 1em; - font-weight: 600; - text-align: center; -} -.site-state-item-name { - color: #999; - font-size: 0.8125em; -} -.footer { - color: #999; - font-size: 0.875em; - padding: 20px 0; -} -.footer.footer-fixed { - bottom: 0; - left: 0; - position: absolute; - right: 0; -} -.footer-inner { - box-sizing: border-box; - margin: 0 auto; - text-align: center; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .footer-inner { - width: 1160px; - } -} -@media (min-width: 1600px) { - .footer-inner { - width: 73%; - } -} -.with-love { - color: #808080; - display: inline-block; - margin: 0 5px; - animation: iconAnimate 1.33s ease-in-out infinite; -} -.powered-by, -.theme-info { - display: inline-block; -} -@-moz-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-webkit-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@-o-keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -@keyframes iconAnimate { - 0%, 100% { - transform: scale(1); - } - 10%, 30% { - transform: scale(0.9); - } - 20%, 40%, 60%, 80% { - transform: scale(1.1); - } - 50%, 70% { - transform: scale(1.1); - } -} -.back-to-top { - background: #222; - bottom: -100px; - box-sizing: border-box; - color: #fff; - cursor: pointer; - font-size: 12px; - left: 30px; - opacity: 0.6; - padding: 0 6px; - position: fixed; - text-align: center; - transition-property: bottom; - z-index: 1300; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; - width: 24px; -} -.back-to-top span { - display: none; -} -.back-to-top:hover { - color: #fc6423; -} -.back-to-top.back-to-top-on { - bottom: 30px; -} -@media (max-width: 991px) { - .back-to-top { - left: 20px; - opacity: 0.8; - } -} -.reading-progress-bar { - background: #37c6c0; - display: block; - height: 3px; - left: 0; - position: fixed; - top: 0; - width: 0; - z-index: 1500; -} -.post-body { - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - overflow-wrap: break-word; - word-wrap: break-word; -} -@media (min-width: 1200px) { - .post-body { - font-size: 1.125em; - } -} -.post-body span.exturl .fa { - font-size: 0.875em; - margin-left: 4px; -} -.post-body .image-caption, -.post-body .figure .caption { - color: #999; - font-size: 0.875em; - font-weight: bold; - line-height: 1; - margin: -20px auto 15px; - text-align: center; -} -.post-sticky-flag { - display: inline-block; - transform: rotate(30deg); -} -.post-button { - margin-top: 40px; - text-align: center; -} -.use-motion .post-block, -.use-motion .pagination, -.use-motion .comments { - opacity: 0; -} -.use-motion .post-header { - opacity: 0; -} -.use-motion .post-body { - opacity: 0; -} -.use-motion .collection-header { - opacity: 0; -} -.posts-collapse { - margin-left: 55px; - position: relative; -} -@media (max-width: 767px) { - .posts-collapse { - margin-left: 20px; - margin-right: 20px; - } -} -.posts-collapse .collection-title { - font-size: 1.125em; - position: relative; -} -.posts-collapse .collection-title::before { - background: #999; - border: 1px solid #fff; - border-radius: 50%; - content: ' '; - height: 10px; - left: 0; - margin-left: -6px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 10px; -} -.posts-collapse .collection-year { - margin: 60px 0; - position: relative; -} -.posts-collapse .collection-year::before { - background: #bbb; - border-radius: 50%; - content: ' '; - height: 8px; - left: 0; - margin-left: -4px; - margin-top: -4px; - position: absolute; - top: 50%; - width: 8px; -} -.posts-collapse .collection-header { - display: inline-block; - margin: 0 0 0 20px; -} -.posts-collapse .collection-header small { - color: #bbb; - margin-left: 5px; -} -.posts-collapse .post-header { - border-bottom: 1px dashed #ccc; - margin: 30px 0; - padding-left: 15px; - position: relative; - transition-property: border; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.posts-collapse .post-header::before { - background: #bbb; - border: 1px solid #fff; - border-radius: 50%; - content: ' '; - height: 6px; - left: 0; - margin-left: -4px; - position: absolute; - top: 0.75em; - transition-property: background; - width: 6px; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.posts-collapse .post-header:hover { - border-bottom-color: #666; -} -.posts-collapse .post-header:hover::before { - background: #222; -} -.posts-collapse .post-meta { - display: inline; - font-size: 0.75em; - margin-right: 10px; -} -.posts-collapse .post-title { - display: inline; - font-size: 1em; - font-weight: normal; - margin-bottom: 0; - margin-top: 0; -} -.posts-collapse .post-title a, -.posts-collapse .post-title span.exturl { - border-bottom: none; - color: #666; -} -.posts-collapse::before { - background: #f5f5f5; - content: ' '; - height: 100%; - left: 0; - margin-left: -2px; - position: absolute; - top: 1.25em; - width: 4px; -} -.posts-collapse .fa-external-link { - font-size: 0.875em; - margin-left: 5px; -} -.post-eof { - background: #ccc; - height: 1px; - margin: 80px auto 60px; - text-align: center; - width: 8%; -} -.post-block:last-child .post-eof { - display: none; -} -.posts-expand { - padding-top: 40px; -} -@media (max-width: 767px) { - .posts-expand { - margin: 0 20px; - } -} -@media (min-width: 992px) { - .post-body { - text-align: justify; - } -} -@media (max-width: 991px) { - .post-body { - text-align: justify; - } -} -.post-body h1, -.post-body h2, -.post-body h3, -.post-body h4, -.post-body h5, -.post-body h6 { - padding-top: 10px; -} -.post-body h1 .header-anchor, -.post-body h2 .header-anchor, -.post-body h3 .header-anchor, -.post-body h4 .header-anchor, -.post-body h5 .header-anchor, -.post-body h6 .header-anchor { - border-bottom-style: none; - color: #ccc; - float: right; - margin-left: 10px; - visibility: hidden; -} -.post-body h1 .header-anchor:hover, -.post-body h2 .header-anchor:hover, -.post-body h3 .header-anchor:hover, -.post-body h4 .header-anchor:hover, -.post-body h5 .header-anchor:hover, -.post-body h6 .header-anchor:hover { - color: inherit; -} -.post-body h1:hover .header-anchor, -.post-body h2:hover .header-anchor, -.post-body h3:hover .header-anchor, -.post-body h4:hover .header-anchor, -.post-body h5:hover .header-anchor, -.post-body h6:hover .header-anchor { - visibility: visible; -} -.post-body iframe, -.post-body img, -.post-body video { - margin-bottom: 20px; -} -.post-body .video-container { - height: 0; - margin-bottom: 20px; - overflow: hidden; - padding-top: 75%; - position: relative; - width: 100%; -} -.post-body .video-container iframe, -.post-body .video-container object, -.post-body .video-container embed { - height: 100%; - left: 0; - margin: 0; - position: absolute; - top: 0; - width: 100%; -} -.post-gallery { - align-items: center; - display: grid; - grid-gap: 10px; - grid-template-columns: 1fr 1fr 1fr; - margin-bottom: 20px; -} -@media (max-width: 767px) { - .post-gallery { - grid-template-columns: 1fr 1fr; - } -} -.post-gallery a { - border: 0; -} -.post-gallery img { - margin: 0; -} -.posts-expand .post-header { - font-size: 1.125em; -} -.posts-expand .post-title { - font-weight: 400; - margin: initial; - text-align: center; - overflow-wrap: break-word; - word-wrap: break-word; -} -.posts-expand .post-title-link { - border-bottom: none; - color: #555; - display: inline-block; - position: relative; - vertical-align: top; -} -.posts-expand .post-title-link::before { - background: #000; - bottom: 0; - content: ''; - height: 2px; - left: 0; - position: absolute; - transform: scaleX(0); - visibility: hidden; - width: 100%; - transition-delay: 0s; - transition-duration: 0.2s; - transition-timing-function: ease-in-out; -} -.posts-expand .post-title-link:hover::before { - transform: scaleX(1); - visibility: visible; -} -.posts-expand .post-title-link .fa { - font-size: 0.875em; - margin-left: 5px; -} -.posts-expand .post-meta { - color: #999; - font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; - font-size: 0.75em; - margin: 3px 0 60px 0; - text-align: center; -} -.posts-expand .post-meta .post-description { - font-size: 0.875em; - margin-top: 2px; -} -.posts-expand .post-meta time { - border-bottom: 1px dashed #999; - cursor: pointer; -} -.post-meta .post-meta-item + .post-meta-item::before { - content: '|'; - margin: 0 0.5em; -} -.post-meta-divider { - margin: 0 0.5em; -} -.post-meta-item-icon { - margin-right: 3px; -} -@media (max-width: 991px) { - .post-meta-item-icon { - display: inline-block; - } -} -@media (max-width: 991px) { - .post-meta-item-text { - display: none; - } -} -.post-nav { - border-top: 1px solid #eee; - display: flex; - justify-content: space-between; - margin-top: 15px; - padding-top: 10px; -} -.post-nav-item { - flex: 1; -} -.post-nav-item a { - border-bottom: none; - display: block; - font-size: 0.875em; - line-height: 1.6; - position: relative; -} -.post-nav-item a:hover { - border-bottom: none; - color: #222; -} -.post-nav-item a:active { - top: 2px; -} -.post-nav-item .fa { - font-size: 0.75em; -} -.post-nav-item:first-child { - margin-right: 15px; -} -.post-nav-item:first-child a { - padding-left: 5px; -} -.post-nav-item:first-child .fa { - margin-right: 5px; -} -.post-nav-item:last-child { - margin-left: 15px; - text-align: right; -} -.post-nav-item:last-child a { - padding-right: 5px; -} -.post-nav-item:last-child .fa { - margin-left: 5px; -} -.rtl.post-body p, -.rtl.post-body a, -.rtl.post-body h1, -.rtl.post-body h2, -.rtl.post-body h3, -.rtl.post-body h4, -.rtl.post-body h5, -.rtl.post-body h6, -.rtl.post-body li, -.rtl.post-body ul, -.rtl.post-body ol { - direction: rtl; - font-family: UKIJ Ekran; -} -.rtl.post-title { - font-family: UKIJ Ekran; -} -.post-tags { - margin-top: 40px; - text-align: center; -} -.post-tags a { - display: inline-block; - font-size: 0.8125em; -} -.post-tags a:not(:last-child) { - margin-right: 10px; -} -.post-widgets { - border-top: 1px solid #eee; - margin-top: 15px; - text-align: center; -} -.wp_rating { - height: 20px; - line-height: 20px; - margin-top: 10px; - padding-top: 6px; - text-align: center; -} -.social-like { - display: flex; - font-size: 0.875em; - justify-content: center; - text-align: center; -} -.reward-container { - margin: 20px auto; - padding: 10px 0; - text-align: center; - width: 90%; -} -.reward-container button { - background: #ff2a2a; - border: 0; - border-radius: 5px; - color: #fff; - cursor: pointer; - line-height: 2; - outline: 0; - padding: 0 15px; - vertical-align: text-top; -} -.reward-container button:hover { - background: #f55; -} -#qr { - padding-top: 20px; -} -#qr a { - border: 0; -} -#qr img { - display: inline-block; - margin: 0.8em 2em 0 2em; - max-width: 100%; - width: 180px; -} -#qr p { - text-align: center; -} -.post-copyright { - background: #f5f5f5; - border-left: 3px solid #ff2a2a; - list-style: none; - margin: 2em 0 0; - padding: 0.5em 1em; -} -.category-all-page .category-all-title { - text-align: center; -} -.category-all-page .category-all { - margin-top: 20px; -} -.category-all-page .category-list { - list-style: none; - margin: 0; - padding: 0; -} -.category-all-page .category-list-item { - margin: 5px 10px; -} -.category-all-page .category-list-count { - color: #bbb; -} -.category-all-page .category-list-count::before { - content: ' ('; - display: inline; -} -.category-all-page .category-list-count::after { - content: ') '; - display: inline; -} -.category-all-page .category-list-child { - padding-left: 10px; -} -.event-list { - padding: 0; -} -.event-list hr { - background: #222; - margin: 20px 0 45px 0; -} -.event-list hr::after { - background: #222; - color: #fff; - content: 'NOW'; - display: inline-block; - font-weight: bold; - padding: 0 5px; - text-align: right; -} -.event-list .event { - background: #222; - margin: 20px 0; - min-height: 40px; - padding: 15px 0 15px 10px; -} -.event-list .event .event-summary { - color: #fff; - margin: 0; - padding-bottom: 3px; -} -.event-list .event .event-summary::before { - animation: dot-flash 1s alternate infinite ease-in-out; - color: #fff; - content: '\f111'; - display: inline-block; - font-family: 'FontAwesome'; - font-size: 10px; - margin-right: 25px; - vertical-align: middle; -} -.event-list .event .event-relative-time { - color: #bbb; - display: inline-block; - font-size: 12px; - font-weight: 400; - padding-left: 12px; -} -.event-list .event .event-details { - color: #fff; - display: block; - line-height: 18px; - margin-left: 56px; - padding-bottom: 6px; - padding-top: 3px; - text-indent: -24px; -} -.event-list .event .event-details::before { - color: #fff; - display: inline-block; - font-family: 'FontAwesome'; - margin-right: 9px; - text-align: center; - text-indent: 0; - width: 14px; -} -.event-list .event .event-details.event-location::before { - content: '\f041'; -} -.event-list .event .event-details.event-duration::before { - content: '\f017'; -} -.event-list .event-past { - background: #f5f5f5; -} -.event-list .event-past .event-summary, -.event-list .event-past .event-details { - color: #bbb; - opacity: 0.9; -} -.event-list .event-past .event-summary::before, -.event-list .event-past .event-details::before { - animation: none; - color: #bbb; -} -@-moz-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-webkit-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@-o-keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -@keyframes dot-flash { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.8); - } -} -ul.breadcrumb { - font-size: 0.75em; - list-style: none; - margin: 1em 0; - padding: 0 2em; - text-align: center; -} -ul.breadcrumb li { - display: inline; -} -ul.breadcrumb li + li::before { - content: '/\00a0'; - font-weight: normal; - padding: 0.5em; -} -ul.breadcrumb li + li:last-child { - font-weight: bold; -} -.tag-cloud { - text-align: center; -} -.tag-cloud a { - display: inline-block; - margin: 10px; -} -.tag-cloud a:hover { - color: #222 !important; -} -.gt-header a, -.gt-comments a, -.gt-popup a { - border-bottom: none; -} -.gt-container .gt-popup .gt-action.is--active::before { - top: 0.7em; -} -.search-pop-overlay { - background: rgba(0,0,0,0.3); - display: none; - height: 100%; - left: 0; - overflow: hidden; - position: fixed; - top: 0; - width: 100%; - z-index: 1400; -} -.search-popup { - background: #fff; - border-radius: 5px; - color: #333; - display: none; - height: 80%; - left: 50%; - margin-left: -350px; - padding: 0; - position: fixed; - top: 10%; - width: 700px; - z-index: 1500; -} -@media (max-width: 767px) { - .search-popup { - border-radius: 0; - height: 100%; - left: 0; - margin: 0; - padding: 0; - top: 0; - width: 100%; - } -} -.search-popup .search-icon, -.search-popup .popup-btn-close { - color: #999; - display: inline-block; - font-size: 18px; - height: 36px; - padding-left: 10px; - padding-right: 10px; - width: 18px; -} -.search-popup .popup-btn-close { - border-left: 1px solid #eee; - cursor: pointer; - float: right; -} -.search-popup .popup-btn-close:hover .fa { - color: #222; -} -.search-popup .search-header { - background: #f5f5f5; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - padding: 5px; -} -.search-loading-icon { - margin: 20% auto 0 auto; - text-align: center; -} -.search-popup ul.search-result-list { - margin: 0 5px; - padding: 0; -} -.search-popup p.search-result { - border-bottom: 1px dashed #ccc; - padding: 5px 0; -} -.search-popup a.search-result-title { - font-weight: bold; -} -.search-popup .search-keyword { - border-bottom: 1px dashed #ff2a2a; - color: #ff2a2a; - font-weight: bold; -} -.search-popup #search-result { - height: calc(100% - 55px); - overflow: auto; - padding: 5px 25px; - position: relative; -} -.search-popup .search-input-container { - display: inline-block; - height: 36px; - line-height: 36px; - padding: 0 5px; - position: absolute; - width: calc(100% - 90px); -} -.search-popup .search-input-container input { - background: transparent; - border: 0; - display: block; - height: 20px; - outline: 0; - padding: 8px 0; - vertical-align: middle; - width: 100%; -} -.search-popup #no-result { - color: #ccc; - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); -} -.popular-posts-header { - border-bottom: 1px solid #eee; - display: block; - font-size: 1.125em; - margin-bottom: 10px; - margin-top: 60px; -} -.popular-posts { - padding: 0; -} -.popular-posts .popular-posts-item { - margin-left: 2em; -} -.popular-posts .popular-posts-item .popular-posts-title { - font-size: 0.875em; - font-weight: normal; - line-height: 2.4; - margin: 0; -} -.header { - margin: 0 auto; - position: relative; - width: calc(100% - 20px); -} -@media (min-width: 1200px) { - .header { - width: 1160px; - } -} -@media (min-width: 1600px) { - .header { - width: 73%; - } -} -@media (max-width: 991px) { - .header { - width: auto; - } -} -.header-inner { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - overflow: hidden; - padding: 0; - position: absolute; - top: 0; - width: 240px; -} -@media (min-width: 1200px) { - .header-inner { - width: 240px; - } -} -@media (max-width: 991px) { - .header-inner { - border-radius: initial; - position: relative; - width: auto; - } -} -.main::before, -.main::after { - content: ' '; - display: table; -} -.main::after { - clear: both; -} -@media (max-width: 991px) { - .main-inner { - width: auto; - } -} -.content-wrap { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - box-sizing: border-box; - float: right; - padding: 40px; - width: calc(100% - 252px); -} -@media (max-width: 991px) { - .content-wrap { - border-radius: initial; - padding: 20px; - width: 100%; - } -} -.sidebar { - background: #eee; - box-shadow: none; - float: left; - position: static; - width: 240px; -} -@media (max-width: 991px) { - .sidebar { - display: none; - } -} -.sidebar-toggle { - display: none; -} -.footer-inner { - padding-left: 260px; -} -.back-to-top { - left: auto; - right: 30px; -} -@media (max-width: 991px) { - .back-to-top { - right: 20px; - } -} -@media (max-width: 991px) { - .footer-inner { - padding-left: 0; - padding-right: 0; - width: auto; - } -} -.site-brand-container { - position: relative; -} -.site-meta { - background: #222; - color: #fff; - padding: 20px 0; -} -@media (max-width: 991px) { - .site-meta { - box-shadow: 0 0 16px rgba(0,0,0,0.5); - } -} -.brand { - background: none; - padding: 0; -} -.brand:hover { - color: #fff; -} -.site-subtitle { - font-weight: initial; - margin: 10px 10px 0; -} -.custom-logo-image { - margin-top: 20px; -} -@media (max-width: 991px) { - .custom-logo-image { - display: none; - } -} -.site-nav-toggle { - left: 20px; - top: 50%; - transform: translateY(-50%); -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav-toggle { - display: block; - } -} -.site-nav-toggle .toggle .toggle-line { - background: #fff; -} -@media (min-width: 768px) and (max-width: 991px) { - .site-nav { - display: none; - } -} -.menu-item-active a, -.menu .menu-item a:hover, -.menu .menu-item span.exturl:hover { - background: #f5f5f5; -} -.menu-item-active a::after, -.menu .menu-item a:hover::after, -.menu .menu-item span.exturl:hover::after { - background: #bbb; - border-radius: 50%; - content: ' '; - height: 6px; - margin-top: -3px; - position: absolute; - right: 15px; - top: 50%; - width: 6px; -} -.menu .menu-item { - display: block; - margin: 0; -} -.menu .menu-item a, -.menu .menu-item span.exturl { - padding: 5px 20px; - position: relative; - text-align: left; - transition-property: background-color; -} -.menu .menu-item .badge { - background: #ccc; - border-radius: 10px; - color: #fff; - float: right; - padding: 2px 5px; - text-shadow: 1px 1px 0 rgba(0,0,0,0.1); - vertical-align: middle; -} -.sub-menu { - background: #fff; - border-bottom: 1px solid #ddd; - margin: 0; - padding: 6px 0; -} -.sub-menu .menu-item { - display: inline-block; -} -.sub-menu .menu-item a, -.sub-menu .menu-item span.exturl { - margin: 5px 10px; - padding: initial; -} -.sub-menu .menu-item a:hover, -.sub-menu .menu-item span.exturl:hover { - background: initial; - color: #fc6423; -} -.sub-menu .menu-item a::after, -.sub-menu .menu-item span.exturl::after { - content: initial !important; -} -.sub-menu .menu-item-active a { - background: #fff; - border-bottom-color: #fc6423; - color: #fc6423; -} -.sub-menu .menu-item-active a:hover { - background: #fff; - border-bottom-color: #fc6423; -} -.sidebar { - bottom: auto; - right: auto; -} -.sidebar a, -.sidebar span.exturl { - color: #555; -} -.sidebar a:hover, -.sidebar span.exturl:hover { - border-bottom-color: #222; - color: #222; -} -.sidebar-inner { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - box-sizing: border-box; - color: #555; - width: 240px; - opacity: 0; -} -.sidebar-inner.affix { - position: fixed; - top: 12px; -} -.sidebar-inner.affix-bottom { - position: absolute; -} -.site-state-item { - padding: 0 10px; -} -.sidebar-button { - border-bottom: 1px dotted #ccc; - border-top: 1px dotted #ccc; - margin-top: 10px; - text-align: center; -} -.sidebar-button a { - border: 0; - color: #fc6423; - display: block; -} -.sidebar-button a:hover { - background: none; - border: 0; - color: #e34603; -} -.sidebar-button a:hover .fa { - color: #e34603; -} -.links-of-author { - display: flex; - flex-wrap: wrap; - margin-top: 10px; - justify-content: center; -} -.links-of-author-item { - margin: 5px 0 0; - width: 50%; -} -.links-of-author-item a, -.links-of-author-item span.exturl { - box-sizing: border-box; - display: inline-block; - margin-bottom: 0; - margin-right: 0; - max-width: 216px; - overflow: hidden; - padding: 0 5px; - text-overflow: ellipsis; - white-space: nowrap; -} -.links-of-author-item a, -.links-of-author-item span.exturl { - border-bottom: none; - display: block; - text-decoration: none; -} -.links-of-author-item a::before, -.links-of-author-item span.exturl::before { - display: none; -} -.links-of-author-item a:hover, -.links-of-author-item span.exturl:hover { - background: #eee; - border-radius: 4px; -} -.links-of-author-item .fa { - margin-right: 2px; -} -.links-of-blogroll-item { - padding: 0; -} -.content-wrap { - background: initial; - box-shadow: initial; - padding: initial; -} -.post-block { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); - padding: 40px; -} -.post-block + .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin-top: 12px; -} -.comments { - background: #fff; - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin: auto; - margin-top: 12px; - padding: 40px; -} -.tabs-comment { - margin-top: 1em; -} -.posts-expand { - padding-top: initial; -} -.post-eof { - display: none; -} -.pagination { - background: #fff; - border-radius: initial; - border-top: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin: 12px 0 0; - padding: 10px 0 10px; -} -.pagination .prev, -.pagination .next, -.pagination .page-number { - margin-bottom: initial; - top: initial; -} -.main { - padding-bottom: initial; -} -.footer { - bottom: auto; -} -.sub-menu { - border-bottom: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12); -} -.sub-menu + .content .post-block { - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - margin-top: 12px; -} -@media (min-width: 768px) and (max-width: 991px) { - .sub-menu + .content .post-block { - margin-top: 10px; - } -} -@media (max-width: 767px) { - .sub-menu + .content .post-block { - margin-top: 8px; - } -} -.post-body h1, -.post-body h2 { - border-bottom: 1px solid #eee; -} -.post-body h3 { - border-bottom: 1px dotted #eee; -} -@media (min-width: 768px) and (max-width: 991px) { - .content-wrap { - padding: 10px; - } - .posts-expand { - margin: initial; - } - .posts-expand .post-button { - margin-top: 20px; - } - .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - padding: 20px; - } - .post-block + .post-block { - margin-top: 10px; - } - .comments { - margin-top: 10px; - padding: 10px 20px; - } - .pagination { - margin: 10px 0 0; - } -} -@media (max-width: 767px) { - .content-wrap { - padding: 8px; - } - .posts-expand { - margin: initial; - } - .posts-expand .post-button { - margin: 12px 0; - } - .post-block { - border-radius: initial; - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.06), 0 1px 5px 0 rgba(0,0,0,0.12), 0 -1px 0.5px 0 rgba(0,0,0,0.09); - min-height: auto; - padding: 12px; - } - .post-block + .post-block { - margin-top: 8px; - } - .comments { - margin-top: 8px; - padding: 10px 12px; - } - .pagination { - margin: 8px 0 0; - } -} diff --git a/old/d/233.html b/d/233.html similarity index 100% rename from old/d/233.html rename to d/233.html diff --git a/old/d/dg.html b/d/dg.html similarity index 100% rename from old/d/dg.html rename to d/dg.html diff --git a/old/d/index.html b/d/index.html similarity index 100% rename from old/d/index.html rename to d/index.html diff --git a/old/d/new_file.html b/d/new_file.html similarity index 100% rename from old/d/new_file.html rename to d/new_file.html diff --git a/old/d/photo.jpg b/d/photo.jpg similarity index 100% rename from old/d/photo.jpg rename to d/photo.jpg diff --git a/old/d/web2.html b/d/web2.html similarity index 100% rename from old/d/web2.html rename to d/web2.html diff --git "a/old/d/\346\266\202cp.html" "b/d/\346\266\202cp.html" similarity index 100% rename from "old/d/\346\266\202cp.html" rename to "d/\346\266\202cp.html" diff --git "a/old/d/\347\224\265\346\225\231CP/shuai.html" "b/d/\347\224\265\346\225\231CP/shuai.html" similarity index 100% rename from "old/d/\347\224\265\346\225\231CP/shuai.html" rename to "d/\347\224\265\346\225\231CP/shuai.html" diff --git "a/old/d/\347\273\210\345\276\265\347\273\245\345\205\256.html/\347\273\210\345\276\265\347\273\245\345\205\256.html" "b/d/\347\273\210\345\276\265\347\273\245\345\205\256.html/\347\273\210\345\276\265\347\273\245\345\205\256.html" similarity index 100% rename from "old/d/\347\273\210\345\276\265\347\273\245\345\205\256.html/\347\273\210\345\276\265\347\273\245\345\205\256.html" rename to "d/\347\273\210\345\276\265\347\273\245\345\205\256.html/\347\273\210\345\276\265\347\273\245\345\205\256.html" diff --git a/old/demo/ajax/ajax.html b/demo/ajax/ajax.html similarity index 100% rename from old/demo/ajax/ajax.html rename to demo/ajax/ajax.html diff --git a/old/demo/ajax/ajaxtext.txt b/demo/ajax/ajaxtext.txt similarity index 100% rename from old/demo/ajax/ajaxtext.txt rename to demo/ajax/ajaxtext.txt diff --git a/exam.html b/exam.html deleted file mode 100644 index bdfd04a..0000000 --- a/exam.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Hi, I'm Cortana. - - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - - - -
- - -
- - - -
-
- -

-

- - - -
- - - - -
- -
- - - -
- - - - - -
- - -
- -
- - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old/game/index.html b/game/index.html similarity index 100% rename from old/game/index.html rename to game/index.html diff --git a/images/algolia_logo.svg b/images/algolia_logo.svg deleted file mode 100644 index 4702423..0000000 --- a/images/algolia_logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/images/apple-touch-icon-next.png b/images/apple-touch-icon-next.png deleted file mode 100644 index 86a0d1d..0000000 Binary files a/images/apple-touch-icon-next.png and /dev/null differ diff --git a/images/avatar.gif b/images/avatar.gif deleted file mode 100644 index 28411fd..0000000 Binary files a/images/avatar.gif and /dev/null differ diff --git a/images/cc-by-nc-nd.svg b/images/cc-by-nc-nd.svg deleted file mode 100644 index 79a4f2e..0000000 --- a/images/cc-by-nc-nd.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nc-sa.svg b/images/cc-by-nc-sa.svg deleted file mode 100644 index bf6bc26..0000000 --- a/images/cc-by-nc-sa.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nc.svg b/images/cc-by-nc.svg deleted file mode 100644 index 3697349..0000000 --- a/images/cc-by-nc.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-nd.svg b/images/cc-by-nd.svg deleted file mode 100644 index 934c61e..0000000 --- a/images/cc-by-nd.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/images/cc-by-sa.svg b/images/cc-by-sa.svg deleted file mode 100644 index 463276a..0000000 --- a/images/cc-by-sa.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-by.svg b/images/cc-by.svg deleted file mode 100644 index 4bccd14..0000000 --- a/images/cc-by.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/images/cc-zero.svg b/images/cc-zero.svg deleted file mode 100644 index 0f86639..0000000 --- a/images/cc-zero.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/favicon-16x16-next.png b/images/favicon-16x16-next.png deleted file mode 100644 index de8c5d3..0000000 Binary files a/images/favicon-16x16-next.png and /dev/null differ diff --git a/images/favicon-32x32-next.png b/images/favicon-32x32-next.png deleted file mode 100644 index e02f5f4..0000000 Binary files a/images/favicon-32x32-next.png and /dev/null differ diff --git a/images/logo.svg b/images/logo.svg deleted file mode 100644 index cbb3937..0000000 --- a/images/logo.svg +++ /dev/null @@ -1,23 +0,0 @@ - -image/svg+xml diff --git a/images/quote-l.svg b/images/quote-l.svg deleted file mode 100644 index 6dd94a4..0000000 --- a/images/quote-l.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - diff --git a/images/quote-r.svg b/images/quote-r.svg deleted file mode 100644 index 312b64d..0000000 --- a/images/quote-r.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/old/index.css b/index.css similarity index 100% rename from old/index.css rename to index.css diff --git a/index.html b/index.html index 371bb2f..c05dae9 100644 --- a/index.html +++ b/index.html @@ -1,1393 +1,63 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hi, I'm Cortana. - - - - - - - - - - - - - - - -
-
- -
-
- - - -
- - - - -
-
- - -
- - 0% -
-
- - -
-
-
- - -
- - -
- - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

随着手机照片越来越多,手机空间越来越小,把手机照片腾到电脑上或许是一个减小空间的办法。 - -

- - 阅读全文 » - -
- - - -

- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

寒假期间,本人的电脑硬盘坏掉了。

-

总结一点经验吧,希望能帮助到您。

- -
- - 阅读全文 » - -
- - - -
- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

转载自知乎:https://zhuanlan.zhihu.com/p/151392411

-

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

- -
- - 阅读全文 » - -
- - - -
- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

今天再次尝试 wsl+gdb 调试,照舅失败

-

于是我搞了一个 “P分区” - -

- - 阅读全文 » - -
- - - -

- - - - -
-
-
-
- - - - - - - - - - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

教你设置 batch-shortcuts

-

img - -

- - 阅读全文 » - -
- - - -

- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

使用一个叫 manicTime 的软件 - -

- - 阅读全文 » - -
- - - -

- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

QQ空间手滑点赞太麻烦,用键盘吧。

-

嗯,我文思枯竭了,编不出什么内容充实的文章,就写下过程贴代码吧 - -

- - 阅读全文 » - -
- - - -

- - - - -
-
-
-
- - - - - - - -
- - - - - -
-

- - -

- - -
- - - - -
- - -

今天手机屏幕出问题手机差点变砖

- -
- - 阅读全文 » - -
- - - -
- - - - -
-
-
-
- - - - - - - - - - - - -
- - - - - - -
- - - - -
- - - - - - - - -
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + TCP_Website + + + + + + +
+ +

Hello!

+

Here is the website of TCPSoft

+
+

 ●友情链接:一个制作比较精良的网页:tcpsoft.me/520

+

 ●友情链接:访问我的github

+

 ●友情链接:内江六中司南科技社官网跳转链接

+

 ●友情链接:内江六中司南科技社官网

+

 ●友情链接:内江六中司南科技社介绍

+

 ●友情链接:内江六中官网

+

 ●站内链接:cdn - 内容分发中心

+

 ●站内链接:games - HTML5游戏

+

 ●站内链接:司南科技社 网页活动制作页面

+
+
+
+ + + diff --git a/old/index.js b/index.js similarity index 100% rename from old/index.js rename to index.js diff --git a/index.php b/index.php new file mode 100644 index 0000000..b131112 --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ + diff --git a/js/algolia-search.js b/js/algolia-search.js deleted file mode 100644 index 07966d8..0000000 --- a/js/algolia-search.js +++ /dev/null @@ -1,109 +0,0 @@ -/* global instantsearch, CONFIG */ - -window.addEventListener('DOMContentLoaded', () => { - const algoliaSettings = CONFIG.algolia; - - let search = instantsearch({ - appId : algoliaSettings.appID, - apiKey : algoliaSettings.apiKey, - indexName : algoliaSettings.indexName, - searchFunction: helper => { - let searchInput = document.querySelector('#search-input input'); - if (searchInput.value) { - helper.search(); - } - } - }); - - window.pjax && search.on('render', () => { - window.pjax.refresh(document.getElementById('algolia-hits')); - }); - - // Registering Widgets - [ - instantsearch.widgets.searchBox({ - container : '#search-input', - placeholder: algoliaSettings.labels.input_placeholder - }), - - instantsearch.widgets.stats({ - container: '#algolia-stats', - templates: { - body: data => { - let stats = algoliaSettings.labels.hits_stats - .replace(/\$\{hits}/, data.nbHits) - .replace(/\$\{time}/, data.processingTimeMS); - return `${stats} - - Algolia - -
`; - } - } - }), - - instantsearch.widgets.hits({ - container : '#algolia-hits', - hitsPerPage: algoliaSettings.hits.per_page || 10, - templates : { - item: data => { - let link = data.permalink ? data.permalink : CONFIG.root + data.path; - return `${data._highlightResult.title.value}`; - }, - empty: data => { - return `
- ${algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query)} -
`; - } - }, - cssClasses: { - item: 'algolia-hit-item' - } - }), - - instantsearch.widgets.pagination({ - container : '#algolia-pagination', - scrollTo : false, - showFirstLast: false, - labels : { - first : '', - last : '', - previous: '', - next : '' - }, - cssClasses: { - root : 'pagination', - item : 'pagination-item', - link : 'page-number', - active : 'current', - disabled: 'disabled-item' - } - }) - ].forEach(search.addWidget, search); - - search.start(); - - // Handle and trigger popup window - document.querySelector('.popup-trigger').addEventListener('click', () => { - document.body.style.overflow = 'hidden'; - document.querySelector('.search-pop-overlay').style.display = 'block'; - document.querySelector('.popup').style.display = 'block'; - document.querySelector('#search-input input').focus(); - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.style.overflow = ''; - document.querySelector('.search-pop-overlay').style.display = 'none'; - document.querySelector('.popup').style.display = 'none'; - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - window.addEventListener('pjax:success', onPopupClose); - window.addEventListener('keyup', event => { - if (event.which === 27) { - onPopupClose(); - } - }); -}); diff --git a/js/bookmark.js b/js/bookmark.js deleted file mode 100644 index b633883..0000000 --- a/js/bookmark.js +++ /dev/null @@ -1,56 +0,0 @@ -/* global CONFIG */ - -window.addEventListener('DOMContentLoaded', () => { - 'use strict'; - - var doSaveScroll = () => { - localStorage.setItem('bookmark' + location.pathname, window.scrollY); - }; - - var scrollToMark = () => { - var top = localStorage.getItem('bookmark' + location.pathname); - top = parseInt(top, 10); - // If the page opens with a specific hash, just jump out - if (!isNaN(top) && location.hash === '') { - // Auto scroll to the position - window.anime({ - targets : document.scrollingElement, - duration : 200, - easing : 'linear', - scrollTop: top - }); - } - }; - // Register everything - var init = function(trigger) { - // Create a link element - var link = document.querySelector('.book-mark-link'); - // Scroll event - window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0)); - // Register beforeunload event when the trigger is auto - if (trigger === 'auto') { - // Register beforeunload event - window.addEventListener('beforeunload', doSaveScroll); - window.addEventListener('pjax:send', doSaveScroll); - } - // Save the position by clicking the icon - link.addEventListener('click', () => { - doSaveScroll(); - window.anime({ - targets : link, - duration: 200, - easing : 'linear', - top : -30, - complete: () => { - setTimeout(() => { - link.style.top = ''; - }, 400); - } - }); - }); - scrollToMark(); - window.addEventListener('pjax:success', scrollToMark); - }; - - init(CONFIG.bookmark.save); -}); diff --git a/js/diy.js b/js/diy.js deleted file mode 100644 index 066a864..0000000 --- a/js/diy.js +++ /dev/null @@ -1,40 +0,0 @@ -//添加 - -//link = document.getElementsByClassName("post-copyright-link")[0].children[1]; -//href = link.getAttribute("href").replace("/http:/","https://"); -//link.setAttribute("href",href); -//link.innerHTML=link.innerHTML.replace("http://","https://") - -// window.onload = function(){ -$(document).ready(function(){ - cos_root="https://blogsrc-1301043685.cos.ap-chengdu.myqcloud.com/" - img=document.getElementsByTagName("img") - for(i=0;i { - // Popup Window - let isfetched = false; - let datas; - let isXml = true; - // Search DB path - let searchPath = CONFIG.path; - if (searchPath.length === 0) { - searchPath = 'search.xml'; - } else if (/json$/i.test(searchPath)) { - isXml = false; - } - const path = CONFIG.root + searchPath; - const input = document.getElementById('search-input'); - const resultContent = document.getElementById('search-result'); - - // Ref: https://github.com/ForbesLindesay/unescape-html - const unescapeHtml = html => { - return String(html) - .replace(/"/g, '"') - .replace(/'/g, '\'') - .replace(/:/g, ':') - // Replace all the other &#x; chars - .replace(/&#(\d+);/g, (m, p) => { - return String.fromCharCode(p); - }) - .replace(/</g, '<') - .replace(/>/g, '>') - .replace(/&/g, '&'); - }; - - const getIndexByWord = (word, text, caseSensitive) => { - let wordLen = word.length; - if (wordLen === 0) return []; - let startPosition = 0; - let position = []; - let index = []; - if (!caseSensitive) { - text = text.toLowerCase(); - word = word.toLowerCase(); - } - while ((position = text.indexOf(word, startPosition)) > -1) { - index.push({ - position: position, - word : word - }); - startPosition = position + wordLen; - } - return index; - }; - - // Merge hits into slices - const mergeIntoSlice = (start, end, index, searchText) => { - let item = index[index.length - 1]; - let { position, word } = item; - let hits = []; - let searchTextCountInSlice = 0; - while (position + word.length <= end && index.length !== 0) { - if (word === searchText) { - searchTextCountInSlice++; - } - hits.push({ - position: position, - length : word.length - }); - let wordEnd = position + word.length; - - // Move to next position of hit - index.pop(); - while (index.length !== 0) { - item = index[index.length - 1]; - position = item.position; - word = item.word; - if (wordEnd > position) { - index.pop(); - } else { - break; - } - } - } - return { - hits : hits, - start : start, - end : end, - searchTextCount: searchTextCountInSlice - }; - }; - - // Highlight title and content - const highlightKeyword = (text, slice) => { - let result = ''; - let prevEnd = slice.start; - slice.hits.forEach(hit => { - result += text.substring(prevEnd, hit.position); - let end = hit.position + hit.length; - result += `${text.substring(hit.position, end)}`; - prevEnd = end; - }); - result += text.substring(prevEnd, slice.end); - return result; - }; - - const inputEventFunction = () => { - let searchText = input.value.trim().toLowerCase(); - let keywords = searchText.split(/[-\s]+/); - if (keywords.length > 1) { - keywords.push(searchText); - } - let resultItems = []; - if (searchText.length > 0) { - // Perform local searching - datas.forEach(data => { - // Only match articles with not empty titles - if (!data.title) return; - let searchTextCount = 0; - let title = data.title.trim(); - let titleInLowerCase = title.toLowerCase(); - let content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : ''; - if (CONFIG.localsearch.unescape) { - content = unescapeHtml(content); - } - let contentInLowerCase = content.toLowerCase(); - let articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/'); - let indexOfTitle = []; - let indexOfContent = []; - keywords.forEach(keyword => { - indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false)); - indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false)); - }); - - // Show search results - if (indexOfTitle.length > 0 || indexOfContent.length > 0) { - let hitCount = indexOfTitle.length + indexOfContent.length; - // Sort index by position of keyword - [indexOfTitle, indexOfContent].forEach(index => { - index.sort((itemLeft, itemRight) => { - if (itemRight.position !== itemLeft.position) { - return itemRight.position - itemLeft.position; - } - return itemLeft.word.length - itemRight.word.length; - }); - }); - - let slicesOfTitle = []; - if (indexOfTitle.length !== 0) { - let tmp = mergeIntoSlice(0, title.length, indexOfTitle, searchText); - searchTextCount += tmp.searchTextCountInSlice; - slicesOfTitle.push(tmp); - } - - let slicesOfContent = []; - while (indexOfContent.length !== 0) { - let item = indexOfContent[indexOfContent.length - 1]; - let { position, word } = item; - // Cut out 100 characters - let start = position - 20; - let end = position + 80; - if (start < 0) { - start = 0; - } - if (end < position + word.length) { - end = position + word.length; - } - if (end > content.length) { - end = content.length; - } - let tmp = mergeIntoSlice(start, end, indexOfContent, searchText); - searchTextCount += tmp.searchTextCountInSlice; - slicesOfContent.push(tmp); - } - - // Sort slices in content by search text's count and hits' count - slicesOfContent.sort((sliceLeft, sliceRight) => { - if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) { - return sliceRight.searchTextCount - sliceLeft.searchTextCount; - } else if (sliceLeft.hits.length !== sliceRight.hits.length) { - return sliceRight.hits.length - sliceLeft.hits.length; - } - return sliceLeft.start - sliceRight.start; - }); - - // Select top N slices in content - let upperBound = parseInt(CONFIG.localsearch.top_n_per_article, 10); - if (upperBound >= 0) { - slicesOfContent = slicesOfContent.slice(0, upperBound); - } - - let resultItem = ''; - - if (slicesOfTitle.length !== 0) { - resultItem += `
  • ${highlightKeyword(title, slicesOfTitle[0])}`; - } else { - resultItem += `
  • ${title}`; - } - - slicesOfContent.forEach(slice => { - resultItem += `

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

    `; - }); - - resultItem += '
  • '; - resultItems.push({ - item : resultItem, - searchTextCount: searchTextCount, - hitCount : hitCount, - id : resultItems.length - }); - } - }); - } - if (keywords.length === 1 && keywords[0] === '') { - resultContent.innerHTML = '
    '; - } else if (resultItems.length === 0) { - resultContent.innerHTML = '
    '; - } else { - resultItems.sort((resultLeft, resultRight) => { - if (resultLeft.searchTextCount !== resultRight.searchTextCount) { - return resultRight.searchTextCount - resultLeft.searchTextCount; - } else if (resultLeft.hitCount !== resultRight.hitCount) { - return resultRight.hitCount - resultLeft.hitCount; - } - return resultRight.id - resultLeft.id; - }); - let searchResultList = ''; - resultContent.innerHTML = searchResultList; - window.pjax && window.pjax.refresh(resultContent); - } - }; - - const fetchData = callback => { - fetch(path) - .then(response => response.text()) - .then(res => { - // Get the contents from search data - isfetched = true; - datas = isXml ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(element => { - return { - title : element.querySelector('title').innerHTML, - content: element.querySelector('content').innerHTML, - url : element.querySelector('url').innerHTML - }; - }) : JSON.parse(res); - - // Remove loading animation - document.querySelector('.search-pop-overlay').innerHTML = ''; - document.body.style.overflow = ''; - - if (callback) { - callback(); - } - }); - }; - - if (CONFIG.localsearch.preload) { - fetchData(); - } - - const proceedSearch = () => { - document.body.style.overflow = 'hidden'; - document.querySelector('.search-pop-overlay').style.display = 'block'; - document.querySelector('.popup').style.display = 'block'; - document.getElementById('search-input').focus(); - }; - - // Search function - const searchFunc = () => { - document.querySelector('.search-pop-overlay').style.display = ''; - document.querySelector('.search-pop-overlay').innerHTML = '
    '; - fetchData(proceedSearch); - }; - - if (CONFIG.localsearch.trigger === 'auto') { - input.addEventListener('input', inputEventFunction); - } else { - document.querySelector('.search-icon').addEventListener('click', inputEventFunction); - input.addEventListener('keypress', event => { - if (event.keyCode === 13) { - inputEventFunction(); - } - }); - } - - // Handle and trigger popup window - document.querySelector('.popup-trigger').addEventListener('click', () => { - if (isfetched === false) { - searchFunc(); - } else { - proceedSearch(); - } - }); - - // Monitor main search box - const onPopupClose = () => { - document.body.style.overflow = ''; - document.querySelector('.search-pop-overlay').style.display = 'none'; - document.querySelector('.popup').style.display = 'none'; - }; - - document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose); - document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); - window.addEventListener('pjax:success', onPopupClose); - window.addEventListener('keyup', event => { - if (event.which === 27) { - onPopupClose(); - } - }); -}); diff --git a/js/motion.js b/js/motion.js deleted file mode 100644 index 132cd8f..0000000 --- a/js/motion.js +++ /dev/null @@ -1,170 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -if (window.$ && window.$.Velocity) window.Velocity = window.$.Velocity; - -NexT.motion = {}; - -NexT.motion.integrator = { - queue : [], - cursor: -1, - init : function() { - this.queue = []; - this.cursor = -1; - return this; - }, - add: function(fn) { - this.queue.push(fn); - return this; - }, - next: function() { - this.cursor++; - var fn = this.queue[this.cursor]; - typeof fn === 'function' && fn(NexT.motion.integrator); - }, - bootstrap: function() { - this.next(); - } -}; - -NexT.motion.middleWares = { - logo: function(integrator) { - var sequence = []; - var brand = document.querySelector('.brand'); - var image = document.querySelector('.custom-logo-image'); - var title = document.querySelector('.site-title'); - var subtitle = document.querySelector('.site-subtitle'); - var logoLineTop = document.querySelector('.logo-line-before i'); - var logoLineBottom = document.querySelector('.logo-line-after i'); - - brand && sequence.push({ - e: brand, - p: {opacity: 1}, - o: {duration: 200} - }); - - function getMistLineSettings(element, translateX) { - return { - e: element, - p: {translateX: translateX}, - o: { - duration : 500, - sequenceQueue: false - } - }; - } - - function pushImageToSequence() { - sequence.push({ - e: image, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - } - - CONFIG.scheme === 'Mist' && logoLineTop && logoLineBottom - && sequence.push( - getMistLineSettings(logoLineTop, '100%'), - getMistLineSettings(logoLineBottom, '-100%') - ); - - CONFIG.scheme === 'Muse' && image && pushImageToSequence(); - - title && sequence.push({ - e: title, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - - subtitle && sequence.push({ - e: subtitle, - p: {opacity: 1, top: 0}, - o: {duration: 200} - }); - - (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') && image && pushImageToSequence(); - - if (sequence.length > 0) { - sequence[sequence.length - 1].o.complete = function() { - integrator.next(); - }; - Velocity.RunSequence(sequence); - } else { - integrator.next(); - } - - if (CONFIG.motion.async) { - integrator.next(); - } - }, - - menu: function(integrator) { - - Velocity(document.querySelectorAll('.menu-item'), 'transition.slideDownIn', { - display : null, - duration: 200, - complete: function() { - integrator.next(); - } - }); - - if (CONFIG.motion.async) { - integrator.next(); - } - }, - - postList: function(integrator) { - - var postBlock = document.querySelectorAll('.post-block, .pagination, .comments'); - var postBlockTransition = CONFIG.motion.transition.post_block; - var postHeader = document.querySelectorAll('.post-header'); - var postHeaderTransition = CONFIG.motion.transition.post_header; - var postBody = document.querySelectorAll('.post-body'); - var postBodyTransition = CONFIG.motion.transition.post_body; - var collHeader = document.querySelectorAll('.collection-header'); - var collHeaderTransition = CONFIG.motion.transition.coll_header; - var hasPost = postBlock.length > 0; - - if (hasPost) { - var postMotionOptions = window.postMotionOptions || { - stagger : 100, - drag : true, - complete: function() { - integrator.next(); - } - }; - - if (CONFIG.motion.transition.post_block) { - Velocity(postBlock, 'transition.' + postBlockTransition, postMotionOptions); - } - if (CONFIG.motion.transition.post_header) { - Velocity(postHeader, 'transition.' + postHeaderTransition, postMotionOptions); - } - if (CONFIG.motion.transition.post_body) { - Velocity(postBody, 'transition.' + postBodyTransition, postMotionOptions); - } - if (CONFIG.motion.transition.coll_header) { - Velocity(collHeader, 'transition.' + collHeaderTransition, postMotionOptions); - } - } - if (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') { - integrator.next(); - } - }, - - sidebar: function(integrator) { - var sidebarAffix = document.querySelector('.sidebar-inner'); - var sidebarAffixTransition = CONFIG.motion.transition.sidebar; - // Only for Pisces | Gemini. - if (sidebarAffixTransition && (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini')) { - Velocity(sidebarAffix, 'transition.' + sidebarAffixTransition, { - display : null, - duration: 200, - complete: function() { - // After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini. - sidebarAffix.style.transform = 'initial'; - } - }); - } - integrator.next(); - } -}; diff --git a/js/next-boot.js b/js/next-boot.js deleted file mode 100644 index b841953..0000000 --- a/js/next-boot.js +++ /dev/null @@ -1,113 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -NexT.boot = {}; - -NexT.boot.registerEvents = function() { - - NexT.utils.registerScrollPercent(); - NexT.utils.registerCanIUseTag(); - - // Mobile top menu bar. - document.querySelector('.site-nav-toggle .toggle').addEventListener('click', () => { - event.currentTarget.classList.toggle('toggle-close'); - var siteNav = document.querySelector('.site-nav'); - var animateAction = siteNav.classList.contains('site-nav-on') ? 'slideUp' : 'slideDown'; - - if (typeof Velocity === 'function') { - Velocity(siteNav, animateAction, { - duration: 200, - complete: function() { - siteNav.classList.toggle('site-nav-on'); - } - }); - } else { - siteNav.classList.toggle('site-nav-on'); - } - }); - - var TAB_ANIMATE_DURATION = 200; - document.querySelectorAll('.sidebar-nav li').forEach((element, index) => { - element.addEventListener('click', event => { - var item = event.currentTarget; - var activeTabClassName = 'sidebar-nav-active'; - var activePanelClassName = 'sidebar-panel-active'; - if (item.classList.contains(activeTabClassName)) return; - - var targets = document.querySelectorAll('.sidebar-panel'); - var target = targets[index]; - var currentTarget = targets[1 - index]; - window.anime({ - targets : currentTarget, - duration: TAB_ANIMATE_DURATION, - easing : 'linear', - opacity : 0, - complete: () => { - // Prevent adding TOC to Overview if Overview was selected when close & open sidebar. - currentTarget.classList.remove(activePanelClassName); - target.style.opacity = 0; - target.classList.add(activePanelClassName); - window.anime({ - targets : target, - duration: TAB_ANIMATE_DURATION, - easing : 'linear', - opacity : 1 - }); - } - }); - - [...item.parentNode.children].forEach(element => { - element.classList.remove(activeTabClassName); - }); - item.classList.add(activeTabClassName); - }); - }); - - window.addEventListener('resize', NexT.utils.initSidebarDimension); - - window.addEventListener('hashchange', () => { - var tHash = location.hash; - if (tHash !== '' && !tHash.match(/%\S{2}/)) { - var target = document.querySelector(`.tabs ul.nav-tabs li a[href="${tHash}"]`); - target && target.click(); - } - }); -}; - -NexT.boot.refresh = function() { - - /** - * Register JS handlers by condition option. - * Need to add config option in Front-End at 'layout/_partials/head.swig' file. - */ - CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox(); - CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img'); - CONFIG.lazyload && window.lozad('.post-body img').observe(); - CONFIG.pangu && window.pangu.spacingPage(); - - CONFIG.exturl && NexT.utils.registerExtURL(); - CONFIG.copycode.enable && NexT.utils.registerCopyCode(); - NexT.utils.registerTabsTag(); - NexT.utils.registerActiveMenuItem(); - NexT.utils.registerSidebarTOC(); - NexT.utils.wrapTableWithBox(); - NexT.utils.registerVideoIframe(); -}; - -NexT.boot.motion = function() { - // Define Motion Sequence & Bootstrap Motion. - if (CONFIG.motion.enable) { - NexT.motion.integrator - .add(NexT.motion.middleWares.logo) - .add(NexT.motion.middleWares.menu) - .add(NexT.motion.middleWares.postList) - .add(NexT.motion.middleWares.sidebar) - .bootstrap(); - } - NexT.utils.updateSidebarPosition(); -}; - -window.addEventListener('DOMContentLoaded', () => { - NexT.boot.registerEvents(); - NexT.boot.refresh(); - NexT.boot.motion(); -}); diff --git a/js/schemes/muse.js b/js/schemes/muse.js deleted file mode 100644 index bff0f23..0000000 --- a/js/schemes/muse.js +++ /dev/null @@ -1,128 +0,0 @@ -/* global NexT, CONFIG, Velocity */ - -window.addEventListener('DOMContentLoaded', () => { - - var isRight = CONFIG.sidebar.position === 'right'; - var SIDEBAR_WIDTH = CONFIG.sidebar.width || 320; - var SIDEBAR_DISPLAY_DURATION = 400; - var mousePos = {}; var touchPos = {}; - - var sidebarToggleLines = { - lines: document.querySelector('.sidebar-toggle'), - init : function() { - this.lines.classList.remove('toggle-arrow', 'toggle-close'); - }, - arrow: function() { - this.lines.classList.remove('toggle-close'); - this.lines.classList.add('toggle-arrow'); - }, - close: function() { - this.lines.classList.remove('toggle-arrow'); - this.lines.classList.add('toggle-close'); - } - }; - - var sidebarToggleMotion = { - sidebarEl : document.querySelector('.sidebar'), - isSidebarVisible: false, - init : function() { - sidebarToggleLines.init(); - - window.addEventListener('mousedown', this.mousedownHandler.bind(this)); - window.addEventListener('mouseup', this.mouseupHandler.bind(this)); - document.querySelector('#sidebar-dimmer').addEventListener('click', this.clickHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('click', this.clickHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('mouseenter', this.mouseEnterHandler.bind(this)); - document.querySelector('.sidebar-toggle').addEventListener('mouseleave', this.mouseLeaveHandler.bind(this)); - this.sidebarEl.addEventListener('touchstart', this.touchstartHandler.bind(this)); - this.sidebarEl.addEventListener('touchend', this.touchendHandler.bind(this)); - this.sidebarEl.addEventListener('touchmove', event => event.preventDefault()); - window.addEventListener('sidebar:show', this.showSidebar.bind(this)); - window.addEventListener('sidebar:hide', this.hideSidebar.bind(this)); - }, - mousedownHandler: function(event) { - mousePos.X = event.pageX; - mousePos.Y = event.pageY; - }, - mouseupHandler: function(event) { - var deltaX = event.pageX - mousePos.X; - var deltaY = event.pageY - mousePos.Y; - var clickingBlankPart = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)) < 20 && event.target.matches('.main'); - if (this.isSidebarVisible && (clickingBlankPart || event.target.matches('img.medium-zoom-image, .fancybox img'))) { - this.hideSidebar(); - } - }, - clickHandler: function() { - this.isSidebarVisible ? this.hideSidebar() : this.showSidebar(); - }, - mouseEnterHandler: function() { - if (!this.isSidebarVisible) { - sidebarToggleLines.arrow(); - } - }, - mouseLeaveHandler: function() { - if (!this.isSidebarVisible) { - sidebarToggleLines.init(); - } - }, - touchstartHandler: function(event) { - touchPos.X = event.touches[0].clientX; - touchPos.Y = event.touches[0].clientY; - }, - touchendHandler: function(event) { - var deltaX = event.changedTouches[0].clientX - touchPos.X; - var deltaY = event.changedTouches[0].clientY - touchPos.Y; - var effectiveSliding = Math.abs(deltaY) < 20 && ((deltaX > 30 && isRight) || (deltaX < -30 && !isRight)); - if (this.isSidebarVisible && effectiveSliding) { - this.hideSidebar(); - } - }, - showSidebar: function() { - this.isSidebarVisible = true; - this.sidebarEl.classList.add('sidebar-active'); - if (typeof Velocity === 'function') { - Velocity(document.querySelectorAll('.sidebar .motion-element'), isRight ? 'transition.slideRightIn' : 'transition.slideLeftIn', { - stagger: 50, - drag : true - }); - } - - sidebarToggleLines.close(); - NexT.utils.isDesktop() && window.anime(Object.assign({ - targets : document.body, - duration: SIDEBAR_DISPLAY_DURATION, - easing : 'linear' - }, isRight ? { - 'padding-right': SIDEBAR_WIDTH - } : { - 'padding-left': SIDEBAR_WIDTH - })); - }, - hideSidebar: function() { - this.isSidebarVisible = false; - this.sidebarEl.classList.remove('sidebar-active'); - - sidebarToggleLines.init(); - NexT.utils.isDesktop() && window.anime(Object.assign({ - targets : document.body, - duration: SIDEBAR_DISPLAY_DURATION, - easing : 'linear' - }, isRight ? { - 'padding-right': 0 - } : { - 'padding-left': 0 - })); - } - }; - sidebarToggleMotion.init(); - - function updateFooterPosition() { - var footer = document.querySelector('.footer'); - var containerHeight = document.querySelector('.header').offsetHeight + document.querySelector('.main').offsetHeight + footer.offsetHeight; - footer.classList.toggle('footer-fixed', containerHeight <= window.innerHeight); - } - - updateFooterPosition(); - window.addEventListener('resize', updateFooterPosition); - window.addEventListener('scroll', updateFooterPosition); -}); diff --git a/js/schemes/pisces.js b/js/schemes/pisces.js deleted file mode 100644 index 6ce53e3..0000000 --- a/js/schemes/pisces.js +++ /dev/null @@ -1,86 +0,0 @@ -/* global NexT, CONFIG */ - -var Affix = { - init: function(element, options) { - this.element = element; - this.offset = options || 0; - this.affixed = null; - this.unpin = null; - this.pinnedOffset = null; - this.checkPosition(); - window.addEventListener('scroll', this.checkPosition.bind(this)); - window.addEventListener('click', this.checkPositionWithEventLoop.bind(this)); - window.matchMedia('(min-width: 992px)').addListener(event => { - if (event.matches) { - this.offset = NexT.utils.getAffixParam(); - this.checkPosition(); - } - }); - }, - getState: function(scrollHeight, height, offsetTop, offsetBottom) { - let scrollTop = window.scrollY; - let targetHeight = window.innerHeight; - if (offsetTop != null && this.affixed === 'top') return scrollTop < offsetTop ? 'top' : false; - if (this.affixed === 'bottom') { - if (offsetTop != null) return this.unpin <= this.element.getBoundingClientRect().top ? false : 'bottom'; - return scrollTop + targetHeight <= scrollHeight - offsetBottom ? false : 'bottom'; - } - let initializing = this.affixed === null; - let colliderTop = initializing ? scrollTop : this.element.getBoundingClientRect().top + scrollTop; - let colliderHeight = initializing ? targetHeight : height; - if (offsetTop != null && scrollTop <= offsetTop) return 'top'; - if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'; - return false; - }, - getPinnedOffset: function() { - if (this.pinnedOffset) return this.pinnedOffset; - this.element.classList.remove('affix-top', 'affix-bottom'); - this.element.classList.add('affix'); - return (this.pinnedOffset = this.element.getBoundingClientRect().top); - }, - checkPositionWithEventLoop() { - setTimeout(this.checkPosition.bind(this), 1); - }, - checkPosition: function() { - if (window.getComputedStyle(this.element).display === 'none') return; - let height = this.element.offsetHeight - (CONFIG.sidebar.padding * 2); - let offset = this.offset; - let offsetTop = offset.top; - let offsetBottom = offset.bottom; - let scrollHeight = document.body.scrollHeight; - let affix = this.getState(scrollHeight, height, offsetTop, offsetBottom); - if (this.affixed !== affix) { - if (this.unpin != null) this.element.style.top = ''; - let affixType = 'affix' + (affix ? '-' + affix : ''); - this.affixed = affix; - this.unpin = affix === 'bottom' ? this.getPinnedOffset() : null; - this.element.classList.remove('affix', 'affix-top', 'affix-bottom'); - this.element.classList.add(affixType); - } - if (affix === 'bottom') { - this.element.style.top = scrollHeight - height - offsetBottom + 'px'; - } - } -}; - -NexT.utils.getAffixParam = function() { - const sidebarOffset = CONFIG.sidebar.offset || 12; - - let headerOffset = document.querySelector('.header-inner').offsetHeight + sidebarOffset; - let footer = document.querySelector('.footer'); - let footerInner = document.querySelector('.footer-inner'); - let footerMargin = footer.offsetHeight - footerInner.offsetHeight; - let footerOffset = footer.offsetHeight + footerMargin; - - document.querySelector('.sidebar').style.marginTop = headerOffset + 'px'; - - return { - top : headerOffset - sidebarOffset, - bottom: footerOffset - }; -}; - -window.addEventListener('DOMContentLoaded', () => { - - Affix.init(document.querySelector('.sidebar-inner'), NexT.utils.getAffixParam()); -}); diff --git a/js/utils.js b/js/utils.js deleted file mode 100644 index 9b36306..0000000 --- a/js/utils.js +++ /dev/null @@ -1,392 +0,0 @@ -/* global NexT, CONFIG */ - -HTMLElement.prototype.wrap = function(wrapper) { - this.parentNode.insertBefore(wrapper, this); - this.parentNode.removeChild(this); - wrapper.appendChild(this); -}; - -NexT.utils = { - - /** - * Wrap images with fancybox. - */ - wrapImageWithFancyBox: function() { - document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(element => { - var $image = $(element); - var imageLink = $image.attr('data-src') || $image.attr('src'); - var $imageWrapLink = $image.wrap(``).parent('a'); - if ($image.is('.post-gallery img')) { - $imageWrapLink.attr('data-fancybox', 'gallery').attr('rel', 'gallery'); - } else if ($image.is('.group-picture img')) { - $imageWrapLink.attr('data-fancybox', 'group').attr('rel', 'group'); - } else { - $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default'); - } - - var imageTitle = $image.attr('title') || $image.attr('alt'); - if (imageTitle) { - $imageWrapLink.append(`

    ${imageTitle}

    `); - // Make sure img title tag will show correctly in fancybox - $imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle); - } - }); - - $.fancybox.defaults.hash = false; - $('.fancybox').fancybox({ - loop : true, - helpers: { - overlay: { - locked: false - } - } - }); - }, - - registerExtURL: function() { - document.querySelectorAll('.exturl').forEach(element => { - element.addEventListener('click', event => { - var exturl = event.currentTarget.getAttribute('data-url'); - var decurl = decodeURIComponent(escape(window.atob(exturl))); - window.open(decurl, '_blank', 'noopener'); - return false; - }); - }); - }, - - /** - * One-click copy code support. - */ - registerCopyCode: function() { - document.querySelectorAll('figure.highlight').forEach(element => { - const box = document.createElement('div'); - element.wrap(box); - box.classList.add('highlight-container'); - box.insertAdjacentHTML('beforeend', '
    '); - var button = element.parentNode.querySelector('.copy-btn'); - button.addEventListener('click', event => { - var target = event.currentTarget; - var code = [...target.parentNode.querySelectorAll('.code .line')].map(line => line.innerText).join('\n'); - var ta = document.createElement('textarea'); - ta.style.top = window.scrollY + 'px'; // Prevent page scrolling - ta.style.position = 'absolute'; - ta.style.opacity = '0'; - ta.readOnly = true; - ta.value = code; - document.body.append(ta); - const selection = document.getSelection(); - const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false; - ta.select(); - ta.setSelectionRange(0, code.length); - ta.readOnly = false; - var result = document.execCommand('copy'); - if (CONFIG.copycode.show_result) { - target.querySelector('i').className = result ? 'fa fa-check' : 'fa fa-times'; - } - ta.blur(); // For iOS - target.blur(); - if (selected) { - selection.removeAllRanges(); - selection.addRange(selected); - } - document.body.removeChild(ta); - }); - button.addEventListener('mouseleave', event => { - setTimeout(() => { - event.target.querySelector('i').className = 'fa fa-clipboard'; - }, 300); - }); - }); - }, - - wrapTableWithBox: function() { - document.querySelectorAll('table').forEach(element => { - const box = document.createElement('div'); - box.className = 'table-container'; - element.wrap(box); - }); - }, - - registerVideoIframe: function() { - document.querySelectorAll('iframe').forEach(element => { - const supported = [ - 'www.youtube.com', - 'player.vimeo.com', - 'player.youku.com', - 'player.bilibili.com', - 'www.tudou.com' - ].some(host => element.src.includes(host)); - if (supported && !element.parentNode.matches('.video-container')) { - const box = document.createElement('div'); - box.className = 'video-container'; - element.wrap(box); - let width = Number(element.width); - let height = Number(element.height); - if (width && height) { - element.parentNode.style.paddingTop = (height / width * 100) + '%'; - } - } - }); - }, - - registerScrollPercent: function() { - var THRESHOLD = 50; - var backToTop = document.querySelector('.back-to-top'); - var readingProgressBar = document.querySelector('.reading-progress-bar'); - // For init back to top in sidebar if page was scrolled after page refresh. - window.addEventListener('scroll', () => { - var scrollPercent; - if (backToTop || readingProgressBar) { - var docHeight = document.querySelector('.container').offsetHeight; - var winHeight = window.innerHeight; - var contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : document.body.scrollHeight - winHeight; - var scrollPercentRounded = Math.round(100 * window.scrollY / contentVisibilityHeight); - scrollPercent = Math.min(scrollPercentRounded, 100) + '%'; - } - if (backToTop) { - backToTop.classList.toggle('back-to-top-on', window.scrollY > THRESHOLD); - backToTop.querySelector('span').innerText = scrollPercent; - } - if (readingProgressBar) { - readingProgressBar.style.width = scrollPercent; - } - }); - - backToTop && backToTop.addEventListener('click', () => { - window.anime({ - targets : document.scrollingElement, - duration : 500, - easing : 'linear', - scrollTop: 0 - }); - }); - }, - - /** - * Tabs tag listener (without twitter bootstrap). - */ - registerTabsTag: function() { - // Binding `nav-tabs` & `tab-content` by real time permalink changing. - document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(element => { - element.addEventListener('click', event => { - event.preventDefault(); - var target = event.currentTarget; - // Prevent selected tab to select again. - if (!target.classList.contains('active')) { - // Add & Remove active class on `nav-tabs` & `tab-content`. - [...target.parentNode.children].forEach(element => { - element.classList.remove('active'); - }); - target.classList.add('active'); - var tActive = document.getElementById(target.querySelector('a').getAttribute('href').replace('#', '')); - [...tActive.parentNode.children].forEach(element => { - element.classList.remove('active'); - }); - tActive.classList.add('active'); - // Trigger event - tActive.dispatchEvent(new Event('tabs:click', { - bubbles: true - })); - } - }); - }); - - window.dispatchEvent(new Event('tabs:register')); - }, - - registerCanIUseTag: function() { - // Get responsive height passed from iframe. - window.addEventListener('message', event => { - var data = event.data; - if ((typeof data === 'string') && (data.indexOf('ciu_embed') > -1)) { - var featureID = data.split(':')[1]; - var height = data.split(':')[2]; - document.querySelector(`iframe[data-feature=${featureID}]`).style.height = parseInt(height, 10) + 'px'; - } - }, false); - }, - - registerActiveMenuItem: function() { - document.querySelectorAll('.menu-item').forEach(element => { - var target = element.querySelector('a[href]'); - if (!target) return; - var isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', ''); - var isSubPath = target.pathname !== CONFIG.root && location.pathname.indexOf(target.pathname) === 0; - element.classList.toggle('menu-item-active', target.hostname === location.hostname && (isSamePath || isSubPath)); - }); - }, - - registerSidebarTOC: function() { - const navItems = document.querySelectorAll('.post-toc li'); - const sections = [...navItems].map(element => { - var link = element.querySelector('a.nav-link'); - // TOC item animation navigate. - link.addEventListener('click', event => { - event.preventDefault(); - var target = document.getElementById(event.currentTarget.getAttribute('href').replace('#', '')); - var offset = target.getBoundingClientRect().top + window.scrollY; - window.anime({ - targets : document.scrollingElement, - duration : 500, - easing : 'linear', - scrollTop: offset + 10 - }); - }); - return document.getElementById(link.getAttribute('href').replace('#', '')); - }); - - var tocElement = document.querySelector('.post-toc-wrap'); - function activateNavByIndex(target) { - if (target.classList.contains('active-current')) return; - - document.querySelectorAll('.post-toc .active').forEach(element => { - element.classList.remove('active', 'active-current'); - }); - target.classList.add('active', 'active-current'); - var parent = target.parentNode; - while (!parent.matches('.post-toc')) { - if (parent.matches('li')) parent.classList.add('active'); - parent = parent.parentNode; - } - // Scrolling to center active TOC element if TOC content is taller then viewport. - window.anime({ - targets : tocElement, - duration : 200, - easing : 'linear', - scrollTop: tocElement.scrollTop - (tocElement.offsetHeight / 2) + target.getBoundingClientRect().top - tocElement.getBoundingClientRect().top - }); - } - - function findIndex(entries) { - let index = 0; - let entry = entries[index]; - if (entry.boundingClientRect.top > 0) { - index = sections.indexOf(entry.target); - return index === 0 ? 0 : index - 1; - } - for (; index < entries.length; index++) { - if (entries[index].boundingClientRect.top <= 0) { - entry = entries[index]; - } else { - return sections.indexOf(entry.target); - } - } - return sections.indexOf(entry.target); - } - - function createIntersectionObserver(marginTop) { - marginTop = Math.floor(marginTop + 10000); - let intersectionObserver = new IntersectionObserver((entries, observe) => { - let scrollHeight = document.documentElement.scrollHeight + 100; - if (scrollHeight > marginTop) { - observe.disconnect(); - createIntersectionObserver(scrollHeight); - return; - } - let index = findIndex(entries); - activateNavByIndex(navItems[index]); - }, { - rootMargin: marginTop + 'px 0px -100% 0px', - threshold : 0 - }); - sections.forEach(element => { - element && intersectionObserver.observe(element); - }); - } - createIntersectionObserver(document.documentElement.scrollHeight); - }, - - hasMobileUA: function() { - var ua = navigator.userAgent; - var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g; - return pa.test(ua); - }, - - isTablet: function() { - return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA(); - }, - - isMobile: function() { - return window.screen.width < 767 && this.hasMobileUA(); - }, - - isDesktop: function() { - return !this.isTablet() && !this.isMobile(); - }, - - /** - * Init Sidebar & TOC inner dimensions on all pages and for all schemes. - * Need for Sidebar/TOC inner scrolling if content taller then viewport. - */ - initSidebarDimension: function() { - var sidebarNav = document.querySelector('.sidebar-nav'); - var sidebarNavHeight = sidebarNav.style.display !== 'none' ? sidebarNav.offsetHeight : 0; - var sidebarOffset = CONFIG.sidebar.offset || 12; - var sidebarb2tHeight = CONFIG.back2top.enable && CONFIG.back2top.sidebar ? document.querySelector('.back-to-top').offsetHeight : 0; - var sidebarSchemePadding = (CONFIG.sidebar.padding * 2) + sidebarNavHeight + sidebarb2tHeight; - // Margin of sidebar b2t: 8px -10px -20px, brings a different of 12px. - if (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') sidebarSchemePadding += (sidebarOffset * 2) - 12; - // Initialize Sidebar & TOC Height. - var sidebarWrapperHeight = document.body.offsetHeight - sidebarSchemePadding + 'px'; - document.querySelector('.site-overview-wrap').style.maxHeight = sidebarWrapperHeight; - document.querySelector('.post-toc-wrap').style.maxHeight = sidebarWrapperHeight; - }, - - updateSidebarPosition: function() { - var sidebarNav = document.querySelector('.sidebar-nav'); - var hasTOC = document.querySelector('.post-toc'); - if (hasTOC) { - sidebarNav.style.display = ''; - sidebarNav.classList.add('motion-element'); - document.querySelector('.sidebar-nav-toc').click(); - } else { - sidebarNav.style.display = 'none'; - sidebarNav.classList.remove('motion-element'); - document.querySelector('.sidebar-nav-overview').click(); - } - NexT.utils.initSidebarDimension(); - if (!this.isDesktop() || CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') return; - // Expand sidebar on post detail page by default, when post has a toc. - var display = CONFIG.page.sidebar; - if (typeof display !== 'boolean') { - // There's no definition sidebar in the page front-matter. - display = CONFIG.sidebar.display === 'always' || (CONFIG.sidebar.display === 'post' && hasTOC); - } - if (display) { - window.dispatchEvent(new Event('sidebar:show')); - } - }, - - getScript: function(url, callback, condition) { - if (condition) { - callback(); - } else { - var script = document.createElement('script'); - script.onload = script.onreadystatechange = function(_, isAbort) { - if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) { - script.onload = script.onreadystatechange = null; - script = undefined; - if (!isAbort && callback) setTimeout(callback, 0); - } - }; - script.src = url; - document.head.appendChild(script); - } - }, - - loadComments: function(element, callback) { - if (!CONFIG.comments.lazyload || !element) { - callback(); - return; - } - let intersectionObserver = new IntersectionObserver((entries, observer) => { - let entry = entries[0]; - if (entry.isIntersecting) { - callback(); - observer.disconnect(); - } - }); - intersectionObserver.observe(element); - return intersectionObserver; - } -}; diff --git a/lib/anime.min.js b/lib/anime.min.js deleted file mode 100644 index 99b263a..0000000 --- a/lib/anime.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * anime.js v3.1.0 - * (c) 2019 Julian Garnier - * Released under the MIT license - * animejs.com - */ - -!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.anime=e()}(this,function(){"use strict";var n={update:null,begin:null,loopBegin:null,changeBegin:null,change:null,changeComplete:null,loopComplete:null,complete:null,loop:1,direction:"normal",autoplay:!0,timelineOffset:0},e={duration:1e3,delay:0,endDelay:0,easing:"easeOutElastic(1, .5)",round:0},r=["translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY","perspective"],t={CSS:{},springs:{}};function a(n,e,r){return Math.min(Math.max(n,e),r)}function o(n,e){return n.indexOf(e)>-1}function u(n,e){return n.apply(null,e)}var i={arr:function(n){return Array.isArray(n)},obj:function(n){return o(Object.prototype.toString.call(n),"Object")},pth:function(n){return i.obj(n)&&n.hasOwnProperty("totalLength")},svg:function(n){return n instanceof SVGElement},inp:function(n){return n instanceof HTMLInputElement},dom:function(n){return n.nodeType||i.svg(n)},str:function(n){return"string"==typeof n},fnc:function(n){return"function"==typeof n},und:function(n){return void 0===n},hex:function(n){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)},rgb:function(n){return/^rgb/.test(n)},hsl:function(n){return/^hsl/.test(n)},col:function(n){return i.hex(n)||i.rgb(n)||i.hsl(n)},key:function(r){return!n.hasOwnProperty(r)&&!e.hasOwnProperty(r)&&"targets"!==r&&"keyframes"!==r}};function c(n){var e=/\(([^)]+)\)/.exec(n);return e?e[1].split(",").map(function(n){return parseFloat(n)}):[]}function s(n,e){var r=c(n),o=a(i.und(r[0])?1:r[0],.1,100),u=a(i.und(r[1])?100:r[1],.1,100),s=a(i.und(r[2])?10:r[2],.1,100),f=a(i.und(r[3])?0:r[3],.1,100),l=Math.sqrt(u/o),d=s/(2*Math.sqrt(u*o)),p=d<1?l*Math.sqrt(1-d*d):0,h=1,v=d<1?(d*l-f)/p:-f+l;function g(n){var r=e?e*n/1e3:n;return r=d<1?Math.exp(-r*d*l)*(h*Math.cos(p*r)+v*Math.sin(p*r)):(h+v*r)*Math.exp(-r*l),0===n||1===n?n:1-r}return e?g:function(){var e=t.springs[n];if(e)return e;for(var r=0,a=0;;)if(1===g(r+=1/6)){if(++a>=16)break}else a=0;var o=r*(1/6)*1e3;return t.springs[n]=o,o}}function f(n){return void 0===n&&(n=10),function(e){return Math.round(e*n)*(1/n)}}var l,d,p=function(){var n=11,e=1/(n-1);function r(n,e){return 1-3*e+3*n}function t(n,e){return 3*e-6*n}function a(n){return 3*n}function o(n,e,o){return((r(e,o)*n+t(e,o))*n+a(e))*n}function u(n,e,o){return 3*r(e,o)*n*n+2*t(e,o)*n+a(e)}return function(r,t,a,i){if(0<=r&&r<=1&&0<=a&&a<=1){var c=new Float32Array(n);if(r!==t||a!==i)for(var s=0;s=.001?function(n,e,r,t){for(var a=0;a<4;++a){var i=u(e,r,t);if(0===i)return e;e-=(o(e,r,t)-n)/i}return e}(t,l,r,a):0===d?l:function(n,e,r,t,a){for(var u,i,c=0;(u=o(i=e+(r-e)/2,t,a)-n)>0?r=i:e=i,Math.abs(u)>1e-7&&++c<10;);return i}(t,i,i+e,r,a)}}}(),h=(l={linear:function(){return function(n){return n}}},d={Sine:function(){return function(n){return 1-Math.cos(n*Math.PI/2)}},Circ:function(){return function(n){return 1-Math.sqrt(1-n*n)}},Back:function(){return function(n){return n*n*(3*n-2)}},Bounce:function(){return function(n){for(var e,r=4;n<((e=Math.pow(2,--r))-1)/11;);return 1/Math.pow(4,3-r)-7.5625*Math.pow((3*e-2)/22-n,2)}},Elastic:function(n,e){void 0===n&&(n=1),void 0===e&&(e=.5);var r=a(n,1,10),t=a(e,.1,2);return function(n){return 0===n||1===n?n:-r*Math.pow(2,10*(n-1))*Math.sin((n-1-t/(2*Math.PI)*Math.asin(1/r))*(2*Math.PI)/t)}}},["Quad","Cubic","Quart","Quint","Expo"].forEach(function(n,e){d[n]=function(){return function(n){return Math.pow(n,e+2)}}}),Object.keys(d).forEach(function(n){var e=d[n];l["easeIn"+n]=e,l["easeOut"+n]=function(n,r){return function(t){return 1-e(n,r)(1-t)}},l["easeInOut"+n]=function(n,r){return function(t){return t<.5?e(n,r)(2*t)/2:1-e(n,r)(-2*t+2)/2}}}),l);function v(n,e){if(i.fnc(n))return n;var r=n.split("(")[0],t=h[r],a=c(n);switch(r){case"spring":return s(n,e);case"cubicBezier":return u(p,a);case"steps":return u(f,a);default:return u(t,a)}}function g(n){try{return document.querySelectorAll(n)}catch(n){return}}function m(n,e){for(var r=n.length,t=arguments.length>=2?arguments[1]:void 0,a=[],o=0;o1&&(r-=1),r<1/6?n+6*(e-n)*r:r<.5?e:r<2/3?n+(e-n)*(2/3-r)*6:n}if(0==u)e=r=t=i;else{var f=i<.5?i*(1+u):i+u-i*u,l=2*i-f;e=s(l,f,o+1/3),r=s(l,f,o),t=s(l,f,o-1/3)}return"rgba("+255*e+","+255*r+","+255*t+","+c+")"}(n):void 0;var e,r,t,a}function C(n){var e=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(n);if(e)return e[1]}function B(n,e){return i.fnc(n)?n(e.target,e.id,e.total):n}function P(n,e){return n.getAttribute(e)}function I(n,e,r){if(M([r,"deg","rad","turn"],C(e)))return e;var a=t.CSS[e+r];if(!i.und(a))return a;var o=document.createElement(n.tagName),u=n.parentNode&&n.parentNode!==document?n.parentNode:document.body;u.appendChild(o),o.style.position="absolute",o.style.width=100+r;var c=100/o.offsetWidth;u.removeChild(o);var s=c*parseFloat(e);return t.CSS[e+r]=s,s}function T(n,e,r){if(e in n.style){var t=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=n.style[e]||getComputedStyle(n).getPropertyValue(t)||"0";return r?I(n,a,r):a}}function D(n,e){return i.dom(n)&&!i.inp(n)&&(P(n,e)||i.svg(n)&&n[e])?"attribute":i.dom(n)&&M(r,e)?"transform":i.dom(n)&&"transform"!==e&&T(n,e)?"css":null!=n[e]?"object":void 0}function E(n){if(i.dom(n)){for(var e,r=n.style.transform||"",t=/(\w+)\(([^)]*)\)/g,a=new Map;e=t.exec(r);)a.set(e[1],e[2]);return a}}function F(n,e,r,t){var a,u=o(e,"scale")?1:0+(o(a=e,"translate")||"perspective"===a?"px":o(a,"rotate")||o(a,"skew")?"deg":void 0),i=E(n).get(e)||u;return r&&(r.transforms.list.set(e,i),r.transforms.last=e),t?I(n,i,t):i}function N(n,e,r,t){switch(D(n,e)){case"transform":return F(n,e,t,r);case"css":return T(n,e,r);case"attribute":return P(n,e);default:return n[e]||0}}function A(n,e){var r=/^(\*=|\+=|-=)/.exec(n);if(!r)return n;var t=C(n)||0,a=parseFloat(e),o=parseFloat(n.replace(r[0],""));switch(r[0][0]){case"+":return a+o+t;case"-":return a-o+t;case"*":return a*o+t}}function L(n,e){if(i.col(n))return O(n);if(/\s/g.test(n))return n;var r=C(n),t=r?n.substr(0,n.length-r.length):n;return e?t+e:t}function j(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))}function S(n){for(var e,r=n.points,t=0,a=0;a0&&(t+=j(e,o)),e=o}return t}function q(n){if(n.getTotalLength)return n.getTotalLength();switch(n.tagName.toLowerCase()){case"circle":return o=n,2*Math.PI*P(o,"r");case"rect":return 2*P(a=n,"width")+2*P(a,"height");case"line":return j({x:P(t=n,"x1"),y:P(t,"y1")},{x:P(t,"x2"),y:P(t,"y2")});case"polyline":return S(n);case"polygon":return r=(e=n).points,S(e)+j(r.getItem(r.numberOfItems-1),r.getItem(0))}var e,r,t,a,o}function $(n,e){var r=e||{},t=r.el||function(n){for(var e=n.parentNode;i.svg(e)&&i.svg(e.parentNode);)e=e.parentNode;return e}(n),a=t.getBoundingClientRect(),o=P(t,"viewBox"),u=a.width,c=a.height,s=r.viewBox||(o?o.split(" "):[0,0,u,c]);return{el:t,viewBox:s,x:s[0]/1,y:s[1]/1,w:u/s[2],h:c/s[3]}}function X(n,e){function r(r){void 0===r&&(r=0);var t=e+r>=1?e+r:0;return n.el.getPointAtLength(t)}var t=$(n.el,n.svg),a=r(),o=r(-1),u=r(1);switch(n.property){case"x":return(a.x-t.x)*t.w;case"y":return(a.y-t.y)*t.h;case"angle":return 180*Math.atan2(u.y-o.y,u.x-o.x)/Math.PI}}function Y(n,e){var r=/[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,t=L(i.pth(n)?n.totalLength:n,e)+"";return{original:t,numbers:t.match(r)?t.match(r).map(Number):[0],strings:i.str(n)||e?t.split(r):[]}}function Z(n){return m(n?y(i.arr(n)?n.map(b):b(n)):[],function(n,e,r){return r.indexOf(n)===e})}function Q(n){var e=Z(n);return e.map(function(n,r){return{target:n,id:r,total:e.length,transforms:{list:E(n)}}})}function V(n,e){var r=x(e);if(/^spring/.test(r.easing)&&(r.duration=s(r.easing)),i.arr(n)){var t=n.length;2===t&&!i.obj(n[0])?n={value:n}:i.fnc(e.duration)||(r.duration=e.duration/t)}var a=i.arr(n)?n:[n];return a.map(function(n,r){var t=i.obj(n)&&!i.pth(n)?n:{value:n};return i.und(t.delay)&&(t.delay=r?0:e.delay),i.und(t.endDelay)&&(t.endDelay=r===a.length-1?e.endDelay:0),t}).map(function(n){return k(n,r)})}function z(n,e){var r=[],t=e.keyframes;for(var a in t&&(e=k(function(n){for(var e=m(y(n.map(function(n){return Object.keys(n)})),function(n){return i.key(n)}).reduce(function(n,e){return n.indexOf(e)<0&&n.push(e),n},[]),r={},t=function(t){var a=e[t];r[a]=n.map(function(n){var e={};for(var r in n)i.key(r)?r==a&&(e.value=n[r]):e[r]=n[r];return e})},a=0;a-1&&(_.splice(o,1),r=_.length)}else a.tick(e);t++}n()}else U=cancelAnimationFrame(U)}return n}();function rn(r){void 0===r&&(r={});var t,o=0,u=0,i=0,c=0,s=null;function f(n){var e=window.Promise&&new Promise(function(n){return s=n});return n.finished=e,e}var l,d,p,h,v,g,y,b,M=(d=w(n,l=r),p=w(e,l),h=z(p,l),v=Q(l.targets),g=W(v,h),y=J(g,p),b=K,K++,k(d,{id:b,children:[],animatables:v,animations:g,duration:y.duration,delay:y.delay,endDelay:y.endDelay}));f(M);function x(){var n=M.direction;"alternate"!==n&&(M.direction="normal"!==n?"normal":"reverse"),M.reversed=!M.reversed,t.forEach(function(n){return n.reversed=M.reversed})}function O(n){return M.reversed?M.duration-n:n}function C(){o=0,u=O(M.currentTime)*(1/rn.speed)}function B(n,e){e&&e.seek(n-e.timelineOffset)}function P(n){for(var e=0,r=M.animations,t=r.length;e2||(b=Math.round(b*p)/p)),h.push(b)}var k=d.length;if(k){g=d[0];for(var O=0;O0&&(M.began=!0,I("begin")),!M.loopBegan&&M.currentTime>0&&(M.loopBegan=!0,I("loopBegin")),d<=r&&0!==M.currentTime&&P(0),(d>=l&&M.currentTime!==e||!e)&&P(e),d>r&&d=e&&(u=0,M.remaining&&!0!==M.remaining&&M.remaining--,M.remaining?(o=i,I("loopComplete"),M.loopBegan=!1,"alternate"===M.direction&&x()):(M.paused=!0,M.completed||(M.completed=!0,I("loopComplete"),I("complete"),!M.passThrough&&"Promise"in window&&(s(),f(M)))))}return M.reset=function(){var n=M.direction;M.passThrough=!1,M.currentTime=0,M.progress=0,M.paused=!0,M.began=!1,M.loopBegan=!1,M.changeBegan=!1,M.completed=!1,M.changeCompleted=!1,M.reversePlayback=!1,M.reversed="reverse"===n,M.remaining=M.loop,t=M.children;for(var e=c=t.length;e--;)M.children[e].reset();(M.reversed&&!0!==M.loop||"alternate"===n&&1===M.loop)&&M.remaining++,P(M.reversed?M.duration:0)},M.set=function(n,e){return R(n,e),M},M.tick=function(n){i=n,o||(o=i),T((i+(u-o))*rn.speed)},M.seek=function(n){T(O(n))},M.pause=function(){M.paused=!0,C()},M.play=function(){M.paused&&(M.completed&&M.reset(),M.paused=!1,_.push(M),C(),U||en())},M.reverse=function(){x(),C()},M.restart=function(){M.reset(),M.play()},M.reset(),M.autoplay&&M.play(),M}function tn(n,e){for(var r=e.length;r--;)M(n,e[r].animatable.target)&&e.splice(r,1)}return"undefined"!=typeof document&&document.addEventListener("visibilitychange",function(){document.hidden?(_.forEach(function(n){return n.pause()}),nn=_.slice(0),rn.running=_=[]):nn.forEach(function(n){return n.play()})}),rn.version="3.1.0",rn.speed=1,rn.running=_,rn.remove=function(n){for(var e=Z(n),r=_.length;r--;){var t=_[r],a=t.animations,o=t.children;tn(e,a);for(var u=o.length;u--;){var i=o[u],c=i.animations;tn(e,c),c.length||i.children.length||o.splice(u,1)}a.length||o.length||t.pause()}},rn.get=N,rn.set=R,rn.convertPx=I,rn.path=function(n,e){var r=i.str(n)?g(n)[0]:n,t=e||100;return function(n){return{property:n,el:r,svg:$(r),totalLength:q(r)*(t/100)}}},rn.setDashoffset=function(n){var e=q(n);return n.setAttribute("stroke-dasharray",e),e},rn.stagger=function(n,e){void 0===e&&(e={});var r=e.direction||"normal",t=e.easing?v(e.easing):null,a=e.grid,o=e.axis,u=e.from||0,c="first"===u,s="center"===u,f="last"===u,l=i.arr(n),d=l?parseFloat(n[0]):parseFloat(n),p=l?parseFloat(n[1]):0,h=C(l?n[1]:n)||0,g=e.start||0+(l?d:0),m=[],y=0;return function(n,e,i){if(c&&(u=0),s&&(u=(i-1)/2),f&&(u=i-1),!m.length){for(var v=0;v-1&&_.splice(o,1);for(var s=0;s { - '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加密插件!'); - - 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); - - 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'); - } - }); - - // 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'; - } - } - - 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/lib/font-awesome/HELP-US-OUT.txt b/lib/font-awesome/HELP-US-OUT.txt deleted file mode 100644 index 83d083d..0000000 --- a/lib/font-awesome/HELP-US-OUT.txt +++ /dev/null @@ -1,7 +0,0 @@ -I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, -Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, -comprehensive icon sets or copy and paste your own. - -Please. Check it out. - --Dave Gandy diff --git a/lib/font-awesome/bower.json b/lib/font-awesome/bower.json deleted file mode 100644 index 772570a..0000000 --- a/lib/font-awesome/bower.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"font-awesome","description":"Font Awesome","keywords":[],"homepage":"http://fontawesome.io","dependencies":{},"devDependencies":{},"license":["OFL-1.1","MIT","CC-BY-3.0"],"main":["less/font-awesome.less","scss/font-awesome.scss"],"ignore":["*/.*","*.json","src","*.yml","Gemfile","Gemfile.lock","*.md"]} \ No newline at end of file diff --git a/lib/font-awesome/css/font-awesome.css b/lib/font-awesome/css/font-awesome.css deleted file mode 100644 index ee906a8..0000000 --- a/lib/font-awesome/css/font-awesome.css +++ /dev/null @@ -1,2337 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left { - margin-right: .3em; -} -.fa.fa-pull-right { - margin-left: .3em; -} -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-feed:before, -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper-pp:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-intersex:before, -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-yc:before, -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-battery-4:before, -.fa-battery:before, -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battery-2:before, -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-1:before, -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-0:before, -.fa-battery-empty:before { - content: "\f244"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-sticky-note-o:before { - content: "\f24a"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-hourglass-o:before { - content: "\f250"; -} -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: "\f255"; -} -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: "\f256"; -} -.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa-hand-spock-o:before { - content: "\f259"; -} -.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-tv:before, -.fa-television:before { - content: "\f26c"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa-calendar-times-o:before { - content: "\f273"; -} -.fa-calendar-check-o:before { - content: "\f274"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-map-o:before { - content: "\f278"; -} -.fa-map:before { - content: "\f279"; -} -.fa-commenting:before { - content: "\f27a"; -} -.fa-commenting-o:before { - content: "\f27b"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-vimeo:before { - content: "\f27d"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-credit-card-alt:before { - content: "\f283"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-pause-circle-o:before { - content: "\f28c"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stop-circle-o:before { - content: "\f28e"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-percent:before { - content: "\f295"; -} -.fa-gitlab:before { - content: "\f296"; -} -.fa-wpbeginner:before { - content: "\f297"; -} -.fa-wpforms:before { - content: "\f298"; -} -.fa-envira:before { - content: "\f299"; -} -.fa-universal-access:before { - content: "\f29a"; -} -.fa-wheelchair-alt:before { - content: "\f29b"; -} -.fa-question-circle-o:before { - content: "\f29c"; -} -.fa-blind:before { - content: "\f29d"; -} -.fa-audio-description:before { - content: "\f29e"; -} -.fa-volume-control-phone:before { - content: "\f2a0"; -} -.fa-braille:before { - content: "\f2a1"; -} -.fa-assistive-listening-systems:before { - content: "\f2a2"; -} -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; -} -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: "\f2a4"; -} -.fa-glide:before { - content: "\f2a5"; -} -.fa-glide-g:before { - content: "\f2a6"; -} -.fa-signing:before, -.fa-sign-language:before { - content: "\f2a7"; -} -.fa-low-vision:before { - content: "\f2a8"; -} -.fa-viadeo:before { - content: "\f2a9"; -} -.fa-viadeo-square:before { - content: "\f2aa"; -} -.fa-snapchat:before { - content: "\f2ab"; -} -.fa-snapchat-ghost:before { - content: "\f2ac"; -} -.fa-snapchat-square:before { - content: "\f2ad"; -} -.fa-pied-piper:before { - content: "\f2ae"; -} -.fa-first-order:before { - content: "\f2b0"; -} -.fa-yoast:before { - content: "\f2b1"; -} -.fa-themeisle:before { - content: "\f2b2"; -} -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: "\f2b3"; -} -.fa-fa:before, -.fa-font-awesome:before { - content: "\f2b4"; -} -.fa-handshake-o:before { - content: "\f2b5"; -} -.fa-envelope-open:before { - content: "\f2b6"; -} -.fa-envelope-open-o:before { - content: "\f2b7"; -} -.fa-linode:before { - content: "\f2b8"; -} -.fa-address-book:before { - content: "\f2b9"; -} -.fa-address-book-o:before { - content: "\f2ba"; -} -.fa-vcard:before, -.fa-address-card:before { - content: "\f2bb"; -} -.fa-vcard-o:before, -.fa-address-card-o:before { - content: "\f2bc"; -} -.fa-user-circle:before { - content: "\f2bd"; -} -.fa-user-circle-o:before { - content: "\f2be"; -} -.fa-user-o:before { - content: "\f2c0"; -} -.fa-id-badge:before { - content: "\f2c1"; -} -.fa-drivers-license:before, -.fa-id-card:before { - content: "\f2c2"; -} -.fa-drivers-license-o:before, -.fa-id-card-o:before { - content: "\f2c3"; -} -.fa-quora:before { - content: "\f2c4"; -} -.fa-free-code-camp:before { - content: "\f2c5"; -} -.fa-telegram:before { - content: "\f2c6"; -} -.fa-thermometer-4:before, -.fa-thermometer:before, -.fa-thermometer-full:before { - content: "\f2c7"; -} -.fa-thermometer-3:before, -.fa-thermometer-three-quarters:before { - content: "\f2c8"; -} -.fa-thermometer-2:before, -.fa-thermometer-half:before { - content: "\f2c9"; -} -.fa-thermometer-1:before, -.fa-thermometer-quarter:before { - content: "\f2ca"; -} -.fa-thermometer-0:before, -.fa-thermometer-empty:before { - content: "\f2cb"; -} -.fa-shower:before { - content: "\f2cc"; -} -.fa-bathtub:before, -.fa-s15:before, -.fa-bath:before { - content: "\f2cd"; -} -.fa-podcast:before { - content: "\f2ce"; -} -.fa-window-maximize:before { - content: "\f2d0"; -} -.fa-window-minimize:before { - content: "\f2d1"; -} -.fa-window-restore:before { - content: "\f2d2"; -} -.fa-times-rectangle:before, -.fa-window-close:before { - content: "\f2d3"; -} -.fa-times-rectangle-o:before, -.fa-window-close-o:before { - content: "\f2d4"; -} -.fa-bandcamp:before { - content: "\f2d5"; -} -.fa-grav:before { - content: "\f2d6"; -} -.fa-etsy:before { - content: "\f2d7"; -} -.fa-imdb:before { - content: "\f2d8"; -} -.fa-ravelry:before { - content: "\f2d9"; -} -.fa-eercast:before { - content: "\f2da"; -} -.fa-microchip:before { - content: "\f2db"; -} -.fa-snowflake-o:before { - content: "\f2dc"; -} -.fa-superpowers:before { - content: "\f2dd"; -} -.fa-wpexplorer:before { - content: "\f2de"; -} -.fa-meetup:before { - content: "\f2e0"; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} diff --git a/lib/font-awesome/css/font-awesome.css.map b/lib/font-awesome/css/font-awesome.css.map deleted file mode 100644 index 60763a8..0000000 --- a/lib/font-awesome/css/font-awesome.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": ";;;;;;;AAGA,UAUC;EATC,WAAW,EAAE,aAAa;EAC1B,GAAG,EAAE,+CAAgE;EACrE,GAAG,EAAE,ySAAmG;EAKxG,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;ACTpB,GAAmB;EACjB,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,uCAAwD;EAC9D,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,SAAS,EAAE,eAAe;;;ACN5B,MAAsB;EACpB,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAS;EACtB,cAAc,EAAE,IAAI;;AAEtB,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;ACVtC,MAAsB;EACpB,KAAK,EAAE,SAAW;EAClB,UAAU,EAAE,MAAM;;ACDpB,MAAsB;EACpB,YAAY,EAAE,CAAC;EACf,WAAW,ECKU,SAAS;EDJ9B,eAAe,EAAE,IAAI;EACrB,WAAK;IAAE,QAAQ,EAAE,QAAQ;;AAE3B,MAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAa;EACnB,KAAK,ECFgB,SAAS;EDG9B,GAAG,EAAE,SAAU;EACf,UAAU,EAAE,MAAM;EAClB,YAAuB;IACrB,IAAI,EAAE,UAA0B;;AEbpC,UAA0B;EACxB,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,IAAI;;AAGrB,WAAY;EAAE,KAAK,EAAE,KAAK;;AAC1B,UAAW;EAAE,KAAK,EAAE,IAAI;;AAGtB,aAAY;EAAE,YAAY,EAAE,IAAI;AAChC,cAAa;EAAE,WAAW,EAAE,IAAI;;ACXlC,QAAwB;EACtB,iBAAiB,EAAE,0BAA0B;EACrC,SAAS,EAAE,0BAA0B;;AAG/C,SAAyB;EACvB,iBAAiB,EAAE,4BAA4B;EACvC,SAAS,EAAE,4BAA4B;;AAGjD,0BASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AAIrC,kBASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AC5BrC,aAA8B;ECY5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,aAAgB;EAC/B,aAAa,EAAE,aAAgB;EAC3B,SAAS,EAAE,aAAgB;;ADdrC,cAA8B;ECW5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADbrC,cAA8B;ECU5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADXrC,mBAAmC;ECejC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADjBzC,iBAAmC;ECcjC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADZzC;;;;uBAIuC;EACrC,MAAM,EAAE,IAAI;;AEfd,SAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAExB,0BAAyD;EACvD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;AAEpB,YAA4B;EAAE,WAAW,EAAE,OAAO;;AAClD,YAA4B;EAAE,SAAS,EAAE,GAAG;;AAC5C,WAA2B;EAAE,KAAK,ELVZ,IAAI;;;;AMN1B,gBAAgC;EAAE,OAAO,ENoQ1B,GAAO;;AMnQtB,gBAAgC;EAAE,OAAO,EN0W1B,GAAO;;AMzWtB,iBAAiC;EAAE,OAAO,ENmb1B,GAAO;;AMlbvB,qBAAqC;EAAE,OAAO,ENmL1B,GAAO;;AMlL3B,gBAAgC;EAAE,OAAO,ENkR1B,GAAO;;AMjRtB,eAA+B;EAAE,OAAO,ENke1B,GAAO;;AMjerB,iBAAiC;EAAE,OAAO,ENse1B,GAAO;;AMrevB,eAA+B;EAAE,OAAO,EN+iB1B,GAAO;;AM9iBrB,eAA+B;EAAE,OAAO,ENyN1B,GAAO;;AMxNrB,mBAAmC;EAAE,OAAO,ENggB1B,GAAO;;AM/fzB,aAA6B;EAAE,OAAO,EN8f1B,GAAO;;AM7fnB,kBAAkC;EAAE,OAAO,EN+f1B,GAAO;;AM9fxB,gBAAgC;EAAE,OAAO,ENoG1B,GAAO;;AMnGtB;;gBAEgC;EAAE,OAAO,ENkgB1B,GAAO;;AMjgBtB,sBAAsC;EAAE,OAAO,ENua1B,GAAO;;AMta5B,uBAAuC;EAAE,OAAO,ENqa1B,GAAO;;AMpa7B,oBAAoC;EAAE,OAAO,EN+X1B,GAAO;;AM9X1B,iBAAiC;EAAE,OAAO,ENsb1B,GAAO;;AMrbvB;cAC8B;EAAE,OAAO,ENwH1B,GAAO;;AMvHpB,kBAAkC;EAAE,OAAO,ENygB1B,GAAO;;AMxgBxB,eAA+B;EAAE,OAAO,ENmQ1B,GAAO;;AMlQrB,iBAAiC;EAAE,OAAO,EN6L1B,GAAO;;AM5LvB,kBAAkC;EAAE,OAAO,EN0G1B,GAAO;;AMzGxB,eAA+B;EAAE,OAAO,EN+Y1B,GAAO;;AM9YrB,mBAAmC;EAAE,OAAO,ENiJ1B,GAAO;;AMhJzB,8BAA8C;EAAE,OAAO,ENI1B,GAAO;;AMHpC,4BAA4C;EAAE,OAAO,ENM1B,GAAO;;AMLlC,gBAAgC;EAAE,OAAO,ENkQ1B,GAAO;;AMjQtB,wBAAwC;EAAE,OAAO,EN4W1B,GAAO;;AM3W9B;iBACiC;EAAE,OAAO,ENmY1B,GAAO;;AMlYvB,kBAAkC;EAAE,OAAO,EN8X1B,GAAO;;AM7XxB,mBAAmC;EAAE,OAAO,ENiS1B,GAAO;;AMhSzB,eAA+B;EAAE,OAAO,ENoS1B,GAAO;;AMnSrB,eAA+B;EAAE,OAAO,ENgM1B,GAAO;;AM/LrB,qBAAqC;EAAE,OAAO,EN+O1B,GAAO;;AM9O3B,qBAAqC;EAAE,OAAO,EN8hB1B,GAAO;;AM7hB3B,sBAAsC;EAAE,OAAO,EN4hB1B,GAAO;;AM3hB5B,oBAAoC;EAAE,OAAO,EN6hB1B,GAAO;;AM5hB1B,iBAAiC;EAAE,OAAO,EN2W1B,GAAO;;AM1WvB,kBAAkC;EAAE,OAAO,ENW1B,GAAO;;AMVxB,cAA8B;EAAE,OAAO,ENod1B,GAAO;;AMndpB,eAA+B;EAAE,OAAO,ENod1B,GAAO;;AMndrB,eAA+B;EAAE,OAAO,EN2B1B,GAAO;;AM1BrB,mBAAmC;EAAE,OAAO,EN2B1B,GAAO;;AM1BzB,gBAAgC;EAAE,OAAO,ENkW1B,GAAO;;AMjWtB,iBAAiC;EAAE,OAAO,ENwC1B,GAAO;;AMvCvB,eAA+B;EAAE,OAAO,EN8L1B,GAAO;;AM7LrB,eAA+B;EAAE,OAAO,ENmB1B,GAAO;;AMlBrB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB,sBAAsC;EAAE,OAAO,ENid1B,GAAO;;AMhd5B,qBAAqC;EAAE,OAAO,ENid1B,GAAO;;AMhd3B,qBAAqC;EAAE,OAAO,EN1C1B,GAAO;;AM2C3B,uBAAuC;EAAE,OAAO,EN7C1B,GAAO;;AM8C7B,sBAAsC;EAAE,OAAO,EN3C1B,GAAO;;AM4C5B,wBAAwC;EAAE,OAAO,EN9C1B,GAAO;;AM+C9B,eAA+B;EAAE,OAAO,ENwQ1B,GAAO;;AMvQrB;kBACkC;EAAE,OAAO,ENmT1B,GAAO;;AMlTxB,iBAAiC;EAAE,OAAO,ENmO1B,GAAO;;AMlOvB,uBAAuC;EAAE,OAAO,ENigB1B,GAAO;;AMhgB7B;;oBAEoC;EAAE,OAAO,EN+T1B,GAAO;;AM9T1B,iBAAiC;EAAE,OAAO,ENwT1B,GAAO;;AMvTvB,qBAAqC;EAAE,OAAO,EN+Q1B,GAAO;;AM9Q3B,iBAAiC;EAAE,OAAO,EN5D1B,GAAO;;AM6DvB,eAA+B;EAAE,OAAO,EN8c1B,GAAO;;AM7crB;0BAC0C;EAAE,OAAO,ENqT1B,GAAO;;AMpThC,yBAAyC;EAAE,OAAO,ENuX1B,GAAO;;AMtX/B,yBAAyC;EAAE,OAAO,EN0C1B,GAAO;;AMzC/B,iBAAiC;EAAE,OAAO,ENjC1B,GAAO;;AMkCvB,wBAAwC;EAAE,OAAO,ENma1B,GAAO;;AMla9B,wBAAwC;EAAE,OAAO,EN4H1B,GAAO;;AM3H9B,mBAAmC;EAAE,OAAO,EN7B1B,GAAO;;AM8BzB,eAA+B;EAAE,OAAO,EN0T1B,GAAO;;AMzTrB,gBAAgC;EAAE,OAAO,ENwS1B,GAAO;;AMvStB,eAA+B;EAAE,OAAO,ENia1B,GAAO;;AMharB,kBAAkC;EAAE,OAAO,ENgK1B,GAAO;;AM/JxB,uBAAuC;EAAE,OAAO,ENuH1B,GAAO;;AMtH7B,uBAAuC;EAAE,OAAO,EN4Z1B,GAAO;;AM3Z7B,gBAAgC;EAAE,OAAO,EN4F1B,GAAO;;AM3FtB,uBAAuC;EAAE,OAAO,ENoC1B,GAAO;;AMnC7B,wBAAwC;EAAE,OAAO,ENoC1B,GAAO;;AMnC9B,sBAAsC;EAAE,OAAO,ENsT1B,GAAO;;AMrT5B,uBAAuC;EAAE,OAAO,ENyQ1B,GAAO;;AMxQ7B,uBAAuC;EAAE,OAAO,ENwb1B,GAAO;;AMvb7B,uBAAuC;EAAE,OAAO,ENsB1B,GAAO;;AMrB7B,0BAA0C;EAAE,OAAO,EN2T1B,GAAO;;AM1ThC,sBAAsC;EAAE,OAAO,ENsM1B,GAAO;;AMrM5B,qBAAqC;EAAE,OAAO,EN6D1B,GAAO;;AM5D3B,yBAAyC;EAAE,OAAO,ENob1B,GAAO;;AMnb/B,yBAAyC;EAAE,OAAO,ENkB1B,GAAO;;AMjB/B,cAA8B;EAAE,OAAO,EN/C1B,GAAO;;AMgDpB,qBAAqC;EAAE,OAAO,EN3D1B,GAAO;;AM4D3B,sBAAsC;EAAE,OAAO,EN3D1B,GAAO;;AM4D5B,mBAAmC;EAAE,OAAO,EN3D1B,GAAO;;AM4DzB,qBAAqC;EAAE,OAAO,EN/D1B,GAAO;;AMgE3B;gBACgC;EAAE,OAAO,ENqV1B,GAAO;;AMpVtB,iBAAiC;EAAE,OAAO,ENuF1B,GAAO;;AMtFvB,mBAAmC;EAAE,OAAO,EN4C1B,GAAO;;AM3CzB,eAA+B;EAAE,OAAO,ENmS1B,GAAO;;AMlSrB,gBAAgC;EAAE,OAAO,ENsP1B,GAAO;;AMrPtB,mBAAmC;EAAE,OAAO,EN9D1B,GAAO;;AM+DzB,6BAA6C;EAAE,OAAO,ENgF1B,GAAO;;AM/EnC,eAA+B;EAAE,OAAO,EN+I1B,GAAO;;AM9IrB,eAA+B;EAAE,OAAO,ENoM1B,GAAO;;AMnMrB,eAA+B;EAAE,OAAO,ENmH1B,GAAO;;AMlHrB,cAA8B;EAAE,OAAO,ENiF1B,GAAO;;AMhFpB,oBAAoC;EAAE,OAAO,ENiF1B,GAAO;;AMhF1B;+BAC+C;EAAE,OAAO,EN0E1B,GAAO;;AMzErC,gBAAgC;EAAE,OAAO,ENmR1B,GAAO;;AMlRtB,mBAAmC;EAAE,OAAO,EN/B1B,GAAO;;AMgCzB,iBAAiC;EAAE,OAAO,ENoS1B,GAAO;;AMnSvB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,iBAAiC;EAAE,OAAO,ENqN1B,GAAO;;AMpNvB,qBAAqC;EAAE,OAAO,ENE1B,GAAO;;AMD3B,uBAAuC;EAAE,OAAO,ENF1B,GAAO;;AMG7B,kBAAkC;EAAE,OAAO,EN2S1B,GAAO;;AM1SxB,wBAAwC;EAAE,OAAO,ENyU1B,GAAO;;AMxU9B,iBAAiC;EAAE,OAAO,EN8G1B,GAAO;;AM7GvB,sBAAsC;EAAE,OAAO,EN+G1B,GAAO;;AM9G5B,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,mBAAmC;EAAE,OAAO,ENrF1B,GAAO;;AMsFzB;oBACoC;EAAE,OAAO,EN/E1B,GAAO;;AMgF1B,yBAAyC;EAAE,OAAO,ENua1B,GAAO;;AMta/B,0BAA0C;EAAE,OAAO,ENmE1B,GAAO;;AMlEhC,uBAAuC;EAAE,OAAO,EN5C1B,GAAO;;AM6C7B,cAA8B;EAAE,OAAO,ENqK1B,GAAO;;AMpKpB;eAC+B;EAAE,OAAO,ENK1B,GAAO;;AMJrB,mBAAmC;EAAE,OAAO,ENQ1B,GAAO;;AMPzB,sBAAsC;EAAE,OAAO,ENmY1B,GAAO;;AMlY5B,wBAAwC;EAAE,OAAO,ENiY1B,GAAO;;AMhY9B,oBAAoC;EAAE,OAAO,EN2V1B,GAAO;;AM1V1B,kBAAkC;EAAE,OAAO,ENyI1B,GAAO;;AMxIxB,mBAAmC;EAAE,OAAO,ENyT1B,GAAO;;AMxTzB,0BAA0C;EAAE,OAAO,ENiL1B,GAAO;;AMhLhC,qBAAqC;EAAE,OAAO,EN0X1B,GAAO;;AMzX3B,wBAAwC;EAAE,OAAO,EN8C1B,GAAO;;AM7C9B,kBAAkC;EAAE,OAAO,ENoT1B,GAAO;;AMnTxB,iBAAiC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YvB,wBAAwC;EAAE,OAAO,EN6G1B,GAAO;;AM5G9B,iBAAiC;EAAE,OAAO,EN8Z1B,GAAO;;AM7ZvB,kBAAkC;EAAE,OAAO,EN+J1B,GAAO;;AM9JxB,gBAAgC;EAAE,OAAO,ENsO1B,GAAO;;AMrOtB,mBAAmC;EAAE,OAAO,EN2U1B,GAAO;;AM1UzB,qBAAqC;EAAE,OAAO,EN/E1B,GAAO;;AMgF3B,uBAAuC;EAAE,OAAO,ENoO1B,GAAO;;AMnO7B,kBAAkC;EAAE,OAAO,EN8Y1B,GAAO;;AM7YxB;mBACmC;EAAE,OAAO,ENuC1B,GAAO;;AMtCzB,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,iBAAiC;EAAE,OAAO,ENiZ1B,GAAO;;AMhZvB,sBAAsC;EAAE,OAAO,ENR1B,GAAO;;AMS5B,cAA8B;EAAE,OAAO,EN4Q1B,GAAO;;AM3QpB,gBAAgC;EAAE,OAAO,ENgH1B,GAAO;;AM/GtB,mBAAmC;EAAE,OAAO,ENnF1B,GAAO;;AMoFzB,eAA+B;EAAE,OAAO,ENzG1B,GAAO;;AM0GrB,sBAAsC;EAAE,OAAO,ENzD1B,GAAO;;AM0D5B,uBAAuC;EAAE,OAAO,EN0G1B,GAAO;;AMzG7B,sBAAsC;EAAE,OAAO,ENwG1B,GAAO;;AMvG5B,oBAAoC;EAAE,OAAO,ENyG1B,GAAO;;AMxG1B,sBAAsC;EAAE,OAAO,ENqG1B,GAAO;;AMpG5B,4BAA4C;EAAE,OAAO,EN5I1B,GAAO;;AM6IlC,6BAA6C;EAAE,OAAO,ENxI1B,GAAO;;AMyInC,0BAA0C;EAAE,OAAO,ENxI1B,GAAO;;AMyIhC,4BAA4C;EAAE,OAAO,ENhJ1B,GAAO;;AMiJlC,gBAAgC;EAAE,OAAO,ENsF1B,GAAO;;AMrFtB,iBAAiC;EAAE,OAAO,ENia1B,GAAO;;AMhavB,gBAAgC;EAAE,OAAO,ENiV1B,GAAO;;AMhVtB,iBAAiC;EAAE,OAAO,ENgD1B,GAAO;;AM/CvB,oBAAoC;EAAE,OAAO,ENvG1B,GAAO;;AMwG1B,qBAAqC;EAAE,OAAO,ENzI1B,GAAO;;AM0I3B;gBACgC;EAAE,OAAO,ENqY1B,GAAO;;AMpYtB;eAC+B;EAAE,OAAO,ENuI1B,GAAO;;AMtIrB,gBAAgC;EAAE,OAAO,ENpD1B,GAAO;;AMqDtB,gBAAgC;EAAE,OAAO,EN+C1B,GAAO;;AM9CtB;mBACmC;EAAE,OAAO,ENwP1B,GAAO;;AMvPzB;kBACkC;EAAE,OAAO,ENkC1B,GAAO;;AMjCxB,oBAAoC;EAAE,OAAO,ENsL1B,GAAO;;AMrL1B;mBACmC;EAAE,OAAO,EN0C1B,GAAO;;AMzCzB,iBAAiC;EAAE,OAAO,ENiS1B,GAAO;;AMhSvB;;eAE+B;EAAE,OAAO,EN9I1B,GAAO;;AM+IrB,kBAAkC;EAAE,OAAO,ENgI1B,GAAO;;AM/HxB,kBAAkC;EAAE,OAAO,EN8H1B,GAAO;;AM7HxB,wBAAwC;EAAE,OAAO,EN4S1B,GAAO;;AM3S9B,oBAAoC;EAAE,OAAO,ENoW1B,GAAO;;AMnW1B,gBAAgC;EAAE,OAAO,ENmT1B,GAAO;;AMlTtB,gBAAgC;EAAE,OAAO,ENkI1B,GAAO;;AMjItB,gBAAgC;EAAE,OAAO,ENuV1B,GAAO;;AMtVtB,oBAAoC;EAAE,OAAO,ENwL1B,GAAO;;AMvL1B,2BAA2C;EAAE,OAAO,ENyL1B,GAAO;;AMxLjC,6BAA6C;EAAE,OAAO,ENyD1B,GAAO;;AMxDnC,sBAAsC;EAAE,OAAO,ENuD1B,GAAO;;AMtD5B,gBAAgC;EAAE,OAAO,ENsJ1B,GAAO;;AMrJtB,qBAAqC;EAAE,OAAO,ENtH1B,GAAO;;AMuH3B,mBAAmC;EAAE,OAAO,ENhH1B,GAAO;;AMiHzB,qBAAqC;EAAE,OAAO,ENvH1B,GAAO;;AMwH3B,sBAAsC;EAAE,OAAO,ENvH1B,GAAO;;AMwH5B,kBAAkC;EAAE,OAAO,ENvE1B,GAAO;;AMwExB;eAC+B;EAAE,OAAO,EN2P1B,GAAO;;AM1PrB;oBACoC;EAAE,OAAO,EN+P1B,GAAO;;AM9P1B;mBACmC;EAAE,OAAO,EN4P1B,GAAO;;AM3PzB,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,mBAAmC;EAAE,OAAO,ENkG1B,GAAO;;AMjGzB;eAC+B;EAAE,OAAO,EN8U1B,GAAO;;AM7UrB;gBACgC;EAAE,OAAO,ENqB1B,GAAO;;AMpBtB;qBACqC;EAAE,OAAO,EN2R1B,GAAO;;AM1R3B,oBAAoC;EAAE,OAAO,ENpF1B,GAAO;;AMqF1B,qBAAqC;EAAE,OAAO,ENnF1B,GAAO;;AMoF3B;eAC+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,kBAAkC;EAAE,OAAO,ENkO1B,GAAO;;AMjOxB,mBAAmC;EAAE,OAAO,ENkU1B,GAAO;;AMjUzB;oBACoC;EAAE,OAAO,EN1G1B,GAAO;;AM2G1B,sBAAsC;EAAE,OAAO,ENgF1B,GAAO;;AM/E5B,mBAAmC;EAAE,OAAO,ENnD1B,GAAO;;AMoDzB,yBAAyC;EAAE,OAAO,ENzG1B,GAAO;;AM0G/B,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,kBAAkC;EAAE,OAAO,ENsU1B,GAAO;;AMrUxB,sBAAsC;EAAE,OAAO,EN+P1B,GAAO;;AM9P5B,mBAAmC;EAAE,OAAO,ENsQ1B,GAAO;;AMrQzB,iBAAiC;EAAE,OAAO,ENvL1B,GAAO;;AMwLvB,iBAAiC;EAAE,OAAO,ENzG1B,GAAO;;AM0GvB,kBAAkC;EAAE,OAAO,ENtF1B,GAAO;;AMuFxB,sBAAsC;EAAE,OAAO,EN3B1B,GAAO;;AM4B5B,qBAAqC;EAAE,OAAO,ENxK1B,GAAO;;AMyK3B,qBAAqC;EAAE,OAAO,ENkC1B,GAAO;;AMjC3B,oBAAoC;EAAE,OAAO,EN3O1B,GAAO;;AM4O1B,iBAAiC;EAAE,OAAO,ENiG1B,GAAO;;AMhGvB,sBAAsC;EAAE,OAAO,EN/C1B,GAAO;;AMgD5B,eAA+B;EAAE,OAAO,ENpM1B,GAAO;;AMqMrB,mBAAmC;EAAE,OAAO,ENe1B,GAAO;;AMdzB,sBAAsC;EAAE,OAAO,ENgJ1B,GAAO;;AM/I5B,4BAA4C;EAAE,OAAO,EN5O1B,GAAO;;AM6OlC,6BAA6C;EAAE,OAAO,EN5O1B,GAAO;;AM6OnC,0BAA0C;EAAE,OAAO,EN5O1B,GAAO;;AM6OhC,4BAA4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC,qBAAqC;EAAE,OAAO,EN5O1B,GAAO;;AM6O3B,sBAAsC;EAAE,OAAO,EN5O1B,GAAO;;AM6O5B,mBAAmC;EAAE,OAAO,EN5O1B,GAAO;;AM6OzB,qBAAqC;EAAE,OAAO,ENhP1B,GAAO;;AMiP3B,kBAAkC;EAAE,OAAO,ENlG1B,GAAO;;AMmGxB,iBAAiC;EAAE,OAAO,ENuC1B,GAAO;;AMtCvB,iBAAiC;EAAE,OAAO,ENoP1B,GAAO;;AMnPvB;iBACiC;EAAE,OAAO,ENyF1B,GAAO;;AMxFvB,mBAAmC;EAAE,OAAO,EN9I1B,GAAO;;AM+IzB,qBAAqC;EAAE,OAAO,EN0I1B,GAAO;;AMzI3B,sBAAsC;EAAE,OAAO,EN0I1B,GAAO;;AMzI5B,kBAAkC;EAAE,OAAO,ENgN1B,GAAO;;AM/MxB,iBAAiC;EAAE,OAAO,ENnJ1B,GAAO;;AMoJvB;gBACgC;EAAE,OAAO,ENkJ1B,GAAO;;AMjJtB,qBAAqC;EAAE,OAAO,ENnB1B,GAAO;;AMoB3B,mBAAmC;EAAE,OAAO,ENxC1B,GAAO;;AMyCzB,wBAAwC;EAAE,OAAO,ENvC1B,GAAO;;AMwC9B,kBAAkC;EAAE,OAAO,EN0L1B,GAAO;;AMzLxB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,gBAAgC;EAAE,OAAO,ENoE1B,GAAO;;AMnEtB,kBAAkC;EAAE,OAAO,ENpC1B,GAAO;;AMqCxB,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,iBAAiC;EAAE,OAAO,ENrD1B,GAAO;;AMsDvB,yBAAyC;EAAE,OAAO,ENvD1B,GAAO;;AMwD/B,mBAAmC;EAAE,OAAO,ENuO1B,GAAO;;AMtOzB,eAA+B;EAAE,OAAO,ENtJ1B,GAAO;;AMuJrB;oBACoC;EAAE,OAAO,ENqI1B,GAAO;;AMpI1B;;sBAEsC;EAAE,OAAO,ENuM1B,GAAO;;AMtM5B,yBAAyC;EAAE,OAAO,ENkC1B,GAAO;;AMjC/B,eAA+B;EAAE,OAAO,EN5I1B,GAAO;;AM6IrB,oBAAoC;EAAE,OAAO,EN7J1B,GAAO;;AM8J1B;uBACuC;EAAE,OAAO,EN1L1B,GAAO;;AM2L7B,mBAAmC;EAAE,OAAO,EN4G1B,GAAO;;AM3GzB,eAA+B;EAAE,OAAO,ENT1B,GAAO;;AMUrB,sBAAsC;EAAE,OAAO,ENhH1B,GAAO;;AMiH5B,sBAAsC;EAAE,OAAO,EN8M1B,GAAO;;AM7M5B,oBAAoC;EAAE,OAAO,ENyM1B,GAAO;;AMxM1B,iBAAiC;EAAE,OAAO,ENvH1B,GAAO;;AMwHvB,uBAAuC;EAAE,OAAO,ENmG1B,GAAO;;AMlG7B,qBAAqC;EAAE,OAAO,EN8C1B,GAAO;;AM7C3B,2BAA2C;EAAE,OAAO,EN8C1B,GAAO;;AM7CjC,iBAAiC;EAAE,OAAO,ENgJ1B,GAAO;;AM/IvB,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,4BAA4C;EAAE,OAAO,ENjF1B,GAAO;;AMkFlC,iBAAiC;EAAE,OAAO,ENoH1B,GAAO;;AMnHvB,iBAAiC;EAAE,OAAO,ENkC1B,GAAO;;AMjCvB,8BAA8C;EAAE,OAAO,ENlM1B,GAAO;;AMmMpC,+BAA+C;EAAE,OAAO,ENlM1B,GAAO;;AMmMrC,4BAA4C;EAAE,OAAO,ENlM1B,GAAO;;AMmMlC,8BAA8C;EAAE,OAAO,ENtM1B,GAAO;;AMuMpC,gBAAgC;EAAE,OAAO,EN/B1B,GAAO;;AMgCtB,eAA+B;EAAE,OAAO,ENjK1B,GAAO;;AMkKrB,iBAAiC;EAAE,OAAO,EN9S1B,GAAO;;AM+SvB,qBAAqC;EAAE,OAAO,ENmP1B,GAAO;;AMlP3B,mBAAmC;EAAE,OAAO,EN9O1B,GAAO;;AM+OzB,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN/I1B,GAAO;;AMgJ3B,qBAAqC;EAAE,OAAO,EN4G1B,GAAO;;AM3G3B,sBAAsC;EAAE,OAAO,ENsE1B,GAAO;;AMrE5B,iBAAiC;EAAE,OAAO,EN2M1B,GAAO;;AM1MvB,uBAAuC;EAAE,OAAO,EN6B1B,GAAO;;AM5B7B,yBAAyC;EAAE,OAAO,EN6B1B,GAAO;;AM5B/B,mBAAmC;EAAE,OAAO,ENhB1B,GAAO;;AMiBzB,qBAAqC;EAAE,OAAO,ENlB1B,GAAO;;AMmB3B,uBAAuC;EAAE,OAAO,ENvN1B,GAAO;;AMwN7B,wBAAwC;EAAE,OAAO,ENiD1B,GAAO;;AMhD9B,+BAA+C;EAAE,OAAO,EN3I1B,GAAO;;AM4IrC,uBAAuC;EAAE,OAAO,ENkH1B,GAAO;;AMjH7B,kBAAkC;EAAE,OAAO,EN1L1B,GAAO;;AM2LxB;8BAC8C;EAAE,OAAO,ENjP1B,GAAO;;AMkPpC;4BAC4C;EAAE,OAAO,ENhP1B,GAAO;;AMiPlC;+BAC+C;EAAE,OAAO,ENnP1B,GAAO;;AMoPrC;cAC8B;EAAE,OAAO,EN7J1B,GAAO;;AM8JpB,cAA8B;EAAE,OAAO,EN/F1B,GAAO;;AMgGpB;cAC8B;EAAE,OAAO,EN4N1B,GAAO;;AM3NpB;cAC8B;EAAE,OAAO,ENvD1B,GAAO;;AMwDpB;;;cAG8B;EAAE,OAAO,ENrD1B,GAAO;;AMsDpB;;cAE8B;EAAE,OAAO,EN8E1B,GAAO;;AM7EpB;cAC8B;EAAE,OAAO,ENtD1B,GAAO;;AMuDpB;cAC8B;EAAE,OAAO,ENzR1B,GAAO;;AM0RpB,eAA+B;EAAE,OAAO,ENzJ1B,GAAO;;AM0JrB,oBAAoC;EAAE,OAAO,EN7I1B,GAAO;;AM8I1B,yBAAyC;EAAE,OAAO,EN2G1B,GAAO;;AM1G/B,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,0BAA0C;EAAE,OAAO,EN2G1B,GAAO;;AM1GhC,2BAA2C;EAAE,OAAO,EN2G1B,GAAO;;AM1GjC,2BAA2C;EAAE,OAAO,EN8G1B,GAAO;;AM7GjC,4BAA4C;EAAE,OAAO,EN8G1B,GAAO;;AM7GlC,oBAAoC;EAAE,OAAO,ENgK1B,GAAO;;AM/J1B,sBAAsC;EAAE,OAAO,EN4J1B,GAAO;;AM3J5B,yBAAyC;EAAE,OAAO,ENwO1B,GAAO;;AMvO/B,kBAAkC;EAAE,OAAO,ENqO1B,GAAO;;AMpOxB,eAA+B;EAAE,OAAO,EN+N1B,GAAO;;AM9NrB,sBAAsC;EAAE,OAAO,EN+N1B,GAAO;;AM9N5B,uBAAuC;EAAE,OAAO,ENmO1B,GAAO;;AMlO7B,kBAAkC;EAAE,OAAO,ENxM1B,GAAO;;AMyMxB,yBAAyC;EAAE,OAAO,EN+G1B,GAAO;;AM9G/B,oBAAoC;EAAE,OAAO,ENnF1B,GAAO;;AMoF1B,iBAAiC;EAAE,OAAO,EN/I1B,GAAO;;AMgJvB,cAA8B;EAAE,OAAO,ENhX1B,GAAO;;AMiXpB,oBAAoC;EAAE,OAAO,ENxT1B,GAAO;;AMyT1B,2BAA2C;EAAE,OAAO,ENxT1B,GAAO;;AMyTjC,iBAAiC;EAAE,OAAO,ENyK1B,GAAO;;AMxKvB,wBAAwC;EAAE,OAAO,ENyK1B,GAAO;;AMxK9B,0BAA0C;EAAE,OAAO,ENtD1B,GAAO;;AMuDhC,wBAAwC;EAAE,OAAO,ENpD1B,GAAO;;AMqD9B,0BAA0C;EAAE,OAAO,ENvD1B,GAAO;;AMwDhC,2BAA2C;EAAE,OAAO,ENvD1B,GAAO;;AMwDjC,gBAAgC;EAAE,OAAO,ENxW1B,GAAO;;AMyWtB,kBAAkC;EAAE,OAAO,EN0M1B,GAAO;;AMzMxB,kBAAkC;EAAE,OAAO,ENpX1B,GAAO;;AMqXxB,gBAAgC;EAAE,OAAO,ENpE1B,GAAO;;AMqEtB,mBAAmC;EAAE,OAAO,EN1N1B,GAAO;;AM2NzB,gBAAgC;EAAE,OAAO,ENqE1B,GAAO;;AMpEtB,qBAAqC;EAAE,OAAO,ENtJ1B,GAAO;;AMuJ3B,iBAAiC;EAAE,OAAO,ENuJ1B,GAAO;;AMtJvB,iBAAiC;EAAE,OAAO,EN/L1B,GAAO;;AMgMvB,eAA+B;EAAE,OAAO,EN1D1B,GAAO;;AM2DrB;mBACmC;EAAE,OAAO,ENnI1B,GAAO;;AMoIzB,gBAAgC;EAAE,OAAO,EN2G1B,GAAO;;AM1GtB,iBAAiC;EAAE,OAAO,ENxC1B,GAAO;;AMyCvB,kBAAkC;EAAE,OAAO,ENrX1B,GAAO;;AMsXxB,cAA8B;EAAE,OAAO,ENpU1B,GAAO;;AMqUpB,aAA6B;EAAE,OAAO,ENgL1B,GAAO;;AM/KnB,gBAAgC;EAAE,OAAO,ENqL1B,GAAO;;AMpLtB,iBAAiC;EAAE,OAAO,ENa1B,GAAO;;AMZvB,oBAAoC;EAAE,OAAO,ENrC1B,GAAO;;AMsC1B,yBAAyC;EAAE,OAAO,EN8E1B,GAAO;;AM7E/B,+BAA+C;EAAE,OAAO,ENtX1B,GAAO;;AMuXrC,8BAA8C;EAAE,OAAO,ENxX1B,GAAO;;AMyXpC;8BAC8C;EAAE,OAAO,EN3T1B,GAAO;;AM4TpC,uBAAuC;EAAE,OAAO,ENjP1B,GAAO;;AMkP7B,qBAAqC;EAAE,OAAO,EN+K1B,GAAO;;AM9K3B,uBAAuC;EAAE,OAAO,ENmK1B,GAAO;;AMlK7B;cAC8B;EAAE,OAAO,ENoI1B,GAAO;;AMnIpB,wBAAwC;EAAE,OAAO,ENjB1B,GAAO;;AMkB9B,wBAAwC;EAAE,OAAO,EN6D1B,GAAO;;AM5D9B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,0BAA0C;EAAE,OAAO,EN7O1B,GAAO;;AM8OhC,oBAAoC;EAAE,OAAO,EN2K1B,GAAO;;AM1K1B,iBAAiC;EAAE,OAAO,ENvD1B,GAAO;;AMwDvB;;qBAEqC;EAAE,OAAO,ENsI1B,GAAO;;AMrI3B;yBACyC;EAAE,OAAO,ENjK1B,GAAO;;AMkK/B,gBAAgC;EAAE,OAAO,ENwK1B,GAAO;;AMvKtB,iBAAiC;EAAE,OAAO,ENvK1B,GAAO;;AMwKvB,iBAAiC;EAAE,OAAO,ENhB1B,GAAO;;AMiBvB,wBAAwC;EAAE,OAAO,ENhB1B,GAAO;;AMiB9B,6BAA6C;EAAE,OAAO,ENsE1B,GAAO;;AMrEnC,sBAAsC;EAAE,OAAO,ENoE1B,GAAO;;AMnE5B,oBAAoC;EAAE,OAAO,EN7Q1B,GAAO;;AM8Q1B,eAA+B;EAAE,OAAO,EN1Q1B,GAAO;;AM2QrB,qBAAqC;EAAE,OAAO,ENjD1B,GAAO;;AMkD3B,yBAAyC;EAAE,OAAO,ENjD1B,GAAO;;AMkD/B,iBAAiC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQvB,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,mBAAmC;EAAE,OAAO,ENzI1B,GAAO;;AM0IzB,cAA8B;EAAE,OAAO,EN9O1B,GAAO;;AM+OpB,mBAAmC;EAAE,OAAO,EN3W1B,GAAO;;AM4WzB,gBAAgC;EAAE,OAAO,EN9T1B,GAAO;;AM+TtB,cAA8B;EAAE,OAAO,ENnE1B,GAAO;;AMoEpB,gBAAgC;EAAE,OAAO,ENoC1B,GAAO;;AMnCtB,eAA+B;EAAE,OAAO,ENjS1B,GAAO;;AMkSrB,gBAAgC;EAAE,OAAO,ENjS1B,GAAO;;AMkStB,kBAAkC;EAAE,OAAO,ENtY1B,GAAO;;AMuYxB,yBAAyC;EAAE,OAAO,ENtY1B,GAAO;;AMuY/B,gBAAgC;EAAE,OAAO,EN2C1B,GAAO;;AM1CtB,uBAAuC;EAAE,OAAO,EN2C1B,GAAO;;AM1C7B,kBAAkC;EAAE,OAAO,ENvC1B,GAAO;;AMwCxB;cAC8B;EAAE,OAAO,EN3W1B,GAAO;;AM4WpB;eAC+B;EAAE,OAAO,EN2D1B,GAAO;;AM1DrB,eAA+B;EAAE,OAAO,ENuF1B,GAAO;;AMtFrB,kBAAkC;EAAE,OAAO,ENwB1B,GAAO;;AMvBxB,qBAAqC;EAAE,OAAO,ENpS1B,GAAO;;AMqS3B,qBAAqC;EAAE,OAAO,ENkB1B,GAAO;;AMjB3B,mBAAmC;EAAE,OAAO,EN1S1B,GAAO;;AM2SzB,qBAAqC;EAAE,OAAO,ENxP1B,GAAO;;AMyP3B,sBAAsC;EAAE,OAAO,ENjP1B,GAAO;;AMkP5B,uBAAuC;EAAE,OAAO,EN9P1B,GAAO;;AM+P7B,4BAA4C;EAAE,OAAO,ENxP1B,GAAO;;AMyPlC;;uBAEuC;EAAE,OAAO,ENjQ1B,GAAO;;AMkQ7B;yBACyC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQ/B;uBACuC;EAAE,OAAO,ENxQ1B,GAAO;;AMyQ7B;uBACuC;EAAE,OAAO,EN7P1B,GAAO;;AM8P7B,sBAAsC;EAAE,OAAO,EN1Q1B,GAAO;;AM2Q5B,eAA+B;EAAE,OAAO,ENsG1B,GAAO;;AMrGrB,kBAAkC;EAAE,OAAO,ENlV1B,GAAO;;AMmVxB,mBAAmC;EAAE,OAAO,ENnL1B,GAAO;;AMoLzB;;;;oBAIoC;EAAE,OAAO,ENxK1B,GAAO;;AMyK1B,yBAAyC;EAAE,OAAO,ENpW1B,GAAO;;AMqW/B;gBACgC;EAAE,OAAO,EN1E1B,GAAO;;AM2EtB;iBACiC;EAAE,OAAO,ENpT1B,GAAO;;AMqTvB,qBAAqC;EAAE,OAAO,EN1O1B,GAAO;;AM2O3B,cAA8B;EAAE,OAAO,EN5O1B,GAAO;;AM6OpB,sBAAsC;EAAE,OAAO,EN7N1B,GAAO;;AM8N5B,wBAAwC;EAAE,OAAO,ENwB1B,GAAO;;AMvB9B,aAA6B;EAAE,OAAO,ENzF1B,GAAO;;AM0FnB;iBACiC;EAAE,OAAO,EN2F1B,GAAO;;AM1FvB;sBACsC;EAAE,OAAO,EN9H1B,GAAO;;AM+H5B;wBACwC;EAAE,OAAO,EN/H1B,GAAO;;AMgI9B,kBAAkC;EAAE,OAAO,EN3N1B,GAAO;;AM4NxB;sBACsC;EAAE,OAAO,ENrX1B,GAAO;;AMsX5B,iBAAiC;EAAE,OAAO,ENnO1B,GAAO;;AMoOvB,oBAAoC;EAAE,OAAO,ENlI1B,GAAO;;AMmI1B,kBAAkC;EAAE,OAAO,EN1C1B,GAAO;;AM2CxB,oBAAoC;EAAE,OAAO,EN7D1B,GAAO;;AM8D1B,2BAA2C;EAAE,OAAO,EN7D1B,GAAO;;AM8DjC,eAA+B;EAAE,OAAO,ENpb1B,GAAO;;AMqbrB;mBACmC;EAAE,OAAO,ENzQ1B,GAAO;;AM0QzB,cAA8B;EAAE,OAAO,ENsC1B,GAAO;;AMrCpB,qBAAqC;EAAE,OAAO,EN/b1B,GAAO;;AMgc3B,eAA+B;EAAE,OAAO,ENrH1B,GAAO;;AMsHrB,qBAAqC;EAAE,OAAO,ENlD1B,GAAO;;AMmD3B,iBAAiC;EAAE,OAAO,ENsC1B,GAAO;;AMrCvB,eAA+B;EAAE,OAAO,ENiF1B,GAAO;;AMhFrB,sBAAsC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ5B,eAA+B;EAAE,OAAO,ENuE1B,GAAO;;AMtErB,qBAAqC;EAAE,OAAO,ENjb1B,GAAO;;AMkb3B,iBAAiC;EAAE,OAAO,EN9I1B,GAAO;;AM+IvB,wBAAwC;EAAE,OAAO,ENhQ1B,GAAO;;AMiQ9B,kBAAkC;EAAE,OAAO,EN9Z1B,GAAO;;AM+ZxB,wBAAwC;EAAE,OAAO,ENla1B,GAAO;;AMma9B,sBAAsC;EAAE,OAAO,ENpa1B,GAAO;;AMqa5B,kBAAkC;EAAE,OAAO,ENta1B,GAAO;;AMuaxB,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,oBAAoC;EAAE,OAAO,ENpa1B,GAAO;;AMqa1B,qBAAqC;EAAE,OAAO,ENld1B,GAAO;;AMmd3B,uBAAuC;EAAE,OAAO,ENld1B,GAAO;;AMmd7B,gBAAgC;EAAE,OAAO,ENY1B,GAAO;;AMXtB,oBAAoC;EAAE,OAAO,EN3X1B,GAAO;;AM4X1B,aAA6B;EAAE,OAAO,ENre1B,GAAO;;AMsenB,qBAAqC;EAAE,OAAO,ENjV1B,GAAO;;AMkV3B,sBAAsC;EAAE,OAAO,ENpK1B,GAAO;;AMqK5B,wBAAwC;EAAE,OAAO,ENrd1B,GAAO;;AMsd9B,qBAAqC;EAAE,OAAO,EN3f1B,GAAO;;AM4f3B,oBAAoC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJ1B,qBAAqC;EAAE,OAAO,EN5N1B,GAAO;;AM6N3B,iBAAiC;EAAE,OAAO,EN1O1B,GAAO;;AM2OvB,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,qBAAqC;EAAE,OAAO,ENN1B,GAAO;;AMO3B,oBAAoC;EAAE,OAAO,ENN1B,GAAO;;AMO1B,kBAAkC;EAAE,OAAO,EN/d1B,GAAO;;AMgexB,cAA8B;EAAE,OAAO,EN7c1B,GAAO;;AM8cpB,kBAAkC;EAAE,OAAO,EN1P1B,GAAO;;AM2PxB,oBAAoC;EAAE,OAAO,ENhhB1B,GAAO;;AMihB1B,aAA6B;EAAE,OAAO,EN7b1B,GAAO;;AM8bnB;;cAE8B;EAAE,OAAO,ENxQ1B,GAAO;;AMyQpB,mBAAmC;EAAE,OAAO,EN7M1B,GAAO;;AM8MzB,qBAAqC;EAAE,OAAO,ENpd1B,GAAO;;AMqd3B,yBAAyC;EAAE,OAAO,ENnZ1B,GAAO;;AMoZ/B,mBAAmC;EAAE,OAAO,ENxY1B,GAAO;;AMyYzB,mBAAmC;EAAE,OAAO,EN1T1B,GAAO;;AM2TzB,kBAAkC;EAAE,OAAO,ENxP1B,GAAO;;AMyPxB,iBAAiC;EAAE,OAAO,ENrH1B,GAAO;;AMsHvB,uBAAuC;EAAE,OAAO,ENzG1B,GAAO;;AM0G7B,sBAAsC;EAAE,OAAO,ENrG1B,GAAO;;AMsG5B,mBAAmC;EAAE,OAAO,ENpG1B,GAAO;;AMqGzB,oBAAoC;EAAE,OAAO,EN5c1B,GAAO;;AM6c1B,0BAA0C;EAAE,OAAO,EN9c1B,GAAO;;AM+chC,kBAAkC;EAAE,OAAO,EN3Y1B,GAAO;;AM4YxB,eAA+B;EAAE,OAAO,ENhH1B,GAAO;;AMiHrB,sBAAsC;EAAE,OAAO,ENI1B,GAAO;;AMH5B,qBAAqC;EAAE,OAAO,EN5M1B,GAAO;;AM6M3B,sBAAsC;EAAE,OAAO,ENpE1B,GAAO;;AMqE5B,oBAAoC;EAAE,OAAO,ENhS1B,GAAO;;AMiS1B,gBAAgC;EAAE,OAAO,ENG1B,GAAO;;AMFtB,eAA+B;EAAE,OAAO,ENtO1B,GAAO;;AMuOrB,kBAAkC;EAAE,OAAO,EN7N1B,GAAO;;AM8NxB,sBAAsC;EAAE,OAAO,ENhC1B,GAAO;;AMiC5B,0BAA0C;EAAE,OAAO,ENhC1B,GAAO;;AMiChC,uBAAuC;EAAE,OAAO,END1B,GAAO;;AME7B,sBAAsC;EAAE,OAAO,EN1O1B,GAAO;;AM2O5B,qBAAqC;EAAE,OAAO,ENF1B,GAAO;;AMG3B,sBAAsC;EAAE,OAAO,EN3O1B,GAAO;;AM4O5B,wBAAwC;EAAE,OAAO,EN1O1B,GAAO;;AM2O9B,wBAAwC;EAAE,OAAO,EN5O1B,GAAO;;AM6O9B,iBAAiC;EAAE,OAAO,ENvN1B,GAAO;;AMwNvB,4BAA4C;EAAE,OAAO,EN9X1B,GAAO;;AM+XlC,sBAAsC;EAAE,OAAO,ENhM1B,GAAO;;AMiM5B,mBAAmC;EAAE,OAAO,ENI1B,GAAO;;AMHzB,iBAAiC;EAAE,OAAO,EN7I1B,GAAO;;AM8IvB,oBAAoC;EAAE,OAAO,ENjB1B,GAAO;;AMkB1B,qBAAqC;EAAE,OAAO,ENhB1B,GAAO;;AMiB3B;cAC8B;EAAE,OAAO,ENphB1B,GAAO;;AMqhBpB,kBAAkC;EAAE,OAAO,ENd1B,GAAO;;AMexB,gBAAgC;EAAE,OAAO,ENnD1B,GAAO;;AMoDtB,iBAAiC;EAAE,OAAO,ENvF1B,GAAO;;AMwFvB,iBAAiC;EAAE,OAAO,ENrP1B,GAAO", -"sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], -"names": [], -"file": "font-awesome.css" -} diff --git a/lib/font-awesome/css/font-awesome.min.css b/lib/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 540440c..0000000 --- a/lib/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/lib/font-awesome/fonts/fontawesome-webfont.eot b/lib/font-awesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.woff b/lib/font-awesome/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.woff2 b/lib/font-awesome/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/lib/velocity/velocity.min.js b/lib/velocity/velocity.min.js deleted file mode 100644 index 58244c8..0000000 --- a/lib/velocity/velocity.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! VelocityJS.org (1.2.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ -/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ -!function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;sn;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;cO;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)}); \ No newline at end of file diff --git a/lib/velocity/velocity.ui.min.js b/lib/velocity/velocity.ui.min.js deleted file mode 100644 index 8706945..0000000 --- a/lib/velocity/velocity.ui.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* VelocityJS.org UI Pack (5.0.4). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License. Portions copyright Daniel Eden, Christian Pucci. */ -!function(t){"function"==typeof require&&"object"==typeof exports?module.exports=t():"function"==typeof define&&define.amd?define(["velocity"],t):t()}(function(){return function(t,a,e,r){function n(t,a){var e=[];return t&&a?($.each([t,a],function(t,a){var r=[];$.each(a,function(t,a){for(;a.toString().length<5;)a="0"+a;r.push(a)}),e.push(r.join(""))}),parseFloat(e[0])>parseFloat(e[1])):!1}if(!t.Velocity||!t.Velocity.Utilities)return void(a.console&&console.log("Velocity UI Pack: Velocity must be loaded first. Aborting."));var i=t.Velocity,$=i.Utilities,s=i.version,o={major:1,minor:1,patch:0};if(n(o,s)){var l="Velocity UI Pack: You need to update Velocity (jquery.velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity.";throw alert(l),new Error(l)}i.RegisterEffect=i.RegisterUI=function(t,a){function e(t,a,e,r){var n=0,s;$.each(t.nodeType?[t]:t,function(t,a){r&&(e+=t*r),s=a.parentNode,$.each(["height","paddingTop","paddingBottom","marginTop","marginBottom"],function(t,e){n+=parseFloat(i.CSS.getPropertyValue(a,e))})}),i.animate(s,{height:("In"===a?"+":"-")+"="+n},{queue:!1,easing:"ease-in-out",duration:e*("In"===a?.6:1)})}return i.Redirects[t]=function(n,s,o,l,c,u){function f(){s.display!==r&&"none"!==s.display||!/Out$/.test(t)||$.each(c.nodeType?[c]:c,function(t,a){i.CSS.setPropertyValue(a,"display","none")}),s.complete&&s.complete.call(c,c),u&&u.resolver(c||n)}var p=o===l-1;a.defaultDuration="function"==typeof a.defaultDuration?a.defaultDuration.call(c,c):parseFloat(a.defaultDuration);for(var d=0;d1&&($.each(a.reverse(),function(t,e){var r=a[t+1];if(r){var n=e.o||e.options,s=r.o||r.options,o=n&&n.sequenceQueue===!1?"begin":"complete",l=s&&s[o],c={};c[o]=function(){var t=r.e||r.elements,a=t.nodeType?[t]:t;l&&l.call(a,a),i(e)},r.o?r.o=$.extend({},s,c):r.options=$.extend({},s,c)}}),a.reverse()),i(a[0])}}(window.jQuery||window.Zepto||window,window,document)}); \ No newline at end of file diff --git a/old/button.html b/old/button.html deleted file mode 100644 index a2348f7..0000000 --- a/old/button.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - - \ No newline at end of file diff --git a/old/cdn/js/https.js b/old/cdn/js/https.js deleted file mode 100644 index 48cb92d..0000000 --- a/old/cdn/js/https.js +++ /dev/null @@ -1,8 +0,0 @@ -/*if(location.protocol == "http:") -{ - var s = location.href; - s = s.substring(4); - s = "https" + s; -// s = s.replace("http:","https:"); - window.location = s; -}*/ diff --git a/old/cookie.html b/old/cookie.html deleted file mode 100644 index 1f66cab..0000000 --- a/old/cookie.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/old/hacked/33_01.gif b/old/hacked/33_01.gif deleted file mode 100644 index 5f36f88..0000000 Binary files a/old/hacked/33_01.gif and /dev/null differ diff --git a/old/hacked/33_02.jpg b/old/hacked/33_02.jpg deleted file mode 100644 index c939fea..0000000 Binary files a/old/hacked/33_02.jpg and /dev/null differ diff --git a/old/hacked/33_03.gif b/old/hacked/33_03.gif deleted file mode 100644 index b0c01fd..0000000 Binary files a/old/hacked/33_03.gif and /dev/null differ diff --git a/old/hacked/index.html b/old/hacked/index.html deleted file mode 100644 index 8c12418..0000000 --- a/old/hacked/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - 【此站被黑】 - 用我们的实力证明DIR溢出的距离 - - - - - - -
    -
    -
    -

    -

    - - - - - - - -

    -

    |此站被黑||停止访问||此站被黑||停止访问|

    -

    By China / hackercc@msn.com

    -

    -
    -

    您的站点就是我们实践的地点!

    -
    - - \ No newline at end of file diff --git a/old/hacked/jquery.min.js b/old/hacked/jquery.min.js deleted file mode 100644 index 764485c..0000000 --- a/old/hacked/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" - - - - - -
    - -

    Hello!

    -

    Here is the website of TCPSoft

    -
    -

     ●友情链接:一个制作比较精良的网页:tcpsoft.me/520

    -

     ●友情链接:访问我的github

    -

     ●友情链接:内江六中司南科技社官网跳转链接

    -

     ●友情链接:内江六中司南科技社官网

    -

     ●友情链接:内江六中司南科技社介绍

    -

     ●友情链接:内江六中官网

    -

     ●站内链接:cdn - 内容分发中心

    -

     ●站内链接:games - HTML5游戏

    -

     ●站内链接:司南科技社 网页活动制作页面

    -
    -
    -
    - - - diff --git a/page/2/index.html b/page/2/index.html deleted file mode 100644 index 7041dd6..0000000 --- a/page/2/index.html +++ /dev/null @@ -1,1413 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - -
    - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    这是一款名字叫“Zen Idle”的游戏。来尝试下自动刷钱

    -image-20200505094215251 - -
    - - 阅读全文 » - -
    - - - -
    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    学习Linux之前,了解Linux哲学和Linux设计思想是必要的。

    -

    然后就是开始敲命令了啦 - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    OneDrive 是 Microsoft 的一个云存储服务,安装后集成在 Windows 资源管理器,所以比其他任何网盘都更有其与生俱来的优势。但由于众所周知的原因,OneDrive 的访问速度也极低。
    访问速度慢还不算了,还经常会死在某个进度,一直下不动,这是最**的

    -image-20200321165324494 -
    你看这 243KB/秒 长得多标致啊
    - -
    - - 阅读全文 » - -
    - - - -
    - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    现在互联网发达的时代,大家都会有很多的群,xxx 交流群、xxx 技术交流、xxx开发群、xxx技术学习群等,大家的初心可能都是想交流的,遇到点问题然后就可以在群里问。

    -

    然而很多时候你问的问题没人回答;也有时候问了半天还是没找到答案;也有时候当你把问题发出来了,别人正准备回答你的时候,你说知道了;然后刚开始群里很活跃,慢慢的就死了。

    -

    其实以上问题,都是大家不想看到的,然而在群里提问是我们加入群的初心,但是很多人做不好,最终导致你的问题无人解答,群慢慢的失去意义。

    -

    今天我所谈的就是群里提问的艺术,让你的问题快速得到解决。 - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    2020-02-28,距离 2020高考还有100天。

    - -
    - - 阅读全文 » - -
    - - - -
    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    今日探索吾爱破解论坛,整理了两篇入门指导文章,当备忘录了

    -

    内容来自:吾爱破解 论坛 - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    由于众所周知的原因,[数据删除] 。并且在搜索引擎方面,Google 也是搜索知识的一个优秀工具。

    -

    关于搜索引擎之间的瓜葛,Baidu、Bing、Google 究竟谁优谁劣,以后我有空的话再来谈这个话题,欢迎和我 issue 交流。

    -

    今天就来介绍一下如何“无中生有访问 Google”。 - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    翻阅 Wooyun ,然后找到了Github上。。。不得不说,Github 上确实有大量镜像资源

    -

    在这里做一个总结吧。按 Star 排序,把每个库的 Readme.md 剪辑到了这里。

    -

    文尾有彩蛋!

    - -
    - - 阅读全文 » - -
    - - - -
    - - - - -
    -
    -
    -
    - - - - -
    - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/page/3/index.html b/page/3/index.html deleted file mode 100644 index 9355dba..0000000 --- a/page/3/index.html +++ /dev/null @@ -1,939 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - -
    - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    昨天配置了 Google、Baidu、Bing搜索引擎提交,不过比较悲催的是 Github Pages 服务器拒绝 BaiduSpider ,整个站点根本不能出现在 Baidu 里面好么!! 另一方面,速度过慢,github pages 在国内速度,不太理想,所以用 CloudFlare 老牌 cdn 加速整站,还可以被 BaiduSpider 收录。 - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    害呀,hexo 都做了这么多了,干脆把google 统计一起加上去得了。Google Analytics、Google添加站点,baidu 添加站点、bing 添加站点,通通加上!

    - -
    - - 阅读全文 » - -
    - - - -
    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    今日看到博客的评论功能,就想整一个,本以为跟前两天添加hexo插件查不多,结果,,爬坑,又掉坑,爬坑又掉坑…… - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    今天闲来无事,折腾博客(其实是写 gdb 结果得更新一下 hexo ),然后这个博客就大换血了。

    -

    我干了啥呢: - -

    - - 阅读全文 » - -
    - - - -

    - - - - -
    -
    -
    -
    - - - - - - - -
    - - - - - -
    -

    - - -

    - - -
    - - - - -
    - - -

    2020即将来临了,作为群贫困人口,在2019年再来看各位群友最后一面

    - - -
    - - - - -
    -
    -
    -
    - - - - -
    - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/robots.txt b/robots.txt deleted file mode 100644 index 698f42f..0000000 --- a/robots.txt +++ /dev/null @@ -1,17 +0,0 @@ -User-agent: * -Allow: / -Allow: /archives/ -Allow: /tags/ -Allow: /categories/ - -Disallow: /vendors/ -Disallow: /js/ -Disallow: /lib/ -Disallow: /css/ -Disallow: /fonts/ -Disallow: /vendors/ -Disallow: /fancybox/ -Disallow: /old/ - -Sitemap: http://blog.tcpsoft.app/sitemap.xml -Sitemap: http://blog.tcpsoft.app/baidusitemap.xml \ No newline at end of file diff --git a/search.xml b/search.xml deleted file mode 100644 index 725283d..0000000 --- a/search.xml +++ /dev/null @@ -1,2278 +0,0 @@ - - - - 使用adb从手机传输相片到电脑 - /2022/04/adb-picture-transfer/ - 随着手机照片越来越多,手机空间越来越小,把手机照片腾到电脑上或许是一个减小空间的办法。

    -

    将安卓手机上的照片复制到电脑上有几种方法:

    -
      -
    • 手机连电脑,使用文件模式复制照片
    • -
    • 手机连电脑,使用照片模式复制照片
    • -
    • 手机插U盘,复制照片
    • -
    • 手机插电脑,用adb命令行复制
    • -
    -

    前两种方法,由于Windows垃圾的安卓数据传输协议,极有可能中途失败或者传输错误。不考虑

    -

    第三种方法,可行,但需要手机支持插U盘以及需要USB口转typeC口等,不是很方便

    -

    第四种方法,步骤稍多,但是不需要U盘中转,速度快,可以方便的查看结果等优势

    -
    -

    本文所使用和举例的机型是 MIUI 系统的手机,其他的系统路径不同,但是方法是一样的。

    -

    adb工具在这里放一个链接: https://cdutsec.lanzouw.com/ixnfb02yij7g

    -

    adb工具的版本太旧会影响传输速度和命令行的交互,所以尽量使用新版本的adb

    -
    -

    0. 准备工作

    0.1 电脑上adb工具

    在此文件夹中,这三个文件,打开命令行即可操作。

    -

    image-20220410171522377

    -

    在文件夹按住shift然后鼠标右键,选择在此处打开命令行,可以运行adb

    -

    (如果打开的是powershell,运行cmd进入cmd命令行)

    -image-20220410113046875 - - - -

    0.2 手机上开启开发者模式和USB调试

    0.2.1 开启开发者模式

    如果手机没有开启开发者模式,按照这个操作开启开发者模式。

    -

    打开设置,点开我的设备

    -IMG_20220405_210341 - -

    点开全部参数

    -IMG_20220405_210406 - -

    一直点击MIUI版本,会进入开发者模式。

    -IMG_20220405_210501 - -

    0.2.2 打开开发者模式后打开USB调试

    点开设置,打开更多设置,

    -IMG_20220405_210522 - -

    找到开发者选项

    -IMG_20220405_210531 - -

    首先开启开发者选项,手机可能提示有危险,选择确定。

    -

    然后打开USB调试的开关

    -Screenshot_2022-04-10-16-46-22-788_com.miui.securitycenter - -IMG_20220405_210546 - - - - - -

    1. 手机创建相册和分类照片

    将手机中需要传到电脑的图片选中,点击添加到,新相册,创建相册

    -

    注意这里命名需要是:英文或数字,不能有空格 ,如果是带有汉字或者有空格,选中其中的图片,重新创建相册。

    -IMG_20220410_113421 - -IMG_20220410_113442 - -

    选择移动相片的方式

    -IMG_20220410_113507 - - - -

    2. 电脑连接adb,搬运相片

    把手机用原厂充电线插上电脑(杂牌线可能识别不了或数据传输有问题!)

    -

    运行adb devices ,可以看到设备ID。

    -

    (这时候手机可能谈弹出提示:是否允许这台计算机调试,选择允许。)

    -

    image-20220410165018191

    -

    adb shell 进入手机空间

    -

    cd /sdcard/Pictures/Gallery/owner/,进入到相册的目录。ls 可以看到各个创建的相册

    -

    (在MIUI旧版本上需要运行的可能是:cd /sdcard/MIUI/Gallery/cloud/owner/

    -

    image-20220410165325479

    -

    cd 文件夹名字 进入文件夹,例如在这里我的文件夹是usb,那么我运行:cd usb

    -

    pwd 查看当前目录的路径,

    -

    image-20220410171122349

    -

    复制完整路径备用。

    -

    exit或 ctrl d 退出shell命令行,回到Windows命令行,运行:

    -

    adb pull 完整路径 来拉取文件,例如在此处我运行:adb pull /sdcard/Pictures/Gallery/owner/usb

    -

    image-20220410171324243

    -

    过程中没有报错,如果报错需要根据提示解决问题。

    -

    打开文件夹可以看到,相片文件夹已经有了:

    -

    image-20220410171541286

    -

    3. 手机和电脑确认文件夹信息

    3.1 手机上查看相册文件夹信息

    打开re文件管理器(如果没有 安装一个)

    -IMG_20220410_113744 - -

    和上面的路径一样,打开找到owner,找到自己创建的文件夹,

    -

    长按选中文件夹,点击右上方三个点,点击属性

    -IMG_20220410_113858 - -IMG_20220410_113908 - -

    可以看到文件夹里面有多少个文件,多少个文件夹,多少字节

    -image-20220410173129131 - -

    3.2 电脑上查看文件夹信息

    打开刚才的文件夹,右键刚收到的文件夹,属性,

    -

    或者按住键盘alt键然后双击文件夹,打开文件夹属性

    -image-20220410172952180 - -

    对比两个信息,观察文件数、文件夹数、字节数都是一样的,就是完全复制到电脑上了,手机上的可以删除掉了

    -

    4. 手机上删除相册

    这里快到结尾了,但还是要多说几句

    -

    删除相册的方式用且仅用:系统自带的相册app,来删除相册

    -IMG_20220410_113959 - -

    如图所示,MIUI是可能开启了云备份的,如果你恰好开了云备份并且这个相册里的一些图片已经备份,那么在使用文件管理器删除相册所在的文件夹,可能有两个问题:

    -
      -
    • 相册运行错误。相册找不到文件夹,但是配置中是有文件夹的,所以会显示一个相册,但是打不开
    • -
    • 云备份恢复。如果一些图片删除了,手机联网会自动从云备份恢复图片。那你这个相册就删不干净了。
    • -
    -

    如图所示,相册app删除的时候会同时删除远程备份,所以,,干净(并且不会导致相册运行错误)

    -]]>
    - - none - - - none - -
    - - 硬盘损坏(物理)和事件分析 - /2022/03/my-disk-crushed/ - 寒假期间,本人的电脑硬盘坏掉了。

    -

    总结一点经验吧,希望能帮助到您。

    - - -

    事件经过

    ​ 起初是偶尔的找不到系统分区找不到 winload.efi 从而无法启动。后来启不动,BIOS也识别不到,多重启几次可以开机。最后直接无法识别,换卡槽换机器也完全无法识别。 本人猜测可能是主控坏掉的原因。

    -

    ​ 硬盘是西数SN550,容量是1TB,由于是在淘宝小店买的便宜货,店铺的售后就不可能了,尝试西数官方联保,在线申请一直提示网络问题无法申请。尝试看一下数据恢复服务,在系数官方的数据恢复里找到了ontrack公司,在线填写信息后客服发邮件提供了报价,约合人民币5500多。奈何本人,钱包不足,遂放弃。

    -

    ​ 邮件如下(也可以参考一下使用昂贵的数据恢复服务的操作流程):

    -
    您好XXX,

    多謝你使用KLDiscovery Ontrack (HK) Ltd. 數據修復服務.
    Ontrack 35年歷史,在美國上市,是全球最大的數據恢復公司,每年恢復超過50,000個成功個案。

    數據恢復服務的程序如下:
    1. 請郵寄你的硬盤到我們的辦公室.
    2. 數據修復服務開始後, 你會收到我們發出的郵件, 你可登入查核數據修復進度.
    3. 當修復服務完成後, 我們會傳送修復報告及報價單到你的電子郵箱.
    4. 如你對報告感到滿意, 請簽回報價單. 修復好的數據將會儲存於全新1TB 移動硬盤.
    5. 標準服務的檢查費為HKD800恢復數據費用為 HKD6000. 時間約為5-7個工作天 (不包括速遞運輸時間時間).
    6. 如因為硬件事故或需配備零件, 需時可能會更長.
    7. 如未能恢復成功, 不會收取恢復數據費用
    8. 如Ontrack 成功恢復數據, 而客戶拒絕恢復服務, 我們會收取 HKD1000 行政費.
    9. 如客戶於一個月內未有取回硬盤, ONTRACK 會將硬盤消磁並销毁.

    以下是我們的辦公室地址,
    To: KLDiscovery Ontrack (HK) Limited
    香港北角電器道148 號12樓1203A室
    ATTN: Andrew Sin
    Tel: +852 3704 8688

    請包好你的硬盤及貼上我們的Job編號 (6389167)
    請確認以上的報價並回覆以上的電郵, 多謝!
    希望收到您的好消息!
    如需要任何協助, 請致電聯絡我們+852 3704 8688.

    Thank you!
    - -

    丢失的数据

    ​ 这一块硬盘里面包含了:

    -
      -
    • 200G的Windows系统盘(C),
    • -
    • 200G的硬件技术资料(O),
    • -
    • 200G的游戏分区GTA(V),
    • -
    • 200G的多媒体文件(W),
    • -
    • 50G的一些备份文件(X),
    • -
    -

    ​ 这些数据和资料全部丢失了。虽然说恰好这些资料不是最重要的,但是C盘仍然是很多重要文件的集散地,不管是重装还是格盘,都会丢失大量的程序数据,包括但不限于:

    -
      -
    • appdata(相当大一部分程序的数据都在appdata),
    • -
    • documents(QQ接收文件 微信接收文件,QQ和微信的聊天记录数据库,一部分IDE的项目文件),
    • -
    • User目录(相当于Linux的~目录,程序员IDE的配置,一部分项目文件,一部分程序的配置文件都会在这里,尤其是ssh密钥和xshell的服务器记录,如果丢失损失非常大)
    • -
    • Download目录(相信很多人的下载文件都是放在这里的吧,如果丢失也会损失很多内容)
    • -
    • chrome的文件夹(书签 历史记录 扩展程序和油猴插件的脚本)(虽然说你登陆了账户并且开启了chrome同步,那书签和一小段时间的历史记录和你的扩展程序可以从远程恢复,但是扩展程序里面的数据 配置 手撕脚本等可能就付之一炬了特别是油猴(当事人:现在就是后悔 非常的后悔))
    • -
    -

    总结一些

    -

    后记

    一怒之下在 jd 购买了三星980,1TB硬盘,感觉比西数更靠谱一点。

    -
    -

    西数,🐕都不用

    -

    真香~.jpg

    -
    -]]>
    - - none - - - none - -
    - - 解决 WSL2 和 proxifier 的相互报错问题 - /2021/07/wsl2-and-proxifier/ - 转载自知乎:https://zhuanlan.zhihu.com/p/151392411

    -

    关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

    关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。

    - - -

    问题:

    参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)

    -

    解决方法:

    1. 常见临时解决方案(不推荐):

    -

    以管理员身份运行CMD,输入:

    -
    -

    netsh winsock reset

    -
    -

    重启计算机即可修复。

    -

    2. 长期解决的方案(推荐):

    -

    (1)下载此软件:

    -

    http://www.proxifier.com/tmp/Test20200228/NoLsp.exe

    -

    (需要挂代理访问下载)

    -

    (2)管理员身份运行CMD输入:

    -
    -

    NoLsp.exe C:\windows\system32\wsl.exe

    -
    -

    请自行注意NoLsp.exe程序的位置,以及你的wsl.exe位置。

    -

    产生原因和解决方法分析:

    -
      -
    1. 代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
    2. -
    3. Proxifer开发人员解释如下:
    4. -
    -
    -

    如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使用WSCSetApplicationCategory WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
    这将告诉Windows不要将LSP DLL加载到wsl.exe进程中

    -
    -

    上述解决方案来自于:

    -

    https://github.com/microsoft/WSL/issues/4177

    -

    https://answers.microsoft.com/zh-hans/insider/forum/all/wsl2%E5%AE%89%E8%A3%85kali/b6dd4c62-1130-4a7c-9462-1e9e5f38dab2

    -]]>
    - - none - - - 代理 - WSL2 - proxifier - -
    - - 欢迎 pwn 分区(P盘) - /2020/08/welcome-pwn-partition/ - 今天再次尝试 wsl+gdb 调试,照舅失败

    -

    于是我搞了一个 “P分区”

    -
    -

    wsl+gdb,不行. ❌

    咕了很久还是想继续尝试gdb,wsl+gdb当然是最方便的一种方式了,打开命令行就可以用,都不需要开启 vmware。

    -

    但是很快的就遇到了问题。首先就是 wsl (我用的是Ubuntu16.04) 装好时是不支持32位程序的,通过搜索知道了安装启动 binfmt-support 就可以,让 wsl 能运行32位程序。

    -

    让64位的WSL(windows 子 linux系统)支持运行32位程序 - 简书

    -

    正准备开心的打开gdb调试,布星了。

    -

    在 gdb 里 start 可以,但是 ni 就不行了:

    -

    image-20200804185229605

    -
    pwndbg> ni
    Warning:
    Cannot insert breakpoint 1.
    Cannot access memory at address 0x80484a0

    Command aborted.
    - -

    查询了一波,感觉大概可能应该或许是 wsl 他就不能调试32位程序?

    -image-20200804184759075 - -

    你品你细品,wsl 装好的时候是只有64位程序支持的,32位直接给砍掉了,如果要运行32位还需要安装 binfmt-support ,32位程序仿佛不是 wsl 本来所支持的功能?

    -

    你品你再品,gcc编译成32位程序还需要加 -m32 编译参数,那么默认编译出来就是64位?32位是不是”过时”了?

    -

    阅读 binfmt-support 的介绍,可以看到

    -

    https://packages.debian.org/stretch/binfmt-support 上,写道:

    -
    ==========原文==========
    软件包:binfmt-support(2.1.6-2)
    Support for extra binary formats
    The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

    This package provides an 'update-binfmts' script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

    标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian
    ==========google机翻==========
    软件包:binfmt-support(2.1.6-2)
    支持额外的二进制格式
    版本2.1.43和更高版本的Linux内核中包含的binfmt_misc内核模块,使系统管理员可以根据幻数或文件扩展名注册各种二进制格式的解释器,并在匹配文件时调用适当的解释器。被执行。将其视为#的更灵活版本!可执行解释器机制。

    该软件包提供了一个'update-binfmts'脚本,软件包维护者可以使用该脚本注册要与此模块一起使用的解释器,而不必担心编写自己的init.d脚本,并且sysadmin可以将其用于稍高级别的接口。模块。

    标签: 系统管理: 核心或模块, 软件开发: 解释器, 实做语言: implemented-in::perl, interface::commandline, 角色: 程序, 范围: 实用程序, 应用程序集: Debian
    - -

    http://binfmt-support.nongnu.org/ 上,写道:

    -
    ==========原文==========
    binfmt-support
    The binfmt_misc kernel module, contained in versions 2.1.43 and later of the Linux kernel, allows system administrators to register interpreters for various binary formats based on a magic number or their file extension, and cause the appropriate interpreter to be invoked whenever a matching file is executed. Think of it as a more flexible version of the #! executable interpreter mechanism.

    binfmt-support provides an update-binfmts script with which package maintainers can register interpreters to be used with this module without having to worry about writing their own init.d scripts, and which sysadmins can use for a slightly higher-level interface to this module.

    Versions 1.2.0 and above also support a mechanism for extending the range of binary formats among which the kernel can distinguish with the aid of a userspace helper, called a detector.

    The source code to binfmt-support can be retrieved from its Git repository (if you don't have Git, follow the link for installation instructions).

    This Web page is created and maintained by Colin Watson.
    Last modified: $Date: 2017/07/09 13:30:47 $
    ==========google机翻==========
    binfmt-支持
    binfmt_miscLinux内核版本2.1.43和更高版本中包含的内核模块,允许系统管理员基于幻数或其文件扩展名注册各种二进制格式的解释器,并在匹配文件被调用时调用适当的解释器。被执行。可以将其视为#!可执行解释器机制的更灵活版本 。

    binfmt-support提供了一个update-binfmts 脚本,程序包维护人员可以使用该脚本来注册要与此模块一起使用的解释程序,而不必担心编写自己的 init.d脚本,并且sysadmins可以将其用于该模块的更高级别的界面。

    1.2.0及更高版本还支持一种扩展二进制格式范围的机制,内核可以借助一种称为检测器的用户空间助手来区分二进制格式 。

    binfmt-support可以从其Git存储库中检索要获取 的源代码(如果您没有Git,请遵循链接以获取安装说明)。

    该网页由Colin Watson创建和维护 。
    上次修改时间:$日期:2017/07/09 13:30:47 $
    - -

    这两个网页说,binfmt-support 是32位程序的解释器,安装后将32位程序绑定使用它打开。这是不是有点像虚拟机风格? gdb和Linux内核应该还是不能支持32位(我猜的)

    -
    -

    vmware,好用!✅

    不多说了吧,VMware装一个Ubuntu来进行调试,肯定没问题

    -

    但是我还是想快速的访问Windows上那些文件夹。

    -

    https://cn.bing.com/search?q=vmware添加共享文件夹

    -

    由于我会常用到下载文件夹,所以把下载文件夹映射到share目录。

    -image-20200804221417612 - -

    Linux里面,文件夹在哪儿呢?

    -

    /mnt/hgfs/share

    -

    但是文件管理器进入这个目录,还是不能右键新建文件夹。

    -

    ls -al 查看权限,chmod 777 share授予最宽的权限,再次 ls -al查看权限

    -

    image-20200804222350672

    -

    image-20200804222407950

    -

    设置完后就可以像正常使用一样读写这个文件夹了,所做的更改,在Windows上全部同步。

    -

    可是,这个目录不太好打啊

    -

    我在 ~/.bash_aliases 里设置了share,来方便地命令行打开文件夹 alias share="cd /mnt/hgfs/share"

    -

    那么下次运行share命令就可以了,

    -

    (感觉还是哪里不太方便?)

    -
    -

    P盘 与 /pwn

    干脆把那个文件夹抽出来,用一个分区存?

    -

    好处:

    -
      -
    1. Windows上好找,单独一个分区呢,二进制文件放里面就好啦
    2. -
    3. 虚拟机里好找,vmware设置挂在文件夹时输入分区就行了,不用担心如果文件夹被移动,会导致虚拟机内不可用
    4. -
    5. wsl 里好找,众所周知,wsl 和Windows共享文件系统,是通过把Windows上的盘符,挂载到 /mnt,那么P盘对应就是 /mnt/p,可以说目录已经灰常好打了
    6. -
    7. 稳定不容易坏,他就是个单独分区,不存在移动文件夹导致找不到的问题,只要这个盘还在,就能用(盘不在就创建一个分区呗)
    8. -
    -

    在此电脑,右键,管理,磁盘管理,搞个新分区,我选的4G大小差不多了。大概像酱紫:

    -

    image-20200804164302218

    -

    操作完之后就多出来一个P分区。

    -
    -

    这里有一点经验教训就是新建分区后进去然后打开wsl是不行的,wsl还不能识别到分区,如果要识别,需要重启wsl,在管理员权限的cmd里运行:

    -
    net stop LxssManager
    net start LxssManager
    -
    -

    虚拟机设置挂载文件夹,同上文。然后运行 ls -al 就可以看到 p 文件夹:

    -

    image-20200804234159560

    -

    这次就,不设置 alias 命令了吧,直接,把这个文件夹,映射到根目录下的 /pwn

    -

    创建符号链接

    -
    sudo ln -s /mnt/hgfs/p /pwn
    - -

    image-20200804234628952

    -

    运行 ls -al

    -

    image-20200804234748499

    -

    来试一下好了没,运行 cd /pwn

    -

    image-20200804234951886

    -

    (这里新建p分区的时候应该应该选择exFat文件系统的。。)

    -

    (然后用 DiskGenius 格式化成了exFat。亲测可用)

    -

    image-20200805000450165

    -

    听说win10可以直接读取ext4 U盘,硬盘应该也快了。我试试格式化成ext4格式。

    -

    读取不了,资源管理器都不显示

    -

    尝试安装了一个 Ext2Fsd-0.69.exe,在 https://sourceforge.net/projects/ext2fsd/ 下载的

    -

    安装完成需要重启电脑,不敢重启,就算了不试了

    -

    格式化回exFat格式,可正常使用

    -

    下一步,放进文件

    -image-20200805002113063 - -

    下一步,在Linux中使用

    -

    image-20200805002130947

    -]]>
    - - pwn - - - gdb - linux - vmware - -
    - - 简简单单的记录一下gdb的亿点点常用的操作 - /2020/07/gdb-operation/ - .

    -

    gdb操作:


    -

    gdb ./xxx

    开始调试xxx程序,如果不能运行,需要先 chmod +x ./xxx

    -
    -

    gdb attach [pid]

    通过程序id即pid,gdb附加到一个正在运行的程序,并对其进行调试

    -
    -

    start

    运行程序并断点在第一条指令

    -

    输出寄存器,反汇编等信息

    -
    -

    list

    有源码的情况下 输出源码

    -
    pwndbg> list
    warning: Source file is more recent than executable.
    1 #include<stdio.h>
    2 #include<stdlib.h>
    3 #include<unistd.h>
    4 int main(){
    5 char num='0';
    6 char str[10];
    7 read(0,str,0x10);
    8 if(num=='1'){
    9 puts("great.\n");
    10 fflush(stdout);
    - -
    -

    b *内存地址

    在内存地址处下断点

    -
    -

    b 函数名/*函数名

    下断点

    -
    pwndbg> b main
    Breakpoint 1 at 0x80484dc: file pwn05_char[]_overflow.cpp, line 5.
    - -
    -

    info b

    查看断点信息

    -
    pwndbg> info b
    Num Type Disp Enb Address What
    1 breakpoint keep y 0x080484dc in main() at pwn05_char[]_overflow.cpp:5
    - -
    -

    step

    step(in),步入,在有源码调试时,执行下一行源码,有函数调用时进入函数调用

    -
    -

    next

    步过,在有源码调试时,执行下一行源码,有函数调用时执行完函数并执行到函数调用的下一行

    -
    -

    nexti/ni

    next instruction,步过,执行下一行汇编指令

    -
    -

    stepi/si

    step into,步入,执行下一行汇编指令,如果有函数调用时进入函数的第一行汇编指令

    -
    -

    finish

    运行完当前的函数,停在最后一句汇编代码

    -
    -

    info registers

    寄存器信息

    -
    -

    x/<n/f/u> <addr>

    格式:

    -
    f格式:
    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

    u格式:
    b表示单字节
    h表示双字节
    w表示四字节
    g表示八字节。
    - -
    -

    一些GDB参考链接:

    https://blog.csdn.net/tzshlyt/article/details/53668885

    -

    https://www.jianshu.com/p/b7896e9afeb7

    -

    https://blog.csdn.net/u013525455/article/details/52813637

    -

    https://www.jianshu.com/p/e6af28e2566f

    -

    https://www.cnblogs.com/xiaoshiwang/p/10755199.html

    -

    https://www.cnblogs.com/xsln/p/gdb_instructions1.html

    -

    https://man.linuxde.net/gdb

    -

    https://www.cnblogs.com/tangtangde12580/p/8045980.html

    -

    https://www.cnblogs.com/zhoug2020/p/7283169.html

    -

    https://www.jianshu.com/p/adcf474f5561

    -

    https://blog.csdn.net/songchuwang1868/article/details/86132281

    -]]>
    - - pwn - - - gdb - -
    - - batch-shortcuts - /2020/07/batch-shortcuts/ - 教你设置 batch-shortcuts

    -

    img

    -

    PATH 环境变量介绍

    搬运自 知乎

    -

    PATH 环境变量

    经常使用命令行工具的话,对PATH等环境变量应该会非常熟悉;但现今的日常开发,接触到这一概念的机会越来越少。

    -

    时不时还是会遇到小朋友问我:“什么是PATH?”

    -

    这里记录一下,以供参考。

    -

    什么是环境变量?

    环境变量是操作系统提供给应用程序访问的简单 key / value字符串;windows/linux/mac都有同样的概念。

    -

    一般用于提供参数值给不同的应用程序。

    -

    什么是PATH变量?

    我们从命令行想要运行一个程序的时候,待运行的程序往往不是在当前目录。

    -

    PATH变量就是用于保存可以搜索的目录路径,如果待运行的程序不在当前目录,操作系统便可以去依次搜索PATH变量变量中记录的目录,如果在这些目录中找到待运行的程序,操作系统便可以运行。

    -

    Go开发为例,但我们使用go install命令编译、安装go程序后,可执行文件是会被保存在$GOPATH/bin路径下;那么我们可以把这个路径加入PATH变量中,这样我们便可以在任意路径中运行go安装的程序。

    -

    GOPATH

    GOPATH又是一个环境变量,用于保存go的主目录,go默认安装之后,GOPATH会是当前用户的主工作目录中的go子目录,即:%HOME/go

    -

    查看环境变量

    假设我们要查看GOPATH这个环境变量的值:

    -
      -
    • windows command prompt: echo %GOPATH%
    • -
    • windows powershell: $env:GOPATH
    • -
    • linux & mac: echo $GOPATH
    • -
    -

    设置PATH变量

    windows

    假设我们当前登陆操作系统的用户名是:xiaomin

    -

    然后我们要把c:\users\xiaomin\go\bin路径加入到PATH变量中,在windows下我们可以在PowerShell中执行:

    -
    $env:Path += ";c:\users\xiaomin\go\bin"
    - -

    注意,这样仅仅只是临时修改当前的PATH变量,当我们关闭、重开PowerShell时,就需要重新设置。

    -

    如果要永久的修改,需要使用管理员权限启动PowerShell,然后执行:

    -
    setx /M PATH "%PATH%;c:\users\xiaomin\go\bin"
    - -

    Linux & Mac

    同样假设我们当前登陆用户名是:xiaomin

    -

    然后我们要把/home/xiaomin/go/bin路径加入到PATH变量

    -
    export PATH=$PATH:/home/xiaomin/go/bin
    - -

    这同样是临时修改,重开shell之后,会被重置;要永久改变的话,一般是将上面的命令加入到我们使用的shell初始化文件中。

    -

    以bash为例,那么就是将上述命令加到/home/xiaomin/.bash_profile文件中。

    -
    -

    设置步骤

    1. pathext

    Windows上的另一个变量。这里存储可直接运行的文件类型,一般需要添加 .lnk 进去

    -

    2. 建立一个目录

    建立: D:\bin\batch-shortcuts

    -

    D:\bin\ 路径又简洁又舒服

    -

    3. 把目录写入path

    参照百度经验:windows10设置环境变量PATH

    -

    注意,设置完后,需要重启资源管理器和命令行来应用更改。

    -

    可以在任务管理器,选中资源管理器,选择重新启动

    -

    可以注销,然后登陆

    -

    可以重启

    -

    4. 然后就可以用了

    怎么用?

    -

    在上面那个文件夹内的所有文件,都是命令行可以访问到的。

    -

    一般可以创建:.bat .lnk ,.exe也阔以哇

    -

    举个栗子:

    -
    文件名:batch-shortcuts.bat
    explorer "D:\bin\batch-shortcuts"
    - -

    模仿Linux ctrl d 一键关闭风格,创建的 d.bat

    -
    文件名:d.bat
    exit
    - -

    比如md5

    -
    文件名:md5.lnk
    指向:"D:\Program Fies (Green)\WinMD5校验器.exe"
    - -

    还有一些调用程序的,比如安装Ubuntu后,写一个脚本来调用Ubuntu执行命令

    -
    文件名:ubuntu.bat
    @echo off

    echo.
    echo Usage:
    echo use "ubuntu run $code$" to run shell command

    echo.
    "C:/Program Files/WindowsApps/CanonicalGroupLimited.Ubuntu16.04onWindows_2020.1604.14.0_x64__79rhkp1fndgsc/ubuntu1604.exe" %*
    - -

    %* 是传递所有命令行参数,这个了解一下会有很大的帮助

    -

    如果不用这个,就得用 %1 %2 %3 %4 %5 %6 %7 %8 %9 ,而超过9的就不能再处理了

    -

    还有其他玩法,自己探索吧!

    -
    -

    关于 D:\bin 文件夹

    我一般把命令行调用的,编程语言类的,放在这里面,

    -

    (还有一些绿色IDE为代表的,可以一套带走的,我也放里面)

    -

    (还有DOS系统盘为代表的,系统级的底层的,我也放里面)

    -

    一方面是,这个路径他没有空格,不容易导致命令行调用出错。

    -

    第二是,他真的又简洁又舒服哇

    -

    列出一下目前为止我的 D:\bin 的内容

    -
    D:\bin>dir
    驱动器 D 中的卷没有标签。
    卷的序列号是 9E68-267B

    D:\bin 的目录

    2020/05/25 16:24 <DIR> .
    2020/05/25 16:24 <DIR> ..
    2020/05/25 16:25 <DIR> .gradle
    2020/03/17 20:23 <DIR> Anaconda3
    2020/03/23 01:30 <DIR> Android_SDK
    2020/06/05 10:42 <DIR> batch-shortcuts
    2020/07/16 17:22 <DIR> DOS-16bit
    2020/02/15 14:21 <DIR> eclipse-cpp
    2020/02/15 14:18 <DIR> eclipse-java
    2020/05/21 17:14 <DIR> ESP_8266
    2019/07/01 00:43 <DIR> HBuilder.9.0.1.windows
    2020/03/31 23:31 <DIR> HBuilderX.2.6.8.20200330.full
    2020/04/21 01:06 <DIR> Java
    2020/07/17 11:56 <DIR> nodejs
    2019/11/28 13:53 <DIR> Perl
    2020/03/18 23:53 <DIR> PortableApps
    2020/02/19 23:47 <DIR> Python
    2020/03/12 21:23 <DIR> Qt
    2020/03/10 23:30 <DIR> Ruby27-x64
    2020/03/23 21:16 <DIR> texlive
    0 个文件 0 字节
    20 个目录 57,676,476,416 可用字节

    D:\bin>
    - - - -]]>
    - - none - - - none - -
    - - 亿分钟成为时间管理大师 - /2020/07/time-management/ - 使用一个叫 manicTime 的软件

    -

    (好像最近越来越喜欢挖坑不填了哇)

    -

    (想了解的小伙伴请发邮件催更,联系方式在about页面有)

    -

    image-20200716102927688

    -]]>
    - - none - - - none - -
    - - QQ空间辅助点赞 - /2020/07/qzone-faster-like/ - QQ空间手滑点赞太麻烦,用键盘吧。

    -

    嗯,我文思枯竭了,编不出什么内容充实的文章,就写下过程贴代码吧

    -

    浏览器检查元素

    通过完成的审查元素发现:

    -
    所有的列表,元素的id:     feed_friend_list
    一个说说的,元素的class: f-single
    点赞按钮,元素的class: qz_like_btn_v3
    评论按钮,元素的class: qz_btn_reply
    - -

    写脚本

    之前考虑用jQuery实现,用油猴脚本,但是脚本对于加载jQuery有一点问题

    -

    因为QQ空间用了 $ 这个名字,但是不是jQuery,所以考虑用纯 js 实现。

    -

    后来啊。$ 不是可以用jQuery写么。就改成了jQuery实现

    -

    (jQuery真香)

    -

    用纯 js 添加点赞按钮的css

    var style = document.createElement('style');
    style.innerHTML="a.item-on {background-color: red;}"
    var head = document.head || document.getElementsByTagName('head')[0];
    head.appendChild(style);
    - -

    完整脚本 v0.1

    (还没想好怎么解释这个脚本。直接贴代码)

    -
    // ==UserScript==
    // @name QQ空间快速操作
    // @namespace https://blog.tcpsoft.app/
    // @version 0.1
    // @description try to take over the world!
    // @author tcpsoft
    // @match https://user.qzone.qq.com/*
    // @grant none
    // ==/UserScript==
    (function () {
    // Your code here...
    /* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
    function up(){
    console.log("上");
    }
    function left(){
    console.log("左");
    var first=jQuery(".f-single").eq(0);
    first.find(".qz_btn_reply").click();
    }
    function down(){
    console.log("下");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    first.slideUp(function(){this.remove()});
    //if(jQuery(".f-single").length==0){
    // window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
    //}
    }
    function right(){
    console.log("右 点赞");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log(zan.length);
    if(zan.length!=0){
    zan.eq(0).click();
    }
    first.slideUp(function(){this.remove()});
    }
    function beg(){
    console.clear();
    console.log("【【【【【】】】】】");
    /*插入输入框*/
    var $rect = jQuery('<div>\
    <style>\
    #rect {\
    height: 100px; width: 160px; border:red 5px solid; position:fixed;\
    z-index: 999; top:40px; margin-left:40%; margin-right:40%;\
    }\
    #rect:focus{ border:5px green solid; }\
    </style>\
    <textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea></div>');
    jQuery("body").append($rect);
    /*红色点赞*/
    jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
    /*红色提示和文字
    jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
    */
    /*监听document的回车操作 37左 38上 39右 40下*/
    jQuery("#rect").keydown(function(e){
    //获取键盘输入的keyCode
    //console.log(e)
    var keycode = (Number)(e.keyCode);
    console.log(keycode);
    if(keycode == 37){//左
    left();
    }else if(keycode == 38){//上
    up();
    }else if(keycode == 39){//右
    right();
    }else if(keycode == 40){//下
    down();
    }
    return false;
    });
    }
    console.log("----等两秒----");
    setTimeout(beg,2000);
    })();
    - - - -

    2020-08-01更新 v0.2

    增加了修复网络的功能。妈妈再也不用担心更新不出来啦

    -
    // ==UserScript==
    // @name QQ空间快速操作
    // @namespace https://blog.tcpsoft.app/
    // @version 0.2
    // @description QQ空间用键盘操作,岂不美哉
    // @author tcpsoft
    // @match https://user.qzone.qq.com/*
    // @grant none
    // ==/UserScript==

    (function () {
    'use strict';
    // Your code here...
    /* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
    function up(){
    console.log("上");
    }
    function left(){
    console.log("左");
    var first=jQuery(".f-single").eq(0);
    first.find(".qz_btn_reply").click();
    }
    function down(){
    console.log("下");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    first.slideUp(function(){this.remove()});
    //if(jQuery(".f-single").length==0){
    // window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
    //}
    }
    function right(){
    console.log("右 点赞");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log(zan.length);
    if(zan.length!=0){
    zan.eq(0).click();
    }
    first.slideUp(function(){this.remove()});
    }
    function beg(){
    console.clear();
    console.log("【【【【【】】】】】");
    /*插入输入框*/
    var $rect = jQuery('<div id="rect_div">\
    <style>\
    #rect_div{\
    position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
    }\
    #rect {\
    height: 100px; width: 200px; border:red 5px solid; \
    }\
    #rect:focus{ border:5px green solid; }\
    #qzone_fix_button{\
    float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
    }\
    </style>\
    <textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n下 下一条\n左 评论\n右 点赞</textarea>\
    <button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button></div>');
    jQuery("body").append($rect);
    /*红色点赞*/
    jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
    /*红色提示和文字
    jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
    */
    /*监听document的回车操作 37左 38上 39右 40下*/
    jQuery("#rect").keydown(function(e){
    //获取键盘输入的keyCode
    //console.log(e)
    var keycode = (Number)(e.keyCode);
    console.log(keycode);
    if(keycode == 37){//左
    left();
    }else if(keycode == 38){//上
    up();
    }else if(keycode == 39){//右
    right();
    }else if(keycode == 40){//下
    down();
    }
    return false;
    });
    }
    console.log("----等两秒----");
    setTimeout(beg,2000);
    })();
    - - - -

    2020-08-16更新 v0.3

    0.3版本,增加了简单的去除顶部的已点赞用户

    -

    代码:

    -
    // ==UserScript==
    // @name QQ空间快速操作
    // @namespace https://blog.tcpsoft.app/
    // @version 0.3
    // @description QQ空间用键盘操作,岂不美哉
    // @author tcpsoft
    // @match https://user.qzone.qq.com/*
    // @grant none
    // ==/UserScript==

    (function () {
    'use strict';
    // Your code here...
    /* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
    var list=["Cortana","Cortana"];
    function getFirstTime(){
    var first=jQuery(".f-single").eq(0);
    var timetime = first.find(".info-detail .ui-mr8.state").html();
    console.log(timetime);
    }
    function faded(first){
    getFirstTime();
    first.slideUp(100,function(){this.remove()});
    }
    function clearLiked(){
    jQuery("#finishedClearLiked").html("pending.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    if(first.length==0){
    jQuery("#finishedClearLiked").html("finished.");
    return;
    }
    var nickName = first.find(".f-nick a").html();
    console.log(nickName);
    var matchList = false;
    for(i=0;i<list.length;i++){
    if(nickName.indexOf(list[i])>-1){
    matchList=true;
    break;
    }
    }
    if(matchList==true){
    console.log("进入{pass}分支");
    var second=jQuery(".f-single").eq(1);
    var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
    console.log(nextZan.length);
    if(nextZan.length!=0){ //下面有取消赞
    console.log("下面有取消赞,所以pass");
    first.remove();
    setTimeout(clearLiked,100);
    }
    else{ //下面没有取消赞,停止
    console.log("下面无取消赞,所以停止");
    var nickName = second.find(".f-nick a").html();
    console.log("下一个人是:",nickName);
    jQuery("#finishedClearLiked").html("finished.");
    }
    }
    else{
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log(zan.length);
    if(zan.length!=0){
    jQuery("#finishedClearLiked").html("finished.");
    }
    else{
    first.remove();
    setTimeout(clearLiked,100);
    }
    }
    }
    function up(){
    console.log("上");
    jQuery("#finishedClearLiked").html("pending.");
    clearLiked();
    }
    function left(){
    console.log("左");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    first.find(".qz_btn_reply").click();
    }
    function down(){
    console.log("下");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    faded(first);
    //if(jQuery(".f-single").length==0){
    // window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
    //}
    }
    function right(){
    console.log("右 点赞");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log(zan.length);
    if(zan.length!=0){
    zan.eq(0).click();
    }
    faded(first);
    }
    function beg(){
    console.clear();
    console.log("【【【【【】】】】】");
    /*插入输入框*/
    var $rect = jQuery('<div id="rect_div">\
    <style>\
    #rect_div{\
    position:fixed; z-index: 999; top:40px; margin-left:40%; margin-right:40%; width: 50%;\
    }\
    #rect {\
    height: 120px; width: 200px; border:red 5px solid; \
    }\
    #rect:focus{ border:5px green solid; }\
    #qzone_fix_button{\
    float:left; height: 50px; width: 100px; border:skyblue 2px solid; \
    }\
    #clearLikedDiv{\
    vertical-align: top;border: 2px solid yellow;width: 150px;height: 80px;\
    display: inline-flex;flex-direction: column;background-color: wheat;\
    }\
    #finishedClearLiked{\
    border: skyblue 2px inset; font-size: 1.5em;\
    }\
    #startClearLiked{\
    width: 100%;flex-grow: 1;\
    }\
    </style>\
    <textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
    <button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
    <div id="clearLikedDiv">\
    <span id="finishedClearLiked">free.</span>\
    <button id="startClearLiked">清理已点赞</button>\
    </div>\
    </div>');
    jQuery("body").append($rect);
    jQuery("#startClearLiked").click(clearLiked);
    /*红色点赞*/
    jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
    /*红色提示和文字
    jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
    */
    /*监听document的回车操作 37左 38上 39右 40下*/
    jQuery("#rect").keydown(function(e){
    //获取键盘输入的keyCode
    //console.log(e)
    var keycode = (Number)(e.keyCode);
    console.log(keycode);
    if(keycode == 37){//左
    left();
    }else if(keycode == 38){//上
    up();
    }else if(keycode == 39){//右
    right();
    }else if(keycode == 40){//下
    down();
    }
    return false;
    });
    }
    console.log("----等两秒----");
    setTimeout(beg,2000);
    })();
    - - - -

    2020-08-16更新 v0.4

    增加显示最顶部五条动态内容,修复网络和状态条和删除顶部已点赞都放在最左边了

    -

    代码:

    -
    // ==UserScript==
    // @name QQ空间快速操作
    // @namespace https://blog.tcpsoft.app
    // @version 0.4
    // @description QQ空间用键盘操作,岂不美哉
    // @author tcpsoft
    // @match https://user.qzone.qq.com/*
    // @grant none
    // ==/UserScript==

    (function () {
    'use strict';
    // Your code here...
    /* https://greasyfork.org/zh-CN/scripts/373979-qq%E7%A9%BA%E9%97%B4%E5%8A%A8%E6%80%81%E8%87%AA%E5%8A%A8%E7%82%B9%E8%B5%9E/code */
    var list=["Cortana","今日百色","易锦教育","易锦大学","CUIT网络空间安全学院","丁凌娜","黄恋茹","Victor","墙"];
    function getFirstTime(){
    var first=jQuery(".f-single").eq(0);
    var timetime = first.find(".info-detail .ui-mr8.state").html();
    console.log(timetime);
    }
    function matchList(nickName){
    var match = false;
    for(i=0;i<list.length;i++){
    if(nickName.indexOf(list[i])>-1){
    match=true;
    break;
    }
    }
    return match;
    }
    function faded(first){
    getFirstTime();
    first.slideUp(100,function(){this.remove()});
    }
    function clearLiked(){
    jQuery("#finishedClearLiked").html("pending.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    if(first.length==0){ //好友动态已经空了
    jQuery("#finishedClearLiked").html("finished.");
    return;
    }
    var nickName1 = first.find(".f-nick a").html();
    console.log(nickName1);
    var match1 = matchList(nickName1);
    if(match1==true){ // 第一个人是列表
    console.log("进入{pass}分支");
    var second=jQuery(".f-single").eq(1);
    var nextZan=second.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//查找取消赞
    console.log("第二个人有无取消赞:",nextZan.length);
    if(nextZan.length!=0){ //下面有取消赞
    console.log("下面有取消赞,所以pass");
    first.remove();
    setTimeout(clearLiked,125);
    }
    else{ //第二个人下面没有取消赞,
    console.log("第二个人下面无取消赞,");
    var nickName2 = second.find(".f-nick a").html();
    console.log("第二个人:",nickName2);
    var match2 = matchList(nickName2);
    if(match2==true){ // 第二个人也是列表
    console.log("进入{pass}分支");
    var third=jQuery(".f-single").eq(2);
    var nickName3 = second.find(".f-nick a").html();
    console.log("第三个人:",nickName3);
    var thirdZan=third.find("a.qz_like_btn_v3[data-clicklog='cancellike']");//取消赞
    console.log("第三个人有无取消赞:",thirdZan.length);
    if(thirdZan.length!=0){ //下面有取消赞
    console.log("第三个人下面有取消赞,所以pass");
    first.remove();
    setTimeout(clearLiked,125);
    }
    else{ //下面没有取消赞,停止
    console.log("下面无取消赞,所以停止");
    jQuery("#finishedClearLiked").html("finished.");
    }
    }
    }
    }
    else{
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log("第一个人有无点赞按钮:",zan.length);
    if(zan.length!=0){ // 有点赞按钮,结束
    jQuery("#finishedClearLiked").html("finished.");
    }
    else{
    first.remove();
    setTimeout(clearLiked,125);
    }
    }
    setTimeout(space,100);
    }
    function space(){
    for(var iii=0;iii<5;iii++){
    var one=jQuery(".f-single").eq(iii);
    if(one.length==0){
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html("nickName");
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html("timestamp");
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html("content");
    }
    else{
    var nickName = one.find(".f-nick a").html();
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(0).html(nickName);
    var time = one.find(".info-detail .ui-mr8.state").html();
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(1).html(time);
    var summary = one.find(".f-info").text();
    jQuery("#statusTable").find("tr").eq(iii).find("td").eq(2).html(summary);
    }
    }
    }
    function up(){
    console.log("上");
    jQuery("#finishedClearLiked").html("pending.");
    clearLiked();
    setTimeout(space,100);
    jQuery("#finishedClearLiked").html("finished.");
    }
    function left(){
    console.log("左");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    first.find(".qz_btn_reply").click();
    setTimeout(space,100);
    }
    function down(){
    console.log("下");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    faded(first);
    setTimeout(space,100);
    //if(jQuery(".f-single").length==0){
    // window.scrollTo(window.scrollX, document.documentElement.scrollHeight);
    //}
    }
    function right(){
    console.log("右 点赞");
    jQuery("#finishedClearLiked").html("free.");
    var first=jQuery(".f-single").eq(0);
    console.log(first);
    var zan=first.find("a.qz_like_btn_v3[data-clicklog='like']");
    console.log(zan.length);
    if(zan.length!=0){
    zan.eq(0).click();
    }
    faded(first);
    setTimeout(space,150);
    }
    function beg(){
    console.clear();
    console.log("【【【【【】】】】】");
    /*插入输入框*/
    var $rect = jQuery('<div id="rect_div">\
    <style>\
    #rect_div{\
    position: fixed; z-index: 999;top: 40px; width: 90%; text-align: center; left: 0px; right: 0px; margin-left: auto; margin-right: auto;\
    }\
    #rect {\
    height: 140px; width: 210px; border:red 5px solid; \
    }\
    #rect:focus{ border:5px green solid; }\
    #clearLikedDiv{\
    vertical-align: top;border: 4px solid darkseagreen;width: 100px;height: 120px;\
    display: inline-flex;flex-direction: column;background-color: wheat;\
    }\
    #qzone_fix_button{\
    height: 50px; width: 100px; \
    }\
    #finishedClearLiked{\
    border: skyblue 3px inset; font-size: 1.5em;\
    }\
    #startClearLiked{\
    width: 100%;flex-grow: 1;\
    }\
    \
    #statusTable{\
    border-collapse: collapse;\
    display: inline-table;\
    vertical-align: top;\
    }\
    #statusTable tr td:nth-child(1){\
    background-color: #FFFFCC;\
    width: 100px;\
    }\
    #statusTable tr td:nth-child(2){\
    background-color: #DDDDDD;\
    width: 100px;\
    }\
    #statusTable tr td:nth-child(3){\
    background-color: #CCFFCC;\
    width: 300px;\
    }\
    </style>\
    <div id="clearLikedDiv">\
    <button id="qzone_fix_button" onclick="QZFL.cookie.set(\'page_engine_off\',1,\'qzone.qq.com\',\'/\',12);location = location.href;return false;">网络问题<br>立即修复</button>\
    <span id="finishedClearLiked">free.</span>\
    <button id="startClearLiked">清理已点赞</button>\
    </div>\
    <textarea type="input" id="rect" value="">输入区操作:\n触摸板双指上下滑刷新动态\n空格 加载前五条动态信息\n上 清理顶部已点赞\n下 下一条\n左 评论\n右 点赞</textarea>\
    <table id="statusTable" border="2"><tr>\
    <td>100</td><td>100</td><td>100</td>\
    </tr><tr>\
    <td>200</td><td>200</td><td>200</td>\
    </tr><tr>\
    <td>300</td><td>300</td><td>300</td>\
    </tr><tr>\
    <td>400</td><td>400</td><td>400</td>\
    </tr><tr>\
    <td>500</td><td>500</td><td>500</td>\
    </tr></table>\
    </div>');
    jQuery("body").append($rect);
    jQuery("#startClearLiked").click(clearLiked);
    /*红色点赞*/
    jQuery("head").append("<style id=\"addedCSS\" type=\"text/css\">a.item-on {background-color: red;}</style>");
    /*红色提示和文字
    jQuery("div.user-vip-info").eq(0).html("<span style='color:red;font-size:50px'>OOKK.</span>");
    */
    /*监听document的回车操作 37左 38上 39右 40下*/
    jQuery("#rect").keydown(function(e){
    //获取键盘输入的keyCode
    //console.log(e)
    var keycode = (Number)(e.keyCode);
    console.log(keycode);
    if(keycode == 32){//空格
    console.log("空格");
    space();
    }else if(keycode == 37){//左
    left();
    }else if(keycode == 38){//上
    up();
    }else if(keycode == 39){//右
    right();
    }else if(keycode == 40){//下
    down();
    }
    return false;
    });
    }
    console.log("----等两秒----");
    setTimeout(beg,2000);
    })();
    - -]]>
    - - none - - - none - -
    - - 手机差点报废后的自救 - /2020/05/Mi9-SE-screen-problem-self-rescue/ - 今天手机屏幕出问题手机差点变砖

    - - -

    莫名其妙的自动点击

    今天(前几天开始),手机使用的时候总是有莫名其妙的自动的点击,造成了一些困扰。

    -

    今天下午开始直接十点同时点击,在屏幕最下方!

    -

    脑补一下:打开输入法,啪啦啪啦给我按一堆 ,.,.,,,

    -

    打开设置,啪啦啪啦给我点进去不知道什么设置选项了

    -

    打开 Minecraft ,选中TNT,刚想摆,结果在右边给我放了一堆了(然后切换成火石…)

    -

    (事后模拟了一下,大概就像这样:)

    -

    -img - - - -

    考虑是不是系统卡顿

    img

    -

    锁屏,解锁。无效

    -

    关机,重启。无效。开机一会儿后又开始了,而且频繁的点击影响锁屏解锁!

    -

    什么?你想叫我重买?

    -不可能想都不要想_不要_可能表情 - - - -

    考虑是不是有病毒软件恶意程序

    浩浩荡荡开始卸载(半年了终于清理一次手机)

    -
    -

    顺手发现了小米系统的自动启动程序是真的恶心。刚关了几个,又给我打开了几个程序

    -
    -

    检查并卸载了:白鲸V₱N、老王V₱N、蚂蚁V₱N、旋风V₱N、Minecraft网易版、adbd insecure(系统使用过程中提示授予了root权限 所以严重怀疑这个)、VMOS(占用空间大,顺手卸了吧)、轻启动(有模拟点击,所以也怀疑这个,而且长得还丑,顺手卸了吧)

    -

    莫 有 卵 用 !

    -

    还是那么自由的十点暴击

    -

    冻结系统程序

    浏览小米系统管家,看到了下面的程序然后冻结了

    - - -

    心想重启一下才能停止运行系统服务呢。重启手机。结果:

    -

    触 摸 完 全 没 反 应 了 !

    -

    下图是网上随便找的,脑补一下随便怎么划都没反应的状态。当时我心里就直接:噔噔咚

    - - -

    咋办??????????????????

    -

    adb ?试试就逝世。

    连接电脑,adb shell进入命令行。

    -

    input,模拟触摸。不管用

    -

    -

    通过搜索,知道了如何列出已停用的系统程序

    -

    -

    通过搜索知道了启用已冻结的系统程序的方法,启用了两个,然后reboot重启

    -

    -

    还是不行。又启用了两个

    -

    -

    -

    重启,还是不行

    -

    突然想到鼠标

    摸出手机 USB-C OTG 转接头,拔掉电脑无线鼠标插上OTG插上TypeC口,

    -

    能用!

    - - -

    啊这?? 这变成巴掌大的 Android显示器了么

    -

    所幸是能用了

    -希望人没事_没事_希望表情 - -

    现在又咋办呢????????????

    -

    进入TRWP看看?

    截图就不截图了,脑补一下。

    -

    重启进入TRWP,各种操作都是正常的,甚至还很流畅。

    -

    判定硬件没有问题。

    -

    判定TRWP手机驱动正常可用。

    -

    MIUI系统有问题。

    -

    通过搜索,我们知道…

    搜你妹,上莆田医院啊

    -

    img

    -

    重装。。。系统?

    -

    然后又搜了一堆新版系统,又搜了刷系统。

    -

    不行,我程序还没备份。

    -

    于是打算开始用鼠标操作进行本地备份( 如何操作

    -

    此处省略 1w 字 …

    -

    浏览器历史记录:(信息量很大)image-20200526165743064

    -

    image-20200526165817077

    -

    image-20200526165855658

    -

    image-20200526165952401

    -

    image-20200526170059829

    -

    我想起高兴的细情

    手机发烫了。

    -

    想起前面哪篇文章说过触摸不行可能是屏幕上电荷什么的。。。

    -

    终于找到这篇文章了

    -

    解决方案:湿抹布,上下左右前前后后擦一遍,重启。

    -

    问题解决。

    -

    意不意外!惊不惊喜! - 没想到吧?我想到了哈哈哈!意不意外?惊不惊喜?刺不刺激?_想不到_装逼_斗图_怼人表情表情

    -]]>
    - - none - - - adb - -
    - - 大举报:仿佛那个时代又来临了 - /2020/05/dajubao/ - 转自 豆瓣 : 2019-05-25 03:37:45

    -
    -

    大举报:仿佛那个时代又来临了

    原创:梅骁

    -

    1

    -

    之前我很想写一篇文章,写举报是时代变坏的开始。

    -

    但最近我的想法变了,我们的时代不是在开始变坏,而是已经变得很坏了。

    -

    最近一个让我有这种感觉的事件是王晨艺的点赞事件。

    -

    王晨艺是今年《创造营2019》的一个选手,是个没什么背景的舞蹈老师,在《创造营2019》这个整体很糊的节目里人气排名很靠前。

    -

    你不知道他没关系,因为我其实对他也没那么熟悉。

    -

    但这两天他身上发生了一个事情,有人扒出他六年前曾经在微博点赞过荤段子,所以认为他点赞涉及“敏感问题”,认为他是劣迹艺人,要求他立刻退赛。

    -

    img

    -

    看到这条新闻的时候,我觉得这一切都荒谬透顶。

    -

    最可怕的还不是有人认为一个人点赞荤段子所以他就是劣迹艺人,最可怕的是居然有人为了寻找一个人的“劣迹”而去疯狂翻查这个人过去多年的人生经历,试图寻找出一个黑料、一个过失,并对此大加举报攻击,以达到封杀、退赛的目的。

    -

    这个画面实在太可怕了。

    -

    一个人,他面无表情地盯着手机、盯着电脑,去从另一个人过往的茫茫人生经历里寻找一个错漏之处,就为了攻击他、打垮他。

    -

    你十年前说过脏话、你五年前垃圾没扔进垃圾桶、你三年前打过人一拳……这些全部都有可能成为你被攻击的素材。

    -

    这太可怕了,这画面的恐怖程度不亚于任何一部恐怖片。

    -

    因为我们谁都不能保证自己过往人生里从没有过任何错漏不当之处,所以我们任何人都有可能成为被这种手段打倒的那个。

    -

    2

    -

    时间稍微往前推一下。

    -

    今年三月份时,曾经发生过一件事,重庆一所高校里,有个老师因为课堂上发表损害国家声誉的过激言论而被学生举报。

    -

    学校很快发布公告,认为他违反教师职业道德,撤销了他的教师资格。

    -

    img

    -

    这是举报者的又一次胜利,可我看得特别害怕。

    -

    试想一下,当一个大学老师在课堂上讲话都可能会被举报的时候,他会怎么办?

    -

    他会只敢讲那些最安全、最无聊也最没有价值的东西,因为只有那些东西才是不会被举报的,与传道授业解惑相比,当然是个人的安全最重要。

    -

    这次是撤销教师资格,下次可能就是被判刑入狱,不,据我所知,已经有大学老师因为这个而入狱三年了。

    -

    img

    -

    所以,会越来越少人敢冒这个风险。

    -

    可是,你知道吗,现代大学教育跟中世纪大学教育的区别就在于,中世纪大学是传授已有知识的场所,而现代大学则担负着不断开拓新的知识和学科的职能。

    -

    所以,从1809年现代大学由柏林大学创立开始,“自由”都是大学最核心的关键词。

    -

    曾经在清华大学里,闻一多是言论最激进的教授,动不动就要在课堂上发表演说,后来更是在西南联大的广场集会上高声呼喊,对学校大肆批评。

    -

    img

    -

    闻一多

    -

    当时政府要求学校解聘闻一多,时任校长梅贻琦根本不理会,即便他自己也对闻一多的言行很不满,但他知道“自由”才是让大学教育保持活力的唯一动力。

    -

    而当“举报”出现在大学课堂上,当大学老师的每一句话都可能成为被举报的理由和材料时,还谈什么自由,谈什么进步。

    -

    我们的年轻一代在面对自己不认可的言论时第一反应已经不是“与他辩论”“将他驳倒”,而是熟练的使用举报手段“我要举报他,堵上他说话的嘴巴”。

    -

    并且他们一次又一次的成功做到了。

    -

    他们毁掉的不只是一个又一个老师,他们毁掉的更是教育本身。

    -

    这真的很可悲。

    -

    3

    -

    前两天,在豆瓣鹅组有这么一个帖子,内容是一个投票。

    -

    帖子的作者问大家,如果你发现你的父母、爱人、师长、朋友发表了不当言论,你要不要举报ta?

    -

    那个帖子里甚至详细地把这些人分成了“关系亲近的父母”“有过过节的朋友”“分手分得不愉快的前任”等等,把这些人分门别类地做了投票,问当这些发表了不当言论,你要不要举报。

    -

    这还不是最可怕的,最可怕的是下面的跟帖是真的认真在讨论。

    -

    有人说,父母是绝对不会举报的。

    -

    有人说,就算是爸妈,说了不当言论,也不能姑息。

    -

    有人说,分得不愉快的前任、有过节的朋友当然要举报啊。

    -

    诸如此类,林林总总,这些讨论才是我觉得最可怕的地方,因为大家都默认了“举报”的合法性,默认了当一个人发表了不当言论,他就应该被举报。

    -

    这实在太荒谬了。

    -

    没有任何一个人应该因为他的言论而被举报

    -

    当你遇到一个人说了你不认可的、甚至你极端厌恶的言论,你要做的事情应该是去反驳他、去驳倒他,去用你的思想、你的知识、你的言论去和他正面对决。

    -

    “我看不惯你的言论,所以我要反驳你”,这才是一个文明社会的人应该做的事情。

    -

    而“举报”是“我看不惯你的言论,所以我要堵上你的嘴,不让你说话,我堵不上,我就让更高的权力去堵你的嘴”。

    -

    这是个太可怕的思路。

    -

    一旦你把对言论正确与否的决定权交给了更高的权力,那今天被打倒的是你看不惯的人,明天被打倒的就可能是你自己。

    -

    不要觉得自己一辈子都不可能有任何错漏,任何人都会有错漏,任何人都会在某些情况下发表不当言论。

    -

    甚至,很可能今天还是很合情合理合法的言论,明天就会变成不当言论。

    -

    枪口不会因为你曾经是举报者,就对你网开一面。

    -

    4

    -

    其实,最近这两年来,举报已经越来越常见

    -

    有粉丝为了打击别家偶像,就去举报对方主演的作品有思想问题,有的就去挖对方多年前的微博、文章,试图找出蛛丝马迹、错漏之处。

    -

    我们其实是眼看着这股风气越兴越胜的。

    -

    有人因言获罪入狱,有人靠举报他人以达到打击报复的目的。

    -

    有人讨论当父母发表不当言论时,要不要与父母划清界线。

    -

    有人认真觉得堵上越来越多的嘴,这世界才会变得更好。

    -

    我们已经可以看到那个可预见的未来了。

    -

    在那个未来里,大家会因为不知道自己哪天因为哪句话被举报,所以大学老师会越来越不敢说话,亲人、爱人、朋友之间会越来越无法相信彼此。

    -

    甚至,就连你用滴滴打个车,都可能被司机举报你有不当言论,只因为你在车上和朋友讨论了一下性少数群体的话题。

    -

    img

    -

    我们已经能看到那个人人自危的未来就在不远处了。

    -

    你我都知道那会是个糟糕、邪恶的时代,我们早就见识过了。

    -

    但你我也都知道,我们是很难阻挡举报时代的来临的。

    -

    不,其实风行举报的时代早就已经在我们没注意时来临了,它早就已经深入到了我们生活的方方面面。

    -

    可这是不对的,无论多少人这么做,它都依然是不对的。

    -

    它会毁掉教育,毁掉创造和文化,毁掉人与人之间的信任,毁掉所有自由进步的可能性。

    -

    它不是将要到来,它是已经到来了。

    -

    你我都拦不住这个糟糕时代的来临。

    -

    但至少,我们可以选择不使用它,我们可以选择不做这个糟糕时代的共犯。

    -]]>
    - - none - - - none - -
    - - adb自动刷钱 - /2020/05/adb-auto-make-money/ - 这是一款名字叫“Zen Idle”的游戏。来尝试下自动刷钱

    -image-20200505094215251 - - - -

    【adb获取包名以及当前运行的activity】

    -
    adb shell dumpsys window | findstr mCurrentFocus
    - -

    输出:

    -
    mCurrentFocus=Window{98555ab u0 com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity}
    - -

    由包名获取apk路径

    -
    adb shell pm path io.ionic.starter
    - -

    【adb命令行启动应用程序】

    -
    adb shell am start -n 包名/类名
    - -

    如:

    -
    adb shell am start -n com.android.music/com.android.music.MusicBrowserActivity
    - -

    【adb shell 修改系统时间】
    下面命令亲测可用,假如当前时间 01月05号08点23分改成 01月05号12点23分

    -
    adb shell date "01051223"
    - -

    【按钮的位置】
    找到开发者选项,开启“指针位置”,在游戏里找到按钮的范围
    Claim按钮
    X: 390-690 300 540
    Y: 1212-1362 150 1287
    关闭广告按钮
    x 915
    y 835

    -

    【Android adb 模拟滑动 按键 点击事件】

    -

    关于tap的话,他模拟的是touch屏幕的事件,只需给出x、y坐标即可。
    此x、y坐标对应的是真实的屏幕分辨率,所以要根据具体手机具体看,比如你想点击屏幕(x, y) = (250, 250)位置:

    -
    adb shell input tap 250 250
    - -

    此处我:

    -
    input tap 540 1287
    - -
    input tap 915 835
    - -

    【总命令】

    -
    adb shell date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
    - -

    加点循环

    -
    for I in $(seq 1 20);do
    echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
    done
    - -

    写入sh脚本,懒得每次输入了

    -
    echo 'for I in $(seq 1 20);do\n    echo $I/20 ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3\ndone' >zen.sh
    - -

    【adb 安装卸载程序】
    adb root 失败,提示adbd cannot run as root in production builds
    网上说安装adbd-Insecure-v2.00.apk,亲测无效。还是每次adb shell然后su吧。

    -
    adb install ./adbd-Insecure-v2.00.apk

    adb shell pm list packages|grep adb
    输出: package:eu.chainfire.adbd

    adb uninstall eu.chainfire.adbd
    - -

    【尝试只改时间】

    -
    date "01010101" ; date "01010601"
    - -

    并不能让程序显示奖励窗口(必须先退出这个页面再进入)

    -

    并不能让程序显示奖励窗口(必须先退出这个页面再进入)

    -

    【进一步的集成】
    通过命令行参数决定要循环几次

    -
    echo 'CNT=10
    if [ $# != 0 ] ; then
    CNT=$1
    fi
    for I in $(seq 1 $CNT);do
    echo $I/$CNT ; date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; date "01010101" ; input keyevent 3
    done' >zen.sh
    - -

    然后:

    -
    adb shell
    cd /sdcard/_sh
    su
    . ./zen.sh 20
    - -

    【手机闹钟BUG级响起】
    无解
    可以关闭闹钟

    -

    【尝试只在date的时候用su执行】

    -
    mkdir /sdcard/_sh
    echo 'CNT=10
    if [ $# != 0 ] ; then
    CNT=$1
    fi
    for I in $(seq 1 $CNT);do
    echo $I/$CNT ; su -c date "01010601" ; am start -n com.TechTreeGames.ZenIdle/com.unity3d.player.UnityPlayerActivity ; sleep 1 ; input tap 915 835 ; input tap 915 835 ; input tap 540 1287 ; sleep 1 ; su -c date "01010101" ; input keyevent 3
    done' >/sdcard/_sh/zen.sh
    - -

    完美~
    但是会每次date的时候显示“已授予shell超级用户权限”,看着很难受
    先su再执行脚本就不会了

    -

    可以在电脑上adb shell进去执行脚本,也可以用手机啦

    -

    【视频演示】

    - - - - -

    - - -
    - -]]>
    - - none - - - adb - -
    - - Why linux - /2020/03/why-linux/ - 学习Linux之前,了解Linux哲学和Linux设计思想是必要的。

    -

    然后就是开始敲命令了啦

    -

    Linux哲学

    知乎:《unix/linux 设计哲学》

    https://zhuanlan.zhihu.com/p/57521605

    -

    内容太多,不要求完全记住。可以以后回来再翻阅

    -

    博客园:Linux的哲学思想

    Linux哲学思想:

    -
      -
    1. 一切皆文件;
    2. -
    3. 小型,单一用途的程序;
    4. -
    5. 连接程序,共同完成复杂功能;
    6. -
    7. 避免令人困惑的用户界面;
    8. -
    9. 配置数据存储在文本中;
    10. -
    -

    解释:
    一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。

    -

    小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行

    -

    连接程序,共同完成复杂功能:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的

    -

    避免令人困惑的用户界面:如windows那样出了问题一般人选择的会是重启,实在是不行的话就是 重新 安装系统了,因为对于windows那样不是开源的,并且用户界面比较 复杂操作系统出了问题,一般的人是根本没有办法解决的。但是linux就不一样了,第一linux是开源的,无论什么问题都可以通过简洁的命令行实现 排错,修改系统的配置,一切都是简洁明了为基础。

    -

    配置数据存储在文本中:linux所有的配置文件都存放在文本配置文件当中,无论什么配置修改都只需修改其配置文件即可,配置文件时文本形式的只需任意一款文本编辑器修改即可而不是类似于windows那样将保存在注册表中,并且windows的注册表需要专门的二进制或十六进制的编辑器才可编辑,修改比较复杂

    -

    bilibili:Linux哲学视频资料1:

    哲学的魅力 | 非Windows系统家族的魅力之所在:“一切皆文件”

    -

    https://www.bilibili.com/video/BV1Yb411g79x

    -

    (命令不会没关系,了解一下“哲学”就好)

    -

    bilibili:Linux哲学视频资料2

    TED-Linux背后的精神 _ Linus Torvalds

    -

    https://www.bilibili.com/video/BV1a4411t7Kt?p=1

    -

    (一个有英文字幕的双语版本:)

    -

    https://www.bilibili.com/video/BV1J7411v7BD

    -
    -

    系统目录结构

    Linux 里面最重要的概念估计就是“一切皆文件”了,我们来看看Linux系统的根目录结构。

    -

    首先是 Linux 不像 Windows 这种,系统里面看起来有多个“盘”,C,D,E,F,什么的,

    -

    在 Linux,只有一个“盘”(可以假想成 C盘),但是里面文件夹却有很多。

    -

    img

    -

    我们来看看菜鸟教程 Linux 部分是怎么说的:

    -

    https://www.runoob.com/linux/linux-system-contents.html

    -

    其中用得比较多的文件夹也不是很多啦:

    -
    /dev	虚拟的,你的硬件设备会列出在这里
    /etc 配置文件的集散地
    /home 用户目录,相当于 Windows 的 %USERPROFILE% (你可以试试把这个输入资源管理器的地址栏回车)
    /media 一些设备出现在这里
    /mnt 用于挂载文件系统(插入U盘并挂载后在这里找)(wsl可以在这里访问主系统文件)
    /bin | /usr/bin | /usr/sbin 你看到文件出现在这里,那大概率是可执行程序这样的东西了
    /var 做 web 你会爱死的
    - -
    -

    Linux终端

    终端(Terminal),也叫命令行,顾名思义,输入命令的地方。就是经常见到的黑窗口(当然并不见得都是黑的)

    -

    命令行是 Linux 最常见的状态,GUI (Graphical User Interface,图形用户界面) 反而不是

    -

    在 Linux 终端干得最多的一件事当然是敲命令了,命令一般是如下格式:

    -

    command [-option] parameter1 parameter2...

    -

    我们来看几个参考链接:

    -

    图示直观的:https://blog.csdn.net/pl0020/article/details/82012881

    -

    分析有理的:https://blog.csdn.net/wangjianno2/article/details/16344807

    -

    详细深入的:http://c.biancheng.net/view/720.html

    -

    这里还想 bb 几句:

    -
      -
    1. Windows Linux都有命令行(Windows早期DOS也是命令行系统),但是操作习惯有些小不同
    2. -
    3. Windows 参数一般是 /option,Linux 大多是 -option --option
    4. -
    5. Windows 获取帮助一般是 /? ,Linux 大多是 -h -help --help
    6. -
    7. Windows 路径以反斜杠 \ 分隔,Linux 路径由正斜杠 / 分隔
    8. -
    9. Windows 命令行能运行 .bat 批处理脚本,Linux终端能运行 .sh 批处理脚本,语法大部分不同,少数相同
    10. -
    -
    -

    开始背命令吧

    必学的少数命令

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    lsllcdtouchclearpwdmkdircatmore
    lesstailcpmvrm(谨慎)findvi/vim|grep
    pskillipconfigtarrebootshutdownhaltchmod
    -

    这里是一些介绍:https://blog.csdn.net/weixin_44706512/article/details/90604635

    -

    菜鸟教程:Linux 命令大全

    其他的,少见的,忘了的,可以在这里速查,也可以学习积累:

    -

    https://www.runoob.com/linux/linux-command-manual.html

    -

    Linux常用命令大全(和用法)

    https://www.cnblogs.com/fnlingnzb-learner/p/5831284.html

    -
    -

    Q&A

    Linux 怎么装?

    必应搜索“WSL安装”:https://cn.bing.com/search?q=wsl%E5%AE%89%E8%A3%85

    -

    必应搜索“VMware 安装 Linux”:https://cn.bing.com/search?q=VMware+%E5%AE%89%E8%A3%85+Linux

    -

    想知道VMware安装详细某版本,把上面 Linux 换成你的对应详细版本即可,如:Ubuntu18.04

    -

    发行版这么多,用哪个版本好?

    初学者:Ubuntu、deepin。极客:Arch。服务器用户:CentOS。发烧玩家:Steam OS。

    -

    哪儿去获取 Linux 镜像?

    千万别再去XX下载站了。

    -

    必应搜索你想要的系统名字,搜索结果第一条都是官方网站了,一般他们域名都是 系统名.org,这是非营利组织的域名,也有部分是 系统.com,如Ubuntu,因为它包含了商业发行版。

    -

    打开网站,在醒目的位置,都能找到 Download 这种东西,仔细寻找,可以找到 .iso 镜像下载链接。如果下载慢,可以使用 国内镜像站 ,他们提供了高速的软件下载和软件源服务,像 清华源阿里云网易等等

    -

    我应该使用 root 用户吗?

    不建议。应当在系统安装过程中设置好用户名和密码,以后使用需要高权限的命令应该使用 sudosu

    -]]>
    - - pwn - - - linux - -
    - - 科学地让 OneDrive 飞,下载速度 5Mb/s - /2020/03/let-onedrive-fly-scientifically/ - OneDrive 是 Microsoft 的一个云存储服务,安装后集成在 Windows 资源管理器,所以比其他任何网盘都更有其与生俱来的优势。但由于众所周知的原因,OneDrive 的访问速度也极低。
    访问速度慢还不算了,还经常会死在某个进度,一直下不动,这是最**的

    -image-20200321165324494 -
    你看这 243KB/秒 长得多标致啊
    - - -

    解决方案

      -
    1. ShadowsocksR
    2. -
    3. Proxifier
    4. -
    5. 设置 OneDrive 多线程
    6. -
    -

    1. ShadowsocksR

    略。

    -

    配置好之后应该是会开启 127.0.0.1:1080 ,HTTP、Socks5 均有(没出问题的话默认就是这个配置)

    -

    2. Proxifier

    搜索Proxifier找到官网:https://www.proxifier.com/download/

    -image-20200321172127587 - -

    下载 Proxifier Standard Edition ,这个是安装版,Portable是绿色版,这里不用绿色版。

    -

    下载下来exe双击安装,安装过程中勾选Create a desktop shortcut,完了之后会默认打开软件,关掉它(你也可以在最后一步取消勾选Launch Proxifier)

    -

    在桌面快捷方式右键,用管理员权限运行。打开之后是长这个样子的:

    -image-20200321175935712 - -

    选择31天试用,或者输入注册码,如果输入注册码,最好是勾选All userss on this computer(require administrator),然后就会打开程序主界面

    -

    image-20200321180424905

    -

    我们当然是希望开机启动,所以开启Autostart

    -image-20200321191843270 - -

    通过Profile->Proxy Servers,添加 HTTPS 和 Socks5 代理配置

    -image-20200321181035454 - -

    通过Profile->Proxification Rules,配置软件代理规则

    -

    image-20200321182841860

    -

    我们在这里添加OneDrive。

    -

    先找到OneDrive的可执行文件的位置。一般应该是在%localappdata%\Microsoft\OneDrive\

    -

    如果没有,运行OneDrive,打开任务管理器,在详细信息标签页,找到onedrive.exe,右键打开文件所在位置

    -

    点击上面窗口的Add,添加配置。点击Browse输入OneDrive目录,选择onedrive.exe,action选择通过socks5代理

    -image-20200321183611160 - -

    保存,并把 default 的 action 设置为 direct(你也不希望所有程序都通过代理对吧)

    -image-20200321183553240 - -

    任务栏里面右键 OneDrive,更多,关闭 OneDrive,再找到刚才的OneDrive程序位置,开启OneDrive。

    -

    我们随便下载一个文件看看:

    -

    image-20200321191651660

    -

    3. 设置 OneDrive 多线程

    你好像速度没我快?那肯定是你氪金不够(bushi),那就试试开启 OneDrive 多线程

    -
    修改这个文件:
    "%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"
    可通过win r运行,或cmd里运行下面直接打开修改:
    notepad "%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini"
    - -

    第一行加入:

    -
    numberOfConcurrentUploads=3
    - -
    -

    PS:数值项即为线程数,最小值为1,最大值为3,根据实际需要选择即可

    -
    -image-20200321193422745 - -

    效果:(奇怪的网速增加了)

    -

    image-20200321213449574

    -]]>
    - - 科学上网 - - - 代理 - OneDrive - -
    - - 用 Visual Studio 2019 写 C++ 基础代码 - /2020/03/cpp-with-Visual-Studio-2019/ - 什么?你不会用VS?

    -

    准备工作

    安装 Visual Studio2019 Community,不多说了,虽然可能出现很多问题。这里假定你已经有安装好的 VS2019。

    -

    打开VS,创建项目

    打开VS2019,看到如下界面。

    -

    image-20200306134632068

    -

    选择C++,Windows,选择控制台应用。

    -

    image-20200306134730096

    -

    填写项目名称和存储位置,点击创建。

    -

    image-20200306134821590

    -

    然后就会打开工程界面,在右边的解决方案资源管理器,源文件,可以找到刚才填写的名字的cpp文件,双击打开(默认会打开的),在左边正常编写代码,按 F5 运行,或点击上面绿色三角形,“本地Windows调试器”,(可以直接点也可以菜单栏选择调试,开始执行不调试(快捷键Ctrl+F5))

    -

    image-20200306134954770

    -

    没有“控制台应用”选项?

    创建项目窗口,拉到最下面,找到安装

    -

    image-20200306135632223

    -

    在打开的窗口,勾选安装这三个。(其他的可以根据需要添加)(如果你确实不用VS开发高级应用,只勾选“使用C++的桌面开发”也就可以了)

    -

    image-20200306135706897

    -

    另外需要注意的是,如果想要图形化设计程序界面,(即MFC),需要在勾选“使用C++的桌面开发”之后,勾选右边的 C++ MFC v142

    -

    image-20200306135751221

    -

    ,然后开始安装即可。可以选择下载时安装(下载一个安装一个),下载完成安装(全部下载完再一起装),我个人偏好后一种

    -

    (等待巨长时间,安装完成后再同理创建项目。)

    -

    用VS进行简单调试

    断点

    在需要暂停的代码这一行前面灰色区域鼠标单击,出现一个红色圆点,就是下断点。

    -

    image-20200306141237786

    -

    F5 开始调试,或点上方“本地Windows调试器”或菜单栏调试,开始调试。

    -

    VS界面会发生变化,且之前下断点位置会变成橙色箭头,表示程序当前正在执行这一行代码。此时程序暂停,可以查看变量值和一行一行运行程序。

    -
      -
    • 鼠标悬停在变量上,可以查看变量值。

      -
    • -
    • 选中变量,右键,添加监视,可以在下方监视面板自动显示变量值

      -
    • -
    • 在代码里鼠标右键,快速监视,输入变量名,可以添加多个变量监视,也可以添加表达式监视,比如a+b+c

      -
    • -
    -

    image-20200306142152438

    -

    单步运行

    图示的四个按钮。

    -
      -
    • 显示下一条语句
    • -
    • 逐语句
    • -
    • 逐过程
    • -
    • 跳出
    • -
    -

    image-20200306142607239

    -]]>
    - - 基础 - - - CPP - VisualStudio - -
    - - 群里提问的艺术 - /2020/03/how-to-ask-in-group-chat/ - 现在互联网发达的时代,大家都会有很多的群,xxx 交流群、xxx 技术交流、xxx开发群、xxx技术学习群等,大家的初心可能都是想交流的,遇到点问题然后就可以在群里问。

    -

    然而很多时候你问的问题没人回答;也有时候问了半天还是没找到答案;也有时候当你把问题发出来了,别人正准备回答你的时候,你说知道了;然后刚开始群里很活跃,慢慢的就死了。

    -

    其实以上问题,都是大家不想看到的,然而在群里提问是我们加入群的初心,但是很多人做不好,最终导致你的问题无人解答,群慢慢的失去意义。

    -

    今天我所谈的就是群里提问的艺术,让你的问题快速得到解决。

    -

    我将今天的问题分成以下三部分进行介绍:

    -
      -
    • 提问之前
    • -
    • 提问之时,怎么提问
    • -
    • 注意事项
    • -
    -

    提问之前

    在群里提问之前首先我们应该做好功课,看自己是否完成以下步骤,否则你的提问将一塌糊涂,大概率得不到想要 的答案。

    -
      -
    1. 尝试自己解决
    2. -
    3. 不能自己解决应该准备的哪些
    4. -
    -

    尝试自己解决

    尝试自己解决是非常重要的一步,这也是我们能否经过这个问题能够成长的关键所在。

    -
      -
    1. 通过搜索引擎搜索:baidu 或者 google(推荐),搜索结果中前三页如果找不到你想要的信息,就进行下一步吧。对于成熟的开源项目,你遇到的问题,很可能别人也遇到过。这时通过 Google、StackOverflow 等网站的搜索服务,可以帮你快速定位并解决问题。永远记住,地球上的你并不孤单,包括你遇到的问题。
    2. -
    3. 查阅手册/文档:确保自己阅读过至少一次官方文档。这样在遇到问题时,如果能回忆起只言片语,就可以再去读一遍相关文档,问题往往也就解决了。
    4. -
    5. 查阅社区/论坛:阅读常见问题文件(FAQ)或者开源项目的 issue,或者论坛(类似 react china)
    6. -
    7. 询问朋友:如果你使用的开源软件,在朋友圈或同事圈里也有人使用,那么抬起你的脚、或拿起你的电话,真挚诚恳的探讨不会遭遇拒绝,而会增进友谊。不要犹豫,你的内心渴望面对面交流,你的朋友也是。
    8. -
    9. 自检并不断测试:试自己检查或试验以找到答案。
    10. -
    11. 阅读源码(这步非必须):如果你是程序开发者,尽量尝试阅读源码以找到答案。
    12. -
    -

    经过以上 6 步或者 5 步你都无法解决遇到的问题,那么你确实针对这个问题能力有限,准备去群里请教了,那么在尝试自己解决之后无果,应该做哪些准备呢?

    -

    不能自己解决应该准备的哪些

      -
    1. 一定要明白自己想要问什么问题:不能自己都说不清自己想要问什么问题,那么群里提问你也问不出什么来。
    2. -
    3. 梳理准备您的问题:要说明之前你都干了些什么。
    4. -
    5. 要用言简意赅的语言:这个是我们作为职场一个必备的技能,说重点,言简意赅。
    6. -
    -

    怎么提问

    抱着平和对等的心态,找到合适的途径后,就得静下心来将遇到的问题写成文字。书写文字不是一件简单的事情,我们可以从遵循一些简单的规则开始。

    -

    用词准确,问题明确

    标题要简洁清晰,要言之有物。

    -
    -

    Bad:救命呀/急/跪求,遇到了一个 react 问题,xxx 组件渲染不出来

    -

    Good:在使用 xxx 版本的 react ,我操作了 xxx,也写了 xxx,但是 xxx 组件渲染不出来

    -
    -

    一个好标题范例是目标 —— 差异式的描述,许多技术支持组织就是这样做的。在目标部分指出是哪一个或哪一组东西有问题,在差异部分则描述与期望的行为不一致的地方。

    -

    描述清晰,信息充足

      -
    1. 准确有效的信息:描述事实,而不是猜测,如果你想给出你的猜测,一定要先描述事实,给你的猜测一些证据,不然就不要猜测。
    2. -
    3. 问题表现/内容:按照时间顺序列出问题症状。问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。
    4. -
    5. 简单的做过什么尝试:在描述你做过什么尝试的时候,简单的你描述你做了哪些尝试就行,为什么要这么做其实不是那么重要。
    6. -
    -

    如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标,然后才陈述重现你所卡住的特定步骤。

    -

    经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

    -

    玉伯有句话是这么说的:

    -
    -

    提问者选择的路本身就是一条崎岖之路,对于要解决的问题,实际上有更好的方式。这种情况下,描述清楚目标,讲清楚要干什么非常重要。

    -
    -
      -
    1. 想要问到什么:提供建议?发送一段代码?检查你的补丁或者别的?在群里经常会出现这种情况,当某个人发了一段文字,另外的人说:你想问什么?
    2. -
    -

    所以我们在问问题的时候一定要把你想要问到什么,这个目标想清楚。

    -
      -
    1. 提供尽量多的信息:尽量提供可重现的例子,你可以在 jsbin)、runjsjsfiddle)、codepen 等这些地方提供一个可重现的例子。即使你是一个很大的项目,想办法把你需要验证的点提取出来,如果确实无法提取,就贴一些代码,出现问题那行代码周围的代码(周围的相关代码都要,因为你可能觉得不是他们的问题,但也许就是,不然你觉得的都是对的,你就不会不知道怎么解决了)。
    2. -
    -

    避免一些毫无意义的问题

    经常会有人问一些毫无意义的问题,比如这样的:

    -
    -

    Bad:有没有人会xxx?

    -

    Bad: 有没有人在?

    -

    Bad: 谁能帮我解决一个问题?

    -
    -

    面对这种问题,别人就很难预估你这个问题需要解决多久,也很难判断自己是否能解决这个问题,如果他回答了你,意味着你就是有空而且很在行,所以他还是选择不出声。这个就跟微信私聊的时候说:”在吗?“ 这种一个意思。

    -
    -

    Bad: 什么是 JavaScript?

    -
    -

    这种问题也是,很明显通过搜索引擎就能搞定的,要是下次还有这种问题,你就把这个图发给它。

    -

    img

    -

    建议的问法:

      -
    1. 有问题直接问。比如:ES6什么时候雄霸天下,前端什么时候一统江湖?
    2. -
    3. 直接说场景:我在做xx端东西的时候,在 window 7 平台的 IE7 版本下遇到了左右不对齐问题,具体如图所示img,代码地址:http://www.jsbin.com/xxxx,在百度中找到的答案,试了之后还是有同样的问题。请有空的同学帮我看看是什么问题?
    4. -
    -

    注意事项

      -
    • 提前做好冷场的准备:也许别人在忙,也许这个问题太简单了,也许没人做过这块,如果冷场了,没人回答,赶紧换下一个群。
    • -
    • 谦虚,别人没有义务帮你解决问题,往往大牛的时间比你少,比你珍贵。
    • -
    • 没有一定的自学能力,问到问题就伸手的不适合玩这个。
    • -
    • 群唯一的作用就是:扯淡、交流、分享,以上几条为前提。
    • -
    -

    如果觉得问题记不住,收藏一下这个图吧:

    -

    img

    -

    最后

    其实对于问问题,我们换位思考一下就更好了,这其实也是人际交往的方式,站在看你提问题的角度,想想当别人提问题的时候,你想让他问什么,你才愿意去回答。

    -

    当然除了在群里提问,在社区里提问,论坛里提问都有一定的规范,后面再慢慢补充吧。

    -
    -
    -

    版权属于:桃翁

    -

    本文链接:http://taoweng.site/index.php/archives/215/

    -

    转载时须注明出处及本声明,欢迎关注我的公众号「前端桃园」

    -
    -

    .

    -

    (这真就原封不动的照搬呗)

    -
    -

    《提问的智慧》

    另外还想再贴一个,最经典的,最最经典的(也最长最复杂的):

    -

    《提问的智慧》,来自 Github 。其实最初是 Eric S. Raymond, Rick Moen 创作的,然后 ryanhanwu 翻译了并放在 Github 上作为一个开源项目,截止本文写作时,该项目已有 10.2k Star,2.8k Fork。

    -

    另外,由于这个是国外作者创作的,所以其中出现的案例论坛等一般是国外常见论坛,也可以了解一下。

    -

    【警告】:本文十分冗长,建议在有闲暇时间时仔细浏览。

    -

    https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

    -]]>
    - - 基础 - - - none - -
    - - 2020 高考加油 - /2020/02/2020gaokaojiayou/ - 2020-02-28,距离 2020高考还有100天。

    - - - - - - - -]]>
    - - none - - - none - -
    - - 吾爱破解入门帖子 - /2020/02/getting-start-52pojie/ - 今日探索吾爱破解论坛,整理了两篇入门指导文章,当备忘录了

    -

    内容来自:吾爱破解 论坛

    -
    -

    吾爱破解论坛官方入门教学培训第一期开始啦!【已更新到第十课】

    培训课表–讲师:

    《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》

    -

    讲师:Hmily,链接:http://www.52pojie.cn/thread-378612-1-1.html

    -

    《吾爱破解培训第二课:实战去广告、弹窗及主页锁定》

    -

    讲师:Kido,链接:http://www.52pojie.cn/thread-384195-1-1.html

    -

    《吾爱破解培训第三课:改头换面之修改版权和资源》

    -

    讲师:Kido,链接:http://www.52pojie.cn/thread-389996-1-1.html

    -

    《吾爱破解培训第四课:击破程序最坚固的堡垒–实战去程序自校验》

    -

    讲师:小生我怕怕,链接:http://www.52pojie.cn/thread-392395-1-1.html

    -

    《吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证》

    -

    讲师:我是用户,链接:http://www.52pojie.cn/thread-396068-1-1.html

    -

    《吾爱破解培训第六课:潜伏在程序身边的黑影–实战给程序补丁》

    -

    讲师:我是用户,链接:http://www.52pojie.cn/thread-405758-1-1.html

    -

    《吾爱破解培训第七课:手把手教你从实例看如何攻破常见的网络验证》

    -

    讲师:珈蓝夜雨,链接:http://www.52pojie.cn/thread-408475-1-1.html

    -

    《吾爱破解培训第八课:短兵相接–深入浅出探讨脱壳细节(上)》

    -

    讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

    -

    《吾爱破解培训第九课:短兵相接–深入浅出探讨脱壳细节(下)》

    -

    讲师:L4Nce,链接:http://www.52pojie.cn/thread-411104-1-1.html

    -

    《吾爱破解培训第十课:探寻逆向新航标—x64平台脱壳与破解实战》

    -

    讲师:Kido,链接:http://www.52pojie.cn/thread-422192-1-1.html

    -

    视频下载:

    -

    360云盘下载:
    https://yunpan.360.cn/surl_y3GCKpiI2fX 提取码:7693

    -

    百度网盘下载:
    链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg 提取码: e2su

    -

    爱盘下载:
    http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/

    -
    -
    -

    解压密码(请使用新版7z解压缩):
    www.52pojie.cn

    -
    -
    - -
    - -
    - -
    - -
    - -
    - -
    - -
    - -

    零基础新手破解学习指导教程

    吾爱破解论坛官方入门培训:http://www.52pojie.cn/thread-349073-1-1.html
    整理一些论坛脱壳破解相关入门教程及需要用到的相关工具,方便新手同学查看学习

    -

    工欲善其事必先利其器,下面是破解需要用到的工具

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    OllyDbg(OD):http://www.52pojie.cn/thread-350397-1-1.html
    PEIDhttp://www.52pojie.cn/thread-170387-1-1.html
    Exeinfo PEhttp://www.52pojie.cn/thread-169779-1-1.html
    樱花补丁制作工具:http://www.52pojie.cn/thread-62307-1-1.html
    内存补丁生成器:http://www.52pojie.cn/thread-162411-1-1.html
    注册机生成器:http://www.52pojie.cn/thread-159470-1-1.html
    IDA Pro v6.5:http://www.52pojie.cn/thread-284145-1-1.html
    破解工具包http://www.52pojie.cn/thread-190698-1-1.html
    吾爱云盘【最牛逼的在线工具包】:http://down.52pojie.cn/Tools/
    -

    也可以点击下面的连接进去逆向资源区寻找工具哦

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Android | Tools安卓程序逆向所用到的相关工具
    Debuggers动态调试工具
    Disassemblers反编译工具(静态分析为主)
    PEtoolsPE文件分析相关工具
    Packers给程序加壳相关工具
    Patchers给程序做补丁相关工具
    Editors程序资源编辑、文本操作相关工具
    Crptography算法相关工具
    Unpackers脱壳机相关
    Dongle加密狗相关
    .NET微软.Net程序逆向相关工具
    OllyDbg | 1.x | Plugin动态调试工具OllyDbg | 1.x的插件程序
    OllyDbg | 2.x | Plugin动态调试工具OllyDbg | 2.x的插件程序
    IDA | Plugin反编译工具IDA的插件程序
    Other其他相关程序
    -

    NO.1

    Hmily 【初学者教程】破解基础知识之认识壳与程序的特征。
    新手一看教程就在说程序破解应该先脱壳,那到底程序有没有加壳?加了什么壳?看看大H的文章你就懂了!
    http://www.52pojie.cn/thread-234739-1-1.html

    -

    NO.2

    ximo 脱壳教程(24集全)
    http://pan.baidu.com/s/1cebVOU 密码: fxia
    http://down.52pojie.cn/吾爱破解视频教程/ximo脱壳基础.7z
    来自吾爱破解论坛LCG组织成员也是VMP脱壳插件作者ximo做的脱壳教程,堪称经典,入门脱壳必学!
    压缩包为7Z格式,7Z官方网站

    -

    NO.3

    小生我怕怕 脱壳练习系列附带对应文章的动画视频教程,方便学习交流脱壳知识。
    教程对应动画视频:http://www.52pojie.cn/thread-11642-1-1.html

    -

    [编者注]:视频爱盘下载地址:https://down.52pojie.cn/吾爱破解视频教程/吾爱破解脱壳练习系列动画/

    -

    吾爱专题脱壳练习一—-压缩壳练习之一:http://www.52pojie.cn/thread-10496-1-1.html
    吾爱专题脱壳练习二—-压缩壳练习之二:http://www.52pojie.cn/thread-10607-1-1.html
    吾爱专题脱壳练习三—-压缩壳练习之三:http://www.52pojie.cn/thread-10688-1-1.html
    吾爱破解脱壳练习四——简单加密壳:http://www.52pojie.cn/thread-10850-1-1.html
    吾爱专题脱壳练习五—-upx壳:http://www.52pojie.cn/thread-10990-1-1.html
    吾爱专题脱壳练习六—-TElock V0.99 :http://www.52pojie.cn/thread-11112-1-1.html
    吾爱专题脱壳练习七—-ORiEN:http://www.52pojie.cn/thread-11244-1-1.html
    吾爱专题脱壳练习八—-MoleBox V2.6.5:http://www.52pojie.cn/thread-11306-1-1.html
    吾爱专题脱壳练习九—-CRYPToCRACk’s PE Protector:http://www.52pojie.cn/thread-11446-1-1.html
    吾爱专题脱壳练习十—-PESpin 1.32:http://www.52pojie.cn/thread-11585-1-1.html
    吾爱专题脱壳练习十一—-VB自效验的处理:http://www.52pojie.cn/thread-11747-1-1.html
    吾爱专题脱壳练习十二—-delphi自效验的处理:http://www.52pojie.cn/thread-11883-1-1.html
    吾爱专题脱壳练习十三—-GHF Protector V1.0:http://www.52pojie.cn/thread-12011-1-1.html
    吾爱专题脱壳练习十四—-Armadillo 6.04:http://www.52pojie.cn/thread-12135-1-1.html
    吾爱专题脱壳练习十五—-ACProtector系列保护:http://www.52pojie.cn/thread-12279-1-1.html
    吾爱专题脱壳练习十六—-ACProtector系列保护:http://www.52pojie.cn/thread-12362-1-1.html
    吾爱专题脱壳练习十七—-PEBundle 2.0b5 - 3.0x:http://www.52pojie.cn/thread-12498-1-1.html
    吾爱专题脱壳练习十八—-Armadillo 4.40:http://www.52pojie.cn/thread-12620-1-1.html
    吾爱专题脱壳练习十九—-PUNiSHER 1.5:http://www.52pojie.cn/thread-12822-1-1.html
    吾爱专题脱壳练习二十—-未知壳一:http://www.52pojie.cn/thread-12936-1-1.html
    吾爱专题脱壳练习二十一—-未知壳二:http://www.52pojie.cn/thread-13494-1-1.html
    吾爱专题脱壳练习二十二—-未知壳三:http://www.52pojie.cn/thread-13770-1-1.html

    -

    NO.4

    我是用户 破解实战(10集全)
    破解实战演练教程
    第一战:http://www.52pojie.cn/thread-197281-1-1.html
    第二战:http://www.52pojie.cn/thread-197598-1-1.html
    第三战:http://www.52pojie.cn/thread-197957-1-1.html
    第四战:http://www.52pojie.cn/thread-198203-1-1.html
    第五战:http://www.52pojie.cn/thread-198365-1-1.html
    第六战:http://www.52pojie.cn/thread-198930-1-1.html
    第七战:http://www.52pojie.cn/thread-199459-1-1.html
    第八战:http://www.52pojie.cn/thread-199834-1-1.html
    第九战:http://www.52pojie.cn/thread-200655-1-1.html
    第十战:http://www.52pojie.cn/thread-200798-1-1.html

    -

    NO.5

    Blue .NET系列教程(4集全)
    图文教程分析.net程序!
    第一课 http://www.52pojie.cn/thread-248348-1-1.html
    第二课 http://www.52pojie.cn/thread-249034-1-1.html
    第三课 http://www.52pojie.cn/thread-250626-1-1.html
    第四课 http://www.52pojie.cn/thread-250633-1-1.html

    -

    NO.6

    去软件弹窗系列教程(共两集)
    第一课 http://www.52pojie.cn/thread-316180-1-1.html
    第二课 http://www.52pojie.cn/thread-323346-1-1.html

    -

    NO.7

    R4ndom破解教程全文翻译(共七集)
    第一课 http://www.52pojie.cn/thread-344925-1-1.html
    第二课 http://www.52pojie.cn/thread-345839-1-1.html
    第三课 http://www.52pojie.cn/thread-346455-1-1.html
    第四课 http://www.52pojie.cn/thread-350727-1-1.html
    第五课 http://www.52pojie.cn/thread-352818-1-1.html
    第六课 http://www.52pojie.cn/thread-354029-1-1.html
    第七课 http://www.52pojie.cn/thread-355207-1-1.html

    -

    希望大家在本论坛发现新手容易理解的系列教程通知我,我会陆续加进来。(转载的朋友请标注:吾爱破解原创作品)

    -]]>
    - - 逆向 - - - 52pojie - -
    - - 科学地让 Git 飞,git clone 速度 5Mb/s - /2020/02/let-git-fly-scientifically/ - 写本文原因:Git 太慢。看最后,14 KiB/s

    -

    image-20200214101358632

    - - -

    首先拥有一个代理服务器

    代理分为正向代理和反向代理,

    -

    正向代理就是代理用户端,改变用户端的身份(IP)。

    -

    反向代理就是代理服务端,改变服务器的身份(IP)。

    -

    目前的代理大多数用的都是正向代理。

    -

    获得服务器方法很多,不讲了,然后你就可以通过软件转发流量来进行“代理”

    -

    这里使用 ShadowsocksR 配置一个本地 HTTP 代理。

    -

    然后,设置代理

    运行SSR,在软件中添加已获得的服务器,然后进行一些常见的设置如 PAC 。

    -

    Tips:PAC:Proxy Auto Config

    -

    然后 Win + R ,输入 inetcpl.cpl 或是找到系统设置里面的代理设置,可以看到类似这样子的界面:

    -

    image-20200214104604088

    -

    这样子就是说明本地 1080 端口正在被代理软件使用。

    -

    然后,修改 Git 配置

    git 客户端可以使用代理来改善连接速度,Git 的所有配置都是存储在一个文件中的,可以通过修改配置文件或者通过 Git 命令行来修改配置。

    -

    Git 命令行主要有几种存在形式:

    -
      -
    • Windows命令行调用,主要是Windows安装版 Git 或在有 Git 的文件夹中运行 Git
    • -
    • 软件自带的 Git,这种多是在开发工具或 IDE 中,提供一个 Git 的命令行,如 Visual Studio、Git desktop 等,可能是自带了一份 Git 副本,可能是调用系统的 Git。
    • -
    • Linux 系统中的 Git ,Linux 系统大多自带 Git 命令
    • -
    -

    Git 的配置文件是一个名字叫 .gitconfig 的文件,上述的第1、3种的配置文件比较好找,第二种就存在不确定性。

    -

    在Windows中,.gitconfig%userprofile% 文件夹,即用户文件夹。用notepad++ 打开,看起来像这样子:

    -image-20200214111535140 - -

    在Linux中,.gitconfig~ 文件夹,即用户文件夹,看起来像这样子:(截图为 WSL Ubuntu16.04 + Windows Terminal )

    -

    image-20200214113002933

    -

    已知本地端口的情况下,(比如我的是1080),可以配置文件手动添加如下内容:

    -
    [http]
    proxy = http://127.0.0.1:1080
    [https]
    proxy = http://127.0.0.1:1080
    - -

    注意修改后格式像图中即可

    -

    另一种方式是在 Git 命令行设置,上面的三种情况都可以使用。

    -

    打开命令行,输入:

    -
    git config --global https.proxy http://127.0.0.1:1080
    git config --global https.proxy http://127.0.0.1:1080
    - -

    如果要取消代理设置,输入:

    -
    git config --global --unset http.proxy
    git config --global --unset https.proxy
    - -

    (打开配置文件会发现对应的也自动修改好了)

    -

    然后就可以打开命令行开始 git clone 辣。

    -

    请注意 Github 的两种 clone 方式的区别:

    -

    https 方式,是通过本地的 http 链接,是会通过代理软件的

    -

    ssh 方式,是通过 ssh.exe 收发流量,不会通过代理软件,所以依然很慢

    -

    (截图为我开始 ssh 方式 clone 的时候,网络防火墙提示 ssh.exe 联网)

    -image-20200214125336775 - -

    用 https 方式速度就会达到接近带宽的峰值。比如我们来 clone 一个 ctf-wiki

    -

    image-20200214133923497

    -]]>
    - - 科学上网 - - - 代理 - git - -
    - - 无中生有访问 Google - /2020/02/access-google-from-nothing/ - 由于众所周知的原因,[数据删除] 。并且在搜索引擎方面,Google 也是搜索知识的一个优秀工具。

    -

    关于搜索引擎之间的瓜葛,Baidu、Bing、Google 究竟谁优谁劣,以后我有空的话再来谈这个话题,欢迎和我 issue 交流。

    -

    今天就来介绍一下如何“无中生有访问 Google”。

    -

    一个“不存在的” chrome 插件

    能访问 Google,当然是多亏了一个插件,名字叫做“谷歌上网助手”,它大概长这个样子:

    -

    image-20191113170312

    -

    可以在 Google 网上应用点搜索到,然后点击“添加至Chrome”按钮就可以添加插件了

    -

    https://chrome.google.com/webstore/detail/谷歌上网助手/nonmafimegllfoonjgplbabhmgfanaka

    -

    它的介绍文字是:

    -
    -

    专门为科研、外贸、跨境电商、海淘人员、开发人员服务的上网加速工具,chrome内核浏览器专用!可以解决chrome扩展无法自动更新的问题,同时可>以访问谷歌google搜索,gmail邮箱,google+等谷歌产品

    -

    简单易用的《谷歌上网助手》,可以解决chrome扩展无法自动更新的问题,同时可以访问谷歌google搜索,gmail邮箱,google+等谷歌服务。

    -

    《谷歌上网助手》一键安装,无需其他配置,即可访问谷歌。

    -

    使用本插件可以免费上:

    -
      -
    • google.com 谷歌搜索
    • -
    • mail.google.com gmail邮箱
    • -
    • chrome商店访问
    • -
    -
    -

    当然,以上链接是不存在的。

    -

    无中生有?

    chrome 的插件是一个后缀名为 .crx 的文件,文件结构与 zip 相同,这意味着,你可以用压缩软件打开 .crx 文件。

    -

    我们有了 crx 文件,就可以添加到 chrome 浏览器了。

    -

    从哪儿去得到 crx 文件?从 Google 应用商店。当然,Google 应用商店是不存在的。

    -

    更新:插件官网也可以下载,快速下载方式请直接翻到文尾“#写在后面”部分,再从此处继续阅读。

    -

    这里介绍一个网站,可以看作 Google应用商店翻版,也就是镜像站。https://www.gugeapps.net/

    -

    我的网站也提供了一个副本(划掉)谷歌上网助手.zip ,如果添加 chrome 失败请转至下面方法下载,

    -

    bing 搜索 gugeapps.net,第一个链接是 www.gugeapps.net 就是了

    -

    打开是长这个样子的:

    -

    image-20191114102230

    -

    我们可以在这里的搜索框搜索谷歌上网助手,回车搜索,或者在 bing 搜索 谷歌上网助手 site:gugeapps.net 第一个就是对应的页面了。

    -

    image-20191114102822

    -

    这里不能直接安装到 chrome ,点击下载按钮,转到页面底端开始下载。

    -

    下载完成后会出现红色提示,保留就可以了
    image-20191114102910

    -

    Ps:最新的下载下来好像后缀名是 zip ,不过不影响后续操作。

    -

    然后在文件夹中打开,可以看到文件夹里面有个 .crx 文件了

    -

    image-20191114103010

    -

    导入

    一般来说,crx 可以直接拖入 chrome 的扩展程序页面,会提示是否添加插件,确定添加就可以添加,不过,对于自己下载的插件,大多数是不行的,会提示“程序包无效”,

    -

    image-20191114103110

    -

    不能导入?

    这里需要通过 chrome 的开发者模式,添加插件。

    -

    首先打开 chrome 的扩展程序页面:chrome://extensions ,开启页面右上方的“开发者模式”开关。

    -

    然后点左边的“加载已解压的扩展程序”

    -

    image-20191114103117

    -

    切换到刚才的下载文件夹,复制一份 crx 文件,后缀名改为 zip ,随后解压到压缩文件同名文件夹。

    -

    如果看不到后缀名,在查看这里把文件扩展名选项勾选。

    -

    image-20191114103616

    -

    切换到 chrome 的选择文件夹窗口,打开刚才的文件夹,可以看到文件夹里面的结构是

    -
    _locales
    _metadata
    assets
    - -

    然后添加文件夹。

    -

    image-20191114103357

    -

    回到 chrome ,就可以看到新插件添加成功,

    -

    可以看到有提示错误,但是可以用,

    -

    可以看到, chrome 右上方增加了一个插件的图标了

    -

    同时可以看到图标下面有一个标志,鼠标悬浮提示:“未封装的扩展程序”。

    -

    另外,如果关闭 chrome 再打开,会提示移除插件,所以正常使用起来的话,还是有一些麻烦的

    -

    image-20191114104215

    -

    点击右上角图标,会弹出插件菜单,首次需要注册登录,在登录页面找到新用户注册,填入邮箱和新账户密码注册

    -

    image-20191114104439

    -

    然后进入插件 控制面板 ,有红色提示“邮箱未激活”,此时前往邮箱,点击新收到的邮件激活账户即可

    -

    image-20191114104528

    -

    再点开插件菜单,把开关打开即可

    -image-20191114104755 - -

    然后 www.google.com 可以访问了。

    -

    image-20191114104855

    -

    后续操作

    关闭浏览器再打开就会提示“请停用以开发者模式添加的插件”,影响使用,所以需要再“操作”一下

    -

    Ps:如果没有注册登录插件,现在的新版浏览器是直接移除插件,影响使用,所以需要再“操作”一下

    -

    image-20200213214020573

    -

    这个提示框每次打开 chrome 都会弹出,极其 讨厌。

    -

    我们可以通过:从 Google 应用商店安装正规插件,的方式,替换这个插件,就不会再提示辣

    -

    打开 Google网上应用店 https://chrome.google.com/webstore/category/extensions

    -

    搜索 谷歌上网助手 ,找到第一个就是正规插件(开发版也可以用),点“添加至 chrome”按钮就可以添加,点添加扩展程序 按钮

    -

    image-20200213214703542

    -

    接着我们可以看到 chrome 左下方出现了一个 crx 下载进度条,但是这个下载完之后并不会提示下载完成,会自动消失(在下载记录也不会留下记录),而是自动安装

    -

    image-20200213214909741

    -

    然后会看到页面里面“谷歌上网助手”变成了“已添加”,“添加至chrome”变成了“评分”,就是安装完成了

    -

    image-20200213215254798

    -

    然后需要删除旧插件,打开插件管理页面,chrome://extensions/

    -

    也可以在右上角插件图标处鼠标右键,管理扩展程序,然后返回按钮

    -

    找到刚才提示“未封装的扩展程序”的插件,删除,

    -

    image-20200213215852988

    -

    点击右上角新安装的插件的图标,弹出登陆页面,进去再用刚注册的账号登陆一次就可以了

    -

    至此,全部安装完成!

    -

    写在后面

    插件官网:http://googlehelper.net/ ,也可以在这里下载 zip 然后按上述方法导入

    -

    image-20200213221452052

    -

    点击 download ,下载此网站最新插件压缩包,也可以下载我保存的副本, Ghelper2.0.4.all.zip

    -

    压缩包解压之后可以看到:

    -
    ghelper_source
    Ghelper2.0.5.crx
    中国大陆安装方法.txt
    - -

    其中 ghelper_source 和上文提到的解压后文件夹是一样的,

    -

    其中的 crx 文件可以用于直接拖拽导入插件(2020/02/13测试这个crx可以直接导入没有问题)

    -

    点击此处回到 “无中生有?” 部分继续阅读

    -]]>
    - - 科学上网 - - - chrome - Google - 搜索引擎 - 代理 - -
    - - Wooyun.org lives on Github - /2020/02/wooyun-on-github/ - 翻阅 Wooyun ,然后找到了Github上。。。不得不说,Github 上确实有大量镜像资源

    -

    在这里做一个总结吧。按 Star 排序,把每个库的 Readme.md 剪辑到了这里。

    -

    文尾有彩蛋!

    - - -
    - -
    - -

    No.1 https://github.com/hanc00l/wooyun_public

    -

    Watch:224___Star:3586___Fork:1.8k

    -

    wooyun_public

    乌云公开漏洞、知识库爬虫和搜索
    crawl and search for wooyun.org public bug(vulnerability) and drops

    -

    1.wooyun公开漏洞爬虫版

    index

    -

    search

    -

    源自2016年6月底使用scrapy爬虫爬取的4W公开漏洞和知识库,虚拟机为ubuntu14.04,采用python2+mongodb+flask(tornado)和Elasticsearch搜索引擎。

    -

    虚拟机下载地址:

    -

    https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)

    -

    安装、使用指南(点我)

    -

    2.wooyun公开漏洞纪念版

    index_final

    -

    search_final

    -

    漏洞信息和代码来自于m0l1ce的wooyun_all_bugs_8.8W,包含8.8W漏洞信息(不含知识库);搜索和漏洞信息代码位于wooyun_final,对代码进行了部份修改:

    -
      -
    • 修改了搜索功能,支持多关键字搜索和在漏洞详情中搜索
    • -
    • 修改了离线图片文件的位置,搜索结果直接使用虚拟机中的离线图片
    • -
    • 修改了代码以适应PHP5.6及更新版本
    • -
    -

    虚拟机为ubuntu16.04,PHP5.6+MySQL5.7+Apache2。虚拟机下载地址:
    https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)

    -

    虚拟机用户名、密码为hancool/qwe123

    -

    3.其它

      -
    • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。
    • -
    -
    - -
    - -

    No.2 https://github.com/Xyntax/1000php

    -

    Watch:31___Star:759___Fork:481

    -

    1000php

    1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

    -

    说明

      -
    • 数据取自3.8W乌云已公开漏洞(截至2016.7)
    • -
    • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
    • -
    • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
    • -
    • 愿乌云早日回归
    • -
    -
    - -
    - -

    No.3 https://github.com/starnightcyber/1000php

    -

    Watch:1___Star:759___Fork:481

    -

    1000php

    1000个PHP代码审计案例 (2016.7以前乌云公开漏洞)

    -

    在原来的基础上Xyntax/1000php添加了简单的漏洞索引,并且加入了原css文件,方便查看

    -

    Sample

    wooyun-index

    -

    点击其中某个漏洞,查看

    -

    bug

    -

    刚才试过了,直接打开index.html好像并不会简单按照我们的意愿显示,可以重新再执行一下代码:

    -

    python script.py

    -

    这样会重新生成index.html,在本地打开应该就没有问题,另外可能会出现乱码,可以用谷歌浏览器打开。

    -

    说明

      -
    • 数据取自3.8W乌云已公开漏洞(截至2016.7)
    • -
    • 漏洞在./bugs,./upload保存了相关漏洞的图片资源
    • -
    • 使用特征匹配提取,杂质在5%以内,如遇其他非php漏洞自行删除即可
    • -
    • 愿乌云早日回归
    • -
    -
    - -
    - -

    No.4 https://github.com/jiji262/wooyun_articles

    -

    Watch:27___Star:640___Fork:506

    -

    wooyun_articles

    drops.wooyun.org 乌云Drops文章备份

    -

    (乌云网站已经离我们而去,可能再也不会回来了!谨以此纪念乌云!)

    -

    线上版本

    (已更新图片)

    -

    https://wooyun.js.org/

    -

    线上版本源码

    https://github.com/jiji262/wooyun_articles/tree/gh-pages

    -

    关于branches

    gh-pages

    https://wooyun.js.org/ 源码。

    -

    由于wooyun服务器已经无法访问,所以文章中图片已经无法显示。所幸,之前已经将图片抓取下来,可以在这里查看所有图片。

    -

    master

    目录如下:

    -

    wooyun.js:用于抓取 drops.wooyun.org 上文章的脚本;

    -

    drops:抓取下来的文章原文;

    -

    image_download:单独下载文章中图片的方法, bagpipe_versionasync_version为多并发下载图片的解决方案。

    -

    Todo

    [x]更新本地图片链接到文章中

    -
    - -
    - -

    No.5 https://github.com/boy-hack/wooyun-payload

    -

    Watch:12___Star:465___Fork:90

    -

    WooYun-Payload

    从乌云漏洞库中提取的扫描规则,内容介绍: https://mp.weixin.qq.com/s/9RHVsw-HtAfo1UuPAqXZEw

    -

    Burpsuite 辅助插件

    通过http请求包中域名,路径,参数等获取乌云历史漏洞中类似的数据。

    -

    wooyunpayload

    -

    数据说明

    -
    - -
    - -

    No.6 https://github.com/m0l1ce/wooyunallbugs

    -

    Watch:21___Star:398___Fork:154

    -

    wooyunallbugs

    wooyun_all_bugs_8.8W

    -
    -

    链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw

    -

    代码在bugs文件里
    ps:php version 5.3
    库解压到wooyun库里即可
    ps:注意修改数据库连接密码 conn.php

    -
    -

    ps:图片资源解压到根目录/upload/下 本地绑定下host 你的图片服务器 static.loner.fm
    static.loner.fm 不会关掉的 大家可以放心使用

    -

    漏洞查询链接 www.loner.fm/bugs/

    -
    - -
    - -

    No.7 https://github.com/SuperKieran/WooyunDrops

    -

    Watch:13___Star:346___Fork:243

    -

    Wooyun Drops

    DEMO: https://wooyun.kieran.top

    -

    静态版乌云 Drops

    OPTIONS:
    1.默认开启 https,如果不需要可以在 index.html 删掉
    2.图片依赖于 https://github.com/SuperKieran/wooyun-img

    -

    全文搜索有想法还但没想好怎么做
    最先想到的自然是写个后台,搜搜搜就完工了,但这不太方便
    静态页面的搜索 我暂时没有好的方案,如果有好的想法的话可以在 issue 里提

    -
    - -
    - -

    No.8 https://github.com/SuperKieran/wooyun-img

    -

    Watch:0___Star:20___Fork:33

    -

    WooYun Drops 图片库

    DEMO: https://superkieran.github.io/WooyunDrops
    Github: https://github.com/SuperKieran/WooyunDrops
    (编者注:图片在gh-pages分支)

    -
    - -
    - -

    No.9 https://github.com/grt1st/wooyun_search

    -

    Watch:22___Star:327___Fork:157

    -

    乌云公开漏洞、知识库搜索

    -

    index

    -

    search

    -

    author

    -

    0x00.介绍

      -
    • 灵感来源于hanc00l的github项目wooyun_public

      -
    • -
    • wooyun_public基于flask或者tornado,而本项目可以布置在apache、nginx等web服务器上。

      -
    • -
    • 如果你有wooyun的静态网页数据,那么我们可以开始了!

      -
    • -
    • 整个项目包括两个部分,第一部分是索引,将网页信息存储进数据库;第二部分是搜索,从数据库中查找信息。轻量级,支持进行二次开发。

      -
    • -
    • 静态网页网盘链接:

      -
      bugs   链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
      drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)
      - -
    • -
    -

    0x01.依赖组件及说明

      -
    • python 2.7和pip

      -
    • -
    • python依赖:MySQLdb,lxml(推荐)

      -
    • -
    • mysql,php及任意web服务器(php需开启pdo-mysql模块

      -
    • -
    • 将本项目放进web服务器目录下,bugs目录下为漏洞库文件,drops目录下为知识库文件。

      -
      文件说明:
      app_bugs.py bugs的索引,依赖lxml
      app_drops.py drops的索引,依赖lxml
      index.html 搜索的主页
      search.php 执行搜索的页面
      config.php php配置文件
      ./bugs bugs静态文件的目录
      ./drops drops静态文件的目录
      - -
    • -
    -

    0x02.索引配置

      -
    • app_bugs.py为建立bugs索引的脚本,app_drops为建立drops索引的脚本。

      -
    • -
    • 因为python脚本中open()函数打开的文件名不能为中文,建议将drops目录下的中文文件名改为英文(例如,安全运维-xxxx.html=>safe-xxxx.html)

      -
    • -
    • python脚本运行前需要修改如下语句,更改参数如主机、端口号、用户名、密码。

      -
      conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='',db='wooyun',charset='utf8')
      -
    • -
    • 在mysql中建立数据库wooyun,数据表bugs、drops,分别建立字段title,dates,author,type,corp,doc与title,dates,author,type,doc。

      -
      CREATE DATABASE `wooyun` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
      create table bugs(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),corp CHAR(255),doc VARCHAR(200) PRIMARY KEY);
      create table drops(title VARCHAR(500),dates DATETIME, author CHAR(255),type CHAR(255),doc VARCHAR(200) PRIMARY KEY);
    • -
    • 注意mysql编码如下,需要为utf-8(character_set_server不为utf-8要修改mysql配置文件

      -
      use wooyun;
      show variables like 'character%'; #查看编码
      +--------------------------+----------------------------+
      | Variable_name | Value |
      +--------------------------+----------------------------+
      | character_set_client | utf8 |
      | character_set_connection | utf8 |
      | character_set_database | utf8 |
      | character_set_filesystem | binary |
      | character_set_results | utf8 |
      | character_set_server | utf8 |
      | character_set_system | utf8 |
      | character_sets_dir | /usr/share/mysql/charsets/ |
      +--------------------------+----------------------------+
      -

      如果编码错误会报错,比如:

      -
      Warning: Incorrect string value: '\xE5\xBB\xB6\xE9\x95\xBF...' for column 'title' at row 1
      cur.execute("INSERT INTO `drops`(`title`,`dates`,`author`,`type`,`doc`) VALUES(%s,%s,%s,%s,%s)", tmp)
      -

      在mysql里查看会发现有一堆???

      -
    • -
    • 之后就可以建立索引了

      -
      sudo python ./app_bugs.py
      sudo python ./app_drops.py
    • -
    • bugs数目为40280,drops数目为1264

      -
      use wooyun;
      select count(*) from bugs;
      select count(*) from drops;
      - -
    • -
    -

    0x03.搜索配置

      -
    • 修改config.php中修改如下语句中参数,分别是主机、端口、用户名、密码与数据库。

      -
      $config['host'] = '127.0.0.1';
      $config['port'] = '3306';
      $config['user'] = 'root';
      $config['passwd'] = '';
      $config['database'] = 'wooyun';
      -
    • -
    • index.html与search.php样式来自于前端静态资源托管库。f12进入开发者模式,如果样式文件访问不到可以使用本地或cdn的样式(bootstrap3.3.7、jquery3.1.0)。只需要更改两个网页里面的如下内容。

      -
    • -
    -
    <link href="//lib.baomitu.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="//lib.baomitu.com/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript" src="//lib.baomitu.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    - -
      -
    • 为了防止因为web服务器配置不正确,导致访问http(s)://example.link/bugs/或者http(s)://example.link/drops/而进入index of页面泄露所有文件,在目录下放置内容为空的index.html即可。

      -
    • -
    • linux下由于selinux可能会导致无法连接数据库,可以使用如下命令:

      -
      getenforce   //查看selinux状态
      setenforce 0 //暂时关闭selinux
      - -
    • -
    -

    0x04.问题

      -
    • drops很奇怪的会都需web目录下的js而不是本身目录里的js,所以drops的页面会有些乱。开发者模式看一下,缺少的js为web目录/static/drops/css与web目录/static/drops/js。新建目录再把drops下的css、js文件夹复制过去即可
    • -
    -

    0x05.更新日志

      -
    • 2016.10.08更新:上传了bugs.py。由于bugs部分页面(约143条)的author带有js,正则匹配出的信息出错,所以上传了bugs.py用于修正,在app.py后执行,python bugs.py。(2016.11.09已修正,无需执行bugs.py)

      -
    • -
    • 2016.10.10更新:重写了search.php和search.css,基本适配了各种浏览器和移动端。

      -
    • -
    • 2016.11.09更新:匹配索引将BeautifulSoup换成了lxml,运行速度更快。优化了匹配(感谢@tuola)。

      -
    • -
    • 2017.01.01更新:增加了作者搜索,优化了分页逻辑。

      -
    • -
    • 2017.3.7更新:重写了前端,优化了php代码。

      -
    • -
    • 欢迎反馈问题。可以提问issue也可以通过grt1stnull@gmail.com联系我。后续也会进行其他细节优化。

      -
    • -
    -

    0x06.后记

      -
    • 本来打算把wooyun_public布置在我的树莓派上,因为一些原因失败,所以萌生了自己搭建的念头

      -
    • -
    • 总共搭建了十天,接触了js、bootstarap、beautifulsoup、mysqldb、mysqli和pdo。虽然以前也会css与php,但这是第一次真正写一个动态网页,感觉很棒。

      -
    • -
    -

    0x07.其他

      -
    • 本程序只用于技术研究和个人使用,程序组件均为开源程序,漏洞和知识库来源于乌云公开漏洞,版权归wooyun.org。

      -
    • -
    • 新浪微博:http://weibo.com/grt1st

      -
    • -
    • 个人邮箱:grt1stnull@gmail.com

      -
    • -
    -
    - -
    - -

    No.10 https://github.com/LubyRuffy/wyquery

    -

    Watch:12___Star:109___Fork:92

    -

    wyquery

    Wooyun公开的漏洞详情是一个很好的资源,但是没有提供很好的搜索引擎和排序功能来进行数据分析,所以,这个项目用户镜像wooyun上已经对外公开的漏洞详情,并提供更多搜索和排序的功能。

    -

    你有没有想完成如下功能?

    -
      -
    • 我想只看给钱的漏洞
    • -
    • 我想只看带乌云标志的漏洞
    • -
    • 我想按照rank排序漏洞
    • -
    -

    如果有,那你跟我遇到的问题一样,不妨试试这个项目!线上已经搭建好的DEMO环境如下:http://120.27.41.90/

    -

    搭建环境

    建议在Linux下运行,当然Windows下也可以。Ruby 2.0+

    -
    git clone https://github.com/LubyRuffy/wyquery.git
    cd wyquery
    bundle install
    rake db:migrate
    rails s
    - -

    然后访问http://0.0.0.0:3000

    -

    初次抓取数据

    cd wyquery
    ruby ./tools/import_bugs.rb
    - -

    同步数据

    这时可以建立定时任务

    -
    crontab -e
    */10 * * * * <wyquery路径>/tools/import_bugs.rb
    - -
    - -
    - -

    No.11 https://github.com/jas502n/fuzz-wooyun-org

    -

    Watch:3___Star:96___Fork:49

    -

    fuzz-wooyun-org

    WooYun Fuzz 库

    -
    - -
    - -

    No.12 https://github.com/xinali/wooyun

    -

    Watch:6___Star:95___Fork:42

    -

    wooyun

    wooyun datasets

      -
    • usernames
    • -
    • passwords
    • -
    • URLs
    • -
    • sensitive data patterns
    • -
    • fuzzing payloads
    • -
    • web shells
    • -
    -
    - -
    - -

    No.13 https://github.com/l3m0n/wooyun-wiki

    -

    Watch:5___Star:75___Fork:55

    -

    wooyun-wiki

    wiki.wooyun.org的部分快照网页

    -
    - -
    - -

    No.14 https://github.com/fxfactorial/wooyun.github.io

    -

    Watch:6___Star:44___Fork:33

    -

    【没有 Readme.md 介绍】


    - -
    - -

    No.15 https://github.com/CaledoniaProject/wooyun_offline_ui

    -

    Watch:4___Star:40___Fork:19

    -

    说明

    花了10分钟重做了一套乌云离线Web UI,重做总共有两个目的,

    -
      -
    1. 没必要使用14GB的虚拟机,经过处理,40K漏洞只占用500MB mongodb 硬盘空间
    2. -
    3. 上述作者没有提取 关注数、是否为有奖励或者漏洞预警的漏洞 等几个关键字段
    4. -
    -

    特性

    支持漏洞标题搜索、漏洞wooyun id搜索

    -

    screen

    -

    支持漏洞查看(删除了评论),原始 wooyun UI

    -

    screen2

    -

    安装

    复制 src 到 web 目录,e.g

    -
    cp -R src ~/web/wooyun_offline
    - -

    安装 php-mongo 扩展

    -

    mongo 默认为 127.0.0.1:27017,如有不同,修改 src/config.php 即可

    -
    <?php
    $config = array(
    'mongodb' => 'mongodb://127.0.0.1:27017'
    );
    ?>
    - -

    导入数据

    导入到 wooyun 数据库,bugs 表即可

    -

    由于政策风险,我不能提供数据,可以用网上的14GB虚拟机导出

    -

    然后使用 src/scripts/minify.pl 精简 mongo 数据库

    -

    已知问题

      -
    1. 缺少 images/blood.png
    2. -
    3. 漏洞库不全,可惜没用高权限账号爬
    4. -
    -
    - -
    - -

    No.16 https://github.com/lxj616/DVWA-WooYun

    -

    Watch:1___Star:23___Fork:16

    -

    DVWA-WooYun

    DVWA-WooYun is a plugin-set for DVWA , with plugins based on wooyun.org real bug reports

    -

    It should have been a fork of the RandomStorm/DVWA , But while I was coding it , I didn’t know a thing about github :(

    -

    And now I do , so scavenged old codes to github

    -

    And I modified lot of things , can’t remember why , just messed around , It seems to be not able to merge with the original DVWA now

    -

    DAMN VULNERABLE WEB APP

    Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment.

    -

    WARNING!

    Damn Vulnerable Web App is damn vulnerable! Do not upload it to your hosting provider’s public html folder or any working web
    server as it will be hacked. I recommend downloading and installing XAMPP onto a local machine inside your LAN which is used solely for testing.

    -

    We do not take responsibility for the way in which any one uses Damn Vulnerable Web App (DVWA). We have made the purposes of the application clear and it should not be used maliciously. We have given warnings and taken measures to prevent users from installing DVWA on to live web servers. If your web server is compromised via an installation of DVWA it is not our responsibility it is the responsibility of the person/s who uploaded and installed it.

    -

    License

    This file is part of Damn Vulnerable Web App (DVWA).

    -

    Damn Vulnerable Web App (DVWA) is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    -

    Damn Vulnerable Web App (DVWA) is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    -

    You should have received a copy of the GNU General Public License
    along with Damn Vulnerable Web App (DVWA). If not, see http://www.gnu.org/licenses/.

    -

    Download

    DVWA is available either as a package that will run on your own web server or as a Live CD

    -
      -
    • DVWA v1.0.8 (latest) - (1.3MB) Download
    • -
    • DVWA v1.0.7 LiveCD - (480MB) Download
    • -
    -

    Installation

    Default username = admin

    -

    Default password = password

    -

    Installation video:
    http://www.youtube.com/watch?v=GzIj07jt8rM

    -

    The easiest way to install DVWA is to download and install ‘XAMPP’ if you do not already have a web server setup.

    -

    XAMPP is a very easy to install Apache Distribution for Linux, Solaris, Windows and Mac OS X. The package includes the Apache web server, MySQL, PHP, Perl, a FTP server and phpMyAdmin.

    -

    XAMPP can be downloaded from:
    http://www.apachefriends.org/en/xampp.html

    -

    Simply unzip dvwa.zip, place the unzipped files in your public html folder, then point your browser to http://127.0.0.1/dvwa/index.php

    -

    Database Setup

    To set up the database, simply click on the Setup button in the main menu, then click on the ‘Create / Reset Database’ button. This will create / reset the database for you with some data in.

    -

    If you receive an error while trying to create your database, make sure your database credentials are correct within /config/config.inc.php

    -

    The variables are set to the following by default:

    -
    $_DVWA[ 'db_user' ] = 'root';
    $_DVWA[ 'db_password' ] = '';
    $_DVWA[ 'db_database' ] = 'dvwa';
    - -

    Troubleshooting

    For the latest troubleshooting information please visit:
    http://code.google.com/p/dvwa/issues/list

    -

    +Q. SQL Injection wont work on PHP version 5.2.6.

    -

    -A.If you are using PHP version 5.2.6 you will need to do the following in order for SQL injection and other vulnerabilities to work.

    -

    In .htaccess:

    -

    Replace:

    -
    <IfModule mod_php5.c>
    php_flag magic_quotes_gpc off
    #php_flag allow_url_fopen on
    #php_flag allow_url_include on
    </IfModule>
    -

    With:

    -
    <IfModule mod_php5.c>
    magic_quotes_gpc = Off
    allow_url_fopen = On
    allow_url_include = On
    </IfModule>
    -

    +Q. Command execution won’t work.

    -

    -A. Apache may not have high enough priviledges to run commands on the web server. If you are running DVWA under linux make sure you are logged in as root. Under Windows log in as Administrator.

    -

    +Q. My XSS payload won’t run in IE.

    -

    -A. If your running IE8 or above IE actively filters any XSS. To disable the filter you can do so by setting the HTTP header ‘X-XSS-Protection: 0’ or disable it from internet options. There may also be ways to bypass the filter.

    -

    Homepage: http://www.dvwa.co.uk

    -

    Project Home: https://github.com/RandomStorm/DVWA

    -

    Created by the DVWA team

    -
    - -
    - -

    No.17 https://github.com/neargle/SecNewsBak

    -

    Watch:2___Star:20___Fork:17

    -

    README

    该项目只用于备份Sec-News上Drops乌云知识库的失效文章,并非Drops整站文章。

    -

    文章列表如下:

    -
    drops_arti_list = [
    "SQL注入速查表(上)",
    "WMI Attacks",
    "攻击洋葱路由(Tor)匿名服务的一些综述",
    "SQL注入速查表(下)与Oracle注入速查表",
    "Hacking ipcam like Harold in POI",
    "海豚浏览器与水星浏览器远程代码执行漏洞详解",
    "WMI Backdoor",
    "手把手教你当微信运动第一名 – 利用Android Hook进行微信运动作弊",
    "WMI Defense",
    "Tomcat安全配置",
    "利用Weblogic进行入侵的一些总结",
    "工控安全入门分析",
    "利用被入侵的路由器获取网络流量",
    "利用白名单绕过360实例",
    "浅析大规模DDOS防御架构-应对T级攻防",
    "XCode编译器里有鬼 – XCodeGhost样本分析",
    "借用UAC完成的提权思路分享",
    "TcpDump使用手册",
    "被人遗忘的Memcached内存注射",
    "利用被入侵的路由器迈入内网",
    "Android sqlite load_extension漏洞解析",
    "CTF主办方指南之对抗搅屎棍",
    "域渗透的金之钥匙",
    "比葫芦娃还可怕的百度全系APP SDK漏洞 - WormHole虫洞漏洞分析报告",
    "那些年做过的ctf之加密篇",
    "从一个锁主页木马里挖出的惊天“暗杀黑名单”",
    "C&C控制服务的设计和侦测方法综述",
    "Python安全编码指南",
    "翻墙路由器的原理与实现",
    "几期『三个白帽』小竞赛的writeup",
    "拆分密码",
    "变种XSS:持久控制",
    "使用32位64位交叉编码混淆来打败静态和动态分析工具",
    "給初學者的DLL Side Loading的UAC繞過",
    "Joomla远程代码执行漏洞分析",
    "网络小黑揭秘系列之黑色SEO初探",
    "一步一步学ROP之Android ARM 32位篇",
    "Linux入侵检测基础",
    "Android WebView File域攻击杂谈",
    "小议Linux安全防护(一)",
    "Powershell 提权框架-Powerup",
    "Android Linker学习笔记",
    "MD5碰撞的演化之路",
    "Android应用安全开发之源码安全",
    "Ruby on Rails 动态渲染远程代码执行漏洞 (CVE-2016-0752)(翻译)",
    "中间人攻击 -- Cookie喷发",
    "域渗透——Security Support Provider",
    "LUA脚本虚拟机逃逸技术分析",
    "我的通行你的证",
    "在不需要知道密码的情况下 Hacking MSSQL",
    "代码审计入门总结",
    "Linux服务器应急事件溯源报告",
    "Head First FILE Stream Pointer Overflow",
    "从 WTForm 的 URLXSS 谈开源组件的安全性",
    "网络小黑揭秘系列之黑产江湖黑吃黑—中国菜刀的隐形把手",
    "简单验证码识别及工具编写思路",
    "中国菜刀仿冒官网三百万箱子爆菊记",
    "Rails Security (上) ",
    "富文本存储型XSS的模糊测试之道",
    "主机被入侵分析过程报告",
    "Exploring SSTI in Flask/Jinja2 | WooYun知识库",
    "0ctf writeup",
    "一个支付宝木马的分析溯源之旅",
    "QQ模拟登录实现后篇",
    "渗透技巧——通过cmd上传文件的N种方法",
    "通过ELF动态装载构造ROP链 ( Return-to-dl-resolve)",
    "Mysql报错注入原理分析(count()、rand()、group by)",
    "利用反射型XSS二次注入绕过CSP form-action限制",
    "渗透Hacking Team过程",
    "“信任“之殇――安全软件的“白名单”将放大恶意威胁",
    "百脑虫之hook技术",
    "内网渗透中转发工具总结",
    "TCP安全测试指南-魔兽3找联机0day",
    "CVE-2016-3714 - ImageMagick 命令执行分析",
    "CVE-2016-1897/8 - FFMpeg漏洞分析",
    "漫谈流量劫持",
    "新姿势之Docker Remote API未授权访问漏洞分析和利用",
    "利用CouchDB未授权访问漏洞执行任意系统命令",
    "利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令",
    "CTF中比较好玩的stego",
    "linux下tomcat安全配置",
    "MySQL和PostgreSQL数据库安全配置",
    "内网渗透思路探索之新思路的探索与验证",
    "小窥TeslaCrypt密钥设计",
    "Do Evil Things with gopher://",
    "三个白帽条条大路通罗马系列2之二进制题分析",
    "Android安全开发之Provider组件安全",
    "漏洞检测的那些事儿 ",
    "QQ浏览器隐私泄露报告",
    "三个白帽之从pwn me调试到Linux攻防学习",
    "渗透中寻找突破口的那些事",
    "Struts2 S033与最新S037详细分析",
    "DB2在渗透中的应用",
    "Python urllib HTTP头注入漏洞 (中文翻译)",
    "SQL注入关联分析",
    "Anti-debugging Skills in APK",
    "玩转Metasploit之Automated Persistent Backdoor",
    "Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪!",
    "玩转Metasploit之Automated Persistent Backdoor",
    "Docker安全那些事 ",
    "Use bitsadmin to maintain persistence and bypass Autoruns ",
    "CTF中那些脑洞大开的编码和加密 ",
    "Jenkins RCE 2(CVE-2016-0788)分析及利用",
    "小议安卓定位伪造-实战足不出户畅玩pokemon go",
    "三个白帽挑战赛之[续集]火币网2W大挑战Writeup"
    ]
    - -
    - -
    - -

    No.18 https://github.com/acgpiano/wooyun-node

    -

    Watch:2___Star:9___Fork:8

    -

    wooyun-node

    这是wooyun.org镜像的node.js版本,用的mysql,支持标题,作者,类型,厂商检索。
    方便新手小白使用,搭建方法非常简单。
    首先需要安装mysql,要把数据库语言设置成utf8(非常重要,不然会出错)。由于各个系统设置方法不同,需自行百度。检测是否成功可以登进数据库,执行

    -
    status;
    -

    如果是以下状态,就代表可以下一步了。
    把该项目克隆到本地

    -
    git clone https://github.com/acgpiano/wooyun-node.git
    -

    修改config.js里面的用户名和密码,改为你的mysql的用户名和密码,port是服务的端口,可以自行修改。
    下载wooyun的静态资源:
    链接: 百度网盘 密码: mqnp
    需要解压到wooyun-node/static/bugs/
    文件夹下面(自行新建bugs文件夹)
    接下来安装node.js,去官网下载就好了。
    接下来安装cnpm(如果可以连Internet这一步可以忽略,以下命令的cnpm全都可以用npm代替)

    -
    npm install -g cnpm --registry=https://registry.npm.taobao.org
    -

    然后在wooyun-node里执行

    -
    cnpm install
    -

    等所有的依赖装完再执行

    -
    npm run db
    -

    等数据库建表完后,共40293条,再执行

    -
    npm start
    -

    默认port端口是9999,可以在config.js里面修改
    打开浏览器 http://127.0.0.1:9999就可以使用了。

    -

    仅供自学使用,如果要部署到公网可以自己改用orm,修改表结构加速查询,防注入。

    -
    - -
    - -

    当然是彩蛋辣~

    上面提到的 Baidu网盘 链接整理:

    -

    https://github.com/hanc00l/wooyun_public
    Watch:224___Star:3586___Fork:1.8k

    -
    -
    虚拟机下载地址:
    https://pan.baidu.com/s/1HkR4ggvAwTikshsjcKYBuA ,提取密码:8wnb(2018.4.23更新)
    【文件名:ooyun_vmware_201606_es】

    虚拟机下载地址: https://pan.baidu.com/s/1qYRqa3U 密码: w8vb (2017.7.4)
    【文件名:wooyun_final】
    虚拟机用户名、密码为hancool/qwe123
    -
    -

    https://github.com/m0l1ce/wooyunallbugs
    Watch:21___Star:398___Fork:154

    -
    -
    链接:https://pan.baidu.com/s/1htwVF3Q 密码:oskw
    【文件名:wooyun-15-a.zip等】
    - -
    -

    https://github.com/grt1st/wooyun_search
    Watch:22___Star:327___Fork:157

    -
    -
    静态网页网盘链接:
    bugs 链接: https://pan.baidu.com/s/1n_kkUaZZxcTEa4-v6sGa9Q 密码: sg98 (20180707)
    【文件名:WooYun_Bugs(漏洞库)】
    drops 链接: https://pan.baidu.com/s/1r2Y7rfntwnjglX6HtzDk6w 密码: 738f (20180707)
    【文件名:WooYun_Drops(知识库)】
    - -
    -

    https://github.com/acgpiano/wooyun-node
    Watch:2___Star:9___Fork:8

    -
    -
    链接: https://pan.baidu.com/share/init?shareid=3613354206&uk=4113422303 密码: mqnp
    【文件名:WooYun_Bugs(漏洞库)】
    - -
    - -
    - -

    当然还有彩蛋辣~

    新建一个文件夹,在里面打开终端,复制粘贴下面代码,或者保存为 .sh (linux)、 .bat (Windows),命令行调用辣

    -

    注意:最后三个库特别大,如果网络不好,可能出现 git 连接超时,可以连接更优网络,或参考我的文章

    - -
    echo .
    git clone https://github.com/hanc00l/wooyun_public
    echo .
    git clone https://github.com/boy-hack/wooyun-payload
    echo .
    git clone https://github.com/m0l1ce/wooyunallbugs
    echo .
    git clone https://github.com/SuperKieran/WooyunDrops
    echo .
    git clone https://github.com/SuperKieran/wooyun-img
    echo .
    git clone https://github.com/grt1st/wooyun_search
    echo .
    git clone https://github.com/LubyRuffy/wyquery
    echo .
    git clone https://github.com/jas502n/fuzz-wooyun-org
    echo .
    git clone https://github.com/xinali/wooyun
    echo .
    git clone https://github.com/l3m0n/wooyun-wiki
    echo .
    git clone https://github.com/fxfactorial/wooyun.github.io
    echo .
    git clone https://github.com/CaledoniaProject/wooyun_offline_ui
    echo .
    git clone https://github.com/lxj616/DVWA-WooYun
    echo .
    git clone https://github.com/neargle/SecNewsBak
    echo .
    git clone https://github.com/acgpiano/wooyun-node
    echo .
    git clone https://github.com/Xyntax/1000php 1000php-Xyntax
    echo .
    git clone https://github.com/starnightcyber/1000php 1000php-starnightcyber
    echo .
    git clone https://github.com/jiji262/wooyun_articles
    echo .
    - -]]>
    - - none - - - wooyun - github - -
    - - hexo + CloudFlare = 速度飞起 - /2020/02/hexo-with-cloudflare/ - 昨天配置了 Google、Baidu、Bing搜索引擎提交,不过比较悲催的是 Github Pages 服务器拒绝 BaiduSpider ,整个站点根本不能出现在 Baidu 里面好么!! 另一方面,速度过慢,github pages 在国内速度,不太理想,所以用 CloudFlare 老牌 cdn 加速整站,还可以被 BaiduSpider 收录。

    -

    参考了这篇文章: 基于 Hexo 的 GitHub Pages 配置 CloudFlare CDN_qhh0205-CSDN博客

    -

    准备好 GitHub 和 CloudFlare

    有一个 github 账户,添加 username.github.io 库,把 hexo 发布到存储库,不多说了。

    -

    注册 CloudFlare 账号并登录。

    -

    在 CloudFlare 添加站点

    在 CloudFlare 添加站点,并检查 DNS 记录,确认导入 CloudFlare 中。

    -

    在域名购买商处修改 DNS 服务器为 CloudFlare 提供的两个 DNS 服务器,等待生效之后继续操作

    -

    注意 :修改 DNS 服务器可能会导致某些记录丢失(像 Google 域名验证、letsencrypt 域名验证)(因为不是全部同步过去),所以在更改之前可以在旧 DNS 控制台,记录下各个 DNS 记录(截屏或手抄),后期可再写入新纪录

    -

    Ps:实验表明: CloudFlare 会同步大部分DNS记录,但是还是有部分子域名会漏掉,看个人情况是否手动记录原 DNS

    -

    image-20200210152724656

    -

    image-20200210112341702

    -

    修改 DNS 服务器:

    -

    image-20200210112513410

    -

    等待生效,可用 nslookup -q=ns tcpsoft.app 查询 DNS 解析服务器情况(本地的好像更新有点慢),其实 CloudFlare 在检测到 DNS 服务器修改成功之后会发邮件通知的。

    -

    然后在 CloudFlare 检查域名服务器,进行下一步操作,设置一些网站的自定义选项,包括是否开启浏览器到CF

    -

    的安全连接,是否开启CF到源服务器的安全连接,是否启用 Brotli 压缩来传输数据等。

    -

    然后就可以查看 DNS 设置,有黄色云图标的就是 CloudFlare 开启代理的

    -

    image-20200210120918605

    -

    我们可以用 dig (linux)或 nslookup (linux、Windows)查看域名解析情况。

    -
    root@Mi-CP /m/c/U/CP# dig blog.tcpsoft.app

    ; <<>> DiG 9.10.3-P4-Ubuntu <<>> blog.tcpsoft.app
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45170
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

    ;; QUESTION SECTION:
    ;blog.tcpsoft.app. IN A

    ;; ANSWER SECTION:
    blog.tcpsoft.app. 900 IN CNAME tcpsoftware.github.io.
    tcpsoftware.github.io. 900 IN A 185.199.110.153
    tcpsoftware.github.io. 900 IN A 185.199.108.153
    tcpsoftware.github.io. 900 IN A 185.199.111.153
    tcpsoftware.github.io. 900 IN A 185.199.109.153

    ;; Query time: 1990 msec
    ;; SERVER: 223.5.5.5#53(223.5.5.5)
    ;; WHEN: Mon Feb 10 12:12:47 CST 2020
    ;; MSG SIZE rcvd: 133

    root@Mi-CP /m/c/U/CP# nslookup blog.tcpsoft.app
    Server: 223.5.5.5
    Address: 223.5.5.5#53

    Non-authoritative answer:
    blog.tcpsoft.app canonical name = tcpsoftware.github.io.
    Name: tcpsoftware.github.io
    Address: 185.199.110.153
    Name: tcpsoftware.github.io
    Address: 185.199.108.153
    Name: tcpsoftware.github.io
    Address: 185.199.109.153
    Name: tcpsoftware.github.io
    Address: 185.199.111.153

    root@Mi-CP /m/c/U/CP#
    - -

    我们可以看到解析了四个 IP,而我的 DNS 设置只有一个 CNAME,查询这个 IP,发现是 CDN,设置成功。

    -

    开启DNSSEC,防止 DNS 劫持

    在 CloudFlare 的 DNS 管理面板往下翻可以看到 DNSSEC 选项,DNSSEC 是 DNS 安全扩展,采用加密方式,防止 DNS 劫持

    -

    image-20200210122448916

    -

    CF 提供了十多个参数,转到域名注册商处,填入注册商要求的对应参数即可。

    -

    等待十多分钟至一个小时,CloudFlare 上的 DNSSEC 会检测到设置成功,提示 Success!

    -

    image-20200210125156256

    -

    又掉坑:“重定向次数过多”

    刚才的配置好之后,满以为可以运行的飞起来了,结果,打 !不 !开 !了 !

    -image-20200210143346231 - -

    一番查询发现是:CloudFlare SSL 选项开的是 Flexible。

    -

    image-20200210143616798

    -

    下面文字摘自 参考链接:WordPress 网站使用 CloudFlare 后提示“将您重定向的次数过多” 的原因及解决办法 _WordPress智库

    -

    Cloudflare CDN 配置

    -
      -
    • Off:不开启https。

      -
    • -
    • Flexible:当我们的源网站没有配置 HTTPS 支持时,启用这个选项,Cloudflare 会在回源的时候通过 HTTP 协议访问我们的网站。

      -
    • -
    • Full:当我们的源网站支持 HTTPS,但是 HTTPS 证书和域名不匹配或者是自签名证书时,Cloudflare 会通过 HTTPS 协议访问源网站,但不会验证证书,也就是说,即使我们的源网站提供的 HTTPS 证书不受浏览器信任,Cloudflare 也会通过 HTTPS 回源网站。

      -
    • -
    • Full(strict):当我们的源网站支持 HTTP ,并且证书有效时(未过期且受信任)。Cloudflare 会通过 HTTPS 协议访问源网站,并在每个请求过程中验证证书。

      -
    • -
    -

    了解了上面各个设置的功能,我们来看一下 Cloudflare 的循环重定向问题是怎么出现的,在 Cloudflare 中开启了 SSL 后,访问网站时出现循环重定向需满足下面两个条件:

    -
      -
    1. SSL 中设置了 Flexible,CDN 以 HTTP 协议回源网站。
    2. -
    3. 源网站支持 HTTPS,并且设置了通过 HTTP 协议访问时,自动跳转到 HTTPS 协议。
    4. -
    -

    到这里,可能就有朋友发现问题了,我们访问 Cloudflare 的 CDN 服务器的时候,是通过 HTTPS 访问的,CDN 访问源网站的时候,是通过 HTTP 访问的,源网站上 HTTP 又自动跳转了 HTTPS,完美的一个循环重定向。重定向的次数多了,浏览器就撂挑子报出了 ERR_TOO_MANY_REDIRECTS 的错误。

    -

    CloudFlare 造成重定向的次数过多问题的解决办法

    知道了循环重定向的原因,我们也就知道了怎么解决这个问题,通过测试,下面的两种设置方法都可以解决 Cloudflare 循环重定向的问题。

    -
      -
    • SSL 中选择 Full 或者 Full(strict),让 CDN 回源的时候使用 HTTPS 的方式回源,没有 HTTP 什么事了,就不会跳来跳去了
    • -
    • 源网站不设置 HTTPS 支持或者 不设置 HTTP 跳转 HTTPS,让 Cloudflare 回源的时候使用 HTTP 方式获取资源。
    • -
    -

    修改了 CloudFlare 设置后,可能需要过几分钟或清理浏览器缓存后才能生效。

    -

    除了 Cloudflare,使用其他 CDN 提供商的时候,也可能会出现这个问题,如果设置了 CDN 后,遇到了 Chrome 报重定向次数过多的问题,可以通过上面的思路查找问题。

    -]]>
    - - 建站 - - - hexo - cdn - cloudflare - -
    - - hexo seo 优化 - /2020/02/hexo-seo/ - 害呀,hexo 都做了这么多了,干脆把google 统计一起加上去得了。Google Analytics、Google添加站点,baidu 添加站点、bing 添加站点,通通加上!

    - - -

    google analytics

      -
    • 访问Google Analytics,需要科学上网并用google账号登录,之后按照提示填写网站信息开通GA服务,获取统计ID。

      -
    • -
    • 编辑主题配置文件, 找到关键字google_analytics , 删除注释#并填写获取到的统计ID

      -
      google_analytics:
      tracking_id: UA-XXXXXXXXX-X # <app_id>
      - -
    • -
    -

    robots.txt

    在 source 目录下添加 robots.txt ,编写爬虫规则,下面是我的 robots.txt

    -
    User-agent: *
    Allow: /
    Allow: /archives/
    Allow: /tags/
    Allow: /categories/

    Disallow: /vendors/
    Disallow: /js/
    Disallow: /lib/
    Disallow: /css/
    Disallow: /fonts/
    Disallow: /vendors/
    Disallow: /fancybox/
    Disallow: /old/

    Sitemap: http://blog.tcpsoft.app/sitemap.xml
    Sitemap: http://blog.tcpsoft.app/baidusitemap.xml
    - -

    Google Search Console

    image-20200209180807809

    -

    提交整个域名或者某个子域名到 google,我这里提交“网域”即整个域名。

    -

    输入tcpsoft.app,点继续,会开始验证。

    -

    image-20200209181014294

    -

    在域名购买处修改 DNS 记录或者自己的 DNS 托管商处修改,添加一条特定的 TXT 记录。

    -

    小贴士 用 linux 命令dig hostnamenslookup -q=TXT hostname可查询DNS是否生效(后者windows也可用)

    -

    这个地方有一点坑的是需要设置 name 为 @,值为 google-site-verification=XXXXXX ,而不是 name 为 google-site-verification

    -

    image-20200209184813570

    -

    设置记录,稍等片刻(或者等半天)记录生效之后,点击验证,验证成功

    -

    image-20200209184707276

    -

    之后就可以进行管理辣。

    -

    接下来提交 sitemap,站点地图,帮助机器人抓取网站

    -

    之后就可以通过 google 搜索命令 site:blog.tcpsoft.app 查看站点收录情况

    -

    image-20200209185519286

    -

    Baidu搜索资源平台

    打开Baidu搜索资源平台,添加网站

    -

    image-20200209201555631

    -

    填入主域名 https://tcpsoft.app 选择网站分类,准备验证,可通过文件验证,html 标签验证,CNAME 验证,此处我选择 CNAME 验证,将 H9JpujyZsP.tcpsoft.app 使用 CNAME 解析到 ziyuan.baidu.com。和之前一样,在托管商添加DNS记录。

    -

    小贴士 可用 dig hostnamenslookup -q=CNAME hostname 可查看DNS是否生效,同上文。

    -

    image-20200209202629054

    -

    添加记录生效后就点击完成验证,稍等一会儿,提示验证成功,可以选择批量添加子站。

    -

    和 google 不同,这里的需要手动一条条添加。(还有一点隐私保护的味道呢 [滑稽] )手动填入子域名即可。

    -

    image-20200209203148808

    -

    通过 html 标签验证添加,会要求 head 中添加标签,此处 hexo 有集成,在 hexo 修改配置就可。

    -

    image-20200209204126442

    -

    复制 baidu 提供的 content,在 next 主题的 _config.yml中搜索 baidu_site_verification: 填入,然后再 hexo g -d 发布一次,检查有标签后,点击完成验证。

    -

    验证完成 ,就可以查看站点,我等了半天 Baidu 也抓不到站点,到处看了一圈发现是 github 屏蔽了Baidu 爬虫,所以需要其他方式。

    -

    首先是把根目录下的 baidusitemap.xml 提交给Baidu平台,不多介绍,自己摸索

    -

    Baidu 自动推送

    于是就手动提交 sitemap 并且开启 hexo next 集成的自动推送链接功能,打开站点主题theme/next/_config.yml文件:

    -
    # Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO
    baidu_push: true
    - -

    however~,貌似 uBlock Origin 会拦截 Google Analytics 和 Baidu 自动提交,这就比较悲催了

    -

    hexo 自动提交 Baidu

    npm install hexo-baidu-url-submit --save
    - -

    然后修改 hexo 的配置文件,添加 baidu_url_submit: ,并修改 deploy

    -

    注意:本插件的配置文件中包含秘钥, 如果要把 hexo 博客整体放在 github ,需要放在私有仓库。

    -

    注意:这里 host 里填入的域名是在 Baidu站长平台 添加好的域名

    -
    baidu_url_submit:
    count: 5 ## 提交最新的5个链接
    host: blog.tcpsoft.app ## 在百度站长平台中注册的域名
    token: your_token ## 请注意这是您的秘钥, 请不要发布在公众仓库里!
    path: baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
    # xz_appid: 'xxxxxx' ## 你的熊掌号 appid
    # xz_token: 'xxxxxx' ## 你的熊掌号 token
    # xz_count: 10 ## 从所有的提交的数据当中选取最新的10条,该数量跟你的熊掌号而定
    - -

    不过我认为熊掌号没什么用,需要的话可以添加

    -
    deploy:
    - type: git
    repository: https://github.com/XXXX/XXXX
    - type: baidu_url_submitter # 百度
    # - type: baidu_xz_url_submitter # 百度熊掌号
    - -

    执行hexo deploy的时候,新的链接就会被推送了。

    -

    当你 hexo g -d,看到这个的时候,说明配置成功了

    -

    image-20200209224126611

    -

    其他的中国特色搜索引擎

    不说了,想设置Sougou、360、神马可以参考这篇: Hexo-NexT 博客提交搜索引擎收录 | 小丁的个人博客

    -

    Bing

    搜索并打开 Bing - Webmaster Tools,Bing网站搜索管理。然后登陆微软账号或者 google 账号,看起来像这样:

    -

    image-20200209235529136

    -

    由于我已经有了 Google Search Console(第三条提到的),就直接绑定 Google 账号同步数据就可以了。

    -

    image-20200209235651847

    -

    点击“继续访问”之后会跳转到 google 登陆,登录之后授权 Bing 就可以了。读取到站点数据,导入。

    -

    image-20200209235919325

    -

    然后也需要向 Bing 提交sitemap,同上 Google。

    -

    修改 url 格式

    -

    seo搜索引擎优化认为,网站的最佳结构是用户从首页点击三次就可以到达任何一个页面

    -
    -

    但是我们使用hexo编译的站点打开文章的url是:sitename/year/mounth/day/title四层的结构,这样的url结构很不利于seo,爬虫就会经常爬不到我们的文章,所以我把url格式改为 sitename/year/mounth/title。

    -

    修改 hexo 配置文件:

    -
    permalink: :year/:month/:title/
    - -

    出站链接 “nofollow”

    外链越多,搜索引擎给此站点的权重就越低,即排位越后。为了提高权重,可以禁止搜索引擎跟进外链,添加 nofollow 属性就可以做到。一个一个页面添加跟定是不现实的,当然是选择用插件。

    -

    先在 hexo 博客根目录安装插件,插件有hexo-autonofollowhexo-filter-nofollow ,filter要好用一些,他们两个的差别可以参考作者的博客:hexo-filter-nofollow - Hexo 官方的 nofollow 插件 | Sukka’s Blog

    -
    npm install hexo-filter-nofollow --save
    - -

    编辑 hexo 配置文件,添加:

    -
    nofollow:
    enable: true
    field: post # post:仅处理文章内容,site:处理全站所有页面
    exclude:
    - 'exclude1.com'
    - 'exclude2.com'
    - -]]>
    - - 建站 - - - hexo - seo - -
    - - hexo + gitalk,满满的都是坑。 - /2020/02/hexo-with-gitalk/ - 今日看到博客的评论功能,就想整一个,本以为跟前两天添加hexo插件查不多,结果,,爬坑,又掉坑,爬坑又掉坑……

    -
    -

    安装gitalk

    安装gitalk没什么,有很多博文有介绍,这里贴一篇就好,修改主题配置的部分很精简,我喜欢。

    - -

    注意域名是自己的 github pages 或者自定义域名就好。

    -

    注意每一次发布新文章之后都需要去博客登陆刷新一下评论,插件会在你的 repo 里面新建 issue。

    -

    我之前有篇文章叫《Hi, I’m Cortana.》,我点开这个做实验看能不能使用评论功能,原地址是

    -
    https://blog.tcpsoft.app/2019/12/29/Hi,%20I'm%20Cortana/
    -
    -

    艰难爬坑

    [ 以下多链接警告,请选择性阅读 ]

    -

    报错:redirect_uri_mismatch

    -

    看了感觉也没啥用,根据指示转到下面这篇,写的比较详细,但是是没有解决问题

    - -

    我看了看我的配置,根据前面的指导写的最初的配置是这样子的:

    -

    github-config

    -

    http https 的问题?

    又看了看我的请求 url,确实是都是 https,没有问题啊

    -

    后来又找到这个 gitalk issue 115 和 162,貌似是个很“权威”的解答

    - -

    加 / ?

    好像回调地址里面要加个 / ?加就加吧,然后

    -
    Authorization callback URL:
    https://blog.tcpsoft.app/
    - -

    也不行。仍然跳回主页,并提示 redirect_uri_mismatch

    -

    后来我又尝试了:

    -
    http://tcpsoftware.github.io
    https://tcpsoftware.github.io
    http://tcpsoftware.github.io/
    https://tcpsoftware.github.io/
    http://blog.tcpsoft.app
    https://blog.tcpsoft.app
    http://blog.tcpsoft.app/
    https://blog.tcpsoft.app/
    tcpsoftware.github.io
    tcpsoftware.github.io
    blog.tcpsoft.app
    blog.tcpsoft.app
    - -

    心累

    -

    然后忽然在 issue 162 翻到这个?

    -

    image-20200209140447713

    -

    中文??!

    🤨

    -

    🤔

    -

    回头看了看我的 url,貌似并没有中文。

    -
    https://blog.tcpsoft.app/2019/12/29/Hi,%20I'm%20Cortana/
    -

    url 编码导致的问题?

    -

    我尝试换一个文章,在上一篇 hexo 里,可了!!它的链接是,

    -
    https://blog.tcpsoft.app/2020/02/06/hexo-changes/
    -

    呐,没有 url 编码,没有中文

    -

    🤔

    -

    issue

    -

    编码问题。

    url 里面不要有特殊符号,刚才链接里面完美命中(而且链接看起来很丑可读性很差)

    -

    有特殊符号不能被匹配规则匹配到(像我刚才链接里面的 , '

    -
    -

    解决方案

    hexo new passage_name

    -

    新建文章的时候想好一个优雅的名字,如果遇到符号或者多单词,可以考虑用:

    -
    驼峰式命名法(小驼峰命名法)

    hexo new helloImCortana

    -
    帕斯卡命名法(大驼峰命名法)

    hexo new HelloImCortana

    -
    匈牙利命名法(本文无关)

    hexo new sHelloImCortana

    -

    变量类型+变量名(逃)

    -
    下划线命名法

    hexo new hello_Im_Cortana

    -
    短横线分隔(Github风格 编程必报错)

    hexo new hello-Im-Cortana

    -
    -

    再说一句

    (其实上面尝试的那一大堆链接,除了最后四个没有 http https 协议的之外,其他的都是可以的)

    -]]>
    - - 建站 - - - hexo - gitalk - -
    - - hexo 大换血 - /2020/02/hexo-changes/ - 今天闲来无事,折腾博客(其实是写 gdb 结果得更新一下 hexo ),然后这个博客就大换血了。

    -

    我干了啥呢:

    -
    -

    Typora 的图片存放路径

    Typora 的图片存放路径和文章图片 URL 的问题

    - -

    hexo 添加主页页面,tags等

    hexo 主页上的 tags、categories、archive、about 等页面,手动添加。

    - -

    hexo 打赏

    设置 next 主题配置下的 reward_settings,但和文章中说的有些小不同

    - -

    hexo 添加版权

    这里我遵循知识共享(Creative Commons) 署名 4.0 协议国际版,可以在next主题的 config.yml 里面的 creative_commons 配置

    - -

    hexo 添加版权后链接错误问题

    本来应该是 http:// blog.tcpsoft.app/2020/02/06/hexo-changes/,

    -

    但是变成了 /http:/blog.tcpsoft.app/2020/02/06/hexo-changes/

    -

    所以就手动写了个 js 脚本,添加到 source/js 文件夹,并修改 next 的一个配置文件。

    -
    //添加<script>到 \themes\next\layout\_scripts\index.swig
    //<script src="/js/diy.js"></script>

    link = document.getElementsByClassName("post-copyright-link")[0].children[1];
    href = link.getAttribute("href").replace("/http:/","http://");
    link.setAttribute("href",href);
    - -

    解决了显示混乱问题

    我之前的博客迁移,导致了显示混乱问题(即我已有 css 而 hexo 又给我加上一套主题的显示方案),此处用 hexo 的 skip_render 设置即可,不过要匹配文件文件夹还是有点小坑的 [坑爹预警]

    - -

    博客 CDN 加速

    看了百度云加速,知道创宇云加速,cloud flare,暂时还是不弄了,现阶段博客是基于 GitHub Pages + Hexo ,图片使用腾讯云存储。后期可能考虑加 CDN 或整站迁移腾讯云存储(因域名无法备案及COS网站的处理问题已放弃此方案)

    -

    sitemap 功能

    hexo、next 主题的 sitemap 功能,帮助搜索引擎收录站点(不用修改 hexo 配置文件)
    注:这些 npm 命令都是在本地博客根目录下执行,下同

    -
    npm install hexo-generator-sitemap --save
    npm install hexo-generator-baidu-sitemap --save
    - - -

    RSS 订阅功能

    (不用修改 hexo 配置文件)(修改next主题配置以显示按钮)

    -
    npm install hexo-generator-feed --save
    -
    "/themes/next/_config.yml"
    menu:
    ......
    rss: /atom.xml
    - -

    站点搜索功能

    安装插件,然后修改 next 配置文件,,,

    -
    npm install hexo-generator-searchdb --save
    - - -

    相关文章推荐

    同样的,安装插件,修改配置

    -
    npm install hexo-related-popular-posts --save
    - -

    参考链接1: Hexo+NexT(v7.0+) 搭建博客:功能强化 | Chingow’s Blog

    -

    文章字数统计和阅读时间估计

    npm install hexo-symbols-count-time --save
    - -

    参考链接1: o(五):个性化 next theme | 执行者的博客

    -

    社交按钮

    参考链接1: o(五):个性化 next theme | 执行者的博客

    -

    阅读进度

    设置 next 主题配置:

    -
    reading_progress:
    enable: true
    - -

    hexo 设置阅读全文

    其实也和文章的有点不一样,可能是因为 next 版本不一样,我设置的是 next 配置文件

    -
    # Automatically excerpt description in homepage as preamble text.
    excerpt_description: true

    # Read more button
    # If true, the read more button will be displayed in excerpt section.
    read_more_btn: true
    - -

    参考链接1: Hexo-设置阅读全文 - 简书

    -

    修改标签样式

    只需要修改模板/themes/next/layout/_macro/post.swig,搜索 rel="tag">#,将 # 换成<i class="fa fa-tag"></i> 。(好像改了更丑了,后来改回来了)

    -

    参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

    -

    设置博客底部布局

    参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

    -

    设置代码样式

    没有改,后面需要再说

    -

    参考链接1: Hexo博客优化之Next主题美化_huangpiao-CSDN博客

    -

    结语

    终于配置完了,要死,(其实我是想写点 gdb 的来着?)

    -]]>
    - - 建站 - - - hexo - -
    - - Hi, I'm Cortana. - /2019/12/Hi-Im-Cortana/ - 2020即将来临了,作为群贫困人口,在2019年再来看各位群友最后一面

    -]]>
    - - none - - - none - -
    -
    diff --git a/sinankejishe/index.html b/sinankejishe/index.html new file mode 100644 index 0000000..c9f83f5 --- /dev/null +++ b/sinankejishe/index.html @@ -0,0 +1,12 @@ + + + + + + + 跳转中. . . + + + + + -
    -
    - - - - - - - - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/CPP/index.html b/tags/CPP/index.html deleted file mode 100644 index ac79bf4..0000000 --- a/tags/CPP/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: CPP | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    CPP - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/Google/index.html b/tags/Google/index.html deleted file mode 100644 index 7cb5746..0000000 --- a/tags/Google/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: Google | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    Google - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/OneDrive/index.html b/tags/OneDrive/index.html deleted file mode 100644 index 9802f0e..0000000 --- a/tags/OneDrive/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: OneDrive | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    OneDrive - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/VisualStudio/index.html b/tags/VisualStudio/index.html deleted file mode 100644 index e70a685..0000000 --- a/tags/VisualStudio/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: VisualStudio | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    VisualStudio - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/WSL2/index.html b/tags/WSL2/index.html deleted file mode 100644 index c53c80a..0000000 --- a/tags/WSL2/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: WSL2 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    WSL2 - 标签 -

    -
    - - -
    -

    2021

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/adb/index.html b/tags/adb/index.html deleted file mode 100644 index 2f1d10b..0000000 --- a/tags/adb/index.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: adb | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    adb - 标签 -

    -
    - - -
    -

    2020

    -
    - - - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/cdn/index.html b/tags/cdn/index.html deleted file mode 100644 index 84bd69c..0000000 --- a/tags/cdn/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: cdn | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    cdn - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/chrome/index.html b/tags/chrome/index.html deleted file mode 100644 index 8450417..0000000 --- a/tags/chrome/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: chrome | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    chrome - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/cloudflare/index.html b/tags/cloudflare/index.html deleted file mode 100644 index 9104796..0000000 --- a/tags/cloudflare/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: cloudflare | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    cloudflare - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/gdb/index.html b/tags/gdb/index.html deleted file mode 100644 index bbfbb91..0000000 --- a/tags/gdb/index.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: gdb | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    gdb - 标签 -

    -
    - - -
    -

    2020

    -
    - - - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/git/index.html b/tags/git/index.html deleted file mode 100644 index 5c1d31e..0000000 --- a/tags/git/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: git | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    git - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/gitalk/index.html b/tags/gitalk/index.html deleted file mode 100644 index f2f5157..0000000 --- a/tags/gitalk/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: gitalk | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    gitalk - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/github/index.html b/tags/github/index.html deleted file mode 100644 index c3534e3..0000000 --- a/tags/github/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: github | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    github - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/hexo/index.html b/tags/hexo/index.html deleted file mode 100644 index ccc749d..0000000 --- a/tags/hexo/index.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: hexo | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    hexo - 标签 -

    -
    - - -
    -

    2020

    -
    - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/index.html b/tags/index.html deleted file mode 100644 index fc9b6bd..0000000 --- a/tags/index.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tags | Hi, I'm Cortana. - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - - - -
    - - -
    - - - -
    -
    - -

    tags -

    - - - -
    - - - - -
    - - -
    - - - -
    - - - - - -
    - - -
    - -
    - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/linux/index.html b/tags/linux/index.html deleted file mode 100644 index de871ff..0000000 --- a/tags/linux/index.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: linux | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    linux - 标签 -

    -
    - - -
    -

    2020

    -
    - - - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/none/index.html b/tags/none/index.html deleted file mode 100644 index 07e9332..0000000 --- a/tags/none/index.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: none | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    none - 标签 -

    -
    - - -
    -

    2022

    -
    - - - - -
    -

    2020

    -
    - - - - - - - - - - - - -
    -

    2019

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/proxifier/index.html b/tags/proxifier/index.html deleted file mode 100644 index cc147c2..0000000 --- a/tags/proxifier/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: proxifier | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    proxifier - 标签 -

    -
    - - -
    -

    2021

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/seo/index.html b/tags/seo/index.html deleted file mode 100644 index 489531f..0000000 --- a/tags/seo/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: seo | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    seo - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/vmware/index.html b/tags/vmware/index.html deleted file mode 100644 index bcbab22..0000000 --- a/tags/vmware/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: vmware | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    vmware - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tags/wooyun/index.html b/tags/wooyun/index.html deleted file mode 100644 index 58cf48f..0000000 --- a/tags/wooyun/index.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: wooyun | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    wooyun - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\344\273\243\347\220\206/index.html" "b/tags/\344\273\243\347\220\206/index.html" deleted file mode 100644 index 2a52041..0000000 --- "a/tags/\344\273\243\347\220\206/index.html" +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: 代理 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    代理 - 标签 -

    -
    - - -
    -

    2021

    -
    - - -
    -

    2020

    -
    - - - - - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/tags/\346\220\234\347\264\242\345\274\225\346\223\216/index.html" "b/tags/\346\220\234\347\264\242\345\274\225\346\223\216/index.html" deleted file mode 100644 index 1cad024..0000000 --- "a/tags/\346\220\234\347\264\242\345\274\225\346\223\216/index.html" +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 标签: 搜索引擎 | Hi, I'm Cortana. - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - -
    - - - - -
    -
    - - -
    - - 0% -
    -
    - - -
    -
    -
    - - -
    - - - - - -
    -
    -
    -

    搜索引擎 - 标签 -

    -
    - - -
    -

    2020

    -
    - - - -
    -
    - - - - - - - - -
    - - - - -
    - - - - - - - - -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/old/test/hitNJLZ.html b/test/hitNJLZ.html similarity index 100% rename from old/test/hitNJLZ.html rename to test/hitNJLZ.html diff --git a/old/test/json/json.html b/test/json/json.html similarity index 100% rename from old/test/json/json.html rename to test/json/json.html diff --git a/old/test/json/json.js b/test/json/json.js similarity index 100% rename from old/test/json/json.js rename to test/json/json.js diff --git a/old/test/json/ti.json b/test/json/ti.json similarity index 100% rename from old/test/json/ti.json rename to test/json/ti.json diff --git a/old/test/jsons/getjson.js b/test/jsons/getjson.js similarity index 100% rename from old/test/jsons/getjson.js rename to test/jsons/getjson.js diff --git a/old/test/jsons/json.html b/test/jsons/json.html similarity index 100% rename from old/test/jsons/json.html rename to test/jsons/json.html diff --git a/old/test/jsons/json.js b/test/jsons/json.js similarity index 100% rename from old/test/jsons/json.js rename to test/jsons/json.js diff --git a/old/test/jsons/ti.json b/test/jsons/ti.json similarity index 100% rename from old/test/jsons/ti.json rename to test/jsons/ti.json diff --git a/webwindows/css/loading_css.css b/webwindows/css/loading_css.css new file mode 100644 index 0000000..acc4bf5 --- /dev/null +++ b/webwindows/css/loading_css.css @@ -0,0 +1,81 @@ +body { + background: #111; +} +.loader { + position: relative; + padding-top: 100px; + width: 40px; + margin: auto; +} +.loader .circle { + position: absolute; + width: 38px; + height: 38px; + /*width: 38px; + height: 38px;*/ + opacity: 0; + transform: rotate(225deg); + animation-iteration-count: infinite; + animation-name: orbit; + animation-duration: 5.5s; +} +.loader .circle:after { + content: ''; + position: absolute; + width: 4px; + height: 4px; + /*width: 5px; + height: 5px;*/ + border-radius: 3px; + /*border-radius: 5px;*/ + background: #fff; + /* Pick a color */ +} +.loader .circle:nth-child(2) { + animation-delay: 240ms; +} +.loader .circle:nth-child(3) { + animation-delay: 480ms; +} +.loader .circle:nth-child(4) { + animation-delay: 720ms; +} +.loader .circle:nth-child(5) { + animation-delay: 960ms; +} +@keyframes orbit { + 0% { + transform: rotate(225deg); + opacity: 1; + animation-timing-function: ease-out; + } + 7% { + transform: rotate(345deg); + animation-timing-function: linear; + } + 30% { + transform: rotate(455deg); + animation-timing-function: ease-in-out; + } + 39% { + transform: rotate(690deg); + animation-timing-function: linear; + } + 70% { + transform: rotate(815deg); + opacity: 1; + animation-timing-function: ease-out; + } + 75% { + transform: rotate(945deg); + animation-timing-function: ease-out; + } + 76% { + transform: rotate(945deg); + opacity: 0; + } + 100% { + transform: rotate(945deg); + opacity: 0; + } +} diff --git a/webwindows/desktop.html b/webwindows/desktop.html new file mode 100644 index 0000000..8ac3330 --- /dev/null +++ b/webwindows/desktop.html @@ -0,0 +1,6 @@ + + + +
    + +
    \ No newline at end of file diff --git a/webwindows/img/Windows_logo.svg b/webwindows/img/Windows_logo.svg new file mode 100644 index 0000000..0fed3a6 --- /dev/null +++ b/webwindows/img/Windows_logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/webwindows/img/login_wallpaper.jpg b/webwindows/img/login_wallpaper.jpg new file mode 100644 index 0000000..942570c Binary files /dev/null and b/webwindows/img/login_wallpaper.jpg differ diff --git a/webwindows/img/user_head.svg b/webwindows/img/user_head.svg new file mode 100644 index 0000000..1c8a323 --- /dev/null +++ b/webwindows/img/user_head.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/webwindows/img/windows_10_wallpaper.jpg b/webwindows/img/windows_10_wallpaper.jpg new file mode 100644 index 0000000..feda3a9 Binary files /dev/null and b/webwindows/img/windows_10_wallpaper.jpg differ diff --git a/webwindows/index.html b/webwindows/index.html new file mode 100644 index 0000000..3c2ce22 --- /dev/null +++ b/webwindows/index.html @@ -0,0 +1,90 @@ + + + + + + + + + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/js/jquery.min.js b/webwindows/js/jquery.js similarity index 100% rename from js/jquery.min.js rename to webwindows/js/jquery.js diff --git a/webwindows/login.html b/webwindows/login.html new file mode 100644 index 0000000..f261b4f --- /dev/null +++ b/webwindows/login.html @@ -0,0 +1,78 @@ + +
    +
    +
    +
    +
    +
    + + + Local User + +
    + \ No newline at end of file diff --git a/webwindows/update_log.html b/webwindows/update_log.html new file mode 100644 index 0000000..57150d3 --- /dev/null +++ b/webwindows/update_log.html @@ -0,0 +1,82 @@ + + + + + 更新日志 + + + +
    WebWindows - Update Notes
    +
    +

    v0.0.5 @2017-12-17

    +

    [ADD]

    +

    [Debug]

    +
  • 更准确的开机加载完成检测。避免未加载完就退出开机界面
  • +

    [Change]

    +
      +
    • 重新定位开机界面各个元素
    • +
    • 重新定位登入界面各个元素
    • +
    +
    +
    +

    v0.0.4 @2017-12-10

    +

    [ADD]

    +
  • 屏保界面上滑消失动画
  • +
    +
    +

    v0.0.3 @2017-12-8

    +

    [ADD]

    +
      +
    • 屏保界面进入动画
    • +
    • 屏保界面
    • +
    • 屏保界面时间更新
    • +
    +

    [Debug]

    +
  • 修复时间更新的小bug
  • +
    +
    +

    v0.0.2 @2017-12-7

    +

    [ADD]

    +
      +
    • 定时检测加载完成则退出开机界面
    • +
    • 开机界面淡出动画
    • +
    +
    +
    +

    v0.0.1 @2017-12-3

    +

    [ADD]

    +
      +
    • 开机界面logo
    • +
    • 开机界面 旋转菊花动画的实现
    • +
    +
    +
    +

    + No More. +

    + + diff --git a/wifi.html b/wifi.html deleted file mode 100644 index 219b82a..0000000 --- a/wifi.html +++ /dev/null @@ -1 +0,0 @@ -https://note.youdao.com/s/ZryH2qxn \ No newline at end of file