From 59886797ffe0efc3da6dcad8dfb017e661fdcbf7 Mon Sep 17 00:00:00 2001 From: lihongrui Date: Mon, 14 Oct 2024 15:09:16 +0800 Subject: [PATCH] Site updated: 2024-10-14 15:09:16 --- 2022/05/29/TODO-LIST/index.html | 383 + 2022/05/29/career/body-health/index.html | 359 + 2022/05/29/install/docker-QA/index.html | 315 + 2022/05/29/install/linux-QA/index.html | 357 + 2022/05/29/install/mysql-QA/index.html | 316 + .../language/service-get-json&file/index.html | 377 + .../index.html" | 353 + .../index.html" | 339 + 2023/05/16/devops/K8s-App-Setup/index.html | 327 + 2023/05/19/language/go-setup/index.html | 346 + 2024/05/18/career/sum-up-2024/index.html | 328 + 2024/10/11/devops/Helm/index.html | 302 + 2024/10/11/devops/Kubernetes/index.html | 446 + 2024/10/11/devops/No_WSL/index.html | 348 + .../devops_toolchain_integration/index.html | 328 + archives/2022/05/index.html | 391 + archives/2022/index.html | 391 + archives/2023/05/index.html | 266 + archives/2023/index.html | 266 + archives/2024/05/index.html | 246 + archives/2024/10/index.html | 306 + archives/2024/index.html | 326 + archives/index.html | 440 + archives/page/2/index.html | 329 + assets/algolia/algoliasearch.js | 7190 +++++++++++++++++ assets/algolia/algoliasearch.min.js | 4 + assets/algolia/algoliasearchLite.js | 4453 ++++++++++ assets/algolia/algoliasearchLite.min.js | 3 + categories/Career/index.html | 295 + categories/DevOps/index.html | 330 + categories/Install/index.html | 287 + categories/Language/index.html | 270 + categories/Leetcode/index.html | 267 + categories/index.html | 243 + css/main.css | 2510 ++++++ css/noscript.css | 48 + images/abstract_health.png | Bin 0 -> 409482 bytes images/apple-touch-icon-next.png | Bin 0 -> 1544 bytes images/avatar.gif | Bin 0 -> 1785 bytes images/avatar.png | Bin 0 -> 152103 bytes images/favicon-16x16-next.png | Bin 0 -> 435 bytes images/favicon-32x32-next.png | Bin 0 -> 640 bytes images/http_upload_01.png | Bin 0 -> 73492 bytes images/http_upload_02.png | Bin 0 -> 27583 bytes images/logo-algolia-nebula-blue-full.svg | 1 + images/logo.svg | 1 + index.html | 1142 +++ js/bookmark.js | 56 + js/comments-buttons.js | 25 + js/comments.js | 21 + js/config.js | 66 + js/motion.js | 140 + js/next-boot.js | 75 + js/pjax.js | 50 + js/schedule.js | 138 + js/schemes/muse.js | 60 + js/third-party/addtoany.js | 8 + js/third-party/analytics/baidu-analytics.js | 7 + js/third-party/analytics/google-analytics.js | 35 + js/third-party/analytics/growingio.js | 10 + js/third-party/analytics/matomo.js | 19 + js/third-party/chat/chatra.js | 19 + js/third-party/chat/gitter.js | 5 + js/third-party/chat/tidio.js | 10 + js/third-party/comments/changyan.js | 39 + js/third-party/comments/disqus.js | 41 + js/third-party/comments/disqusjs.js | 23 + js/third-party/comments/gitalk.js | 24 + js/third-party/comments/isso.js | 15 + js/third-party/comments/livere.js | 19 + js/third-party/comments/utterances.js | 17 + js/third-party/fancybox.js | 38 + js/third-party/math/katex.js | 7 + js/third-party/math/mathjax.js | 36 + js/third-party/pace.js | 7 + js/third-party/quicklink.js | 37 + js/third-party/search/algolia-search.js | 130 + js/third-party/search/local-search.js | 99 + js/third-party/statistics/firestore.js | 60 + js/third-party/statistics/lean-analytics.js | 107 + js/third-party/tags/mermaid.js | 32 + js/third-party/tags/pdf.js | 23 + js/utils.js | 452 ++ page/2/index.html | 718 ++ placeholder | 0 tags/Hard/index.html | 247 + tags/Health/index.html | 252 + tags/OJ/index.html | 247 + tags/Python-HTTP/index.html | 247 + tags/Sum-up/index.html | 247 + tags/TodoList/index.html | 247 + tags/computer/index.html | 247 + tags/index.html | 242 + tags/linux/index.html | 287 + tags/python/index.html | 247 + tags/setup-go/index.html | 247 + tags/setup/index.html | 330 + 97 files changed, 30984 insertions(+) create mode 100644 2022/05/29/TODO-LIST/index.html create mode 100644 2022/05/29/career/body-health/index.html create mode 100644 2022/05/29/install/docker-QA/index.html create mode 100644 2022/05/29/install/linux-QA/index.html create mode 100644 2022/05/29/install/mysql-QA/index.html create mode 100644 2022/05/29/language/service-get-json&file/index.html create mode 100644 "2022/05/29/leetcode/1st_hard\344\270\255\344\275\215\346\225\260/index.html" create mode 100644 "2022/05/29/leetcode/yield\344\270\216\344\272\214\345\217\211\346\240\221\351\201\215\345\216\206/index.html" create mode 100644 2023/05/16/devops/K8s-App-Setup/index.html create mode 100644 2023/05/19/language/go-setup/index.html create mode 100644 2024/05/18/career/sum-up-2024/index.html create mode 100644 2024/10/11/devops/Helm/index.html create mode 100644 2024/10/11/devops/Kubernetes/index.html create mode 100644 2024/10/11/devops/No_WSL/index.html create mode 100644 2024/10/11/devops/devops_toolchain_integration/index.html create mode 100644 archives/2022/05/index.html create mode 100644 archives/2022/index.html create mode 100644 archives/2023/05/index.html create mode 100644 archives/2023/index.html create mode 100644 archives/2024/05/index.html create mode 100644 archives/2024/10/index.html create mode 100644 archives/2024/index.html create mode 100644 archives/index.html create mode 100644 archives/page/2/index.html create mode 100644 assets/algolia/algoliasearch.js create mode 100644 assets/algolia/algoliasearch.min.js create mode 100644 assets/algolia/algoliasearchLite.js create mode 100644 assets/algolia/algoliasearchLite.min.js create mode 100644 categories/Career/index.html create mode 100644 categories/DevOps/index.html create mode 100644 categories/Install/index.html create mode 100644 categories/Language/index.html create mode 100644 categories/Leetcode/index.html create mode 100644 categories/index.html create mode 100644 css/main.css create mode 100644 css/noscript.css create mode 100644 images/abstract_health.png create mode 100644 images/apple-touch-icon-next.png create mode 100644 images/avatar.gif create mode 100644 images/avatar.png create mode 100644 images/favicon-16x16-next.png create mode 100644 images/favicon-32x32-next.png create mode 100644 images/http_upload_01.png create mode 100644 images/http_upload_02.png create mode 100644 images/logo-algolia-nebula-blue-full.svg create mode 100644 images/logo.svg create mode 100644 index.html create mode 100644 js/bookmark.js create mode 100644 js/comments-buttons.js create mode 100644 js/comments.js create mode 100644 js/config.js create mode 100644 js/motion.js create mode 100644 js/next-boot.js create mode 100644 js/pjax.js create mode 100644 js/schedule.js create mode 100644 js/schemes/muse.js create mode 100644 js/third-party/addtoany.js create mode 100644 js/third-party/analytics/baidu-analytics.js create mode 100644 js/third-party/analytics/google-analytics.js create mode 100644 js/third-party/analytics/growingio.js create mode 100644 js/third-party/analytics/matomo.js create mode 100644 js/third-party/chat/chatra.js create mode 100644 js/third-party/chat/gitter.js create mode 100644 js/third-party/chat/tidio.js create mode 100644 js/third-party/comments/changyan.js create mode 100644 js/third-party/comments/disqus.js create mode 100644 js/third-party/comments/disqusjs.js create mode 100644 js/third-party/comments/gitalk.js create mode 100644 js/third-party/comments/isso.js create mode 100644 js/third-party/comments/livere.js create mode 100644 js/third-party/comments/utterances.js create mode 100644 js/third-party/fancybox.js create mode 100644 js/third-party/math/katex.js create mode 100644 js/third-party/math/mathjax.js create mode 100644 js/third-party/pace.js create mode 100644 js/third-party/quicklink.js create mode 100644 js/third-party/search/algolia-search.js create mode 100644 js/third-party/search/local-search.js create mode 100644 js/third-party/statistics/firestore.js create mode 100644 js/third-party/statistics/lean-analytics.js create mode 100644 js/third-party/tags/mermaid.js create mode 100644 js/third-party/tags/pdf.js create mode 100644 js/utils.js create mode 100644 page/2/index.html delete mode 100644 placeholder create mode 100644 tags/Hard/index.html create mode 100644 tags/Health/index.html create mode 100644 tags/OJ/index.html create mode 100644 tags/Python-HTTP/index.html create mode 100644 tags/Sum-up/index.html create mode 100644 tags/TodoList/index.html create mode 100644 tags/computer/index.html create mode 100644 tags/index.html create mode 100644 tags/linux/index.html create mode 100644 tags/python/index.html create mode 100644 tags/setup-go/index.html create mode 100644 tags/setup/index.html diff --git a/2022/05/29/TODO-LIST/index.html b/2022/05/29/TODO-LIST/index.html new file mode 100644 index 0000000..67e46b8 --- /dev/null +++ b/2022/05/29/TODO-LIST/index.html @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TODO LIST | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ TODO LIST +

+ + +
+ + + + +

0. Blog

    +
  • leetcode solution
  • +
  • blogs
  • +
  • flask source code
  • +
  • selenium source code
  • +
  • requests source code
  • +
  • python source code
  • +
  • python version diff
  • +
+ +

1. 虚拟化与容器编排

虚拟化

+

3. 业务开发系统回顾与查漏补缺

React

    +
  • React 快速上手
  • +
  • React 常用组件
  • +
  • React 稍微深入使用
  • +
+

Python

    +
  • Django 上手
  • +
  • django-rest-framework 上手
  • +
  • Flask 标准开发流程
  • +
  • Flask 源码
  • +
+

Go

TODO

+

Java

    +
  • Spring Boot 上手
  • +
  • Gradle 标准开发流程
  • +
+

部署

    +
  • uWSGI、gunicorn + nginx 等方式部署Python项目

    4. CI

  • +
  • Jenkins 搭建
  • +
  • Jenkins 日常使用:finish in business
  • +
  • Jenkins 组件
  • +
  • Jenkins 插件
  • +
  • Jenkins 源码
  • +
+
+

以下先不急着做,把上面的先完成。

质量卡点

    +
  • sonarQube 全英文文档;// 工作中用到 + 正在搭建
  • +
  • sonarQube 搭建与试用;
  • +
  • sonarQube 深度使用与CI集成;
  • +
+

5. (大)前端CD

TODO

+

6. DB

    +
  • Mysql 语法系统学习;
  • +
  • Mysql事务、一致性保证、分表分页等概念;
  • +
  • Mysql引擎相关;
  • +
  • Elasticsearch;
  • +
+

7. 信息安全基础知识

    +
  • https相关的 TCP/IP计算机网络安全
  • +
  • 加密算法
  • +
  • 图解密码技术

    8. 本科课程

  • +
  • 《模式识别》
  • +
  • 《最优化方法》
  • +
  • 《信号与系统》

    9. 计算机网络

  • +
  • 熟练掌握TCP/IP协议族
  • +
  • 亲自练习使用socket编程

    10. 组成原理

  • +
  • todo

    11. AI

  • +
  • todo

    12. 大数据

  • +
  • spark/hardoop 之类的搞一个;
  • +
+

Abandoned

    +
  • Selenium - Webdriver的异步标签页池: 完全变成业务轮子了,后来的Puppeteer, Playwright API 的对象就是标签页而不是整个浏览器窗口,天然支持异步;
  • +
+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2022/05/29/career/body-health/index.html b/2022/05/29/career/body-health/index.html new file mode 100644 index 0000000..335f0aa --- /dev/null +++ b/2022/05/29/career/body-health/index.html @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +基础建设 - 身体总结 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ +
+ +
+ +
+
+ +
+ + + + + + + +
+

+ 基础建设 - 身体总结 +

+ + +
+ + + + +

https://www.v2ex.com/t/732765
https://www.bilibili.com/video/BV1C54y167y3

+

肥胖

    +
  • 196斤 29.3% 2022.05 看起来比在深圳的时候瘦一圈了,能看到下巴轮廓了,极端达到过193.7 28%
  • +
  • 208斤 30.0% 2021.09 在深圳准备跑路,坚持跑步 + 游泳一段时间了
  • +
  • 210斤 29.9% 2021.04
  • +
  • 217斤 31.5% 2020.10 B超 中度脂肪肝 很严重
  • +
+ +

锻炼

周一健身 周二跳舞 周三足球 周四篮球 周五跳舞 周末爬山 (2021.深圳)

+

肩背疼痛

+

2021.07.29 实际上是从4月一直间断背痛到7月下旬,是在太可怕了;看日记的时候才发现我根本不是背痛好了,而是痛的过程中舒缓一下。最近一次好转是在几天前,不是在中医院按摩带来的,而是没日没夜的热敷 + 忍痛健身(健身的时候都快好了);然后现在每天无论是否健身也会去拉伸一下,而且健身的强度还是有保障。
从一开始的起床就像头掉了,到转动角度有限,到颈夹肌一碰就痛,到现在只是酸酸的。

+
+
+

2021.04 本周突然右边整个肩背脖子感觉挤压成了一块按摩之后似乎没有好转,热水袋效果也不佳。

+
+
+

2021 年后在工位上坚持了一个星期的站立办公,结果肩背就像浓缩到了一起一样。尝试使用健身缓解,结果可能是由于没有充分拉伸,更加严重了,在中医院按摩2次后极大的缓解了。

+
+
+

2020 前两年工作的时候还能维持工作日疼痛周末之后放松的状态,现在不行了,新到深圳之后不知道是枕头、工位还是拉伸过度,持续了一个多星期的如同落枕一样的刺痛
在中医院按摩似乎没有明显好转,如何康复的已经忘记了。

+
+

腰疼

2020年下半年入职之后,公司提供人体工学椅,但依旧不能解决久坐疼痛问题,入手升降桌之后。站坐交替之后 有所好转

+

但是最根本的办法还是平时加强锻炼,同时尽可能多的活动身体,不然只能开启周末休息不痛,工作一周剧痛的循环。

+
+

2021 人体工学椅 + 站立办公, 目前腰已经很久没有疼过,但是酸麻胀的感觉依旧存在。

+
+
+

2019 刚刚上班就买了一个电竞椅,体验确实好很多,但对于疼痛缓解只是杯水车薪。那段时间,最大的记忆就是到了周五脖子和肩膀都已经完全僵硬而且针一样的刺痛。周末躺两天或者外面跑两天虽然很累,但是腰部和脖子反而能够轻松一点,就像舒了一口气一样。
后来开始尝试逐步站着写代码,发现效果奇好,只是膝盖还有腿部感觉似乎承受不了这么大的压力。再后来在家使用沙发看电视上的课件,才在高强度的学习中也能避免腰部感觉像针刺一般的疼痛
还占着自己比较年轻,具体表现为不管前几日如何疼痛,只要有几天没有坐着外出办事,立马就会好转,真害怕过几年没有这种恢复能力的时候该怎么办。

+
+
+

2018 第一次明显的感觉到腰疼,当时做的是那种带有靠背的皮质老板椅

+
+

膝盖疼痛

+

2021.04.09 护膝到了,终于想起来自己在17年跳舞的时候左边膝盖就大规模的疼过,现在多半确认了是因为天冷了,影响到了膝盖积液的吸收,现在走路还是微微有感觉,看之后的发展吧。

+
+

坚持减肥失败照旧爬山半年之后,终于我的膝盖终于开始不受抑制的疼痛了。
最开始的时候,是在某次没带登山杖,下山的时候右脚膝盖酸痛,不得不以很慢的速度倒着走下山。
现在已经发展到就算站着都会有拉着的感觉,不知道和现在长期站着办公是否有关系。
去医院检查,医生就询问和摸过之后,判断是韧带的问题,但是断言半月板磨损还是很严重的,毕竟游泳和轮椅总要选一个吧。

+

痛风

2021 在吃了4盒,大概间断一两个月的苯溴马隆之后没有再犯过明显的症状,在这期间有过2次复发,但是症状在药物的帮助下都在两三天内被消除。目前的体脂是29.9%,体重也终于稳定在209斤,完成了2年目标的万里长征第一步。

+
+

2020年 吃药1周马上就没有症状了,目前我的体脂是31.5%, 可能在25%之前都会有风险,2年之内的目标是20%。

+
+
+

2020年 详情见 https://www.v2ex.com/t/732765
https://www.bilibili.com/video/BV1C54y167y3
没想到26岁的我竟会染上如此顽疾,据说医生有句顺口溜:胖子走路瘸一腿,十有八九是痛风。

+
+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2022/05/29/install/docker-QA/index.html b/2022/05/29/install/docker-QA/index.html new file mode 100644 index 0000000..fd6cdf5 --- /dev/null +++ b/2022/05/29/install/docker-QA/index.html @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +use docker Q&A | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ use docker Q&A +

+ + +
+ + + + +
+ +

install

connect

setting

usage

docker container 互联

背景: 我现在启动了n个container,他们之前需要通过端口互相访问,但是按照docker的默认网络模式,是会自己拉一个小局域网的,服务部署好了也访问不进去。

+

尝试1: 更改docker run --network=net模式,直接共享宿主机的网络,然后开心的发现 -p 暴露的端口没了,服务一样的无法被访问了。

+

尝试2: 改用docker run --link=container1互相关联起来,然后可以ping了,但是发现通过端口访问container1的服务还是不行,后来发现互联和端口能访问是两个东西。。。然后灵光一闪,把container1别名设置成localhost然后就能访问了。。。

+

正确做法: 使用docker-compose进行编排啊,想暴露什么端口暴露什么端口,哦豁,这下要提前看docker的东西了。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2022/05/29/install/linux-QA/index.html b/2022/05/29/install/linux-QA/index.html new file mode 100644 index 0000000..ee0bcb0 --- /dev/null +++ b/2022/05/29/install/linux-QA/index.html @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +use linux Q&A | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ use linux Q&A +

+ + +
+ + + + +
+ +

install

connect

局域网ssh延迟非常严重的问题

    +
  1. 首先考虑ping该ip,如果出现丢包严重延迟正常就重启路由器,不能解决再排查;
  2. +
  3. 上诉不能解决或延迟≥100ms,考虑被ARP攻击、有人蹭网or下片、操作系统层面or物理设备问题等;
  4. +
+

setting

在ssh 终端找不到环境变量的问题

问题描述:按照教程apt-get 之后手动在添加到profile文件之后依旧Command ‘node’ not found

+
    +
  1. 注意自己当前的登录账户,我之前不是root,~/ 出来的肯定就只能自己享受了

    +
  2. +
  3. 具体那个配置文件不要改错了, 教材上面都是默认root账户来教你,我当时登录上去根本没有这个文件(因为以前没用root搞过

    +
  4. +
  5. 教程上面的版本可能不一样,直接复制添加到文件里面可能因为版本不同所以文件名不同,导致添加失败

    +
  6. +
+

各个配置文件区别如下:

+
+

/.bashrc和 ~/.bash_profile, \/.profile 用于各个用户,这里的~符号就是各当前用户的$HOME

+
+
+

~/.bash_profile 和 ~/.profile 只在登陆时读取一次。

+
+
+

~/.bashrc 每次都读取

+
+

usage

ssh ubuntu 无法使用root账户登陆问题

改ssh本身的配置文件
sshd服务的配置文件默认在/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。

+

配置文件的内容可以分为以下三个部分:

+
    +
  1. 常见SSH服务器监听的选项如下:
  2. +
+

Port 22 //监听的端口为22

+

Protocol 2 //使用SSH V2协议

+

ListenAdderss 0.0.0.0 //监听的地址为所有地址

+

UseDNS no //禁止DNS反向解析

+
    +
  1. 常见用户登录控制选项如下:
  2. +
+

PermitRootLogin no //禁止root用户登录

+

PermitEmptyPasswords no //禁止空密码用户登录

+

LoginGraceTime 2m //登录验证时间为2分钟

+

MaxAuthTries 6 //最大重试次数为6

+

AllowUsers user //只允许user用户登录,与DenyUsers选项相反

+
    +
  1. 常见登录验证方式如下:
  2. +
+

PasswordAuthentication yes //启用密码验证

+

PubkeyAuthentication yes //启用秘钥验证

+

AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2022/05/29/install/mysql-QA/index.html b/2022/05/29/install/mysql-QA/index.html new file mode 100644 index 0000000..592659d --- /dev/null +++ b/2022/05/29/install/mysql-QA/index.html @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +use MySQL Q&A | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ use MySQL Q&A +

+ + +
+ + + + +
+ +

install

connect

setting

usage

MySQL clinet局域网访问 mysqld

    +
  1. (使用docker启动)这个没啥说的,直接docker run 一把过,唯一注意的就是如果宿主机上在已经启动过mysqld了,那么docker run -p的端口号就要换一个了;ps: 密码是通过docker run -e MYSQL_ROOT_PASSWORD=’pwd’启动的时候传环境变量设置的;
  2. +
  3. (我就是要练习自己搭建,咋说):按照教程里面进入>mysql,也创建用户update user set user.Host=’%’ where user.User=’root’; 本机连接是没有问题的,但是另一台机器client局域网登录的时候就报61 “Connection refused”;
  4. +
  5. 之前在公司里面都是叫网管然后秒解决,现在要自力更生了。
  6. +
  7. 首先再另一台机器client里面乱输入一个ip地址,报错为”Unknown MySQL server host”,不同于之前的被拒绝连接,说明当前host是ok,使用netstat -apn | grep 3306,看到tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1016/mysqld 绑定到127.0.0.1,也就是回环了;
  8. +
  9. 目前既然知道是由于网络没有走通,那肯定就是配置的问题了,我找到mysql的配置文件,其中关于当前mysql用的是哪个配置文件里面有很多种说法,我不愿意深究,改成功的是/etc/mysql/mysql.conf.d/mysqld.cnf里边的bind-address;
  10. +
  11. 之后连接提示为1698 - Access denied for user ‘root‘@’IP’,说明现在的问题是密码设置的问题,大概要做的就是在启动的时候或者配置文件里面弄好连接密码,到时候client连接对口供就ok,我这边用在局域网又只玩就直接空密码了,反正以后也不会去没有网管的公司。 ps: 实际的默认密码在配置文件 /etc/mysql/debian.cnf 里面。
  12. +
+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2022/05/29/language/service-get-json&file/index.html b/2022/05/29/language/service-get-json&file/index.html new file mode 100644 index 0000000..a4b8c0b --- /dev/null +++ b/2022/05/29/language/service-get-json&file/index.html @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Web Service同时json字符串和文件,编码该如何设置 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ Web Service同时json字符串和文件,编码该如何设置 +

+ + +
+ + + + +

需求

现在有一个Web Service的api,请求的时候有json字符串、文件,或者两者都有,应该怎样设置接口协议。(以Flask为例)

+

背景

在 HTTP 协议消息头中,使用 Content-Type 来表示请求和响应中的媒体类型信息。

+ + +

Content-Type: application/json;charset:utf-8;

+
+

JSON 是一种轻量级的数据格式,以 “键 - 值” 对的方式组织的数据。这个使用这个类型,需要参数本身就是 json 格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端 / 客户端会按 json 格式解析数据(约定好的情况下)。

+
+

Content-Type: multipart/form-data

+
+

这是一个多部分多媒体类型。首先生成了一个 boundary 用于分割不同的字段,在请求实体里每个参数以 ——boundary 开始,然后是附加信息和参数名,然后是空行,最后是参数内容。多个参数将会有多个 boundary 块。如果参数是文件会有特别的文件域。最后以 ——boundary–为结束标识。multipart/form-data 支持文件上传的格式,一般需要上传文件的表单则用该类型。

+
+

请求参数构造

此处以python的Web api框架 flask与HTTP 请求库requests进行演示,其他框架、语言的构造解析均可参照下表中的Content-Type

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
请求类型Content-Typerequests.post参数flask.request取值对象flask.request取值结果备注
参数application/jsonjson=datarequest.get_json(), request.json均有,dictContent-Type自动: application/json
文件multipart/form-data; boundary=files=filesrequest.files有,ImmutableMultiDict解释*1
参数application/x-www-form-urlencodeddata={‘json’: data}request.form有,ImmutableMultiDict按照表单编码
参数 文件multipart/form-data; boundary=data={‘json’: data}, files=filesrequest.form,request.files有,分开取混合编码,抓包信息见解释*2
+
+

解释*:

+
    +
  1. 使用requests构造HTTP请求的话,**不要显示的设置headers={‘Content-Type’: ‘multipart/form-data’}**,因为不能给定boundary具体的值,接口解析会失败
  2. +
  3. 请求体body中同时有json字符串和文件的抓包,raw格式(原始格式)的结构类似如下,可以看到键值对是按照表单编码,文件是按照二进制格式编码之后,再组成键值对进行表单编码
    raw格式的请求体
    更加直观的webForms格式查看该请求的结构如下webForms格式的请求体
    如果使用其他语言或者HTTP请求请求库,请自行按照上述方法进行请求的构造
  4. +
+
+

原因剖析

先进的HTTP请求库如requests在构造请求的时候会根据post的不同参数自行构造Content-Type,因此平时根本没有注意;
在写业务时遇到该问题,也没能沉下心好好试验一下,总想网上找篇文章一抄了之解决问题。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git "a/2022/05/29/leetcode/1st_hard\344\270\255\344\275\215\346\225\260/index.html" "b/2022/05/29/leetcode/1st_hard\344\270\255\344\275\215\346\225\260/index.html" new file mode 100644 index 0000000..2b89510 --- /dev/null +++ "b/2022/05/29/leetcode/1st_hard\344\270\255\344\275\215\346\225\260/index.html" @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +hard 4. Median of Two Sorted Arrays -- 第一道Hard,做了5年。 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ hard 4. Median of Two Sorted Arrays -- 第一道Hard,做了5年。 +

+ + +
+ + + + +

背景

我最重要的一道题,第一次遇到看题解也无法理解的题,想起了以前高中去竞赛划水的日子,想起了在大学划水地没有去竞赛的日子。

+

第一次看到这个题的时候,我还不知道做工程分前端和后端,我还可能只有170斤,我还看着Java代码觉得太丑陋看不懂;

+

后来小付快速的把这题理解并做出来了,我还是没有足够的行动力,后来就开始了一系列的迷茫的日子;

+

这么多年过去了,只有山东大哥的红轴Cherry键盘一直陪着我,他拿这键盘打Dota,考研;我拿这把键盘打Lol,假装考研;又在磨子桥的电脑城被我的老乡阵修理+魔改;然后在成都摸鱼,在深圳打字。

+

有很多变化了,又有很多没有变,不过看样子我的行动力确实螺旋上升了。

+ +

题干

https://leetcode.com/problems/median-of-two-sorted-arrays/

+

There are two sorted arrays nums1 and nums2 of size m and n respectively.

+

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

+

You may assume nums1 and nums2 cannot be both empty.

+

Example 1:

+

nums1 = [1, 3]
nums2 = [2]

+

The median is 2.0
Example 2:

+

nums1 = [1, 2]
nums2 = [3, 4]

+

The median is (2 + 3)/2 = 2.5

+

思路

保底算法

先排序再找中位数,由于python的sort()使用的是快排,所以o(n)=log(n),不过揣摩出题人意图,肯定不是想考察这个知识点。

+

分析类型

分析之后不难得出,本题的目的是找出2个有规律的数组中的一个有特征的值,稍微思考之后能够得出可以用分治法;

+

原因为: 中位数实际上只与整个数组中位置最中间的两个数有关系,因此2个数组的共同中位数也只会与最多2数组中各取2个数(共计4个数)有关系,而其他部分都可以剪枝。

+

分治法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from typing import List
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
nums1_small = nums2_small = 0
nums1_big = len(nums1) - 1
nums2_big = len(nums2) - 1

while nums1_big - nums1_small + nums2_big - nums2_small > 2:
break # TODO 一头一尾一个个删除

# 只剩下其中一个列表
if nums1_small > nums1_big:
return (nums2[nums2_small] + nums2[nums2_big]) / 2
if nums2_small > nums2_big:
return (nums1[nums1_small] + nums1[nums1_big]) / 2

return (max(nums1[nums1_small], nums2[nums2_small]) + min(nums1[nums1_big], nums2[nums2_big])) / 2

+

有了上述思路之后不难写出最初版本的伪代码:既找出分治原子,然后不断缩小问题规模;
体现在本题中就是:每次判断2数组两端4个数字,淘汰掉其中最大和最小的2数;然后当其中一个数组无法再淘汰数时

+

分治原子有问题

跑了几个用例之后发现不正确,因为按照上述算法只有把其中一个数组中的数全部淘汰完了才是分治原子,这是不符合中位数定义的,因为每一个数组的最中间的2个数都是有成为“共同中位数”的可能的,因此分治原子条件应当是任意一个数字的长度小于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
from typing import List
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
def get_mid(nums):
if not nums:
return 0
else:
len_nums = len(nums)
left = (len_nums - 1) // 2
right = len_nums // 2
return (nums[left] + nums[right]) / 2

len1 = len(nums1)
len2 = len(nums2)
while len1 > 2 and len2 > 2:
pass # TODO 一头一尾一个个删除
if len1 == 0:
return get_mid(nums2)
if len2 == 0:
return get_mid(nums1)

# TODO 解决其他分治原子问题

return get_mid(nums1)
+

中间其实经过了长达一个星期的思考和尝试,在这里意义不大就不展开了,毕竟距离我第一次看这个题已经过去5年;

+

主要解决以下问题:

+
    +
  1. 摒弃中学时代的“下标处理数组模式”,都做了这么多年工程了,还是要明白可读性是远比”性能“重要的,且最后的时间表也看得出来并没有多少损耗;
  2. +
  3. 优先处理特殊情况,这个从OJ到工程都是很重要的,这个都忘了那就没啥可说的了;
  4. +
  5. 分治原子找错了,当其中任意一个数组只剩小于2个数的时候就可以结束分治进入决赛圈了;
  6. +
+

分治原子的优化 & O(n)的思辨

在本来的做法中,进入决赛圈后,我是拿其中小的那个数组中剩下的数去和大的数字的两边,中间各个数字进行比较;

+

为此还总结了3种情况: 包含在大的中,分离在大的外,与大的交叉,然后又根据这三种情况进一步的分类,试图找出通用的比较规则;

+

实际上非常的蠢,是属于自己给自己找麻烦,且实际上的刷题过程中,经常由于这种case过多的情况进行放弃。

+

在连续想了一个星期之后,突然发现,对于分治原子来说,最后这一步使用的方法是不会影响到整体的时间复杂度的,且做了这么多年工程,熟练使用轮子的意义远大于反复的抠这几个下标,于是果断使用先合并、排序再找中位数的方法;

+

且由于最后决赛圈的中位数说白了还是在小于4个数之间出现,因此这一步O(n)=1;

+

实际上很多时候思维是会被自己局限的。

+
1
2
3
4
5
# TODO 解决其他分治原子问题 code
nums1.extend(nums2)
nums1.sort()

return get_mid(nums1)
+ +

分治策略的优化

跑几个case之后就会发现,实际上对一个数组来说,除了“中间”一点的位置可能产生中位数,其他部位其实都是炮灰;

+

再发现数组边上其实很多时候都是在重复淘汰同一边的数,在继续观察之后发现规律:

+

先比较两个数组的中位数,同时将2个数组平均分成两份,考虑一下,中位数只可能诞生在两个数组相对“中间”的位置,因此一次性淘汰掉2个数组的两边的部分;

+

最后再注意一下边界取值等,代码如下

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# TODO 一头一尾一个个删除
len1 = len(nums1)
len2 = len(nums2)
while len1 > 2 and len2 > 2:
if len(nums1) == 1 or len(nums2) == 1:
break

mid_1 = get_mid(nums1)
mid_2 = get_mid(nums2)
if mid_1 == mid_2:
return mid_1
elif mid_1 < mid_2: # 砍掉nums1小的和nums2大的部分
cut = min((len(nums1) - 1) // 2, (len(nums2) - 1) // 2)
nums1 = nums1[cut:]
nums2 = nums2[:len2 - cut]
else: # 砍掉nums1大的和nums2小的部分
cut = min((len(nums2) - 1) // 2, (len(nums1) - 1) // 2)
nums1 = nums1[:len1 - cut]
nums2 = nums2[cut:]
len1 = len(nums1)
len2 = len(nums2)

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git "a/2022/05/29/leetcode/yield\344\270\216\344\272\214\345\217\211\346\240\221\351\201\215\345\216\206/index.html" "b/2022/05/29/leetcode/yield\344\270\216\344\272\214\345\217\211\346\240\221\351\201\215\345\216\206/index.html" new file mode 100644 index 0000000..102135a --- /dev/null +++ "b/2022/05/29/leetcode/yield\344\270\216\344\272\214\345\217\211\346\240\221\351\201\215\345\216\206/index.html" @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +从二叉树遍历到yield | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ 从二叉树遍历到yield +

+ + +
+ + + + +

yield的作用

首先yield就是return,不要想多了,所以搭配yield from func()能够递归,就是这么简单;

+

只是说普通的函数返回的是一个value或者obj,而yield返回的是一个生成器对象。

+

生成器的定义&同迭代器的区别

在python中实现了__iter__和__next__方法,可以迭代操作的对象就叫迭代器;
构建迭代器的时候,并不一次性加载所有元素到内存,只有调用next方法的时候才会返回需要的该元素;

+ + +

生成器就是一种迭代器,由生成器函数返回;
生成器函数就是上文中的 return -> yield的函数;

+

用法

学以致用,看文档的时候自然说:都懂,都懂,结果自己不仅写不来还看不懂。
尤其是再遇到几个yield并排就不会了?

+

当一个生成器函数中多个yield并排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys

def func(): # 普通函数
return 1
return 2
return 3

def gen(): # 生成器函数
yield 1
yield 2
yield 3

# 遍历一个生成器
it = gen()
while True:
try:
print(next(it))
except StopIteration:
sys.exit()
+

要遍历一个生成器,自然需要调用next方法到报错为止,实际上行为和遍历序列的时候下标越界同理,只是现代编译器做好了没意识到而已。

+
+

普通函数func调用:
print(func()) # 1
print(func()) # 1

+
+
+

生成器函数调用:
it = gen(); # 获得一个生成器
print(next(it)) # 1
print(next(it)) # 2

+
+

为啥要用生成器

从上文中可以看到生成器函数一个巨大的优势就是函数写出来是分块的,可以直接剪掉很多的选择分支,让代码更加的整洁接近算法描述。
尤其是当需要递归的时候,使用yield的代码写出来简直就像是伪代码,曾一度让我无法理解其中的逻辑分支和递归基是如何运行的。

+

比如使用普通函数实现中序遍历一个BST的伪代码如下

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
global_res = []

class TreeNode(object): # 定义一个二叉树
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

def in_order_visit(node: TreeNode):
if node is None: # 递归基
return None
in_order_visit(node.left)
global_res.append(node.value)
in_order_visit(node.right)

in_order_visit(root) # root为需要遍历的BST的根节点
print(global_res)
+

递归参数只能是对象本身,遍历出来的值无法收集

可以明显的看得出来,遍历函数本身在递归的过程中参数只能是node or None,同时node = None作为递归基
那么问题来了,我遍历出来的值如何返回给上层呢?
我当时的函数设计的无比复杂,进入函数的时候先进行一个逻辑判断,再选择进入node.left还是返回node.value,因此一个函数就可能接受2种数据结构
再根据自己的下面的调用结果判断是该继续往下递归还是往上return。

+

需要的值放到递归参数中会导致逻辑十分混乱

代码无比丑陋,逻辑无比复杂。
不得已,只得引入全局变量(不引入也可以,可以让遍历函数返回一个元组(node, node.value: list[int]),但本质没变,就是把列表当成指针来用,还是全局,这不pythonic)
让遍历函数只专心访问node,我用一个全局变量来储存访问结果(也就是网上教材都只让你print出来的操作)
问题是全局变量应该少用,这是破坏结构性的,不管是封装成对象还是闭包还是什么玩意儿;
或者不用递归,用循环 + 堆栈来访问这个树,这与本文无关。

+

必须将所有节点全部访问到内存

迭代器可以每次调回的时候再到下一个节点,在有些情况(比如求前n个数),就不用像普通函数这样需要先遍历(排序)整个树,然后再截取需求的部分。

+

试图yield实现递归

使用生成器函数遍历一个BST的代码如下

+
1
2
3
4
5
6
7
8
9
def in_order_visit_gen(node: TreeNode):
if node is None:
return None
yield visit_bst(node.left)
yield node.val
yield visit_bst(node.right)

it = visit_bst(root_node)
print(next(it))
+

结果非常意外<generator object visit_bst at 'addr in mem'>
为什么呢?
其实很简单,因为yield是懒狗,它只会返回一个it(迭代器/生成器),还记得之前的“生成器函数调用”的方法么。
每次需要先调用生成器函数,得到一个it,相当于把无产阶级请过来了it = gen()
然后在调用这个迭代器,才能调用,相当于任务分配下去了print(it)

+

因此如果yeild接自己想递归的话,第一次下去的时候,就会直接返回一个visit_bst(node.left),还记得吗,这是一个生成器函数,现在调用它自然只会得到一个迭代器,还需要在外面像“遍历一个生成器”一样不断地用next去调用才能启动。

+

yield from = return -> 递归

python好就好在他有足够多的语法糖,在本文中只要粗暴的记得以下等价关系就行
yield obj = yield from func() = return obj/func() # 递归过程
相当于yield from就是先调用这个func得到一个it,然后马上就调用这个it一次,因此就得到了递归;

+
1
2
3
4
5
6
7
8
9
def in_order_visit_gen(node: TreeNode):
if node is None:
return None
yield from visit_bst(node.left)
yield node.val
yield from visit_bst(node.right)

it = visit_bst(root_node)
print(next(it))
+ +

并排yield -> 递归表达式

TODO 有空再写吧。

+
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2023/05/16/devops/K8s-App-Setup/index.html b/2023/05/16/devops/K8s-App-Setup/index.html new file mode 100644 index 0000000..6e35829 --- /dev/null +++ b/2023/05/16/devops/K8s-App-Setup/index.html @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +K8s App Setup | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ K8s App Setup +

+ + +
+ + + + +

依赖

可用的外部可访问的k8s集群

+

部署并访问 Bookinfo

开启网关

在依赖中我们开启了集群网关,提供了外部访问KubeSphere整个集群的入口。

+ + + + +

因为如果同时存在集群网关和项目网关,项目网关禁用后无法再次启用。建议仅使用集群网关或仅使用项目网关。

+ + +

由于开启了集群网关,发现创建出项目之后已经自动绑定到集群网关上,因此不做额外设置。

+

创建 DevOps 项目

(步骤 5:创建 DevOps 项目)[https://www.kubesphere.io/zh/docs/v3.3/quick-start/create-workspace-and-project/]

+

是时候体验一下全家桶DevOps的区别了。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2023/05/19/language/go-setup/index.html b/2023/05/19/language/go-setup/index.html new file mode 100644 index 0000000..de537a3 --- /dev/null +++ b/2023/05/19/language/go-setup/index.html @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +初学 Goland | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ 初学 Goland +

+ + +
+ + + + +

背景

早在成都公司,就听闻 Go 大名, 当时业务后台正在从 Java 逐步重写过来,当时还经常在技术周会上听到大家的分享学习心得。
当时的领导说的,不要觉得自己学的时候有多聪明而洋洋得意,是因为 Go 的设计者足够优秀,才让这个语言如此容易上手。

+

学习路线

官方文档看一遍
https://go.dev/learn/#

+

example 看一遍
https://go.dev/tour/welcome/1

+

目标

写一个 restful 的 api,实现前端传入 cmd 后端执行。(比如 pwd, ls 那种)

+ + +

包管理

看到 go 的包是直接放在代码托管平台,而不是传统的包管理系统(如 Python 的 PyPI), 很有意思,问了 chatGPT,主要原因就是灵活和间接。

+

Coding

goland + vscode

+

安装 vscode, goland, plugin ect

+

安装 Delve 调试器

为了能在 vscode 中轻松愉快地 run and debug go, 需要安装调试器先。

+

go install github.com/go-delve/delve/cmd/dlv@latest

+

装不上请咨询 chatGPT

+

Build Error: go build -o …

1
2
3
4
Starting: /Users/admin/go/bin/dlv dap --listen=127.0.0.1:49829 --log-dest=3 from /Users/admin/code/go_test
DAP server listening at: 127.0.0.1:49829
Build Error: go build -o /Users/admin/code/go_test/__debug_bin1492456118 -gcflags all=-N -l .
go: go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)
+ +

可以,果然一开始启动就有问题,在见多识广的 chatGPT 分析下,都不用手动挡查资料了。

+

Rosetta 笑死了, m2 不兼容

我明明用的 brew 装的,就离谱,不过我还有 Linux 机器,重新装一下环境吧。

+
1
Failed to launch: could not launch process: can not run under Rosetta, check that the installed build of Go is right for your CPU architecture
+ +

成果

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
package main

import (
"fmt"
"log"
"net/http"
"os/exec"
)

func cmdHandler(w http.ResponseWriter, r *http.Request) {
// 获取请求中的命令参数
command := r.URL.Query().Get("cmdString")
if command == "" {
http.Error(w, "Missing cmdString parameter", http.StatusBadRequest)
return
}

// 执行命令
out, err := exec.Command(command).Output()
if err != nil {
http.Error(w, fmt.Sprintf("Error executing command: %s", err), http.StatusInternalServerError)
return
}

// 输出命令结果
w.Write(out)
}

func main() {
http.HandleFunc("/cmd", cmdHandler)
fmt.Println("Starting server on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
+ +

请求

http://localhost:8080/cmd?cmdString=ls
返回
go.mod
main.go

+

http://localhost:8080/cmd?cmdString=pwd
返回
/Users/admin/Code/go_test

+

http://localhost:8080/cmd?cmdString=ls%20-la
返回
Error executing command: exec: “ls -la”: executable file not found in $PATH
(哈哈,没想到吧,我也没想到)

+

解析

最后想了一下,不部署前端了,直接拿 url 中的 query 执行得了。

+
    +
  • 用了标准库 net/http ,这个看起来应该类似 Python 中的 http.server (我从来没有用过这个),通过 ListenAndServe 监听端口, HandleFunc 注册路径, 最后的 nil 是 go 的传统艺能 零值;

    +
  • +
  • cmdHandler 函数中,通过 r.URL.Query().Get() 去拿请求 url 中的参数;

    +
  • +
  • 通过 exec 函数去执行 cmdString

    +

    改成 gin

    整个现代一点的框架
    go get -u github.com/gin-gonic/gin

    +
  • +
+
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
package main

import (
"fmt"
"github.com/gin-gonic/gin"
"os/exec"
)

var allowedCommands = map[string]bool{
"ls": true,
"date": true,
}

func main() {
r := gin.Default()

r.GET("/cmd", func(c *gin.Context) {
command := c.Query("cmd")
if command == "" {
c.JSON(400, gin.H{"error": "Missing cmd parameter"})
return
}

if !allowedCommands[command] {
c.JSON(403, gin.H{"error": "Command not allowed"})
return
}

out, err := exec.Command(command).Output()
if err != nil {
c.JSON(500, gin.H{"error": fmt.Sprintf("Error executing command: %s", err)})
return
}

c.String(200, string(out))
})

r.Run(":8080") // 启动服务器并监听在 8080 端口
}
+ +

可以看得出来,格式上和 Python 的 Flask 基本上没啥区别了。

+

结语

至此,用来写业务的 go 算是勉强上手了,可以看得出来设计得非常简约。
但是更多的特性,比如 毕业之后就再没用过 指针GoroutinesChannels,还有 和 JS 一样没用类,所以设计 embedding 的用法,如果有这个计划,前面的区域,以后再来探索吧!

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/05/18/career/sum-up-2024/index.html b/2024/05/18/career/sum-up-2024/index.html new file mode 100644 index 0000000..a1a414d --- /dev/null +++ b/2024/05/18/career/sum-up-2024/index.html @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +在工作6年之际总结业务与技能点 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ 在工作6年之际总结业务与技能点 +

+ + +
+ + + + +

再也不是毕业在即两眼一黑,更不是初入职场惶恐不安的状态了。
不知不觉已经6年工作六年,在3年的时候拍了第一个 vlog ,那个时候说三年应该跨过新手期,深耕一个领域,现在看来没有辜负当时的期待。
迄今,我的职业生涯从成都小公司做 python 后端 + 爬虫,经过深圳上海做 效能 / DevOps,现在定居上海,基本快完成从小就“想进入世界一流公司的梦想”了。

+ +

迷茫的学生时代

中学就在开始参加竞赛,但基于我懒散随性的性格,也没搞出什么名堂,当时某个拿满分的队友,毕业就进入当时还没有那么出名的字节跳动(当时好像还叫头条),我却连自己能不能进入这个行业都在怀疑。

+

大学的时候曾有机会跟着老师做地质相关的图形图像处理,最后也只夸夸其谈没有坚持下来。
临近毕业还去面试完美世界的客服,回过头来还是觉得当时太浮躁了。

+

惶恐的初入职场

没有参与校招,前三份工作都是成都的(符合对西南柬埔寨刻板印象的)小公司,可以说我的起点很低了。
符合城情的试用期不买社保,根本不存在的职业规划和晋升途径。在我多次痛苦挣扎之后均都在差不多第3个月的时候跑路,导致我当时的简历乱七八糟,向未来能看到的只有迷雾。

+

摸索中学到了:
1st : python 后端开发, 团队职业分工,调用别人 api;
2nd : 网页模拟点击操作, 爬虫, 开放 api, 封装代码, 数据展示相关的 dashboard;
3st : 权责分明, 破除名校光环, 职场自保, 对梦想的方向坚定不移;

+

辗转的适应社会

挣扎过后觉得日子不能这样过下去了。几经波折找到成都一家正规的做机票代理的公司。

+

成都公司: docker 打包, restful api, 微服务,多线程,重构代码。

+

再后来就是疫情来了被裁,发现成都根本找不到工作,然后接到了深圳一家上市公司的 offer ,现在无时不刻不在觉得这是一个影响深远的决定。

+

到了深圳公司。
一开始业务是在测试开发相关,是让我解决 过量膨胀的 testcase 的问题,加上探索新一代的 testcase runner(基于 nlp, cv, or ?),以及作为甲方私有化地部署购买的服务;
随着业务的发展,进而为开始搭建 客户端app 流水线,维护物理agent机器,以及串起来 CI 相关的各种组建,再加上 CD 相关的服务;

+

深圳公司: Jenkins, php, vue, cicd。

+

一个机缘巧合下来上海了,又是一个全新的领域,虽然岗位还是叫 DevOps,但是按照某些公司的定位应该是 SRE,即我认为的“线上稳定性保证”。

+

上海公司:kubernetes, 云服务商,continuous development, 发版平台。

+

成熟且明确的规划

也是一个缘分,被上家公司裁员之后,本来拿出了半年准备面试,结果没几天接到的第三个 offer 就感觉挺合适的,就直接去了,社保都无缝衔接。

+

背景相当于本来有一个团队负责类似 客户端 / 大前端 cicd 这种业务线,然后整个团队都没了。
于是在开始的半年我就用了近乎全部的精力去当客服,少的时候几十个,多的时候同时面对上百个人的同步咨询。
还能用的服务,把文档和使用文档整理出来;不能用的服务,排期进行恢复。
那段时间压力非常大,总会有几个人同步的消息请求过来,不管是去处理谁的事情了,总有人没法得到相应。经常凌晨四五点就醒了睡不着,主要是人只有一个,要做的事情却太杂了。

+

现在很多同事经常都和我打趣说不知道我当时是怎么扛下来的,以及当时终于盼来我之后,经常看我状态是否是 (已跑路)。
当时下至一线同事,上至HRBP看到我来了都笑嘻嘻地表示终于有人填坑。
很多业务开发同事开始报复性提需求,也经常把我当客服发泄自己搞不定又根本不该我管的来分散我的精力。
多亏了当时的领导,帮我挡下了很多不合理的需求,以及授权我在文档详实的情况下拒绝同事期待的手把手帮教写代码的无理需求。

+

接下来做了一次组织架构调整,也招到了人,终于才能有时间看看 《深入理解计算机系统》;
点一下从成都正规公司就早有耳闻的 Goland 技能点。

+

我现在也算有了相对清晰的职业规划。
首先我真的是一个不挑业务的人,不知道为什么总有人听到我说这个的时候会感到诧异,工作这么多年,哪次不是收拾行囊进入新的业务领域,不都是软件开发工程么,有的只是业务上的区别。
其次大方向是 内部平台(或者说所谓的中台),不管是所谓的发版平台,效能 统计 / 展示 / 运维 / 自动化平台,或者说 all in one 的 CICD 流水线平台开发;
亦或者 云上 SRE k8s 这一套。
这些都是我多年的业务经验领域,比较熟悉了,出现新的工具上手也很快。
当然如果让我回去做测开也是一样的,因为我始终觉得 测试,或者说质量保证是 效能 / DevOps 很重要的一环。
最后我是真的不挑业务,有机会做什么大数据,AI相关开发当然更好。

+

随着 Copilot / ChatGPT 的普及,技术上手门槛只会越来越低,像刚毕业那会儿学个新东西还是翻文档,再在耐不住的时候狂看相关视频,痛苦地搞个个把月,但现在直接就可以上手业务代码,一边翻译一边询问,哪怕是从来没有用过的语言,在见多识广的 AI 帮助下,直接先写项目。
等积累了一定经验,再回头系统的找资料学习,先不说提升的效率,基本上都不再会有以前那种需要摸索找切入点,然后痛苦的在繁杂而陌生的知识图谱中打转的学习状态了。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/10/11/devops/Helm/index.html b/2024/10/11/devops/Helm/index.html new file mode 100644 index 0000000..0028ab0 --- /dev/null +++ b/2024/10/11/devops/Helm/index.html @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Helm Setup & Usage | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + + +
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/10/11/devops/Kubernetes/index.html b/2024/10/11/devops/Kubernetes/index.html new file mode 100644 index 0000000..316ee2b --- /dev/null +++ b/2024/10/11/devops/Kubernetes/index.html @@ -0,0 +1,446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kubernetes Setup in Local Physical Servers | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ Kubernetes Setup in Local Physical Servers +

+ + +
+ + + + +

选择

在我自己在作为一名初学者学习编程的时候,曾看到过一位前辈在知乎日报中写道:

+

他们当年学习编程痛苦在根本找不到参考资料,只能自己硬着头皮摸索前进,不过好处是每个方向的技术选型基本上是固定的,不会有纠结;

+

而现在的初学者在一开始学习编程,就会很容易迷失在面对浩如烟海的技术路线选择中,尤其是热门的方向,总有前人做好了各种版本的教程、工具,完全不知道从哪里开始。

+

在我一开始学习DevOps的时候背过官方推荐的minikube教程, 到后来也尝试过搭建轻量化的k3s环境,算上业务中的阿里云容器服务Kubernetes版(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK),最终发现“搭建环境”本身也是造轮子的一部分,对提高理解应用能力甚微。

+

因此本文选择最简单的一种方式:
在 Linux 上以 All-in-One 模式安装 KubeSphere(以下简称官方文档),直接最简化地安装,然后再在使用中进行学习,毕竟背诵任何的学习资料都不如自己动手部署一遍

+ +

声明

本文仅供学习使用,生产环境请使用云服务厂商提供的成熟的Kubernetes环境。

+

Master Node

Ubuntu 实体机 in roy-qtc6(有些时候master node的名字可能是这个),这是一台2013年刚上大学时候买的HASEE 神舟 精盾 K580S-i7D1,三千六就拿到当时平民级最强的CPU和显卡,甚至到10年后的今天不管是装Windows娱乐还是装Linux学习性能都充裕,对比一会儿提到的同龄人简直是扬我国威。

+

按照官方文档中的步骤进行安装。

+

由于kubernetes与kubesphere之间存在一个版本匹配问题,因此我这里直接使用example中推荐的版本

+
1
$ ./kk create cluster --with-kubernetes v1.22.12 --with-kubesphere v3.3.2
+

当运行上述命令时,会检查机器是否安装依赖。

+

在我这台机器上,只需要预先手动安装conntrack socat ebtables ethtool,其他组件会自动安装。

+
`$ apt-get install conntrack socat ebtables ethtool`
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesudocurlopensslebtablessocatipsetipvsadmconntrackchronydockercontainerdnfs clientceph clientglusterfs client
masteryyyyyy
+

查看log会发现 在依次安装kubelet、kubectl、helm、kubecni、crictl、etcd、docker等,在之后的教程里,会解释组件的作用。

+

经过漫长的等待之后,当console中出现Welcome hints、ip地址与默认admin账号密码, 就表示Kubenets安装完成。

+
1
❯ Welcome to KubeSphere!
+

这个时候可以登录http://ip:30880/dashboard 进行可视化操作。

+

以上安装过程基本上是一键安装,在物理机器与Ubuntu系统没有太大问题的情况下,一小时之内能完成。

+

如果要安装官方的Kubernetes Dashboard的话,还需要手动安装、并配置外部访问与账号,这些额外的概念无疑会在一开始极大的增加初学者的负担。

+

而这些步骤/组件 KubeSphere全家桶全都集成了,让开发者将更多的经历集中在理解与应用k8s核心组件与部署业务代码上。

+

接下来可以跟着官方文档应用学习其中组件了。

+

Troubleshooting

[WARNING FileExisting-ethtool]: ethtool not found in system path

1
$ apt-get install ebtables ethtool
+

这两个依赖是必须的,但是官方文档中没有列出来。

+

kubectl Please wait for the installation to complete

安装的一直卡在这个命令,推测可能是kube-system中的k8s自己的pod没有就绪,另外启动一个shell查询pod状况;

+
1
2
3
4
5
❯ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
...
kube-system openebs-localpv-provisioner-57bbf864d5-zhl6k 0/1 Pending 0 26m
kubesphere-system ks-installer-85d6fb8c97-mns4d 0/1 Pending 0 26m
+ +

查看其中一个pod的Events

+
1
2
3
4
5
6
7
❯ kubectl describe pod openebs-localpv-provisioner-57bbf864d5-zhl6k -n kube-system
Name: openebs-localpv-provisioner-57bbf864d5-zhl6k
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 97s (x35 over 36m) default-scheduler 0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
+

发现openebs-localpv-provisioner与ks-installer的STATUS均是Pending,通过Events里面的描述,发现是因为有taints所以pod调度不上去。

+

查看node的taints

+
1
2
3
4
5
6
7
8
9
10
11
12
13
❯ kubectl get nodes -o json | jq '.items[].spec'
{
"taints": [
{
"effect": "NoSchedule",
"key": "node-role.kubernetes.io/master"
},
{
"effect": "NoSchedule",
"key": "node.kubernetes.io/not-ready"
}
]
}
+

means that no pod can be scheduled on the master node unless it has a toleration for this taint123, 意思就是说不能在master节点上的和not-ready的pod不允许调度到我这个节点上。

+

The OpenEBS Local PV provisioner is designed to run on worker nodes and not on master nodes1. If you want to deploy the OpenEBS Local PV provisioner on a master node, you can do so by adding the label openebs.io/engine=provisioner to the master node2. However, it is not recommended to run the provisioner on master nodes as it can cause issues with the Kubernetes control plane

+

污点(Taint)是 Kubernetes 中的一个概念,它是一种标记,用于标识节点上的一些特殊条件,例如节点上的硬件故障或其他不可用性。 污点可以阻止 Pod 调度到具有特定污点的节点上。 有关更多信息,请参见官方文档

+

Taints and Tolerations 是一起组合使用的,相当于“黑名单”机制,前者配置在nodes上,只能配置过后者的pod;

+
简单但是不推荐的做法: 将taints删除
+
+
+

:warning: 不如直接用minikube单节点部署: 这里的意思是这个pod不能调度在master节点上,如果删了这个污点,相当于是强行调度在master上了。

+
+

执行kubectl taint nodes --all node-role.kubernetes.io/master-, 这个命令是在将所有节点的node-role.kubernetes.io/master 污点删除,以便可以在这些节点上调度非 master Pod。

+

然后发现唯一node上的taint没有了(这里换一个方法查看taints)

+
1
2
❯ kubectl describe node master | grep Taints
Taints: <none>
+ +
正规做法:先跳过这个pod的安装,参照下文先安装一个worker node并注册到cluster,然后再重复安装步骤安装。
+
+

完成安装worker node并注册到cluster后,验证查看当前nodes

+
1
2
3
4
❯ kubectl get nodes
NAME STATUS ROLES AGE VERSION
worker Ready worker 9h v1.22.12
master Ready control-plane,master 4d3h v1.22.12
+ +

当看到出现STATUS为Ready的worker时候,就可以再执行./kk create cluster --with-kubernetes v1.22.12 --with-kubesphere v3.3.2,然后经过漫长的等待即可。

+

Worker Node

Ubuntu 实体机 in roy-macbookair(有些时候worker node的名字可能是这个),这是一台2013款的具有10年历史的老机器,陪我拿到了第一家上市公司的offer,但目前已经无法正常运行macOS,因此安装Ubuntu(图形化模式略微卡顿,使用命令行模式才能流畅运行k8s)。

+

按照在 Linux 上多节点安装中的步骤进行安装。

+

将一台新准备好的Linux物理机, 作为Node(不管Worker是Master)添加到cluster只需要KubeKey + SSH 就能完成。

+

那么同样地,先安装相关地依赖
$ apt install conntrack socat ebtables ethtool

+

然后在当前目录下创建一个config-sample.yaml的文件(这一步可以在新机器的终端上完成,也可也在已有集群的任意一个物理机的终端上完成)
$ ./kk create config

+

在我这里,config-sample.yaml的内容如下,其中的ssh相关的信息需要自己填写,这里我使用的是密码登录,因此需要填写密码,如果使用的是ssh key登录,则不需要填写密码(但是需要配置ssh-key)。

+

然后按照教程中的配置文件,结合自己的node name与ip,修改配置文件,然后执行$ ./kk create cluster -f config-sample.yaml(集群未安装)/ /kk add nodes -f sample.yaml(集群已安装),等待一段时间后,集群就安装好了。

+

在经过以上操作后,可以看到我成功的创建了一个一共拥有3个Node的Cluster,就可以开始自己的kubenets操作了。

+
1
2
3
4
5
6
7
8
9
13:09:53 CST success: [roy-qtc6]
13:09:53 CST success: [roy-300]
13:09:53 CST success: [roy-macbookair]
13:09:53 CST Pipeline[AddNodesPipeline] execute successfully
❯ kubectl get nodes
NAME STATUS ROLES AGE VERSION
roy-300 Ready worker 2m41s v1.22.12
roy-macbookair Ready worker 23h v1.22.12
roy-qtc6 Ready control-plane,master 4d18h v1.22.12
+ +

安装出了问题也别急,./kk delete cluster解君愁。

+

角色、权限等配置

就像大多数成熟的管理系统一样,初始化安装之后会分配一个admin账户,然后再通过该账户创建一个业务账户,之后大多数操作都应该通过业务账户进行操作。

+

而这些概念、操作在每个云平台上略有不同,且不影响k8s的核心组件,同时又都是基本都能在Web UI进行点点点操作,所以本段略。

+

可以参考在kubesphere创建企业空间、项目、用户和平台角色

+

外部访问

在安装好Cluster之后,可以看到每个Node连接的IP地址是10开头的,这个明显是Kubernetes Cluster的IP地址, 不是外部可以访问的IP地址,因此需要一个网关来提供外部访问。

+

启动网关

网关是在项目中运行的 NGINX Ingress 控制器

+

在安装后启用服务网格

+
本段为KubeSphere的配置,其他云平台可能不同
+
+

使用定制资源定义(CRD)里面的clusterconfiguration的ks-installer进行安装,看名字就知道是KubeSphere自己的,其他云平台没有。

+

提供外部访问

设置集群网关
访问模式设置为 NodePort,选择确定之后,集群网关详情里面会出现一个和宿主机网段相同的局域网网关IP地址(在我这里是192开头的),这个是可以访问的。

+

通过使用 kubeconfig 文件配置访问集群
除了上面链接中的方法外,还可以在KubeSphere UI右下角的工具箱图标上悬停,然后在弹出菜单中选择 kubeconfig,点击右上角的下载按钮,就可以直接下载连接K8s的kubeconfig.yaml。

+

特别注意的是需要把Cluster里面的server IP替换为局域网的IP

+
1
2
3
4
apiVersion: v1
clusters:
- cluster:
server: https://10.233.0.1:443 # 替换为集群网关详情里面和宿主机网段相同的局域网网关IP地址
+ +

KubeSphere DevOps 系统

本段为KubeSphere的配置,其他云平台可能不同,步骤在[KubeSphere DevOps 系统](https://kubesphere.io/zh/docs/v3.3/pluggable-components/devops/)
+
+

KubeSphere全家桶的DevOps 系统基于 Jenkins 的 KubeSphere DevOps 系统是专为 Kubernetes 中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮助开发和运维团队用非常简单的方式构建、测试和发布应用到 Kubernetes。(得了,感觉以前的工作又是造轮子了,这叫深度业务定制开发!)

+
+

:warning: 整个集群内存最好25Gi以上: 我一开始安装的时候就遇到了各种卡住且没有提示的问题,其实就是内存不够,但是增加内存是需要硬件成本的,排查的时候花了很多的精力和时间。

+
+

Troubleshooting

在之前工作中用过实体机上的Jenkins,也用过k8s节点中的Jenkins,但从来没用过全家桶的Jenkins,因此本段就算安装不上,也完全不影响使用。

+

安装一直卡住,没有任何提示与报错

很自然去查看pod状况。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ kubectl get pod -n kubesphere-devops-system
devops-jenkins-c8b495c5-4hqwf 0/1 Pending 0 19h

❯ kubectl describe pod devops-jenkins-c8b495c5-4hqwf -n kubesphere-devops-system
...
Containers:
devops-jenkins:
...
Requests:
cpu: 2
memory: 2Gi
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 69m default-scheduler 0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/memory-pressure: }, that the pod didn't tolerate.
+

(这里有时Events里面会是空的,就只能靠其他信息推测了)

+

但是很神奇的是查看node本身并没有添加任何污点

+
1
2
❯ kubectl get nodes -o json | jq '.items[].spec.taints'
null
+

然后再仔细审视describe pod devops-jenkinspod的描述,报错是内存pressure,多半是内存不足,然后惊讶地发现需要2Gi的内存,而我的传家宝MacBook Air只剩下可怜的不到1Gi,由于这是物理资源的不足,无法弥补,要么放弃体验KubeSphere DevOps全家桶,要么只能自己在另一台物理机/node上安装jenkins。

+

一想到某人那种32Gi的电脑沉迷召唤师峡谷,就想悄悄给装一个Ubuntu上去996.

+

(2天后更新: 结果把自己的神船刷Ubuntu了,然后去给朋友搬家捡了的PC)

+

整一些内存大的电脑添加到Cluster 成为Node就好了。

+

实测发现要装KubeSphere DevOps 系统最好还是保证整个集群内存有25Gi以上的容量,否则会出现各种问题,为此时隔十多年我又玩起了虚拟机,这里只推荐正统的VMware,VirtualBox这种,否则虚拟化的大坑欢迎您。

+

Cluster Uninstall

当Cluster出现某些问题,且安装上面的排查依旧不能解决的时候,就使用重装大法,DevOps的其中一个特质就是无状态、重装方便,在应用部署上这是巨大的进步。

+

首先需要一个config-sample.yaml来配置集群的信息,比如Master / Worker Node 的IP,账户等,如果没有的话,./kk create config-sample.yaml生成一下新的。

+

然后./kk delete cluster -f config-sample.yaml

+

接着SSH到每一台Worker Node机器上,进行深度清理

+
1
2
3
4
kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove
sudo rm -rf ~/.kube
+

上面这个命令是把包都干掉了(而且实测不用重启机器就生效)

+

If you are clearing the cluster so that you can start again, then, in addition do the following to ensure my systems are in a state ready for kubeadm init again:

+
1
2
3
4
5
6
7
kubeadm reset -f
rm -rf /etc/cni /etc/kubernetes /var/lib/dockershim /var/lib/etcd /var/lib/kubelet /var/run/kubernetes ~/.kube/*
iptables -F && iptables -X
iptables -t nat -F && iptables -t nat -X
iptables -t raw -F && iptables -t raw -X
iptables -t mangle -F && iptables -t mangle -X
systemctl restart docker
+ +

这个时候就算清理干净了,最后再回到Master Node机器上,执行./kk create cluster -f config-sample.yaml,等待一段时间后,集群就重新安装好了。

+

后记

本文历时半个月,从4月13号被干掉,休息半个月,5月1号开始搭环境,经过了半个月走走停停,不断地试错,查资料,写总结,才终于在5月20号地今天完成这个学习计划的开头 ————环境搭建。

+

这一个月里,有耍到接近昏迷,也有一天4个场面试的高强度,有点回到了快毕业那会的节奏。只是再也不像当初那么无助,迷茫而又没用行动力了。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/10/11/devops/No_WSL/index.html b/2024/10/11/devops/No_WSL/index.html new file mode 100644 index 0000000..bffcd9e --- /dev/null +++ b/2024/10/11/devops/No_WSL/index.html @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +不要用WSL,否则会变得不幸 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ 不要用WSL,否则会变得不幸 +

+ + +
+ + + + +

有位前辈用“Linux本身不要钱,但是你(折腾)的时间更费钱”来形容Linux上可能遇到的适配问题,从而表达自己对该系统又爱又恨的感情。

+

而寄宿在Windows上的WSL,更是将这个说法发挥到极致。

+

在我自己从头搭建Kubernetes工具链的时候,由于家境贫寒,本想就着手上4台老旧PC搭建个基本能用的集群就行,结果在Windows里面装WSL,以及WSL里面装Kubernetes的时候,遇到太多看不到尽头的问题,遂放弃。

+

目前我的解决方案是安装Ubuntu系统到其中2台PC,至少先跑起来一个最小的主从集群。

+

而本次我本身就是为了学习才搭建环境,因此记录下遇到的WSL相关的问题,以便学有余力的时候更加透彻的掌握操作系统相关的知识。

+`` + +

WSL的适用范围

写写Python代码,搭建普通的前后端应用,WSL是非常合适的,甚至避免了在Windows上安装软件的麻烦事。

+

但是在涉及到底层的东西,比如说虚拟化、容器化、集群化等这种需要用到“网卡”之类硬件的配置的时候,WSL这类基于Hyper-v的“精简版”虚拟机就会变得缺胳膊少腿,有早年用过“番茄花园”这种精简版Windows打游戏然后缺少组件经历的朋友就能体会到我的感受。

+

最好的是物理机,其次是真正的虚拟机

这几天我一直在满是坑的泥泞中匍匐,很多问题要么是没有通用解法,要么是试下来根本不管用。

+

最后学习阶段只推荐VMware、VirtualBox这种成熟得不能再成熟的真正的虚拟机,如果不信欢迎自行尝试。

+

systemd与systemctl

systemd是一个Linux系统的初始化系统和服务管理器;

+

而systemctl是systemd的一个命令行工具,用于控制systemd系统和服务管理器。

+

systemctl可以启动、停止、重启、重载、状态检查、启用或禁用系统服务。

+

WSL2本身是由Windows负责运行的,因此使用tree或ps命令时会看到根进程不是systemd,这将导致无法启动Linux系统服务的守护进程(deamon)。当我们执行systemctl命令的时候,会显示出我们的init system (PID 1)并非systemd,而是微软提供的init system。

+

即使在/etc/wsl.conf添加systemd=true配置等操作也会有各种问题。

+

service代替systemctl

虽然有些时候能够通过service代替systemctl,但是有些时候会出现Failed to connect to bus: No such file or directory的错误。

+

比如我跑一个自动安装docker / 自动开启ssh的脚本的时候,由于源头默认提供的脚本是使用systemctl的,还是绕不开这个问题。

+

如果我去批量替换别人的脚本,又会带来新的问题。

+

WSL2无法连接网络

Windows automatically generates resolv.conf file with wrong nameserver

https://stackoverflow.com/questions/62314789/no-internet-connection-on-wsl-ubuntu-windows-subsystem-for-linux
Locate the file by running the following command:

+

sudo vim /etc/resolv.conf

+

You will see the following in the file:

+

This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/resolv.conf

1
2
3
# [network]
# generateResolvConf = false
nameserver xxx.xx.xx
+

Change the nameserver value to 8.8.8.8 and save the file. You should now be able to connect to the internet.

+

winsock

https://github.com/microsoft/WSL/issues/3438#issuecomment-41051857
Open Command Prompt as an Administrator and type these commands:

+
1
2
3
4
5
netsh winsock reset 
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
Reboot your machine.
+ +

完成之后一定重启WSL,否则修改不生效。

+

SSH

WSL2可以直接用Windows的命令行直接进入,也可以通过VSCode的WSL插件直接本地连接WSL;

+

无法Set Bridge Network

在正统的虚拟机配置设置Bridge Network都是点一键就能拿完成的工作,我无法在WSL上完成,虽然各种教程都说在Windows上的Hyper-v管理器上设置一下就好了,但是如果真的是这样的话,就不会有这篇文章了。

+

kex_exchange_identification: Connection closed by remote host

在WSL2中开启sshd服务之后,连接自己机器上的WSL2只需要通过ssh localhost就可以;

+

连接局域网中另一个PC物理机上的WSL2就会出现标题标错,还有更离谱的timeout,我尝试过很多,就没成功过(多半是因为上面Set Bridge Network没成功导致的)。

+

Transport endpoint is not connected

导致这个问题的原因太多了,不断重启LxssManager服务可能会暂时可用一下,我就是被这个问题搞得彻底放弃的。

+

LxssManager是Windows 10中的一个服务,它支持运行本机ELF二进制文件。该服务提供在Windows上运行ELF二进制文件所需的基础结构。WSL是Windows Subsystem for Linux的缩写,它是一个允许在Windows 10上运行Linux二进制文件的兼容层。LxssManager是WSL的一部分,它负责管理WSL的Linux发行版。

+

swap

首先部署Kubernetes的机器不能开启swap,因为在写入虚拟内存的时候会影响性能和造成系统卡顿;

+

于是在实体机上只需要sudo swapoff -a简单一步的操作,在WSL上死活不起作用,推测是WSL的swap是由Windows上的某个专门负责虚拟化的服务进行配置的,然后由于问题太过偏门,尝试了之后没有找到轻松有效的方法。

+

Ubuntu 桥接接入局域网固定IP

入网方式

一般虚拟机软件都提供多种网络模式,主要有:

+

NAT模式: 虚拟机没有直接接入局域网,和集群里面的Node宿主机互相ping不通,不选

+

Bridged Adapter模式:即桥接模式,为虚拟机模拟出一个独立的网卡,有独立的IP地址接入局域网,

+

固定IP

当虚拟机使用桥接模式接入局域网之后,就和物理机Ubuntu的设置一样了。

+

Ubuntu 18.04 LTS之后的版本使用/etc/netplan/下得文件来配置网络,我这里叫01-network-manager-all.yaml。

+

首先使用ifconfig查看当前机器的网络情况,找到桥接的网卡名称,我这里是enp0s3

+

然后使用sudo vim /etc/netplan/01-network-manager-all.yaml打开配置文件,添加如下内容:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Let NetworkManager manage all devices on this system
network:
ethernets:
enp0s3: #配置的网卡的名称
addresses: [192.168.31.50/24] #配置的静态ip地址和掩码
dhcp4: no #关闭DHCP,如果需要打开DHCP则写yes
optional: true
routes:
- to: 0.0.0.0/0
via: 192.168.31.1 #网关地址
nameservers:
addresses: [192.168.31.1] #DNS服务器地址,多个DNS服务器地址需要用英文逗号分隔开
version: 2
# renderer: NetworkManager
renderer: networkd #指定后端采用systemd-networkd或者Network Manager
+ +

networkd和NetworkManager都是用于管理网络接口的后端。networkd是systemd的一部分,它是一个轻量级的网络管理器,可以在Ubuntu 18.04及更高版本中使用。它使用Netplan配置文件来配置网络接口。NetworkManager是一个更高级的网络管理器,可以在Ubuntu 16.04及更高版本中使用。它提供了一个GUI界面,可以方便地配置网络接口。

+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/10/11/devops/devops_toolchain_integration/index.html b/2024/10/11/devops/devops_toolchain_integration/index.html new file mode 100644 index 0000000..43b7e10 --- /dev/null +++ b/2024/10/11/devops/devops_toolchain_integration/index.html @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DevOps Toolchain Integration Setup | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ + + +
+ + + + + + + +
+

+ DevOps Toolchain Integration Setup +

+ + +
+ + + + +

期望

作为个人工作中实际用到的DevOps相关工具链的整合搭建,同时也作为新手上手DevOps的Quick Setup。

+

背景

长话短说:

+
    +
  • 数据分析师: 作为一名数学专业的划水学生,毕业之后无比憧憬能成为一名“数据分析师”,然后被忽悠到“信老师”(化名,具体内容可以参见我的一个视频总结)旗下工作;

    +
  • +
  • 爬虫:老师告诉我,数据平台还没搭建好,这样吧,你先自己去公网上爬取数据

    +
  • +
  • 爬虫 *2: 第一份正式的工作,技术栈是自动化的请求接口 / 操作浏览器界面完成业务;

    +
  • +
  • 测试开发 + DevOps:凭借上述后者,找到了UI自动化测试开发的工作;再在工作中要用到整合流水线为业务开发同事提供服务,于是职位变成了DevOps;

    +
  • +
  • DevOps:来到上海成为专职DevOps,负责Daily CI/CD & Release platform 的搭建。

    +
  • +
+

之前的工作中部分组件是我去的时候已经安装、配置好了的,因此在这里把用到的工具链进行全流程的安装,回顾并系统的梳理技术栈,同时也作为新手上手DevOps的Quick Setup。

+ + +

机器

Ubuntu 实体机 *2 (不要用WSL)

+

一个作为master,另一个作为node,搭建一个最小的集群。

+

Kubernetes

之前业务上主要使用的是阿里云容器服务Kubernetes版(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK)

+

同时在私有化部署的时候使用kubesphere,本文主要使用后者进行物理机上的部署。

+

Kubernetes Setup in Local Physical Servers

+

Helm

The package manager for Kubernetes

+

简单来说,我的包管理方式经过一下迭代

+
    +
  1. exe / other executable file / tar & scp;
  2. +
  3. Docker Image;
  4. +
  5. Helm Charts;
  6. +
+ +
+ + + + + + +
+
+ + + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2022/05/index.html b/archives/2022/05/index.html new file mode 100644 index 0000000..6234e37 --- /dev/null +++ b/archives/2022/05/index.html @@ -0,0 +1,391 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2022 +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2022/index.html b/archives/2022/index.html new file mode 100644 index 0000000..0a0b684 --- /dev/null +++ b/archives/2022/index.html @@ -0,0 +1,391 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2022 +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html new file mode 100644 index 0000000..7d681cf --- /dev/null +++ b/archives/2023/05/index.html @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2023 +
+ + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 0000000..5700726 --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2023 +
+ + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2024/05/index.html b/archives/2024/05/index.html new file mode 100644 index 0000000..6597f04 --- /dev/null +++ b/archives/2024/05/index.html @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2024 +
+ + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2024/10/index.html b/archives/2024/10/index.html new file mode 100644 index 0000000..121212c --- /dev/null +++ b/archives/2024/10/index.html @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2024 +
+ + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 0000000..6669d58 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2024 +
+ + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..dbf2f8c --- /dev/null +++ b/archives/index.html @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2024 +
+ + + + + + + + + + +
+ 2023 +
+ + + + +
+ 2022 +
+ + + + + + + + +
+
+ + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000..1fca713 --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +归档 | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+ 嗯..! 目前共计 15 篇日志。 继续努力。 +
+ + +
+ 2022 +
+ + + + + + + + + + + + +
+
+ + + + + +
+
+ + + + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/algolia/algoliasearch.js b/assets/algolia/algoliasearch.js new file mode 100644 index 0000000..7707138 --- /dev/null +++ b/assets/algolia/algoliasearch.js @@ -0,0 +1,7190 @@ +/*! algoliasearch 3.35.1 | © 2014, 2015 Algolia SAS | github.com/algolia/algoliasearch-client-js */ +(function(f){var g;if(typeof window!=='undefined'){g=window}else if(typeof self!=='undefined'){g=self}g.ALGOLIA_MIGRATION_LAYER=f()})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;owindow.ALGOLIA_SUPPORTS_DOCWRITE = true\x3C/script>'); + + if (window.ALGOLIA_SUPPORTS_DOCWRITE === true) { + document.write('\x3Cscript src="' + v2ScriptUrl + '">\x3C/script>'); + scriptLoaded('document.write')(); + } else { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } + } catch (e) { + loadScript(v2ScriptUrl, scriptLoaded('DOMElement')); + } +} + +function scriptLoaded(method) { + return function log() { + var message = 'AlgoliaSearch: loaded V2 script using ' + method; + + if (window.console && window.console.log) { + window.console.log(message); + } + }; +} + +},{"1":1}],4:[function(require,module,exports){ +'use strict'; + +/* eslint no-unused-vars: [2, {"vars": "local"}] */ + +module.exports = oldGlobals; + +// put old window.AlgoliaSearch.. into window. again so that +// users upgrading to V3 without changing their code, will be warned +function oldGlobals() { + var message = '-- AlgoliaSearch V2 => V3 error --\n' + + 'You are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\n' + + 'Please read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n' + + '-- /AlgoliaSearch V2 => V3 error --'; + + window.AlgoliaSearch = function() { + throw new Error(message); + }; + + window.AlgoliaSearchHelper = function() { + throw new Error(message); + }; + + window.AlgoliaExplainResults = function() { + throw new Error(message); + }; +} + +},{}],5:[function(require,module,exports){ +'use strict'; + +// This script will be browserified and prepended to the normal build +// directly in window, not wrapped in any module definition +// To avoid cases where we are loaded with /latest/ along with +migrationLayer("algoliasearch"); + +// Now onto the V2 related code: +// If the client is using /latest/$BUILDNAME.min.js, load V2 of the library +// +// Otherwise, setup a migration layer that will throw on old constructors like +// new AlgoliaSearch(). +// So that users upgrading from v2 to v3 will have a clear information +// message on what to do if they did not read the migration guide +function migrationLayer(buildName) { + var isUsingLatest = require(2); + var loadV2 = require(3); + var oldGlobals = require(4); + + if (isUsingLatest(buildName)) { + loadV2(buildName); + } else { + oldGlobals(); + } +} + +},{"2":2,"3":3,"4":4}]},{},[5])(5) +});(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.algoliasearch = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + +}).call(this,require(12)) +},{"12":12,"2":2}],2:[function(require,module,exports){ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require(9); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +},{"9":9}],3:[function(require,module,exports){ +(function (process,global){ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version 4.1.1 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.ES6Promise = factory()); +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} + +function isFunction(x) { + return typeof x === 'function'; +} + +var _isArray = undefined; +if (Array.isArray) { + _isArray = Array.isArray; +} else { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = undefined; +var customSchedulerFn = undefined; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var r = require; + var vertx = r('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = undefined; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && typeof require === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var _arguments = arguments; + + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + if (_state) { + (function () { + var callback = _arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + })(); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve$1(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(16); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var GET_THEN_ERROR = new ErrorObject(); + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + GET_THEN_ERROR.error = error; + return GET_THEN_ERROR; + } +} + +function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { + try { + then$$1.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then$$1) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then$$1, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return resolve(promise, value); + }, function (reason) { + return reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$1) { + if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$1 === GET_THEN_ERROR) { + reject(promise, GET_THEN_ERROR.error); + GET_THEN_ERROR.error = null; + } else if (then$$1 === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$1)) { + handleForeignThenable(promise, maybeThenable, then$$1); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function resolve(promise, value) { + if (promise === value) { + reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = undefined, + callback = undefined, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function ErrorObject() { + this.error = null; +} + +var TRY_CATCH_ERROR = new ErrorObject(); + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = undefined, + error = undefined, + succeeded = undefined, + failed = undefined; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value.error = null; + } else { + succeeded = true; + } + + if (promise === value) { + reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + resolve(promise, value); + } else if (failed) { + reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + resolve(promise, value); + }, function rejectPromise(reason) { + reject(promise, reason); + }); + } catch (e) { + reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function Enumerator$1(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(input); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + reject(this.promise, validationError()); + } +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +} + +Enumerator$1.prototype._enumerate = function (input) { + for (var i = 0; this._state === PENDING && i < input.length; i++) { + this._eachEntry(input[i], i); + } +}; + +Enumerator$1.prototype._eachEntry = function (entry, i) { + var c = this._instanceConstructor; + var resolve$$1 = c.resolve; + + if (resolve$$1 === resolve$1) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise$2) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$1) { + return resolve$$1(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$1(entry), i); + } +}; + +Enumerator$1.prototype._settledAt = function (state, i, value) { + var promise = this.promise; + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } +}; + +Enumerator$1.prototype._willSettleAt = function (promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); +}; + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all$1(entries) { + return new Enumerator$1(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race$1(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject$1(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise$2(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise$2.all = all$1; +Promise$2.race = race$1; +Promise$2.resolve = resolve$1; +Promise$2.reject = reject$1; +Promise$2._setScheduler = setScheduler; +Promise$2._setAsap = setAsap; +Promise$2._asap = asap; + +Promise$2.prototype = { + constructor: Promise$2, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +/*global self*/ +function polyfill$1() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$2; +} + +// Strange compat.. +Promise$2.polyfill = polyfill$1; +Promise$2.Promise = Promise$2; + +return Promise$2; + +}))); + + + +}).call(this,require(12),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"12":12}],4:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],5:[function(require,module,exports){ + +var hasOwn = Object.prototype.hasOwnProperty; +var toString = Object.prototype.toString; + +module.exports = function forEach (obj, fn, ctx) { + if (toString.call(fn) !== '[object Function]') { + throw new TypeError('iterator must be a function'); + } + var l = obj.length; + if (l === +l) { + for (var i = 0; i < l; i++) { + fn.call(ctx, obj[i], i, obj); + } + } else { + for (var k in obj) { + if (hasOwn.call(obj, k)) { + fn.call(ctx, obj[k], k, obj); + } + } + } +}; + + +},{}],6:[function(require,module,exports){ +(function (global){ +var win; + +if (typeof window !== "undefined") { + win = window; +} else if (typeof global !== "undefined") { + win = global; +} else if (typeof self !== "undefined"){ + win = self; +} else { + win = {}; +} + +module.exports = win; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],7:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],8:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],9:[function(require,module,exports){ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + +},{}],10:[function(require,module,exports){ +'use strict'; + +// modified from https://github.com/es-shims/es5-shim +var has = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var slice = Array.prototype.slice; +var isArgs = require(11); +var isEnumerable = Object.prototype.propertyIsEnumerable; +var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); +var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); +var dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' +]; +var equalsConstructorPrototype = function (o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; +}; +var excludedKeys = { + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true +}; +var hasAutomationEqualityBug = (function () { + /* global window */ + if (typeof window === 'undefined') { return false; } + for (var k in window) { + try { + if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; +}()); +var equalsConstructorPrototypeIfNotBuggy = function (o) { + /* global window */ + if (typeof window === 'undefined' || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } +}; + +var keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object'; + var isFunction = toStr.call(object) === '[object Function]'; + var isArguments = isArgs(object); + var isString = isObject && toStr.call(object) === '[object String]'; + var theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError('Object.keys called on a non-object'); + } + + var skipProto = hasProtoEnumBug && isFunction; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; +}; + +keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = (function () { + // Safari 5.0 bug + return (Object.keys(arguments) || '').length === 2; + }(1, 2)); + if (!keysWorksWithArguments) { + var originalKeys = Object.keys; + Object.keys = function keys(object) { + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } else { + return originalKeys(object); + } + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; +}; + +module.exports = keysShim; + +},{"11":11}],11:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === '[object Arguments]'; + if (!isArgs) { + isArgs = str !== '[object Array]' && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + toStr.call(value.callee) === '[object Function]'; + } + return isArgs; +}; + +},{}],12:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],13:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],15:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require(13); +exports.encode = exports.stringify = require(14); + +},{"13":13,"14":14}],16:[function(require,module,exports){ +module.exports = AlgoliaSearch; + +var Index = require(18); +var deprecate = require(28); +var deprecatedMessage = require(29); +var AlgoliaSearchCore = require(17); +var inherits = require(7); +var errors = require(30); + +function AlgoliaSearch() { + AlgoliaSearchCore.apply(this, arguments); +} + +inherits(AlgoliaSearch, AlgoliaSearchCore); + +/* + * Delete an index + * + * @param indexName the name of index to delete + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.deleteIndex = function(indexName, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexName), + hostType: 'write', + callback: callback + }); +}; + +/** + * Move an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy of + * srcIndexName (destination will be overriten if it already exist). + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.moveIndex = function(srcIndexName, dstIndexName, callback) { + var postObj = { + operation: 'move', destination: dstIndexName + }; + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Copy an existing index. + * @param srcIndexName the name of index to copy. + * @param dstIndexName the new index name that will contains a copy + * of srcIndexName (destination will be overriten if it already exist). + * @param scope an array of scopes to copy: ['settings', 'synonyms', 'rules'] + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.copyIndex = function(srcIndexName, dstIndexName, scopeOrCallback, _callback) { + var postObj = { + operation: 'copy', + destination: dstIndexName + }; + var callback = _callback; + if (typeof scopeOrCallback === 'function') { + // oops, old behaviour of third argument being a function + callback = scopeOrCallback; + } else if (Array.isArray(scopeOrCallback) && scopeOrCallback.length > 0) { + postObj.scope = scopeOrCallback; + } else if (typeof scopeOrCallback !== 'undefined') { + throw new Error('the scope given to `copyIndex` was not an array with settings, synonyms or rules'); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(srcIndexName) + '/operation', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Return last log entries. + * @param offset Specify the first entry to retrieve (0-based, 0 is the most recent log entry). + * @param length Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param type Specify the maximum number of entries to retrieve starting + * at offset. Maximum allowed value: 1000. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer that contains the task ID + */ +AlgoliaSearch.prototype.getLogs = function(offset, length, callback) { + var clone = require(26); + var params = {}; + if (typeof offset === 'object') { + // getLogs(params) + params = clone(offset); + callback = length; + } else if (arguments.length === 0 || typeof offset === 'function') { + // getLogs([cb]) + callback = offset; + } else if (arguments.length === 1 || typeof length === 'function') { + // getLogs(1, [cb)] + callback = length; + params.offset = offset; + } else { + // getLogs(1, 2, [cb]) + params.offset = offset; + params.length = length; + } + + if (params.offset === undefined) params.offset = 0; + if (params.length === undefined) params.length = 10; + + return this._jsonRequest({ + method: 'GET', + url: '/1/logs?' + this._getSearchParams(params, ''), + hostType: 'read', + callback: callback + }); +}; + +/* + * List all existing indexes (paginated) + * + * @param page The page to retrieve, starting at 0. + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with index list + */ +AlgoliaSearch.prototype.listIndexes = function(page, callback) { + var params = ''; + + if (page === undefined || typeof page === 'function') { + callback = page; + } else { + params = '?page=' + page; + } + + return this._jsonRequest({ + method: 'GET', + url: '/1/indexes' + params, + hostType: 'read', + callback: callback + }); +}; + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearch.prototype.initIndex = function(indexName) { + return new Index(this, indexName); +}; + +AlgoliaSearch.prototype.initAnalytics = function(opts) { + // the actual require must be inside the function, when put outside then you have a cyclic dependency + // not well resolved that ends up making the main "./index.js" (main module, the agloliasearch function) + // export an object instead of a function + // Other workarounds: + // - rewrite the lib in ES6, cyclic dependencies may be better supported + // - move initAnalytics to a property on the main module (algoliasearch.initAnalytics), + // same as places. + // The current API was made mostly to mimic the one made in PHP + var createAnalyticsClient = require(27); + return createAnalyticsClient(this.applicationID, this.apiKey, opts); +}; + +/* + * @deprecated use client.listApiKeys + */ +AlgoliaSearch.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('client.listUserKeys()', 'client.listApiKeys()')); + +/* + * List all existing api keys with their associated ACLs + * + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with api keys list + */ +AlgoliaSearch.prototype.listApiKeys = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys', + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.getApiKey + */ +AlgoliaSearch.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('client.getUserKeyACL()', 'client.getApiKey()')); + +/* + * Get an API key + * + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the right API key + */ +AlgoliaSearch.prototype.getApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/keys/' + key, + hostType: 'read', + callback: callback + }); +}; + +/* + * @deprecated see client.deleteApiKey + */ +AlgoliaSearch.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('client.deleteUserKey()', 'client.deleteApiKey()')); + +/* + * Delete an existing API key + * @param key + * @param callback the result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the date of deletion + */ +AlgoliaSearch.prototype.deleteApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'DELETE', + url: '/1/keys/' + key, + hostType: 'write', + callback: callback + }); +}; + +/** + * Restore a deleted API key + * + * @param {String} key - The key to restore + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the restored API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.restoreApiKey('APIKEY') + * @see {@link https://www.algolia.com/doc/rest-api/search/#restore-api-key|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.restoreApiKey = function(key, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/keys/' + key + '/restore', + hostType: 'write', + callback: callback + }); +}; + +/* + @deprecated see client.addApiKey + */ +AlgoliaSearch.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKey()', 'client.addApiKey()')); + +/* + * Add a new global API key + * + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the added API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.addApiKey(['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#AddKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.addApiKey = function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.indexes = params.indexes; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * @deprecated Please use client.addApiKey() + */ +AlgoliaSearch.prototype.addUserKeyWithValidity = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('client.addUserKeyWithValidity()', 'client.addApiKey()')); + +/** + * @deprecated Please use client.updateApiKey() + */ +AlgoliaSearch.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('client.updateUserKey()', 'client.updateApiKey()')); + +/** + * Update an existing API key + * @param {string} key - The key to update + * @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that + * can contains the following values: + * - search: allow to search (https and http) + * - addObject: allows to add/update an object in the index (https only) + * - deleteObject : allows to delete an existing object (https only) + * - deleteIndex : allows to delete index content (https only) + * - settings : allows to get index settings (https only) + * - editSettings : allows to change index settings (https only) + * @param {Object} [params] - Optionnal parameters to set for the key + * @param {number} params.validity - Number of seconds after which the key will be automatically removed (0 means no time limit for this key) + * @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour + * @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call + * @param {string[]} params.indexes - Allowed targeted indexes for this key + * @param {string} params.description - A description for your key + * @param {string[]} params.referers - A list of authorized referers + * @param {Object} params.queryParameters - Force the key to use specific query parameters + * @param {Function} callback - The result callback called with two arguments + * error: null or Error('message') + * content: the server answer with the modified API key + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.updateApiKey('APIKEY', ['search'], { + * validity: 300, + * maxQueriesPerIPPerHour: 2000, + * maxHitsPerQuery: 3, + * indexes: ['fruits'], + * description: 'Eat three fruits', + * referers: ['*.algolia.com'], + * queryParameters: { + * tagFilters: ['public'], + * } + * }) + * @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} + */ +AlgoliaSearch.prototype.updateApiKey = function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.indexes = params.indexes; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this._jsonRequest({ + method: 'PUT', + url: '/1/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}; + +/** + * Initialize a new batch of search queries + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.startQueriesBatch = deprecate(function startQueriesBatchDeprecated() { + this._batch = []; +}, deprecatedMessage('client.startQueriesBatch()', 'client.search()')); + +/** + * Add a search query in the batch + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.addQueryInBatch = deprecate(function addQueryInBatchDeprecated(indexName, query, args) { + this._batch.push({ + indexName: indexName, + query: query, + params: args + }); +}, deprecatedMessage('client.addQueryInBatch()', 'client.search()')); + +/** + * Launch the batch of queries using XMLHttpRequest. + * @deprecated use client.search() + */ +AlgoliaSearch.prototype.sendQueriesBatch = deprecate(function sendQueriesBatchDeprecated(callback) { + return this.search(this._batch, callback); +}, deprecatedMessage('client.sendQueriesBatch()', 'client.search()')); + +/** + * Perform write operations across multiple indexes. + * + * To reduce the amount of time spent on network round trips, + * you can create, update, or delete several objects in one call, + * using the batch endpoint (all operations are done in the given order). + * + * Available actions: + * - addObject + * - updateObject + * - partialUpdateObject + * - partialUpdateObjectNoCreate + * - deleteObject + * + * https://www.algolia.com/doc/rest_api#Indexes + * @param {Object[]} operations An array of operations to perform + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.batch([{ + * action: 'addObject', + * indexName: 'clients', + * body: { + * name: 'Bill' + * } + * }, { + * action: 'udpateObject', + * indexName: 'fruits', + * body: { + * objectID: '29138', + * name: 'banana' + * } + * }], cb) + */ +AlgoliaSearch.prototype.batch = function(operations, callback) { + var isArray = require(8); + var usage = 'Usage: client.batch(operations[, callback])'; + + if (!isArray(operations)) { + throw new Error(usage); + } + + return this._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/batch', + body: { + requests: operations + }, + hostType: 'write', + callback: callback + }); +}; + +/** + * Assign or Move a userID to a cluster + * + * @param {string} data.userID The userID to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserID({ cluster: 'c1-test', userID: 'some-user' }); + */ +AlgoliaSearch.prototype.assignUserID = function(data, callback) { + if (!data.userID || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both a userID and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping', + hostType: 'write', + body: {cluster: data.cluster}, + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Assign a array of userIDs to a cluster. + * + * @param {Array} data.userIDs The array of userIDs to assign to a new cluster + * @param {string} data.cluster The cluster to assign the user to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.assignUserIDs({ cluster: 'c1-test', userIDs: ['some-user-1', 'some-user-2'] }); + */ +AlgoliaSearch.prototype.assignUserIDs = function(data, callback) { + if (!data.userIDs || !data.cluster) { + throw new errors.AlgoliaSearchError('You have to provide both an array of userIDs and cluster', data); + } + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/batch', + hostType: 'write', + body: { + cluster: data.cluster, + users: data.userIDs + }, + callback: callback + }); +}; + +/** + * Get the top userIDs + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getTopUserID(); + */ +AlgoliaSearch.prototype.getTopUserID = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/top', + hostType: 'read', + callback: callback + }); +}; + +/** + * Get userID + * + * @param {string} data.userID The userID to get info about + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.getUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping/' + data.userID, + hostType: 'read', + callback: callback + }); +}; + +/** + * List all the clusters + * + * (the callback is the second argument) + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + */ +AlgoliaSearch.prototype.listClusters = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters', + hostType: 'read', + callback: callback + }); +}; + +/** + * List the userIDs + * + * (the callback is the second argument) + * + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.listClusters(); + * client.listClusters({ page: 3, hitsPerPage: 30}); + */ +AlgoliaSearch.prototype.listUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/clusters/mapping', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Remove an userID + * + * @param {string} data.userID The userID to assign to a new cluster + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.removeUserID({ userID: 'some-user' }); + */ +AlgoliaSearch.prototype.removeUserID = function(data, callback) { + if (!data.userID) { + throw new errors.AlgoliaSearchError('You have to provide a userID', {debugData: data}); + } + return this._jsonRequest({ + method: 'DELETE', + url: '/1/clusters/mapping', + hostType: 'write', + callback: callback, + headers: { + 'x-algolia-user-id': data.userID + } + }); +}; + +/** + * Search for userIDs + * + * @param {string} data.cluster The cluster to target + * @param {string} data.query The query to execute + * @param {string} data.hitsPerPage How many hits on every page + * @param {string} data.page The page to retrieve + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.searchUserIDs({ cluster: 'c1-test', query: 'some-user' }); + * client.searchUserIDs({ + * cluster: "c1-test", + * query: "some-user", + * page: 3, + * hitsPerPage: 2 + * }); + */ +AlgoliaSearch.prototype.searchUserIDs = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/clusters/mapping/search', + body: data, + hostType: 'read', + callback: callback + }); +}; + +/** + * Set strategy for personalization + * + * @param {Object} data + * @param {Object} data.eventsScoring Associate a score to an event + * @param {Object} data.eventsScoring. The name of the event + * @param {Number} data.eventsScoring..score The score to associate to + * @param {String} data.eventsScoring..type Either "click", "conversion" or "view" + * @param {Object} data.facetsScoring Associate a score to a facet + * @param {Object} data.facetsScoring. The name of the facet + * @param {Number} data.facetsScoring..score The score to associate to + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.setPersonalizationStrategy({ + * eventsScoring: { + * "Add to cart": { score: 50, type: "conversion" }, + * Purchase: { score: 100, type: "conversion" } + * }, + * facetsScoring: { + * brand: { score: 100 }, + * categories: { score: 10 } + * } + * }); + */ +AlgoliaSearch.prototype.setPersonalizationStrategy = function(data, callback) { + return this._jsonRequest({ + method: 'POST', + url: '/1/recommendation/personalization/strategy', + body: data, + hostType: 'write', + callback: callback + }); +}; + +/** + * Get strategy for personalization + * + * @return {Promise|undefined} Returns a promise if no callback given + * @example + * client.getPersonalizationStrategy(); + */ + +AlgoliaSearch.prototype.getPersonalizationStrategy = function(callback) { + return this._jsonRequest({ + method: 'GET', + url: '/1/recommendation/personalization/strategy', + hostType: 'read', + callback: callback + }); +}; + +// environment specific methods +AlgoliaSearch.prototype.destroy = notImplemented; +AlgoliaSearch.prototype.enableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.disableRateLimitForward = notImplemented; +AlgoliaSearch.prototype.useSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.disableSecuredAPIKey = notImplemented; +AlgoliaSearch.prototype.generateSecuredApiKey = notImplemented; +AlgoliaSearch.prototype.getSecuredApiKeyRemainingValidity = notImplemented; + +function notImplemented() { + var message = 'Not implemented in this environment.\n' + + 'If you feel this is a mistake, write to support@algolia.com'; + + throw new errors.AlgoliaSearchError(message); +} + +},{"17":17,"18":18,"26":26,"27":27,"28":28,"29":29,"30":30,"7":7,"8":8}],17:[function(require,module,exports){ +(function (process){ +module.exports = AlgoliaSearchCore; + +var errors = require(30); +var exitPromise = require(31); +var IndexCore = require(20); +var store = require(36); + +// We will always put the API KEY in the JSON body in case of too long API KEY, +// to avoid query string being too long and failing in various conditions (our server limit, browser limit, +// proxies limit) +var MAX_API_KEY_LENGTH = 500; +var RESET_APP_DATA_TIMER = + process.env.RESET_APP_DATA_TIMER && parseInt(process.env.RESET_APP_DATA_TIMER, 10) || + 60 * 2 * 1000; // after 2 minutes reset to first host + +/* + * Algolia Search library initialization + * https://www.algolia.com/ + * + * @param {string} applicationID - Your applicationID, found in your dashboard + * @param {string} apiKey - Your API key, found in your dashboard + * @param {Object} [opts] + * @param {number} [opts.timeout=2000] - The request timeout set in milliseconds, + * another request will be issued after this timeout + * @param {string} [opts.protocol='https:'] - The protocol used to query Algolia Search API. + * Set to 'http:' to force using http. + * @param {Object|Array} [opts.hosts={ + * read: [this.applicationID + '-dsn.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]), + * write: [this.applicationID + '.algolia.net'].concat([ + * this.applicationID + '-1.algolianet.com', + * this.applicationID + '-2.algolianet.com', + * this.applicationID + '-3.algolianet.com'] + * ]) - The hosts to use for Algolia Search API. + * If you provide them, you will less benefit from our HA implementation + */ +function AlgoliaSearchCore(applicationID, apiKey, opts) { + var debug = require(1)('algoliasearch'); + + var clone = require(26); + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: algoliasearch(applicationID, apiKey, opts)'; + + if (opts._allowEmptyCredentials !== true && !applicationID) { + throw new errors.AlgoliaSearchError('Please provide an application ID. ' + usage); + } + + if (opts._allowEmptyCredentials !== true && !apiKey) { + throw new errors.AlgoliaSearchError('Please provide an API key. ' + usage); + } + + this.applicationID = applicationID; + this.apiKey = apiKey; + + this.hosts = { + read: [], + write: [] + }; + + opts = opts || {}; + + this._timeouts = opts.timeouts || { + connect: 1 * 1000, // 500ms connect is GPRS latency + read: 2 * 1000, + write: 30 * 1000 + }; + + // backward compat, if opts.timeout is passed, we use it to configure all timeouts like before + if (opts.timeout) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = opts.timeout; + } + + var protocol = opts.protocol || 'https:'; + // while we advocate for colon-at-the-end values: 'http:' for `opts.protocol` + // we also accept `http` and `https`. It's a common error. + if (!/:$/.test(protocol)) { + protocol = protocol + ':'; + } + + if (protocol !== 'http:' && protocol !== 'https:') { + throw new errors.AlgoliaSearchError('protocol must be `http:` or `https:` (was `' + opts.protocol + '`)'); + } + + this._checkAppIdData(); + + if (!opts.hosts) { + var defaultHosts = map(this._shuffleResult, function(hostNumber) { + return applicationID + '-' + hostNumber + '.algolianet.com'; + }); + + // no hosts given, compute defaults + var mainSuffix = (opts.dsn === false ? '' : '-dsn') + '.algolia.net'; + this.hosts.read = [this.applicationID + mainSuffix].concat(defaultHosts); + this.hosts.write = [this.applicationID + '.algolia.net'].concat(defaultHosts); + } else if (isArray(opts.hosts)) { + // when passing custom hosts, we need to have a different host index if the number + // of write/read hosts are different. + this.hosts.read = clone(opts.hosts); + this.hosts.write = clone(opts.hosts); + } else { + this.hosts.read = clone(opts.hosts.read); + this.hosts.write = clone(opts.hosts.write); + } + + // add protocol and lowercase hosts + this.hosts.read = map(this.hosts.read, prepareHost(protocol)); + this.hosts.write = map(this.hosts.write, prepareHost(protocol)); + + this.extraHeaders = {}; + + // In some situations you might want to warm the cache + this.cache = opts._cache || {}; + + this._ua = opts._ua; + this._useCache = opts._useCache === undefined || opts._cache ? true : opts._useCache; + this._useRequestCache = this._useCache && opts._useRequestCache; + this._useFallback = opts.useFallback === undefined ? true : opts.useFallback; + + this._setTimeout = opts._setTimeout; + + debug('init done, %j', this); +} + +/* + * Get the index object initialized + * + * @param indexName the name of index + * @param callback the result callback with one argument (the Index instance) + */ +AlgoliaSearchCore.prototype.initIndex = function(indexName) { + return new IndexCore(this, indexName); +}; + +/** +* Add an extra field to the HTTP request +* +* @param name the header field name +* @param value the header field value +*/ +AlgoliaSearchCore.prototype.setExtraHeader = function(name, value) { + this.extraHeaders[name.toLowerCase()] = value; +}; + +/** +* Get the value of an extra HTTP header +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.getExtraHeader = function(name) { + return this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Remove an extra field from the HTTP request +* +* @param name the header field name +*/ +AlgoliaSearchCore.prototype.unsetExtraHeader = function(name) { + delete this.extraHeaders[name.toLowerCase()]; +}; + +/** +* Augment sent x-algolia-agent with more data, each agent part +* is automatically separated from the others by a semicolon; +* +* @param algoliaAgent the agent to add +*/ +AlgoliaSearchCore.prototype.addAlgoliaAgent = function(algoliaAgent) { + var algoliaAgentWithDelimiter = '; ' + algoliaAgent; + + if (this._ua.indexOf(algoliaAgentWithDelimiter) === -1) { + this._ua += algoliaAgentWithDelimiter; + } +}; + +/* + * Wrapper that try all hosts to maximize the quality of service + */ +AlgoliaSearchCore.prototype._jsonRequest = function(initialOpts) { + this._checkAppIdData(); + + var requestDebug = require(1)('algoliasearch:' + initialOpts.url); + + + var body; + var cacheID; + var additionalUA = initialOpts.additionalUA || ''; + var cache = initialOpts.cache; + var client = this; + var tries = 0; + var usingFallback = false; + var hasFallback = client._useFallback && client._request.fallback && initialOpts.fallback; + var headers; + + if ( + this.apiKey.length > MAX_API_KEY_LENGTH && + initialOpts.body !== undefined && + (initialOpts.body.params !== undefined || // index.search() + initialOpts.body.requests !== undefined) // client.search() + ) { + initialOpts.body.apiKey = this.apiKey; + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + withApiKey: false, + headers: initialOpts.headers + }); + } else { + headers = this._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + } + + if (initialOpts.body !== undefined) { + body = safeJSONStringify(initialOpts.body); + } + + requestDebug('request start'); + var debugData = []; + + + function doRequest(requester, reqOpts) { + client._checkAppIdData(); + + var startTime = new Date(); + + if (client._useCache && !client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && !client._useRequestCache && body) { + cacheID += '_body_' + reqOpts.body; + } + + // handle cache existence + if (isCacheValidWithCurrentID(!client._useRequestCache, cache, cacheID)) { + requestDebug('serving response from cache'); + + var responseText = cache[cacheID]; + + // Cache response must match the type of the original one + return client._promise.resolve({ + body: JSON.parse(responseText), + responseText: responseText + }); + } + + // if we reached max tries + if (tries >= client.hosts[initialOpts.hostType].length) { + if (!hasFallback || usingFallback) { + requestDebug('could not get any response'); + // then stop + return client._promise.reject(new errors.AlgoliaSearchError( + 'Cannot connect to the AlgoliaSearch API.' + + ' Send an email to support@algolia.com to report and resolve the issue.' + + ' Application id was: ' + client.applicationID, {debugData: debugData} + )); + } + + requestDebug('switching to fallback'); + + // let's try the fallback starting from here + tries = 0; + + // method, url and body are fallback dependent + reqOpts.method = initialOpts.fallback.method; + reqOpts.url = initialOpts.fallback.url; + reqOpts.jsonBody = initialOpts.fallback.body; + if (reqOpts.jsonBody) { + reqOpts.body = safeJSONStringify(reqOpts.jsonBody); + } + // re-compute headers, they could be omitting the API KEY + headers = client._computeRequestHeaders({ + additionalUA: additionalUA, + headers: initialOpts.headers + }); + + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + client._setHostIndexByType(0, initialOpts.hostType); + usingFallback = true; // the current request is now using fallback + return doRequest(client._request.fallback, reqOpts); + } + + var currentHost = client._getHostByType(initialOpts.hostType); + + var url = currentHost + reqOpts.url; + var options = { + body: reqOpts.body, + jsonBody: reqOpts.jsonBody, + method: reqOpts.method, + headers: headers, + timeouts: reqOpts.timeouts, + debug: requestDebug, + forceAuthHeaders: reqOpts.forceAuthHeaders + }; + + requestDebug('method: %s, url: %s, headers: %j, timeouts: %d', + options.method, url, options.headers, options.timeouts); + + if (requester === client._request.fallback) { + requestDebug('using fallback'); + } + + // `requester` is any of this._request or this._request.fallback + // thus it needs to be called using the client as context + return requester.call(client, url, options).then(success, tryFallback); + + function success(httpResponse) { + // compute the status of the response, + // + // When in browser mode, using XDR or JSONP, we have no statusCode available + // So we rely on our API response `status` property. + // But `waitTask` can set a `status` property which is not the statusCode (it's the task status) + // So we check if there's a `message` along `status` and it means it's an error + // + // That's the only case where we have a response.status that's not the http statusCode + var status = httpResponse && httpResponse.body && httpResponse.body.message && httpResponse.body.status || + + // this is important to check the request statusCode AFTER the body eventual + // statusCode because some implementations (jQuery XDomainRequest transport) may + // send statusCode 200 while we had an error + httpResponse.statusCode || + + // When in browser mode, using XDR or JSONP + // we default to success when no error (no response.status && response.message) + // If there was a JSON.parse() error then body is null and it fails + httpResponse && httpResponse.body && 200; + + requestDebug('received response: statusCode: %s, computed statusCode: %d, headers: %j', + httpResponse.statusCode, status, httpResponse.headers); + + var httpResponseOk = Math.floor(status / 100) === 2; + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime, + statusCode: status + }); + + if (httpResponseOk) { + if (client._useCache && !client._useRequestCache && cache) { + cache[cacheID] = httpResponse.responseText; + } + + return { + responseText: httpResponse.responseText, + body: httpResponse.body + }; + } + + var shouldRetry = Math.floor(status / 100) !== 4; + + if (shouldRetry) { + tries += 1; + return retryRequest(); + } + + requestDebug('unrecoverable error'); + + // no success and no retry => fail + var unrecoverableError = new errors.AlgoliaSearchError( + httpResponse.body && httpResponse.body.message, {debugData: debugData, statusCode: status} + ); + + return client._promise.reject(unrecoverableError); + } + + function tryFallback(err) { + // error cases: + // While not in fallback mode: + // - CORS not supported + // - network error + // While in fallback mode: + // - timeout + // - network error + // - badly formatted JSONP (script loaded, did not call our callback) + // In both cases: + // - uncaught exception occurs (TypeError) + requestDebug('error: %s, stack: %s', err.message, err.stack); + + var endTime = new Date(); + debugData.push({ + currentHost: currentHost, + headers: removeCredentials(headers), + content: body || null, + contentLength: body !== undefined ? body.length : null, + method: reqOpts.method, + timeouts: reqOpts.timeouts, + url: reqOpts.url, + startTime: startTime, + endTime: endTime, + duration: endTime - startTime + }); + + if (!(err instanceof errors.AlgoliaSearchError)) { + err = new errors.Unknown(err && err.message, err); + } + + tries += 1; + + // stop the request implementation when: + if ( + // we did not generate this error, + // it comes from a throw in some other piece of code + err instanceof errors.Unknown || + + // server sent unparsable JSON + err instanceof errors.UnparsableJSON || + + // max tries and already using fallback or no fallback + tries >= client.hosts[initialOpts.hostType].length && + (usingFallback || !hasFallback)) { + // stop request implementation for this command + err.debugData = debugData; + return client._promise.reject(err); + } + + // When a timeout occurred, retry by raising timeout + if (err instanceof errors.RequestTimeout) { + return retryRequestWithHigherTimeout(); + } + + return retryRequest(); + } + + function retryRequest() { + requestDebug('retrying request'); + client._incrementHostIndex(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + + function retryRequestWithHigherTimeout() { + requestDebug('retrying request with higher timeout'); + client._incrementHostIndex(initialOpts.hostType); + client._incrementTimeoutMultipler(); + reqOpts.timeouts = client._getTimeoutsForRequest(initialOpts.hostType); + return doRequest(requester, reqOpts); + } + } + + function isCacheValidWithCurrentID( + useRequestCache, + currentCache, + currentCacheID + ) { + return ( + client._useCache && + useRequestCache && + currentCache && + currentCache[currentCacheID] !== undefined + ); + } + + + function interopCallbackReturn(request, callback) { + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + request.catch(function() { + // Release the cache on error + delete cache[cacheID]; + }); + } + + if (typeof initialOpts.callback === 'function') { + // either we have a callback + request.then(function okCb(content) { + exitPromise(function() { + initialOpts.callback(null, callback(content)); + }, client._setTimeout || setTimeout); + }, function nookCb(err) { + exitPromise(function() { + initialOpts.callback(err); + }, client._setTimeout || setTimeout); + }); + } else { + // either we are using promises + return request.then(callback); + } + } + + if (client._useCache && client._useRequestCache) { + cacheID = initialOpts.url; + } + + // as we sometime use POST requests to pass parameters (like query='aa'), + // the cacheID must also include the body to be different between calls + if (client._useCache && client._useRequestCache && body) { + cacheID += '_body_' + body; + } + + if (isCacheValidWithCurrentID(client._useRequestCache, cache, cacheID)) { + requestDebug('serving request from cache'); + + var maybePromiseForCache = cache[cacheID]; + + // In case the cache is warmup with value that is not a promise + var promiseForCache = typeof maybePromiseForCache.then !== 'function' + ? client._promise.resolve({responseText: maybePromiseForCache}) + : maybePromiseForCache; + + return interopCallbackReturn(promiseForCache, function(content) { + // In case of the cache request, return the original value + return JSON.parse(content.responseText); + }); + } + + var request = doRequest( + client._request, { + url: initialOpts.url, + method: initialOpts.method, + body: body, + jsonBody: initialOpts.body, + timeouts: client._getTimeoutsForRequest(initialOpts.hostType), + forceAuthHeaders: initialOpts.forceAuthHeaders + } + ); + + if (client._useCache && client._useRequestCache && cache) { + cache[cacheID] = request; + } + + return interopCallbackReturn(request, function(content) { + // In case of the first request, return the JSON value + return content.body; + }); +}; + +/* +* Transform search param object in query string +* @param {object} args arguments to add to the current query string +* @param {string} params current query string +* @return {string} the final query string +*/ +AlgoliaSearchCore.prototype._getSearchParams = function(args, params) { + if (args === undefined || args === null) { + return params; + } + for (var key in args) { + if (key !== null && args[key] !== undefined && args.hasOwnProperty(key)) { + params += params === '' ? '' : '&'; + params += key + '=' + encodeURIComponent(Object.prototype.toString.call(args[key]) === '[object Array]' ? safeJSONStringify(args[key]) : args[key]); + } + } + return params; +}; + +/** + * Compute the headers for a request + * + * @param [string] options.additionalUA semi-colon separated string with other user agents to add + * @param [boolean=true] options.withApiKey Send the api key as a header + * @param [Object] options.headers Extra headers to send + */ +AlgoliaSearchCore.prototype._computeRequestHeaders = function(options) { + var forEach = require(5); + + var ua = options.additionalUA ? + this._ua + '; ' + options.additionalUA : + this._ua; + + var requestHeaders = { + 'x-algolia-agent': ua, + 'x-algolia-application-id': this.applicationID + }; + + // browser will inline headers in the url, node.js will use http headers + // but in some situations, the API KEY will be too long (big secured API keys) + // so if the request is a POST and the KEY is very long, we will be asked to not put + // it into headers but in the JSON body + if (options.withApiKey !== false) { + requestHeaders['x-algolia-api-key'] = this.apiKey; + } + + if (this.userToken) { + requestHeaders['x-algolia-usertoken'] = this.userToken; + } + + if (this.securityTags) { + requestHeaders['x-algolia-tagfilters'] = this.securityTags; + } + + forEach(this.extraHeaders, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + + if (options.headers) { + forEach(options.headers, function addToRequestHeaders(value, key) { + requestHeaders[key] = value; + }); + } + + return requestHeaders; +}; + +/** + * Search through multiple indices at the same time + * @param {Object[]} queries An array of queries you want to run. + * @param {string} queries[].indexName The index name you want to target + * @param {string} [queries[].query] The query to issue on this index. Can also be passed into `params` + * @param {Object} queries[].params Any search param like hitsPerPage, .. + * @param {Function} callback Callback to be called + * @return {Promise|undefined} Returns a promise if no callback given + */ +AlgoliaSearchCore.prototype.search = function(queries, opts, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.search(arrayOfQueries[, callback])'; + + if (!isArray(queries)) { + throw new Error(usage); + } + + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var client = this; + + var postObj = { + requests: map(queries, function prepareRequest(query) { + var params = ''; + + // allow query.query + // so we are mimicing the index.search(query, params) method + // {indexName:, query:, params:} + if (query.query !== undefined) { + params += 'query=' + encodeURIComponent(query.query); + } + + return { + indexName: query.indexName, + params: client._getSearchParams(query.params, params) + }; + }) + }; + + var JSONPParams = map(postObj.requests, function prepareJSONPParams(request, requestId) { + return requestId + '=' + + encodeURIComponent( + '/1/indexes/' + encodeURIComponent(request.indexName) + '?' + + request.params + ); + }).join('&'); + + var url = '/1/indexes/*/queries'; + + if (opts.strategy !== undefined) { + postObj.strategy = opts.strategy; + } + + return this._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url, + body: postObj, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/*', + body: { + params: JSONPParams + } + }, + callback: callback + }); +}; + +/** +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* This is the top-level API for SFFV. +* +* @param {object[]} queries An array of queries to run. +* @param {string} queries[].indexName Index name, name of the index to search. +* @param {object} queries[].params Query parameters. +* @param {string} queries[].params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} queries[].params.facetQuery Query for the facet search +* @param {string} [queries[].params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +*/ +AlgoliaSearchCore.prototype.searchForFacetValues = function(queries) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])'; // eslint-disable-line max-len + + if (!isArray(queries)) { + throw new Error(usage); + } + + var client = this; + + return client._promise.all(map(queries, function performQuery(query) { + if ( + !query || + query.indexName === undefined || + query.params.facetName === undefined || + query.params.facetQuery === undefined + ) { + throw new Error(usage); + } + + var clone = require(26); + var omit = require(34); + + var indexName = query.indexName; + var params = query.params; + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = client._getSearchParams(filteredParams, ''); + + return client._jsonRequest({ + cache: client.cache, + method: 'POST', + url: + '/1/indexes/' + + encodeURIComponent(indexName) + + '/facets/' + + encodeURIComponent(facetName) + + '/query', + hostType: 'read', + body: {params: searchParameters} + }); + })); +}; + +/** + * Set the extra security tagFilters header + * @param {string|array} tags The list of tags defining the current security filters + */ +AlgoliaSearchCore.prototype.setSecurityTags = function(tags) { + if (Object.prototype.toString.call(tags) === '[object Array]') { + var strTags = []; + for (var i = 0; i < tags.length; ++i) { + if (Object.prototype.toString.call(tags[i]) === '[object Array]') { + var oredTags = []; + for (var j = 0; j < tags[i].length; ++j) { + oredTags.push(tags[i][j]); + } + strTags.push('(' + oredTags.join(',') + ')'); + } else { + strTags.push(tags[i]); + } + } + tags = strTags.join(','); + } + + this.securityTags = tags; +}; + +/** + * Set the extra user token header + * @param {string} userToken The token identifying a uniq user (used to apply rate limits) + */ +AlgoliaSearchCore.prototype.setUserToken = function(userToken) { + this.userToken = userToken; +}; + +/** + * Clear all queries in client's cache + * @return undefined + */ +AlgoliaSearchCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/** +* Set the number of milliseconds a request can take before automatically being terminated. +* @deprecated +* @param {Number} milliseconds +*/ +AlgoliaSearchCore.prototype.setRequestTimeout = function(milliseconds) { + if (milliseconds) { + this._timeouts.connect = this._timeouts.read = this._timeouts.write = milliseconds; + } +}; + +/** +* Set the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.setTimeouts = function(timeouts) { + this._timeouts = timeouts; +}; + +/** +* Get the three different (connect, read, write) timeouts to be used when requesting +* @param {Object} timeouts +*/ +AlgoliaSearchCore.prototype.getTimeouts = function() { + return this._timeouts; +}; + +AlgoliaSearchCore.prototype._getAppIdData = function() { + var data = store.get(this.applicationID); + if (data !== null) this._cacheAppIdData(data); + return data; +}; + +AlgoliaSearchCore.prototype._setAppIdData = function(data) { + data.lastChange = (new Date()).getTime(); + this._cacheAppIdData(data); + return store.set(this.applicationID, data); +}; + +AlgoliaSearchCore.prototype._checkAppIdData = function() { + var data = this._getAppIdData(); + var now = (new Date()).getTime(); + if (data === null || now - data.lastChange > RESET_APP_DATA_TIMER) { + return this._resetInitialAppIdData(data); + } + + return data; +}; + +AlgoliaSearchCore.prototype._resetInitialAppIdData = function(data) { + var newData = data || {}; + newData.hostIndexes = {read: 0, write: 0}; + newData.timeoutMultiplier = 1; + newData.shuffleResult = newData.shuffleResult || shuffle([1, 2, 3]); + return this._setAppIdData(newData); +}; + +AlgoliaSearchCore.prototype._cacheAppIdData = function(data) { + this._hostIndexes = data.hostIndexes; + this._timeoutMultiplier = data.timeoutMultiplier; + this._shuffleResult = data.shuffleResult; +}; + +AlgoliaSearchCore.prototype._partialAppIdDataUpdate = function(newData) { + var foreach = require(5); + var currentData = this._getAppIdData(); + foreach(newData, function(value, key) { + currentData[key] = value; + }); + + return this._setAppIdData(currentData); +}; + +AlgoliaSearchCore.prototype._getHostByType = function(hostType) { + return this.hosts[hostType][this._getHostIndexByType(hostType)]; +}; + +AlgoliaSearchCore.prototype._getTimeoutMultiplier = function() { + return this._timeoutMultiplier; +}; + +AlgoliaSearchCore.prototype._getHostIndexByType = function(hostType) { + return this._hostIndexes[hostType]; +}; + +AlgoliaSearchCore.prototype._setHostIndexByType = function(hostIndex, hostType) { + var clone = require(26); + var newHostIndexes = clone(this._hostIndexes); + newHostIndexes[hostType] = hostIndex; + this._partialAppIdDataUpdate({hostIndexes: newHostIndexes}); + return hostIndex; +}; + +AlgoliaSearchCore.prototype._incrementHostIndex = function(hostType) { + return this._setHostIndexByType( + (this._getHostIndexByType(hostType) + 1) % this.hosts[hostType].length, hostType + ); +}; + +AlgoliaSearchCore.prototype._incrementTimeoutMultipler = function() { + var timeoutMultiplier = Math.max(this._timeoutMultiplier + 1, 4); + return this._partialAppIdDataUpdate({timeoutMultiplier: timeoutMultiplier}); +}; + +AlgoliaSearchCore.prototype._getTimeoutsForRequest = function(hostType) { + return { + connect: this._timeouts.connect * this._timeoutMultiplier, + complete: this._timeouts[hostType] * this._timeoutMultiplier + }; +}; + +function prepareHost(protocol) { + return function prepare(host) { + return protocol + '//' + host.toLowerCase(); + }; +} + +// Prototype.js < 1.7, a widely used library, defines a weird +// Array.prototype.toJSON function that will fail to stringify our content +// appropriately +// refs: +// - https://groups.google.com/forum/#!topic/prototype-core/E-SAVvV_V9Q +// - https://github.com/sstephenson/prototype/commit/038a2985a70593c1a86c230fadbdfe2e4898a48c +// - http://stackoverflow.com/a/3148441/147079 +function safeJSONStringify(obj) { + /* eslint no-extend-native:0 */ + + if (Array.prototype.toJSON === undefined) { + return JSON.stringify(obj); + } + + var toJSON = Array.prototype.toJSON; + delete Array.prototype.toJSON; + var out = JSON.stringify(obj); + Array.prototype.toJSON = toJSON; + + return out; +} + +function shuffle(array) { + var currentIndex = array.length; + var temporaryValue; + var randomIndex; + + // While there remain elements to shuffle... + while (currentIndex !== 0) { + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +function removeCredentials(headers) { + var newHeaders = {}; + + for (var headerName in headers) { + if (Object.prototype.hasOwnProperty.call(headers, headerName)) { + var value; + + if (headerName === 'x-algolia-api-key' || headerName === 'x-algolia-application-id') { + value = '**hidden for security purposes**'; + } else { + value = headers[headerName]; + } + + newHeaders[headerName] = value; + } + } + + return newHeaders; +} + +}).call(this,require(12)) +},{"1":1,"12":12,"20":20,"26":26,"30":30,"31":31,"32":32,"34":34,"36":36,"5":5,"8":8}],18:[function(require,module,exports){ +var inherits = require(7); +var IndexCore = require(20); +var deprecate = require(28); +var deprecatedMessage = require(29); +var exitPromise = require(31); +var errors = require(30); + +var deprecateForwardToSlaves = deprecate( + function() {}, + deprecatedMessage('forwardToSlaves', 'forwardToReplicas') +); + +module.exports = Index; + +function Index() { + IndexCore.apply(this, arguments); +} + +inherits(Index, IndexCore); + +/* +* Add an object in this index +* +* @param content contains the javascript object to add inside the index +* @param objectID (optional) an objectID you want to attribute to this object +* (if the attribute already exist the old object will be overwrite) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.addObject = function(content, objectID, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof objectID === 'function') { + callback = objectID; + objectID = undefined; + } + + return this.as._jsonRequest({ + method: objectID !== undefined ? + 'PUT' : // update or create + 'POST', // create (API generates an objectID) + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + // create + (objectID !== undefined ? '/' + encodeURIComponent(objectID) : ''), // update or create + body: content, + hostType: 'write', + callback: callback + }); +}; + +/* +* Add several objects +* +* @param objects contains an array of objects to add +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.addObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.addObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'addObject', + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Update partially an object (only update attributes passed in argument) +* +* @param partialObject contains the javascript attributes to override, the +* object must contains an objectID attribute +* @param createIfNotExists (optional) if false, avoid an automatic creation of the object +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.partialUpdateObject = function(partialObject, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = undefined; + } + + var indexObj = this; + var url = '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(partialObject.objectID) + '/partial'; + if (createIfNotExists === false) { + url += '?createIfNotExists=false'; + } + + return this.as._jsonRequest({ + method: 'POST', + url: url, + body: partialObject, + hostType: 'write', + callback: callback + }); +}; + +/* +* Partially Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.partialUpdateObjects = function(objects, createIfNotExists, callback) { + if (arguments.length === 1 || typeof createIfNotExists === 'function') { + callback = createIfNotExists; + createIfNotExists = true; + } + + var isArray = require(8); + var usage = 'Usage: index.partialUpdateObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: createIfNotExists === true ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of object +* +* @param object contains the javascript object to save, the object must contains an objectID attribute +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObject = function(object, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(object.objectID), + body: object, + hostType: 'write', + callback: callback + }); +}; + +/* +* Override the content of several objects +* +* @param objects contains an array of objects to update (each object must contains a objectID attribute) +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that updateAt and taskID +*/ +Index.prototype.saveObjects = function(objects, callback) { + var isArray = require(8); + var usage = 'Usage: index.saveObjects(arrayOfObjects[, callback])'; + + if (!isArray(objects)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: [] + }; + for (var i = 0; i < objects.length; ++i) { + var request = { + action: 'updateObject', + objectID: objects[i].objectID, + body: objects[i] + }; + postObj.requests.push(request); + } + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete an object from the index +* +* @param objectID the unique identifier of object to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObject = function(objectID, callback) { + if (typeof objectID === 'function' || typeof objectID !== 'string' && typeof objectID !== 'number') { + var err = new errors.AlgoliaSearchError( + objectID && typeof objectID !== 'function' + ? 'ObjectID must be a string' + : 'Cannot delete an object without an objectID' + ); + callback = objectID; + if (typeof callback === 'function') { + return callback(err); + } + + return this.as._promise.reject(err); + } + + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID), + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete several objects from an index +* +* @param objectIDs contains an array of objectID to delete +* @param callback (optional) the result callback called with two arguments: +* error: null or Error('message') +* content: the server answer that contains 3 elements: createAt, taskId and objectID +*/ +Index.prototype.deleteObjects = function(objectIDs, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.deleteObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + var postObj = { + requests: map(objectIDs, function prepareRequest(objectID) { + return { + action: 'deleteObject', + objectID: objectID, + body: { + objectID: objectID + } + }; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/batch', + body: postObj, + hostType: 'write', + callback: callback + }); +}; + +/* +* Delete all objects matching a query +* +* @param query the query string +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +* @deprecated see index.deleteBy +*/ +Index.prototype.deleteByQuery = deprecate(function(query, params, callback) { + var clone = require(26); + var map = require(32); + + var indexObj = this; + var client = indexObj.as; + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = {}; + } else { + params = clone(params); + } + + params.attributesToRetrieve = 'objectID'; + params.hitsPerPage = 1000; + params.distinct = false; + + // when deleting, we should never use cache to get the + // search results + this.clearCache(); + + // there's a problem in how we use the promise chain, + // see how waitTask is done + var promise = this + .search(query, params) + .then(stopOrDelete); + + function stopOrDelete(searchContent) { + // stop here + if (searchContent.nbHits === 0) { + // return indexObj.as._request.resolve(); + return searchContent; + } + + // continue and do a recursive call + var objectIDs = map(searchContent.hits, function getObjectID(object) { + return object.objectID; + }); + + return indexObj + .deleteObjects(objectIDs) + .then(waitTask) + .then(doDeleteByQuery); + } + + function waitTask(deleteObjectsContent) { + return indexObj.waitTask(deleteObjectsContent.taskID); + } + + function doDeleteByQuery() { + return indexObj.deleteByQuery(query, params); + } + + if (!callback) { + return promise; + } + + promise.then(success, failure); + + function success() { + exitPromise(function exit() { + callback(null); + }, client._setTimeout || setTimeout); + } + + function failure(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}, deprecatedMessage('index.deleteByQuery()', 'index.deleteBy()')); + +/** +* Delete all objects matching a query +* +* the query parameters that can be used are: +* - filters (numeric, facet, tag) +* - geo +* +* you can not send an empty query or filters +* +* @param params the optional query parameters +* @param callback (optional) the result callback called with one argument +* error: null or Error('message') +*/ +Index.prototype.deleteBy = function(params, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/deleteByQuery', + body: {params: indexObj.as._getSearchParams(params, '')}, + hostType: 'write', + callback: callback + }); +}; + +/* +* Browse all content from an index using events. Basically this will do +* .browse() -> .browseFrom -> .browseFrom -> .. until all the results are returned +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @return {EventEmitter} +* @example +* var browser = index.browseAll('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }); +* +* browser.on('result', function resultCallback(content) { +* console.log(content.hits); +* }); +* +* // if any error occurs, you get it +* browser.on('error', function(err) { +* throw err; +* }); +* +* // when you have browsed the whole index, you get this event +* browser.on('end', function() { +* console.log('finished'); +* }); +* +* // at any point if you want to stop the browsing process, you can stop it manually +* // otherwise it will go on and on +* browser.stop(); +* +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +Index.prototype.browseAll = function(query, queryParameters) { + if (typeof query === 'object') { + queryParameters = query; + query = undefined; + } + + var merge = require(33); + + var IndexBrowser = require(19); + + var browser = new IndexBrowser(); + var client = this.as; + var index = this; + var params = client._getSearchParams( + merge({}, queryParameters || {}, { + query: query + }), '' + ); + + // start browsing + browseLoop(); + + function browseLoop(cursor) { + if (browser._stopped) { + return; + } + + var body; + + if (cursor !== undefined) { + body = { + cursor: cursor + }; + } else { + body = { + params: params + }; + } + + client._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(index.indexName) + '/browse', + hostType: 'read', + body: body, + callback: browseCallback + }); + } + + function browseCallback(err, content) { + if (browser._stopped) { + return; + } + + if (err) { + browser._error(err); + return; + } + + browser._result(content); + + // no cursor means we are finished browsing + if (content.cursor === undefined) { + browser._end(); + return; + } + + browseLoop(content.cursor); + } + + return browser; +}; + +/* +* Get a Typeahead.js adapter +* @param searchParams contains an object with query parameters (see search for details) +*/ +Index.prototype.ttAdapter = deprecate(function(params) { + var self = this; + return function ttAdapter(query, syncCb, asyncCb) { + var cb; + + if (typeof asyncCb === 'function') { + // typeahead 0.11 + cb = asyncCb; + } else { + // pre typeahead 0.11 + cb = syncCb; + } + + self.search(query, params, function searchDone(err, content) { + if (err) { + cb(err); + return; + } + + cb(content.hits); + }); + }; +}, +'ttAdapter is not necessary anymore and will be removed in the next version,\n' + +'have a look at autocomplete.js (https://github.com/algolia/autocomplete.js)'); + +/* +* Wait the publication of a task on the server. +* All server task are asynchronous and you can check with this method that the task is published. +* +* @param taskID the id of the task returned by server +* @param callback the result callback with with two arguments: +* error: null or Error('message') +* content: the server answer that contains the list of results +*/ +Index.prototype.waitTask = function(taskID, callback) { + // wait minimum 100ms before retrying + var baseDelay = 100; + // wait maximum 5s before retrying + var maxDelay = 5000; + var loop = 0; + + // waitTask() must be handled differently from other methods, + // it's a recursive method using a timeout + var indexObj = this; + var client = indexObj.as; + + var promise = retryLoop(); + + function retryLoop() { + return client._jsonRequest({ + method: 'GET', + hostType: 'read', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/task/' + taskID + }).then(function success(content) { + loop++; + var delay = baseDelay * loop * loop; + if (delay > maxDelay) { + delay = maxDelay; + } + + if (content.status !== 'published') { + return client._promise.delay(delay).then(retryLoop); + } + + return content; + }); + } + + if (!callback) { + return promise; + } + + promise.then(successCb, failureCb); + + function successCb(content) { + exitPromise(function exit() { + callback(null, content); + }, client._setTimeout || setTimeout); + } + + function failureCb(err) { + exitPromise(function exit() { + callback(err); + }, client._setTimeout || setTimeout); + } +}; + +/* +* This function deletes the index content. Settings and index specific API keys are kept untouched. +* +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.clearIndex = function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/clear', + hostType: 'write', + callback: callback + }); +}; + +/* +* Get settings of this index +* +* @param opts an object of options to add +* @param opts.advanced get more settings like nbShards (useful for Enterprise) +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the settings object or the error message if a failure occurred +*/ +Index.prototype.getSettings = function(opts, callback) { + if (arguments.length === 1 && typeof opts === 'function') { + callback = opts; + opts = {}; + } + opts = opts || {}; + + var indexName = encodeURIComponent(this.indexName); + return this.as._jsonRequest({ + method: 'GET', + url: + '/1/indexes/' + + indexName + + '/settings?getVersion=2' + + (opts.advanced ? '&advanced=' + opts.advanced : ''), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.searchSynonyms = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/search', + body: params, + hostType: 'read', + callback: callback + }); +}; + +function exportData(method, _hitsPerPage, callback) { + function search(page, _previous) { + var options = { + page: page || 0, + hitsPerPage: _hitsPerPage || 100 + }; + var previous = _previous || []; + + return method(options).then(function(result) { + var hits = result.hits; + var nbHits = result.nbHits; + var current = hits.map(function(s) { + delete s._highlightResult; + return s; + }); + var synonyms = previous.concat(current); + if (synonyms.length < nbHits) { + return search(options.page + 1, synonyms); + } + return synonyms; + }); + } + return search().then(function(data) { + if (typeof callback === 'function') { + callback(data); + return undefined; + } + return data; + }); +} + +/** + * Retrieve all the synonyms in an index + * @param [number=100] hitsPerPage The amount of synonyms to retrieve per batch + * @param [function] callback will be called after all synonyms are retrieved + */ +Index.prototype.exportSynonyms = function(hitsPerPage, callback) { + return exportData(this.searchSynonyms.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveSynonym = function(synonym, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(synonym.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: synonym, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getSynonym = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteSynonym = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearSynonyms = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchSynonyms = function(synonyms, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/synonyms/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&replaceExistingSynonyms=' + (opts.replaceExistingSynonyms ? 'true' : 'false'), + hostType: 'write', + body: synonyms, + callback: callback + }); +}; + +Index.prototype.searchRules = function(params, callback) { + if (typeof params === 'function') { + callback = params; + params = {}; + } else if (params === undefined) { + params = {}; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/search', + body: params, + hostType: 'read', + callback: callback + }); +}; +/** + * Retrieve all the query rules in an index + * @param [number=100] hitsPerPage The amount of query rules to retrieve per batch + * @param [function] callback will be called after all query rules are retrieved + * error: null or Error('message') + */ +Index.prototype.exportRules = function(hitsPerPage, callback) { + return exportData(this.searchRules.bind(this), hitsPerPage, callback); +}; + +Index.prototype.saveRule = function(rule, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + if (!rule.objectID) { + throw new errors.AlgoliaSearchError('Missing or empty objectID field for rule'); + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(rule.objectID) + + '?forwardToReplicas=' + forwardToReplicas, + body: rule, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.getRule = function(objectID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID), + hostType: 'read', + callback: callback + }); +}; + +Index.prototype.deleteRule = function(objectID, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/' + encodeURIComponent(objectID) + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.clearRules = function(opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/clear' + + '?forwardToReplicas=' + forwardToReplicas, + hostType: 'write', + callback: callback + }); +}; + +Index.prototype.batchRules = function(rules, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } else if (opts === undefined) { + opts = {}; + } + + var forwardToReplicas = opts.forwardToReplicas === true ? 'true' : 'false'; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/rules/batch' + + '?forwardToReplicas=' + forwardToReplicas + + '&clearExistingRules=' + (opts.clearExistingRules === true ? 'true' : 'false'), + hostType: 'write', + body: rules, + callback: callback + }); +}; + +Index.prototype.exists = function(callback) { + var result = this.getSettings().then(function() { + return true; + }).catch(function(err) { + if (err instanceof errors.AlgoliaSearchError && err.statusCode === 404) { + return false; + } + + throw err; + }); + + if (typeof callback !== 'function') { + return result; + } + + result.then(function(res) { + callback(null, res); + }).catch(function(err) { + callback(err); + }); +}; + +Index.prototype.findObject = function(findCallback, requestOptions, callback) { + requestOptions = requestOptions === undefined ? {} : requestOptions; + var paginate = requestOptions.paginate !== undefined ? requestOptions.paginate : true; + var query = requestOptions.query !== undefined ? requestOptions.query : ''; + + var that = this; + var page = 0; + + var paginateLoop = function() { + requestOptions.page = page; + + return that.search(query, requestOptions).then(function(result) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + var hit = hits[position]; + if (findCallback(hit)) { + return { + object: hit, + position: position, + page: page + }; + } + } + + page += 1; + + // paginate if option was set and has next page + if (!paginate || page >= result.nbPages) { + throw new errors.ObjectNotFound('Object not found'); + } + + return paginateLoop(); + }); + }; + + var promise = paginateLoop(page); + + if (callback === undefined) { + return promise; + } + + promise + .then(function(res) { + callback(null, res); + }) + .catch(function(err) { + callback(err); + }); +}; + +Index.prototype.getObjectPosition = function(result, objectID) { + var hits = result.hits; + + for (var position = 0; position < hits.length; position++) { + if (hits[position].objectID === objectID) { + return position; + } + } + + return -1; +}; + +/* +* Set settings for this index +* +* @param settings the settings object that can contains : +* - minWordSizefor1Typo: (integer) the minimum number of characters to accept one typo (default = 3). +* - minWordSizefor2Typos: (integer) the minimum number of characters to accept two typos (default = 7). +* - hitsPerPage: (integer) the number of hits per page (default = 10). +* - attributesToRetrieve: (array of strings) default list of attributes to retrieve in objects. +* If set to null, all attributes are retrieved. +* - attributesToHighlight: (array of strings) default list of attributes to highlight. +* If set to null, all indexed attributes are highlighted. +* - attributesToSnippet**: (array of strings) default list of attributes to snippet alongside the number +* of words to return (syntax is attributeName:nbWords). +* By default no snippet is computed. If set to null, no snippet is computed. +* - attributesToIndex: (array of strings) the list of fields you want to index. +* If set to null, all textual and numerical attributes of your objects are indexed, +* but you should update it to get optimal results. +* This parameter has two important uses: +* - Limit the attributes to index: For example if you store a binary image in base64, +* you want to store it and be able to +* retrieve it but you don't want to search in the base64 string. +* - Control part of the ranking*: (see the ranking parameter for full explanation) +* Matches in attributes at the beginning of +* the list will be considered more important than matches in attributes further down the list. +* In one attribute, matching text at the beginning of the attribute will be +* considered more important than text after, you can disable +* this behavior if you add your attribute inside `unordered(AttributeName)`, +* for example attributesToIndex: ["title", "unordered(text)"]. +* - attributesForFaceting: (array of strings) The list of fields you want to use for faceting. +* All strings in the attribute selected for faceting are extracted and added as a facet. +* If set to null, no attribute is used for faceting. +* - attributeForDistinct: (string) The attribute name used for the Distinct feature. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in query with the distinct=1 parameter, all hits containing a duplicate +* value for this attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best one is kept and others are removed. +* - ranking: (array of strings) controls the way results are sorted. +* We have six available criteria: +* - typo: sort according to number of typos, +* - geo: sort according to decreassing distance when performing a geo-location based search, +* - proximity: sort according to the proximity of query words in hits, +* - attribute: sort according to the order of attributes defined by attributesToIndex, +* - exact: +* - if the user query contains one word: sort objects having an attribute +* that is exactly the query word before others. +* For example if you search for the "V" TV show, you want to find it +* with the "V" query and avoid to have all popular TV +* show starting by the v letter before it. +* - if the user query contains multiple words: sort according to the +* number of words that matched exactly (and not as a prefix). +* - custom: sort according to a user defined formula set in **customRanking** attribute. +* The standard order is ["typo", "geo", "proximity", "attribute", "exact", "custom"] +* - customRanking: (array of strings) lets you specify part of the ranking. +* The syntax of this condition is an array of strings containing attributes +* prefixed by asc (ascending order) or desc (descending order) operator. +* For example `"customRanking" => ["desc(population)", "asc(name)"]` +* - queryType: Select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - highlightPreTag: (string) Specify the string that is inserted before +* the highlighted parts in the query result (default to ""). +* - highlightPostTag: (string) Specify the string that is inserted after +* the highlighted parts in the query result (default to ""). +* - optionalWords: (array of strings) Specify a list of words that should +* be considered as optional when found in the query. +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the server answer or the error message if a failure occurred +*/ +Index.prototype.setSettings = function(settings, opts, callback) { + if (arguments.length === 1 || typeof opts === 'function') { + callback = opts; + opts = {}; + } + + if (opts.forwardToSlaves !== undefined) deprecateForwardToSlaves(); + var forwardToReplicas = (opts.forwardToSlaves || opts.forwardToReplicas) ? 'true' : 'false'; + + var indexObj = this; + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/settings?forwardToReplicas=' + + forwardToReplicas, + hostType: 'write', + body: settings, + callback: callback + }); +}; + +/* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listUserKeys = deprecate(function(callback) { + return this.listApiKeys(callback); +}, deprecatedMessage('index.listUserKeys()', 'client.listApiKeys()')); + +/* +* List all existing API keys to this index +* +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with API keys belonging to the index +* +* @deprecated see client.listApiKeys() +*/ +Index.prototype.listApiKeys = deprecate(function(callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys', + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.listApiKeys()', 'client.listApiKeys()')); + +/* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getUserKeyACL = deprecate(function(key, callback) { + return this.getApiKey(key, callback); +}, deprecatedMessage('index.getUserKeyACL()', 'client.getApiKey()')); + + +/* +* Get an API key from this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the right API key +* +* @deprecated see client.getApiKey() +*/ +Index.prototype.getApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'read', + callback: callback + }); +}, deprecatedMessage('index.getApiKey()', 'client.getApiKey()')); + +/* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteUserKey = deprecate(function(key, callback) { + return this.deleteApiKey(key, callback); +}, deprecatedMessage('index.deleteUserKey()', 'client.deleteApiKey()')); + +/* +* Delete an existing API key associated to this index +* +* @param key +* @param callback the result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the deletion date +* +* @deprecated see client.deleteApiKey() +*/ +Index.prototype.deleteApiKey = deprecate(function(key, callback) { + var indexObj = this; + return this.as._jsonRequest({ + method: 'DELETE', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/keys/' + key, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.deleteApiKey()', 'client.deleteApiKey()')); + +/* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addUserKey = deprecate(function(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKey()', 'client.addApiKey()')); + +/* +* Add a new API key to this index +* +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the added API key +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.addUserKey(['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#AddIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.addApiKey() +*/ +Index.prototype.addApiKey = deprecate(function(acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.addApiKey(arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 1 || typeof params === 'function') { + callback = params; + params = null; + } + + var postObj = { + acl: acls + }; + + if (params) { + postObj.validity = params.validity; + postObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + postObj.maxHitsPerQuery = params.maxHitsPerQuery; + postObj.description = params.description; + + if (params.queryParameters) { + postObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + postObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys', + body: postObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.addApiKey()', 'client.addApiKey()')); + +/** +* @deprecated use client.addApiKey() +*/ +Index.prototype.addUserKeyWithValidity = deprecate(function deprecatedAddUserKeyWithValidity(acls, params, callback) { + return this.addApiKey(acls, params, callback); +}, deprecatedMessage('index.addUserKeyWithValidity()', 'client.addApiKey()')); + +/* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateUserKey = deprecate(function(key, acls, params, callback) { + return this.updateApiKey(key, acls, params, callback); +}, deprecatedMessage('index.updateUserKey()', 'client.updateApiKey()')); + +/** +* Update an existing API key of this index +* @param {string} key - The key to update +* @param {string[]} acls - The list of ACL for this key. Defined by an array of strings that +* can contains the following values: +* - search: allow to search (https and http) +* - addObject: allows to add/update an object in the index (https only) +* - deleteObject : allows to delete an existing object (https only) +* - deleteIndex : allows to delete index content (https only) +* - settings : allows to get index settings (https only) +* - editSettings : allows to change index settings (https only) +* @param {Object} [params] - Optionnal parameters to set for the key +* @param {number} params.validity - Number of seconds after which the key will +* be automatically removed (0 means no time limit for this key) +* @param {number} params.maxQueriesPerIPPerHour - Number of API calls allowed from an IP address per hour +* @param {number} params.maxHitsPerQuery - Number of hits this API key can retrieve in one call +* @param {string} params.description - A description for your key +* @param {string[]} params.referers - A list of authorized referers +* @param {Object} params.queryParameters - Force the key to use specific query parameters +* @param {Function} callback - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with user keys list +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.updateApiKey('APIKEY', ['search'], { +* validity: 300, +* maxQueriesPerIPPerHour: 2000, +* maxHitsPerQuery: 3, +* description: 'Eat three fruits', +* referers: ['*.algolia.com'], +* queryParameters: { +* tagFilters: ['public'], +* } +* }) +* @see {@link https://www.algolia.com/doc/rest_api#UpdateIndexKey|Algolia REST API Documentation} +* +* @deprecated see client.updateApiKey() +*/ +Index.prototype.updateApiKey = deprecate(function(key, acls, params, callback) { + var isArray = require(8); + var usage = 'Usage: index.updateApiKey(key, arrayOfAcls[, params, callback])'; + + if (!isArray(acls)) { + throw new Error(usage); + } + + if (arguments.length === 2 || typeof params === 'function') { + callback = params; + params = null; + } + + var putObj = { + acl: acls + }; + + if (params) { + putObj.validity = params.validity; + putObj.maxQueriesPerIPPerHour = params.maxQueriesPerIPPerHour; + putObj.maxHitsPerQuery = params.maxHitsPerQuery; + putObj.description = params.description; + + if (params.queryParameters) { + putObj.queryParameters = this.as._getSearchParams(params.queryParameters, ''); + } + + putObj.referers = params.referers; + } + + return this.as._jsonRequest({ + method: 'PUT', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/keys/' + key, + body: putObj, + hostType: 'write', + callback: callback + }); +}, deprecatedMessage('index.updateApiKey()', 'client.updateApiKey()')); + +},{"19":19,"20":20,"26":26,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"7":7,"8":8}],19:[function(require,module,exports){ +'use strict'; + +// This is the object returned by the `index.browseAll()` method + +module.exports = IndexBrowser; + +var inherits = require(7); +var EventEmitter = require(4).EventEmitter; + +function IndexBrowser() { +} + +inherits(IndexBrowser, EventEmitter); + +IndexBrowser.prototype.stop = function() { + this._stopped = true; + this._clean(); +}; + +IndexBrowser.prototype._end = function() { + this.emit('end'); + this._clean(); +}; + +IndexBrowser.prototype._error = function(err) { + this.emit('error', err); + this._clean(); +}; + +IndexBrowser.prototype._result = function(content) { + this.emit('result', content); +}; + +IndexBrowser.prototype._clean = function() { + this.removeAllListeners('stop'); + this.removeAllListeners('end'); + this.removeAllListeners('error'); + this.removeAllListeners('result'); +}; + +},{"4":4,"7":7}],20:[function(require,module,exports){ +var buildSearchMethod = require(25); +var deprecate = require(28); +var deprecatedMessage = require(29); + +module.exports = IndexCore; + +/* +* Index class constructor. +* You should not use this method directly but use initIndex() function +*/ +function IndexCore(algoliasearch, indexName) { + this.indexName = indexName; + this.as = algoliasearch; + this.typeAheadArgs = null; + this.typeAheadValueOption = null; + + // make sure every index instance has it's own cache + this.cache = {}; +} + +/* +* Clear all queries in cache +*/ +IndexCore.prototype.clearCache = function() { + this.cache = {}; +}; + +/* +* Search inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the full text query +* @param {object} [args] (optional) if set, contains an object with query parameters: +* - page: (integer) Pagination parameter used to select the page to retrieve. +* Page is zero-based and defaults to 0. Thus, +* to retrieve the 10th page you need to set page=9 +* - hitsPerPage: (integer) Pagination parameter used to select the number of hits per page. Defaults to 20. +* - attributesToRetrieve: a string that contains the list of object attributes +* you want to retrieve (let you minimize the answer size). +* Attributes are separated with a comma (for example "name,address"). +* You can also use an array (for example ["name","address"]). +* By default, all attributes are retrieved. You can also use '*' to retrieve all +* values when an attributesToRetrieve setting is specified for your index. +* - attributesToHighlight: a string that contains the list of attributes you +* want to highlight according to the query. +* Attributes are separated by a comma. You can also use an array (for example ["name","address"]). +* If an attribute has no match for the query, the raw value is returned. +* By default all indexed text attributes are highlighted. +* You can use `*` if you want to highlight all textual attributes. +* Numerical attributes are not highlighted. +* A matchLevel is returned for each highlighted attribute and can contain: +* - full: if all the query terms were found in the attribute, +* - partial: if only some of the query terms were found, +* - none: if none of the query terms were found. +* - attributesToSnippet: a string that contains the list of attributes to snippet alongside +* the number of words to return (syntax is `attributeName:nbWords`). +* Attributes are separated by a comma (Example: attributesToSnippet=name:10,content:10). +* You can also use an array (Example: attributesToSnippet: ['name:10','content:10']). +* By default no snippet is computed. +* - minWordSizefor1Typo: the minimum number of characters in a query word to accept one typo in this word. +* Defaults to 3. +* - minWordSizefor2Typos: the minimum number of characters in a query word +* to accept two typos in this word. Defaults to 7. +* - getRankingInfo: if set to 1, the result hits will contain ranking +* information in _rankingInfo attribute. +* - aroundLatLng: search for entries around a given +* latitude/longitude (specified as two floats separated by a comma). +* For example aroundLatLng=47.316669,5.016670). +* You can specify the maximum distance in meters with the aroundRadius parameter (in meters) +* and the precision for ranking with aroundPrecision +* (for example if you set aroundPrecision=100, two objects that are distant of +* less than 100m will be considered as identical for "geo" ranking parameter). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - insideBoundingBox: search entries inside a given area defined by the two extreme points +* of a rectangle (defined by 4 floats: p1Lat,p1Lng,p2Lat,p2Lng). +* For example insideBoundingBox=47.3165,4.9665,47.3424,5.0201). +* At indexing, you should specify geoloc of an object with the _geoloc attribute +* (in the form {"_geoloc":{"lat":48.853409, "lng":2.348800}}) +* - numericFilters: a string that contains the list of numeric filters you want to +* apply separated by a comma. +* The syntax of one filter is `attributeName` followed by `operand` followed by `value`. +* Supported operands are `<`, `<=`, `=`, `>` and `>=`. +* You can have multiple conditions on one attribute like for example numericFilters=price>100,price<1000. +* You can also use an array (for example numericFilters: ["price>100","price<1000"]). +* - tagFilters: filter the query by a set of tags. You can AND tags by separating them by commas. +* To OR tags, you must add parentheses. For example, tags=tag1,(tag2,tag3) means tag1 AND (tag2 OR tag3). +* You can also use an array, for example tagFilters: ["tag1",["tag2","tag3"]] +* means tag1 AND (tag2 OR tag3). +* At indexing, tags should be added in the _tags** attribute +* of objects (for example {"_tags":["tag1","tag2"]}). +* - facetFilters: filter the query by a list of facets. +* Facets are separated by commas and each facet is encoded as `attributeName:value`. +* For example: `facetFilters=category:Book,author:John%20Doe`. +* You can also use an array (for example `["category:Book","author:John%20Doe"]`). +* - facets: List of object attributes that you want to use for faceting. +* Comma separated list: `"category,author"` or array `['category','author']` +* Only attributes that have been added in **attributesForFaceting** index setting +* can be used in this parameter. +* You can also use `*` to perform faceting on all attributes specified in **attributesForFaceting**. +* - queryType: select how the query words are interpreted, it can be one of the following value: +* - prefixAll: all query words are interpreted as prefixes, +* - prefixLast: only the last word is interpreted as a prefix (default behavior), +* - prefixNone: no query word is interpreted as a prefix. This option is not recommended. +* - optionalWords: a string that contains the list of words that should +* be considered as optional when found in the query. +* Comma separated and array are accepted. +* - distinct: If set to 1, enable the distinct feature (disabled by default) +* if the attributeForDistinct index setting is set. +* This feature is similar to the SQL "distinct" keyword: when enabled +* in a query with the distinct=1 parameter, +* all hits containing a duplicate value for the attributeForDistinct attribute are removed from results. +* For example, if the chosen attribute is show_name and several hits have +* the same value for show_name, then only the best +* one is kept and others are removed. +* - restrictSearchableAttributes: List of attributes you want to use for +* textual search (must be a subset of the attributesToIndex index setting) +* either comma separated or as an array +* @param {function} [callback] the result callback called with two arguments: +* error: null or Error('message'). If false, the content contains the error. +* content: the server answer that contains the list of results. +*/ +IndexCore.prototype.search = buildSearchMethod('query'); + +/* +* -- BETA -- +* Search a record similar to the query inside the index using XMLHttpRequest request (Using a POST query to +* minimize number of OPTIONS queries: Cross-Origin Resource Sharing). +* +* @param {string} [query] the similar query +* @param {object} [args] (optional) if set, contains an object with query parameters. +* All search parameters are supported (see search function), restrictSearchableAttributes and facetFilters +* are the two most useful to restrict the similar results and get more relevant content +*/ +IndexCore.prototype.similarSearch = deprecate( + buildSearchMethod('similarQuery'), + deprecatedMessage( + 'index.similarSearch(query[, callback])', + 'index.search({ similarQuery: query }[, callback])' + ) +); + +/* +* Browse index content. The response content will have a `cursor` property that you can use +* to browse subsequent pages for this query. Use `index.browseFrom(cursor)` when you want. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browse('cool songs', { +* tagFilters: 'public,comments', +* hitsPerPage: 500 +* }, callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browse = function(query, queryParameters, callback) { + var merge = require(33); + + var indexObj = this; + + var page; + var hitsPerPage; + + // we check variadic calls that are not the one defined + // .browse()/.browse(fn) + // => page = 0 + if (arguments.length === 0 || arguments.length === 1 && typeof arguments[0] === 'function') { + page = 0; + callback = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'number') { + // .browse(2)/.browse(2, 10)/.browse(2, fn)/.browse(2, 10, fn) + page = arguments[0]; + if (typeof arguments[1] === 'number') { + hitsPerPage = arguments[1]; + } else if (typeof arguments[1] === 'function') { + callback = arguments[1]; + hitsPerPage = undefined; + } + query = undefined; + queryParameters = undefined; + } else if (typeof arguments[0] === 'object') { + // .browse(queryParameters)/.browse(queryParameters, cb) + if (typeof arguments[1] === 'function') { + callback = arguments[1]; + } + queryParameters = arguments[0]; + query = undefined; + } else if (typeof arguments[0] === 'string' && typeof arguments[1] === 'function') { + // .browse(query, cb) + callback = arguments[1]; + queryParameters = undefined; + } + + // otherwise it's a .browse(query)/.browse(query, queryParameters)/.browse(query, queryParameters, cb) + + // get search query parameters combining various possible calls + // to .browse(); + queryParameters = merge({}, queryParameters || {}, { + page: page, + hitsPerPage: hitsPerPage, + query: query + }); + + var params = this.as._getSearchParams(queryParameters, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/browse', + body: {params: params}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Continue browsing from a previous position (cursor), obtained via a call to `.browse()`. +* +* @param {string} query - The full text query +* @param {Object} [queryParameters] - Any search query parameter +* @param {Function} [callback] - The result callback called with two arguments +* error: null or Error('message') +* content: the server answer with the browse result +* @return {Promise|undefined} Returns a promise if no callback given +* @example +* index.browseFrom('14lkfsakl32', callback); +* @see {@link https://www.algolia.com/doc/rest_api#Browse|Algolia REST API Documentation} +*/ +IndexCore.prototype.browseFrom = function(cursor, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + encodeURIComponent(this.indexName) + '/browse', + body: {cursor: cursor}, + hostType: 'read', + callback: callback + }); +}; + +/* +* Search for facet values +* https://www.algolia.com/doc/rest-api/search#search-for-facet-values +* +* @param {string} params.facetName Facet name, name of the attribute to search for values in. +* Must be declared as a facet +* @param {string} params.facetQuery Query for the facet search +* @param {string} [params.*] Any search parameter of Algolia, +* see https://www.algolia.com/doc/api-client/javascript/search#search-parameters +* Pagination is not supported. The page and hitsPerPage parameters will be ignored. +* @param callback (optional) +*/ +IndexCore.prototype.searchForFacetValues = function(params, callback) { + var clone = require(26); + var omit = require(34); + var usage = 'Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])'; + + if (params.facetName === undefined || params.facetQuery === undefined) { + throw new Error(usage); + } + + var facetName = params.facetName; + var filteredParams = omit(clone(params), function(keyName) { + return keyName === 'facetName'; + }); + var searchParameters = this.as._getSearchParams(filteredParams, ''); + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/' + + encodeURIComponent(this.indexName) + '/facets/' + encodeURIComponent(facetName) + '/query', + hostType: 'read', + body: {params: searchParameters}, + callback: callback + }); +}; + +IndexCore.prototype.searchFacet = deprecate(function(params, callback) { + return this.searchForFacetValues(params, callback); +}, deprecatedMessage( + 'index.searchFacet(params[, callback])', + 'index.searchForFacetValues(params[, callback])' +)); + +IndexCore.prototype._search = function(params, url, callback, additionalUA) { + return this.as._jsonRequest({ + cache: this.cache, + method: 'POST', + url: url || '/1/indexes/' + encodeURIComponent(this.indexName) + '/query', + body: {params: params}, + hostType: 'read', + fallback: { + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(this.indexName), + body: {params: params} + }, + callback: callback, + additionalUA: additionalUA + }); +}; + +/* +* Get an object from this index +* +* @param objectID the unique identifier of the object to retrieve +* @param attrs (optional) if set, contains the array of attribute names to retrieve +* @param callback (optional) the result callback called with two arguments +* error: null or Error('message') +* content: the object to retrieve or the error message if a failure occurred +*/ +IndexCore.prototype.getObject = function(objectID, attrs, callback) { + var indexObj = this; + + if (arguments.length === 1 || typeof attrs === 'function') { + callback = attrs; + attrs = undefined; + } + + var params = ''; + if (attrs !== undefined) { + params = '?attributes='; + for (var i = 0; i < attrs.length; ++i) { + if (i !== 0) { + params += ','; + } + params += attrs[i]; + } + } + + return this.as._jsonRequest({ + method: 'GET', + url: '/1/indexes/' + encodeURIComponent(indexObj.indexName) + '/' + encodeURIComponent(objectID) + params, + hostType: 'read', + callback: callback + }); +}; + +/* +* Get several objects from this index +* +* @param objectIDs the array of unique identifier of objects to retrieve +*/ +IndexCore.prototype.getObjects = function(objectIDs, attributesToRetrieve, callback) { + var isArray = require(8); + var map = require(32); + + var usage = 'Usage: index.getObjects(arrayOfObjectIDs[, callback])'; + + if (!isArray(objectIDs)) { + throw new Error(usage); + } + + var indexObj = this; + + if (arguments.length === 1 || typeof attributesToRetrieve === 'function') { + callback = attributesToRetrieve; + attributesToRetrieve = undefined; + } + + var body = { + requests: map(objectIDs, function prepareRequest(objectID) { + var request = { + indexName: indexObj.indexName, + objectID: objectID + }; + + if (attributesToRetrieve) { + request.attributesToRetrieve = attributesToRetrieve.join(','); + } + + return request; + }) + }; + + return this.as._jsonRequest({ + method: 'POST', + url: '/1/indexes/*/objects', + hostType: 'read', + body: body, + callback: callback + }); +}; + +IndexCore.prototype.as = null; +IndexCore.prototype.indexName = null; +IndexCore.prototype.typeAheadArgs = null; +IndexCore.prototype.typeAheadValueOption = null; + +},{"25":25,"26":26,"28":28,"29":29,"32":32,"33":33,"34":34,"8":8}],21:[function(require,module,exports){ +'use strict'; + +var AlgoliaSearch = require(16); +var createAlgoliasearch = require(22); + +module.exports = createAlgoliasearch(AlgoliaSearch, 'Browser'); + +},{"16":16,"22":22}],22:[function(require,module,exports){ +(function (process){ +'use strict'; + +var global = require(6); +var Promise = global.Promise || require(3).Promise; + +// This is the standalone browser build entry point +// Browser implementation of the Algolia Search JavaScript client, +// using XMLHttpRequest, XDomainRequest and JSONP as fallback +module.exports = function createAlgoliasearch(AlgoliaSearch, uaSuffix) { + var inherits = require(7); + var errors = require(30); + var inlineHeaders = require(23); + var jsonpRequest = require(24); + var places = require(35); + uaSuffix = uaSuffix || ''; + + if (process.env.NODE_ENV === 'debug') { + require(1).enable('algoliasearch*'); + } + + function algoliasearch(applicationID, apiKey, opts) { + var cloneDeep = require(26); + + opts = cloneDeep(opts || {}); + + opts._ua = opts._ua || algoliasearch.ua; + + return new AlgoliaSearchBrowser(applicationID, apiKey, opts); + } + + algoliasearch.version = require(37); + + algoliasearch.ua = + 'Algolia for JavaScript (' + algoliasearch.version + '); ' + uaSuffix; + + algoliasearch.initPlaces = places(algoliasearch); + + // we expose into window no matter how we are used, this will allow + // us to easily debug any website running algolia + global.__algolia = { + debug: require(1), + algoliasearch: algoliasearch + }; + + var support = { + hasXMLHttpRequest: 'XMLHttpRequest' in global, + hasXDomainRequest: 'XDomainRequest' in global + }; + + if (support.hasXMLHttpRequest) { + support.cors = 'withCredentials' in new XMLHttpRequest(); + } + + function AlgoliaSearchBrowser() { + // call AlgoliaSearch constructor + AlgoliaSearch.apply(this, arguments); + } + + inherits(AlgoliaSearchBrowser, AlgoliaSearch); + + AlgoliaSearchBrowser.prototype._request = function request(url, opts) { + return new Promise(function wrapRequest(resolve, reject) { + // no cors or XDomainRequest, no request + if (!support.cors && !support.hasXDomainRequest) { + // very old browser, not supported + reject(new errors.Network('CORS not supported')); + return; + } + + url = inlineHeaders(url, opts.headers); + + var body = opts.body; + var req = support.cors ? new XMLHttpRequest() : new XDomainRequest(); + var reqTimeout; + var timedOut; + var connected = false; + + reqTimeout = setTimeout(onTimeout, opts.timeouts.connect); + // we set an empty onprogress listener + // so that XDomainRequest on IE9 is not aborted + // refs: + // - https://github.com/algolia/algoliasearch-client-js/issues/76 + // - https://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified?forum=iewebdevelopment + req.onprogress = onProgress; + if ('onreadystatechange' in req) req.onreadystatechange = onReadyStateChange; + req.onload = onLoad; + req.onerror = onError; + + // do not rely on default XHR async flag, as some analytics code like hotjar + // breaks it and set it to false by default + if (req instanceof XMLHttpRequest) { + req.open(opts.method, url, true); + + // The Analytics API never accepts Auth headers as query string + // this option exists specifically for them. + if (opts.forceAuthHeaders) { + req.setRequestHeader( + 'x-algolia-application-id', + opts.headers['x-algolia-application-id'] + ); + req.setRequestHeader( + 'x-algolia-api-key', + opts.headers['x-algolia-api-key'] + ); + } + } else { + req.open(opts.method, url); + } + + // headers are meant to be sent after open + if (support.cors) { + if (body) { + if (opts.method === 'POST') { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Simple_requests + req.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); + } else { + req.setRequestHeader('content-type', 'application/json'); + } + } + req.setRequestHeader('accept', 'application/json'); + } + + if (body) { + req.send(body); + } else { + req.send(); + } + + // event object not received in IE8, at least + // but we do not use it, still important to note + function onLoad(/* event */) { + // When browser does not supports req.timeout, we can + // have both a load and timeout event, since handled by a dumb setTimeout + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + var out; + + try { + out = { + body: JSON.parse(req.responseText), + responseText: req.responseText, + statusCode: req.status, + // XDomainRequest does not have any response headers + headers: req.getAllResponseHeaders && req.getAllResponseHeaders() || {} + }; + } catch (e) { + out = new errors.UnparsableJSON({ + more: req.responseText + }); + } + + if (out instanceof errors.UnparsableJSON) { + reject(out); + } else { + resolve(out); + } + } + + function onError(event) { + if (timedOut) { + return; + } + + clearTimeout(reqTimeout); + + // error event is trigerred both with XDR/XHR on: + // - DNS error + // - unallowed cross domain request + reject( + new errors.Network({ + more: event + }) + ); + } + + function onTimeout() { + timedOut = true; + req.abort(); + + reject(new errors.RequestTimeout()); + } + + function onConnect() { + connected = true; + clearTimeout(reqTimeout); + reqTimeout = setTimeout(onTimeout, opts.timeouts.complete); + } + + function onProgress() { + if (!connected) onConnect(); + } + + function onReadyStateChange() { + if (!connected && req.readyState > 1) onConnect(); + } + }); + }; + + AlgoliaSearchBrowser.prototype._request.fallback = function requestFallback(url, opts) { + url = inlineHeaders(url, opts.headers); + + return new Promise(function wrapJsonpRequest(resolve, reject) { + jsonpRequest(url, opts, function jsonpRequestDone(err, content) { + if (err) { + reject(err); + return; + } + + resolve(content); + }); + }); + }; + + AlgoliaSearchBrowser.prototype._promise = { + reject: function rejectPromise(val) { + return Promise.reject(val); + }, + resolve: function resolvePromise(val) { + return Promise.resolve(val); + }, + delay: function delayPromise(ms) { + return new Promise(function resolveOnTimeout(resolve/* , reject*/) { + setTimeout(resolve, ms); + }); + }, + all: function all(promises) { + return Promise.all(promises); + } + }; + + return algoliasearch; +}; + +}).call(this,require(12)) +},{"1":1,"12":12,"23":23,"24":24,"26":26,"3":3,"30":30,"35":35,"37":37,"6":6,"7":7}],23:[function(require,module,exports){ +'use strict'; + +module.exports = inlineHeaders; + +var encode = require(14); + +function inlineHeaders(url, headers) { + if (/\?/.test(url)) { + url += '&'; + } else { + url += '?'; + } + + return url + encode(headers); +} + +},{"14":14}],24:[function(require,module,exports){ +'use strict'; + +module.exports = jsonpRequest; + +var errors = require(30); + +var JSONPCounter = 0; + +function jsonpRequest(url, opts, cb) { + if (opts.method !== 'GET') { + cb(new Error('Method ' + opts.method + ' ' + url + ' is not supported by JSONP.')); + return; + } + + opts.debug('JSONP: start'); + + var cbCalled = false; + var timedOut = false; + + JSONPCounter += 1; + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + var cbName = 'algoliaJSONP_' + JSONPCounter; + var done = false; + + window[cbName] = function(data) { + removeGlobals(); + + if (timedOut) { + opts.debug('JSONP: Late answer, ignoring'); + return; + } + + cbCalled = true; + + clean(); + + cb(null, { + body: data, + responseText: JSON.stringify(data)/* , + // We do not send the statusCode, there's no statusCode in JSONP, it will be + // computed using data.status && data.message like with XDR + statusCode*/ + }); + }; + + // add callback by hand + url += '&callback=' + cbName; + + // add body params manually + if (opts.jsonBody && opts.jsonBody.params) { + url += '&' + opts.jsonBody.params; + } + + var ontimeout = setTimeout(timeout, opts.timeouts.complete); + + // script onreadystatechange needed only for + // <= IE8 + // https://github.com/angular/angular.js/issues/4523 + script.onreadystatechange = readystatechange; + script.onload = success; + script.onerror = error; + + script.async = true; + script.defer = true; + script.src = url; + head.appendChild(script); + + function success() { + opts.debug('JSONP: success'); + + if (done || timedOut) { + return; + } + + done = true; + + // script loaded but did not call the fn => script loading error + if (!cbCalled) { + opts.debug('JSONP: Fail. Script loaded but did not call the callback'); + clean(); + cb(new errors.JSONPScriptFail()); + } + } + + function readystatechange() { + if (this.readyState === 'loaded' || this.readyState === 'complete') { + success(); + } + } + + function clean() { + clearTimeout(ontimeout); + script.onload = null; + script.onreadystatechange = null; + script.onerror = null; + head.removeChild(script); + } + + function removeGlobals() { + try { + delete window[cbName]; + delete window[cbName + '_loaded']; + } catch (e) { + window[cbName] = window[cbName + '_loaded'] = undefined; + } + } + + function timeout() { + opts.debug('JSONP: Script timeout'); + timedOut = true; + clean(); + cb(new errors.RequestTimeout()); + } + + function error() { + opts.debug('JSONP: Script error'); + + if (done || timedOut) { + return; + } + + clean(); + cb(new errors.JSONPScriptError()); + } +} + +},{"30":30}],25:[function(require,module,exports){ +module.exports = buildSearchMethod; + +var errors = require(30); + +/** + * Creates a search method to be used in clients + * @param {string} queryParam the name of the attribute used for the query + * @param {string} url the url + * @return {function} the search method + */ +function buildSearchMethod(queryParam, url) { + /** + * The search method. Prepares the data and send the query to Algolia. + * @param {string} query the string used for query search + * @param {object} args additional parameters to send with the search + * @param {function} [callback] the callback to be called with the client gets the answer + * @return {undefined|Promise} If the callback is not provided then this methods returns a Promise + */ + return function search(query, args, callback) { + // warn V2 users on how to search + if (typeof query === 'function' && typeof args === 'object' || + typeof callback === 'object') { + // .search(query, params, cb) + // .search(cb, params) + throw new errors.AlgoliaSearchError('index.search usage is index.search(query, params, cb)'); + } + + // Normalizing the function signature + if (arguments.length === 0 || typeof query === 'function') { + // Usage : .search(), .search(cb) + callback = query; + query = ''; + } else if (arguments.length === 1 || typeof args === 'function') { + // Usage : .search(query/args), .search(query, cb) + callback = args; + args = undefined; + } + // At this point we have 3 arguments with values + + // Usage : .search(args) // careful: typeof null === 'object' + if (typeof query === 'object' && query !== null) { + args = query; + query = undefined; + } else if (query === undefined || query === null) { // .search(undefined/null) + query = ''; + } + + var params = ''; + + if (query !== undefined) { + params += queryParam + '=' + encodeURIComponent(query); + } + + var additionalUA; + if (args !== undefined) { + if (args.additionalUA) { + additionalUA = args.additionalUA; + delete args.additionalUA; + } + // `_getSearchParams` will augment params, do not be fooled by the = versus += from previous if + params = this.as._getSearchParams(args, params); + } + + + return this._search(params, url, callback, additionalUA); + }; +} + +},{"30":30}],26:[function(require,module,exports){ +module.exports = function clone(obj) { + return JSON.parse(JSON.stringify(obj)); +}; + +},{}],27:[function(require,module,exports){ +module.exports = createAnalyticsClient; + +var algoliasearch = require(21); + +function createAnalyticsClient(appId, apiKey, opts) { + var analytics = {}; + + opts = opts || {}; + // there need to be 4 hosts, like on the client, since if requests fail, + // the counter goes up by 1, so we need to have the same amount of hosts + // 4 because: -dsn, -1, -2, -3 + // This is done because the APPID used for search will be the same for the analytics client created, + // and since the state of available hosts is shared by APPID globally for the module, we had issues + // where the hostIndex would be 1 while the array was only one entry (you got an empty host) + opts.hosts = opts.hosts || [ + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com', + 'analytics.algolia.com' + ]; + opts.protocol = opts.protocol || 'https:'; + + analytics.as = algoliasearch(appId, apiKey, opts); + + analytics.getABTests = function(_params, callback) { + var params = params || {}; + var offset = params.offset || 0; + var limit = params.limit || 10; + + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests?offset=' + encodeURIComponent(offset) + '&limit=' + encodeURIComponent(limit), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.getABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'GET', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.addABTest = function(abTest, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests', + body: abTest, + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.stopABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'POST', + url: '/2/abtests/' + encodeURIComponent(abTestID) + '/stop', + hostType: 'read', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.deleteABTest = function(abTestID, callback) { + return this.as._jsonRequest({ + method: 'DELETE', + url: '/2/abtests/' + encodeURIComponent(abTestID), + hostType: 'write', + forceAuthHeaders: true, + callback: callback + }); + }; + + analytics.waitTask = function(indexName, taskID, callback) { + return this.as.initIndex(indexName).waitTask(taskID, callback); + }; + + return analytics; +} + +},{"21":21}],28:[function(require,module,exports){ +module.exports = function deprecate(fn, message) { + var warned = false; + + function deprecated() { + if (!warned) { + /* eslint no-console:0 */ + console.warn(message); + warned = true; + } + + return fn.apply(this, arguments); + } + + return deprecated; +}; + +},{}],29:[function(require,module,exports){ +module.exports = function deprecatedMessage(previousUsage, newUsage) { + var githubAnchorLink = previousUsage.toLowerCase() + .replace(/[\.\(\)]/g, ''); + + return 'algoliasearch: `' + previousUsage + '` was replaced by `' + newUsage + + '`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#' + githubAnchorLink; +}; + +},{}],30:[function(require,module,exports){ +'use strict'; + +// This file hosts our error definitions +// We use custom error "types" so that we can act on them when we need it +// e.g.: if error instanceof errors.UnparsableJSON then.. + +var inherits = require(7); + +function AlgoliaSearchError(message, extraProperties) { + var forEach = require(5); + + var error = this; + + // try to get a stacktrace + if (typeof Error.captureStackTrace === 'function') { + Error.captureStackTrace(this, this.constructor); + } else { + error.stack = (new Error()).stack || 'Cannot get a stacktrace, browser is too old'; + } + + this.name = 'AlgoliaSearchError'; + this.message = message || 'Unknown error'; + + if (extraProperties) { + forEach(extraProperties, function addToErrorObject(value, key) { + error[key] = value; + }); + } +} + +inherits(AlgoliaSearchError, Error); + +function createCustomError(name, message) { + function AlgoliaSearchCustomError() { + var args = Array.prototype.slice.call(arguments, 0); + + // custom message not set, use default + if (typeof args[0] !== 'string') { + args.unshift(message); + } + + AlgoliaSearchError.apply(this, args); + this.name = 'AlgoliaSearch' + name + 'Error'; + } + + inherits(AlgoliaSearchCustomError, AlgoliaSearchError); + + return AlgoliaSearchCustomError; +} + +// late exports to let various fn defs and inherits take place +module.exports = { + AlgoliaSearchError: AlgoliaSearchError, + UnparsableJSON: createCustomError( + 'UnparsableJSON', + 'Could not parse the incoming response as JSON, see err.more for details' + ), + RequestTimeout: createCustomError( + 'RequestTimeout', + 'Request timed out before getting a response' + ), + Network: createCustomError( + 'Network', + 'Network issue, see err.more for details' + ), + JSONPScriptFail: createCustomError( + 'JSONPScriptFail', + '"),window.ALGOLIA_SUPPORTS_DOCWRITE===!0?(document.write(''),n("document.write")()):r(o,n("DOMElement"))}catch(s){r(o,n("DOMElement"))}}function n(e){return function(){var t="AlgoliaSearch: loaded V2 script using "+e;window.console&&window.console.log&&window.console.log(t)}}t.exports=o},{1:1}],4:[function(e,t,r){"use strict";function o(){var e="-- AlgoliaSearch V2 => V3 error --\nYou are trying to use a new version of the AlgoliaSearch JavaScript client with an old notation.\nPlease read our migration guide at https://github.com/algolia/algoliasearch-client-js/wiki/Migration-guide-from-2.x.x-to-3.x.x\n-- /AlgoliaSearch V2 => V3 error --";window.AlgoliaSearch=function(){throw new Error(e)},window.AlgoliaSearchHelper=function(){throw new Error(e)},window.AlgoliaExplainResults=function(){throw new Error(e)}}t.exports=o},{}],5:[function(e,t,r){"use strict";function o(t){var r=e(2),o=e(3),n=e(4);r(t)?o(t):n()}o("algoliasearch")},{2:2,3:3,4:4}]},{},[5])(5)}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.algoliasearch=e()}}(function(){var e;return function t(e,r,o){function n(s,a){if(!r[s]){if(!e[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(i)return i(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};e[s][0].call(l.exports,function(t){var r=e[s][1][t];return n(r?r:t)},l,l.exports,t,e,r,o)}return r[s].exports}for(var i="function"==typeof require&&require,s=0;s=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+r.humanize(this.diff),t){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var n=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(n++,"%c"===e&&(i=n))}),e.splice(i,0,o)}}function s(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?r.storage.removeItem("debug"):r.storage.debug=e}catch(t){}}function c(){var e;try{e=r.storage.debug}catch(t){}return!e&&"undefined"!=typeof o&&"env"in o&&(e=o.env.DEBUG),e}function u(){try{return window.localStorage}catch(e){}}r=t.exports=e(2),r.log=s,r.formatArgs=i,r.save=a,r.load=c,r.useColors=n,r.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),r.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],r.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},r.enable(c())}).call(this,e(12))},{12:12,2:2}],2:[function(e,t,r){function o(e){var t,o=0;for(t in e)o=(o<<5)-o+e.charCodeAt(t),o|=0;return r.colors[Math.abs(o)%r.colors.length]}function n(e){function t(){if(t.enabled){var e=t,o=+new Date,n=o-(u||o);e.diff=n,e.prev=u,e.curr=o,u=o;for(var i=new Array(arguments.length),s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},o.prototype.on=o.prototype.addListener,o.prototype.once=function(e,t){function r(){this.removeListener(e,r),o||(o=!0,t.apply(this,arguments))}if(!n(t))throw TypeError("listener must be a function");var o=!1;return r.listener=t,this.on(e,r),this},o.prototype.removeListener=function(e,t){var r,o,i,a;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],i=r.length,o=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(a=i;a-- >0;)if(r[a]===t||r[a].listener&&r[a].listener===t){o=a;break}if(o<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(o,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},o.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],n(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},o.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},o.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},o.listenerCount=function(e,t){return e.listenerCount(t)}},{}],5:[function(e,t,r){var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString;t.exports=function(e,t,r){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var s=0;s100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),o=(t[2]||"ms").toLowerCase();switch(o){case"years":case"year":case"yrs":case"yr":case"y":return r*p;case"days":case"day":case"d":return r*l;case"hours":case"hour":case"hrs":case"hr":case"h":return r*u;case"minutes":case"minute":case"mins":case"min":case"m":return r*c;case"seconds":case"second":case"secs":case"sec":case"s":return r*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=l?Math.round(e/l)+"d":e>=u?Math.round(e/u)+"h":e>=c?Math.round(e/c)+"m":e>=a?Math.round(e/a)+"s":e+"ms"}function i(e){return s(e,l,"day")||s(e,u,"hour")||s(e,c,"minute")||s(e,a,"second")||e+" ms"}function s(e,t,r){if(!(e0)return o(e);if("number"===r&&isNaN(e)===!1)return t["long"]?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],10:[function(e,t,r){"use strict";var o=Object.prototype.hasOwnProperty,n=Object.prototype.toString,i=Array.prototype.slice,s=e(11),a=Object.prototype.propertyIsEnumerable,c=!a.call({toString:null},"toString"),u=a.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},d={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),f=function(e){if("undefined"==typeof window||!h)return p(e);try{return p(e)}catch(t){return!1}},y=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===n.call(e),i=s(e),a=t&&"[object String]"===n.call(e),p=[];if(!t&&!r&&!i)throw new TypeError("Object.keys called on a non-object");var d=u&&r;if(a&&e.length>0&&!o.call(e,0))for(var h=0;h0)for(var y=0;y=0&&"[object Function]"===o.call(e.callee)),r}},{}],12:[function(e,t,r){function o(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(p===setTimeout)return setTimeout(e,0);if((p===o||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function s(e){if(d===clearTimeout)return clearTimeout(e);if((d===n||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function a(){m&&f&&(m=!1,f.length?y=f.concat(y):v=-1,y.length&&c())}function c(){if(!m){var e=i(a);m=!0;for(var t=y.length;t;){for(f=y,y=[];++v1)for(var r=1;r0&&u>c&&(u=c);for(var l=0;l=0?(p=y.substr(0,m),d=y.substr(m+1)):(p=y,d=""),h=decodeURIComponent(p),f=decodeURIComponent(d),o(s,h)?n(s[h])?s[h].push(f):s[h]=[s[h],f]:s[h]=f}return s};var n=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],14:[function(e,t,r){"use strict";function o(e,t){if(e.map)return e.map(t);for(var r=[],o=0;o0)n.scope=r;else if("undefined"!=typeof r)throw new Error("the scope given to `copyIndex` was not an array with settings, synonyms or rules");return this._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(e)+"/operation",body:n,hostType:"write",callback:i})},o.prototype.getLogs=function(t,r,o){var n=e(26),i={};return"object"==typeof t?(i=n(t),o=r):0===arguments.length||"function"==typeof t?o=t:1===arguments.length||"function"==typeof r?(o=r,i.offset=t):(i.offset=t,i.length=r),void 0===i.offset&&(i.offset=0),void 0===i.length&&(i.length=10),this._jsonRequest({method:"GET",url:"/1/logs?"+this._getSearchParams(i,""),hostType:"read",callback:o})},o.prototype.listIndexes=function(e,t){var r="";return void 0===e||"function"==typeof e?t=e:r="?page="+e,this._jsonRequest({method:"GET",url:"/1/indexes"+r,hostType:"read",callback:t})},o.prototype.initIndex=function(e){return new i(this,e)},o.prototype.initAnalytics=function(t){var r=e(27);return r(this.applicationID,this.apiKey,t)},o.prototype.listUserKeys=s(function(e){return this.listApiKeys(e)},a("client.listUserKeys()","client.listApiKeys()")),o.prototype.listApiKeys=function(e){return this._jsonRequest({method:"GET",url:"/1/keys",hostType:"read",callback:e})},o.prototype.getUserKeyACL=s(function(e,t){return this.getApiKey(e,t)},a("client.getUserKeyACL()","client.getApiKey()")),o.prototype.getApiKey=function(e,t){return this._jsonRequest({method:"GET",url:"/1/keys/"+e,hostType:"read",callback:t})},o.prototype.deleteUserKey=s(function(e,t){return this.deleteApiKey(e,t)},a("client.deleteUserKey()","client.deleteApiKey()")),o.prototype.deleteApiKey=function(e,t){return this._jsonRequest({method:"DELETE",url:"/1/keys/"+e,hostType:"write",callback:t})},o.prototype.restoreApiKey=function(e,t){return this._jsonRequest({method:"POST",url:"/1/keys/"+e+"/restore",hostType:"write",callback:t})},o.prototype.addUserKey=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKey()","client.addApiKey()")),o.prototype.addApiKey=function(t,r,o){var n=e(8),i="Usage: client.addApiKey(arrayOfAcls[, params, callback])";if(!n(t))throw new Error(i);1!==arguments.length&&"function"!=typeof r||(o=r,r=null);var s={acl:t};return r&&(s.validity=r.validity,s.maxQueriesPerIPPerHour=r.maxQueriesPerIPPerHour,s.maxHitsPerQuery=r.maxHitsPerQuery,s.indexes=r.indexes,s.description=r.description,r.queryParameters&&(s.queryParameters=this._getSearchParams(r.queryParameters,"")),s.referers=r.referers),this._jsonRequest({method:"POST",url:"/1/keys",body:s,hostType:"write",callback:o})},o.prototype.addUserKeyWithValidity=s(function(e,t,r){return this.addApiKey(e,t,r)},a("client.addUserKeyWithValidity()","client.addApiKey()")),o.prototype.updateUserKey=s(function(e,t,r,o){return this.updateApiKey(e,t,r,o)},a("client.updateUserKey()","client.updateApiKey()")),o.prototype.updateApiKey=function(t,r,o,n){var i=e(8),s="Usage: client.updateApiKey(key, arrayOfAcls[, params, callback])";if(!i(r))throw new Error(s);2!==arguments.length&&"function"!=typeof o||(n=o,o=null);var a={acl:r};return o&&(a.validity=o.validity,a.maxQueriesPerIPPerHour=o.maxQueriesPerIPPerHour,a.maxHitsPerQuery=o.maxHitsPerQuery,a.indexes=o.indexes,a.description=o.description,o.queryParameters&&(a.queryParameters=this._getSearchParams(o.queryParameters,"")),a.referers=o.referers),this._jsonRequest({method:"PUT",url:"/1/keys/"+t,body:a,hostType:"write",callback:n})},o.prototype.startQueriesBatch=s(function(){this._batch=[]},a("client.startQueriesBatch()","client.search()")),o.prototype.addQueryInBatch=s(function(e,t,r){this._batch.push({indexName:e,query:t,params:r})},a("client.addQueryInBatch()","client.search()")),o.prototype.sendQueriesBatch=s(function(e){return this.search(this._batch,e)},a("client.sendQueriesBatch()","client.search()")),o.prototype.batch=function(t,r){var o=e(8),n="Usage: client.batch(operations[, callback])";if(!o(t))throw new Error(n);return this._jsonRequest({method:"POST",url:"/1/indexes/*/batch",body:{requests:t},hostType:"write",callback:r})},o.prototype.assignUserID=function(e,t){if(!e.userID||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both a userID and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping",hostType:"write",body:{cluster:e.cluster},callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.assignUserIDs=function(e,t){if(!e.userIDs||!e.cluster)throw new l.AlgoliaSearchError("You have to provide both an array of userIDs and cluster",e);return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/batch",hostType:"write",body:{cluster:e.cluster,users:e.userIDs},callback:t})},o.prototype.getTopUserID=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/top",hostType:"read",callback:e})},o.prototype.getUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"GET",url:"/1/clusters/mapping/"+e.userID,hostType:"read",callback:t})},o.prototype.listClusters=function(e){return this._jsonRequest({method:"GET",url:"/1/clusters",hostType:"read",callback:e})},o.prototype.listUserIDs=function(e,t){return this._jsonRequest({method:"GET",url:"/1/clusters/mapping",body:e,hostType:"read",callback:t})},o.prototype.removeUserID=function(e,t){if(!e.userID)throw new l.AlgoliaSearchError("You have to provide a userID",{debugData:e});return this._jsonRequest({method:"DELETE",url:"/1/clusters/mapping",hostType:"write",callback:t,headers:{"x-algolia-user-id":e.userID}})},o.prototype.searchUserIDs=function(e,t){return this._jsonRequest({method:"POST",url:"/1/clusters/mapping/search",body:e,hostType:"read",callback:t})},o.prototype.setPersonalizationStrategy=function(e,t){return this._jsonRequest({method:"POST",url:"/1/recommendation/personalization/strategy",body:e,hostType:"write",callback:t})},o.prototype.getPersonalizationStrategy=function(e){return this._jsonRequest({method:"GET",url:"/1/recommendation/personalization/strategy",hostType:"read",callback:e})},o.prototype.destroy=n,o.prototype.enableRateLimitForward=n,o.prototype.disableRateLimitForward=n,o.prototype.useSecuredAPIKey=n,o.prototype.disableSecuredAPIKey=n,o.prototype.generateSecuredApiKey=n,o.prototype.getSecuredApiKeyRemainingValidity=n},{17:17,18:18,26:26,27:27,28:28,29:29,30:30,7:7,8:8}],17:[function(e,t,r){ +(function(r){function o(t,r,o){var i=e(1)("algoliasearch"),s=e(26),a=e(8),u=e(32),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(o._allowEmptyCredentials!==!0&&!t)throw new c.AlgoliaSearchError("Please provide an application ID. "+l);if(o._allowEmptyCredentials!==!0&&!r)throw new c.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=r,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new c.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)a(o.hosts)?(this.hosts.read=s(o.hosts),this.hosts.write=s(o.hosts)):(this.hosts.read=s(o.hosts.read),this.hosts.write=s(o.hosts.write));else{var d=u(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"}),h=(o.dsn===!1?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+h].concat(d),this.hosts.write=[this.applicationID+".algolia.net"].concat(d)}this.hosts.read=u(this.hosts.read,n(p)),this.hosts.write=u(this.hosts.write,n(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,i("init done, %j",this)}function n(e){return function(t){return e+"//"+t.toLowerCase()}}function i(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function s(e){for(var t,r,o=e.length;0!==o;)r=Math.floor(Math.random()*o),o-=1,t=e[o],e[o]=e[r],e[r]=t;return e}function a(e){var t={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var o;o="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=o}return t}t.exports=o;var c=e(30),u=e(31),l=e(20),p=e(36),d=500,h=r.env.RESET_APP_DATA_TIMER&&parseInt(r.env.RESET_APP_DATA_TIMER,10)||12e4;o.prototype.initIndex=function(e){return new l(this,e)},o.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},o.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},o.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},o.prototype.addAlgoliaAgent=function(e){var t="; "+e;this._ua.indexOf(t)===-1&&(this._ua+=t)},o.prototype._jsonRequest=function(t){function r(e,n){function u(e){var t=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;h("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,t,e.headers);var r=2===Math.floor(t/100),o=new Date;if(w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:o,duration:o-x,statusCode:t}),r)return m._useCache&&!m._useRequestCache&&y&&(y[l]=e.responseText),{responseText:e.responseText,body:e.body};var i=4!==Math.floor(t/100);if(i)return v+=1,_();h("unrecoverable error");var u=new c.AlgoliaSearchError(e.body&&e.body.message,{debugData:w,statusCode:t});return m._promise.reject(u)}function d(e){h("error: %s, stack: %s",e.message,e.stack);var r=new Date;return w.push({currentHost:A,headers:a(p),content:s||null,contentLength:void 0!==s?s.length:null,method:n.method,timeouts:n.timeouts,url:n.url,startTime:x,endTime:r,duration:r-x}),e instanceof c.AlgoliaSearchError||(e=new c.Unknown(e&&e.message,e)),v+=1,e instanceof c.Unknown||e instanceof c.UnparsableJSON||v>=m.hosts[t.hostType].length&&(g||!b)?(e.debugData=w,m._promise.reject(e)):e instanceof c.RequestTimeout?T():_()}function _(){return h("retrying request"),m._incrementHostIndex(t.hostType),r(e,n)}function T(){return h("retrying request with higher timeout"),m._incrementHostIndex(t.hostType),m._incrementTimeoutMultipler(),n.timeouts=m._getTimeoutsForRequest(t.hostType),r(e,n)}m._checkAppIdData();var x=new Date;if(m._useCache&&!m._useRequestCache&&(l=t.url),m._useCache&&!m._useRequestCache&&s&&(l+="_body_"+n.body),o(!m._useRequestCache,y,l)){h("serving response from cache");var R=y[l];return m._promise.resolve({body:JSON.parse(R),responseText:R})}if(v>=m.hosts[t.hostType].length)return!b||g?(h("could not get any response"),m._promise.reject(new c.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+m.applicationID,{debugData:w}))):(h("switching to fallback"),v=0,n.method=t.fallback.method,n.url=t.fallback.url,n.jsonBody=t.fallback.body,n.jsonBody&&(n.body=i(n.jsonBody)),p=m._computeRequestHeaders({additionalUA:f,headers:t.headers}),n.timeouts=m._getTimeoutsForRequest(t.hostType),m._setHostIndexByType(0,t.hostType),g=!0,r(m._request.fallback,n));var A=m._getHostByType(t.hostType),j=A+n.url,S={body:n.body,jsonBody:n.jsonBody,method:n.method,headers:p,timeouts:n.timeouts,debug:h,forceAuthHeaders:n.forceAuthHeaders};return h("method: %s, url: %s, headers: %j, timeouts: %d",S.method,j,S.headers,S.timeouts),e===m._request.fallback&&h("using fallback"),e.call(m,j,S).then(u,d)}function o(e,t,r){return m._useCache&&e&&t&&void 0!==t[r]}function n(e,r){return o(m._useRequestCache,y,l)&&e["catch"](function(){delete y[l]}),"function"!=typeof t.callback?e.then(r):void e.then(function(e){u(function(){t.callback(null,r(e))},m._setTimeout||setTimeout)},function(e){u(function(){t.callback(e)},m._setTimeout||setTimeout)})}this._checkAppIdData();var s,l,p,h=e(1)("algoliasearch:"+t.url),f=t.additionalUA||"",y=t.cache,m=this,v=0,g=!1,b=m._useFallback&&m._request.fallback&&t.fallback;this.apiKey.length>d&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,p=this._computeRequestHeaders({additionalUA:f,withApiKey:!1,headers:t.headers})):p=this._computeRequestHeaders({additionalUA:f,headers:t.headers}),void 0!==t.body&&(s=i(t.body)),h("request start");var w=[];if(m._useCache&&m._useRequestCache&&(l=t.url),m._useCache&&m._useRequestCache&&s&&(l+="_body_"+s),o(m._useRequestCache,y,l)){h("serving request from cache");var _=y[l],T="function"!=typeof _.then?m._promise.resolve({responseText:_}):_;return n(T,function(e){return JSON.parse(e.responseText)})}var x=r(m._request,{url:t.url,method:t.method,body:s,jsonBody:t.body,timeouts:m._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return m._useCache&&m._useRequestCache&&y&&(y[l]=x),n(x,function(e){return e.body})},o.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?i(e[r]):e[r]));return t},o.prototype._computeRequestHeaders=function(t){var r=e(5),o=t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,n={"x-algolia-agent":o,"x-algolia-application-id":this.applicationID};return t.withApiKey!==!1&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),r(this.extraHeaders,function(e,t){n[t]=e}),t.headers&&r(t.headers,function(e,t){n[t]=e}),n},o.prototype.search=function(t,r,o){var n=e(8),i=e(32),s="Usage: client.search(arrayOfQueries[, callback])";if(!n(t))throw new Error(s);"function"==typeof r?(o=r,r={}):void 0===r&&(r={});var a=this,c={requests:i(t,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:a._getSearchParams(e.params,t)}})},u=i(c.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),l="/1/indexes/*/queries";return void 0!==r.strategy&&(c.strategy=r.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:l,body:c,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:o})},o.prototype.searchForFacetValues=function(t){var r=e(8),o=e(32),n="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!r(t))throw new Error(n);var i=this;return i._promise.all(o(t,function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(n);var r=e(26),o=e(34),s=t.indexName,a=t.params,c=a.facetName,u=o(r(a),function(e){return"facetName"===e}),l=i._getSearchParams(u,"");return i._jsonRequest({cache:i.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(c)+"/query",hostType:"read",body:{params:l}})}))},o.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;rh?this._resetInitialAppIdData(e):e},o.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||s([1,2,3]),this._setAppIdData(t)},o.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},o.prototype._partialAppIdDataUpdate=function(t){var r=e(5),o=this._getAppIdData();return r(t,function(e,t){o[t]=e}),this._setAppIdData(o)},o.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},o.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},o.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},o.prototype._setHostIndexByType=function(t,r){var o=e(26),n=o(this._hostIndexes);return n[r]=t,this._partialAppIdDataUpdate({hostIndexes:n}),t},o.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},o.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},o.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,e(12))},{1:1,12:12,20:20,26:26,30:30,31:31,32:32,34:34,36:36,5:5,8:8}],18:[function(e,t,r){function o(){s.apply(this,arguments)}function n(e,t,r){function o(r,n){var i={page:r||0,hitsPerPage:t||100},s=n||[];return e(i).then(function(e){var t=e.hits,r=e.nbHits,n=t.map(function(e){return delete e._highlightResult,e}),a=s.concat(n);return a.lengths&&(t=s),"published"!==e.status?l._promise.delay(t).then(r):e})}function o(e){u(function(){t(null,e)},l._setTimeout||setTimeout)}function n(e){u(function(){t(e)},l._setTimeout||setTimeout)}var i=100,s=5e3,a=0,c=this,l=c.as,p=r();return t?void p.then(o,n):p},o.prototype.clearIndex=function(e){var t=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/clear",hostType:"write",callback:e})},o.prototype.getSettings=function(e,t){1===arguments.length&&"function"==typeof e&&(t=e,e={}),e=e||{};var r=encodeURIComponent(this.indexName);return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+r+"/settings?getVersion=2"+(e.advanced?"&advanced="+e.advanced:""),hostType:"read",callback:t})},o.prototype.searchSynonyms=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/search",body:e,hostType:"read",callback:t})},o.prototype.exportSynonyms=function(e,t){return n(this.searchSynonyms.bind(this),e,t)},o.prototype.saveSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getSynonym=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteSynonym=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearSynonyms=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),void 0!==e.forwardToSlaves&&p();var r=e.forwardToSlaves||e.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchSynonyms=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={}),void 0!==t.forwardToSlaves&&p();var o=t.forwardToSlaves||t.forwardToReplicas?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/synonyms/batch?forwardToReplicas="+o+"&replaceExistingSynonyms="+(t.replaceExistingSynonyms?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.searchRules=function(e,t){return"function"==typeof e?(t=e,e={}):void 0===e&&(e={}),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/search",body:e,hostType:"read",callback:t})},o.prototype.exportRules=function(e,t){return n(this.searchRules.bind(this),e,t)},o.prototype.saveRule=function(e,t,r){if("function"==typeof t?(r=t,t={}):void 0===t&&(t={}),!e.objectID)throw new l.AlgoliaSearchError("Missing or empty objectID field for rule");var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e.objectID)+"?forwardToReplicas="+o,body:e,hostType:"write",callback:r})},o.prototype.getRule=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e),hostType:"read",callback:t})},o.prototype.deleteRule=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/"+encodeURIComponent(e)+"?forwardToReplicas="+o,hostType:"write",callback:r})},o.prototype.clearRules=function(e,t){"function"==typeof e?(t=e,e={}):void 0===e&&(e={});var r=e.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/clear?forwardToReplicas="+r,hostType:"write",callback:t})},o.prototype.batchRules=function(e,t,r){"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=t.forwardToReplicas===!0?"true":"false";return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/rules/batch?forwardToReplicas="+o+"&clearExistingRules="+(t.clearExistingRules===!0?"true":"false"),hostType:"write",body:e,callback:r})},o.prototype.exists=function(e){var t=this.getSettings().then(function(){return!0})["catch"](function(e){if(e instanceof l.AlgoliaSearchError&&404===e.statusCode)return!1;throw e});return"function"!=typeof e?t:void t.then(function(t){e(null,t)})["catch"](function(t){e(t)})},o.prototype.findObject=function(e,t,r){t=void 0===t?{}:t;var o=void 0===t.paginate||t.paginate,n=void 0!==t.query?t.query:"",i=this,s=0,a=function(){return t.page=s,i.search(n,t).then(function(t){for(var r=t.hits,n=0;n=t.nbPages)throw new l.ObjectNotFound("Object not found");return a()})},c=a(s);return void 0===r?c:void c.then(function(e){r(null,e)})["catch"](function(e){r(e)})},o.prototype.getObjectPosition=function(e,t){for(var r=e.hits,o=0;o1&&a()}if(!h.cors&&!h.hasXDomainRequest)return void o(new u.Network("CORS not supported"));e=l(e,t.headers);var d,f,y=t.body,m=h.cors?new XMLHttpRequest:new XDomainRequest,v=!1;d=setTimeout(s,t.timeouts.connect),m.onprogress=c,"onreadystatechange"in m&&(m.onreadystatechange=p),m.onload=n,m.onerror=i,m instanceof XMLHttpRequest?(m.open(t.method,e,!0),t.forceAuthHeaders&&(m.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),m.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):m.open(t.method,e),h.cors&&(y&&("POST"===t.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),y?m.send(y):m.send()})},a.prototype._request.fallback=function(e,t){return e=l(e,t.headers),new n(function(r,o){p(e,t,function(e,t){return e?void o(e):void r(t)})})},a.prototype._promise={reject:function(e){return n.reject(e)},resolve:function(e){return n.resolve(e)},delay:function(e){return new n(function(t){setTimeout(t,e)})},all:function(e){return n.all(e)}},s}}).call(this,e(12))},{1:1,12:12,23:23,24:24,26:26,3:3,30:30,35:35,37:37,6:6,7:7}],23:[function(e,t,r){"use strict";function o(e,t){return e+=/\?/.test(e)?"&":"?",e+n(t)}t.exports=o;var n=e(14)},{14:14}],24:[function(e,t,r){"use strict";function o(e,t,r){function o(){t.debug("JSONP: success"),m||d||(m=!0,p||(t.debug("JSONP: Fail. Script loaded but did not call the callback"), +a(),r(new n.JSONPScriptFail)))}function s(){"loaded"!==this.readyState&&"complete"!==this.readyState||o()}function a(){clearTimeout(v),f.onload=null,f.onreadystatechange=null,f.onerror=null,h.removeChild(f)}function c(){try{delete window[y],delete window[y+"_loaded"]}catch(e){window[y]=window[y+"_loaded"]=void 0}}function u(){t.debug("JSONP: Script timeout"),d=!0,a(),r(new n.RequestTimeout)}function l(){t.debug("JSONP: Script error"),m||d||(a(),r(new n.JSONPScriptError))}if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var p=!1,d=!1;i+=1;var h=document.getElementsByTagName("head")[0],f=document.createElement("script"),y="algoliaJSONP_"+i,m=!1;window[y]=function(e){return c(),d?void t.debug("JSONP: Late answer, ignoring"):(p=!0,a(),void r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+y,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var v=setTimeout(u,t.timeouts.complete);f.onreadystatechange=s,f.onload=o,f.onerror=l,f.async=!0,f.defer=!0,f.src=e,h.appendChild(f)}t.exports=o;var n=e(30),i=0},{30:30}],25:[function(e,t,r){function o(e,t){return function(r,o,i){if("function"==typeof r&&"object"==typeof o||"object"==typeof i)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(i=r,r=""):1!==arguments.length&&"function"!=typeof o||(i=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):void 0!==r&&null!==r||(r="");var s="";void 0!==r&&(s+=e+"="+encodeURIComponent(r));var a;return void 0!==o&&(o.additionalUA&&(a=o.additionalUA,delete o.additionalUA),s=this.as._getSearchParams(o,s)),this._search(s,t,i,a)}}t.exports=o;var n=e(30)},{30:30}],26:[function(e,t,r){t.exports=function(e){return JSON.parse(JSON.stringify(e))}},{}],27:[function(e,t,r){function o(e,t,r){var o={};return r=r||{},r.hosts=r.hosts||["analytics.algolia.com","analytics.algolia.com","analytics.algolia.com","analytics.algolia.com"],r.protocol=r.protocol||"https:",o.as=n(e,t,r),o.getABTests=function(e,t){var r=r||{},o=r.offset||0,n=r.limit||10;return this.as._jsonRequest({method:"GET",url:"/2/abtests?offset="+encodeURIComponent(o)+"&limit="+encodeURIComponent(n),hostType:"read",forceAuthHeaders:!0,callback:t})},o.getABTest=function(e,t){return this.as._jsonRequest({method:"GET",url:"/2/abtests/"+encodeURIComponent(e),hostType:"read",forceAuthHeaders:!0,callback:t})},o.addABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests",body:e,hostType:"read",forceAuthHeaders:!0,callback:t})},o.stopABTest=function(e,t){return this.as._jsonRequest({method:"POST",url:"/2/abtests/"+encodeURIComponent(e)+"/stop",hostType:"read",forceAuthHeaders:!0,callback:t})},o.deleteABTest=function(e,t){return this.as._jsonRequest({method:"DELETE",url:"/2/abtests/"+encodeURIComponent(e),hostType:"write",forceAuthHeaders:!0,callback:t})},o.waitTask=function(e,t,r){return this.as.initIndex(e).waitTask(t,r)},o}t.exports=o;var n=e(21)},{21:21}],28:[function(e,t,r){t.exports=function(e,t){function r(){return o||(console.warn(t),o=!0),e.apply(this,arguments)}var o=!1;return r}},{}],29:[function(e,t,r){t.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},{}],30:[function(e,t,r){"use strict";function o(t,r){var o=e(5),n=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):n.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",r&&o(r,function(e,t){n[t]=e})}function n(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return i(r,o),r}var i=e(7);i(o,Error),t.exports={AlgoliaSearchError:o,UnparsableJSON:n("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:n("RequestTimeout","Request timed out before getting a response"),Network:n("Network","Network issue, see err.more for details"),JSONPScriptFail:n("JSONPScriptFail"," + + + + + + + + + + + + + + + + + + + +分类: Career | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Career + 分类 +

+
+ + +
+ 2024 +
+ + +
+ 2022 +
+ + + + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/DevOps/index.html b/categories/DevOps/index.html new file mode 100644 index 0000000..67f0dae --- /dev/null +++ b/categories/DevOps/index.html @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +分类: DevOps | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

DevOps + 分类 +

+
+ + +
+ 2024 +
+ + + + + + + + +
+ 2023 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Install/index.html b/categories/Install/index.html new file mode 100644 index 0000000..a2fb8e5 --- /dev/null +++ b/categories/Install/index.html @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +分类: Install | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Install + 分类 +

+
+ + +
+ 2022 +
+ + + + + + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Language/index.html b/categories/Language/index.html new file mode 100644 index 0000000..36abb3d --- /dev/null +++ b/categories/Language/index.html @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +分类: Language | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Language + 分类 +

+
+ + +
+ 2023 +
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/Leetcode/index.html b/categories/Leetcode/index.html new file mode 100644 index 0000000..379859a --- /dev/null +++ b/categories/Leetcode/index.html @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +分类: Leetcode | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Leetcode + 分类 +

+
+ + +
+ 2022 +
+ + + + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..ad51a44 --- /dev/null +++ b/categories/index.html @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +categories | 业精于勤荒于嬉 + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ +

categories +

+ + + +
+ + + +
+
+ 目前共计 5 个分类 +
+ +
+ +
+ + + +
+ + + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000..556abe9 --- /dev/null +++ b/css/main.css @@ -0,0 +1,2510 @@ +:root { + --body-bg-color: #eee; + --content-bg-color: #fff; + --card-bg-color: #f5f5f5; + --text-color: #555; + --blockquote-color: #666; + --link-color: #555; + --link-hover-color: #222; + --brand-color: #fff; + --brand-hover-color: #fff; + --table-row-odd-bg-color: #f9f9f9; + --table-row-hover-bg-color: #f5f5f5; + --menu-item-bg-color: #f5f5f5; + --theme-color: #222; + --btn-default-bg: #fff; + --btn-default-color: #555; + --btn-default-border-color: #555; + --btn-default-hover-bg: #222; + --btn-default-hover-color: #fff; + --btn-default-hover-border-color: #222; + --highlight-background: #f3f3f3; + --highlight-foreground: #444; + --highlight-gutter-background: #e1e1e1; + --highlight-gutter-foreground: #555; + color-scheme: light; +} +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: #eee; +} +html, +body { + height: 100%; +} +body { + background: var(--body-bg-color); + box-sizing: border-box; + color: var(--text-color); + font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-size: 1em; + line-height: 2; + min-height: 100%; + position: relative; + transition: padding 0.2s ease-in-out; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-weight: bold; + line-height: 1.5; + margin: 30px 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; +} +a { + border-bottom: 1px solid #999; + color: var(--link-color); + cursor: pointer; + outline: 0; + text-decoration: none; + overflow-wrap: break-word; +} +a:hover { + border-bottom-color: var(--link-hover-color); + color: var(--link-hover-color); +} +iframe, +img, +video, +embed { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 100%; +} +hr { + background-image: repeating-linear-gradient(-45deg, #ddd, #ddd 4px, transparent 4px, transparent 8px); + border: 0; + height: 3px; + margin: 40px 0; +} +blockquote { + border-left: 4px solid #ddd; + color: var(--blockquote-color); + margin: 0; + padding: 0 15px; +} +blockquote cite::before { + content: '-'; + padding: 0 5px; +} +dt { + font-weight: bold; +} +dd { + margin: 0; + padding: 0; +} +.table-container { + overflow: auto; +} +table { + border-collapse: collapse; + border-spacing: 0; + font-size: 0.875em; + margin: 0 0 20px; + width: 100%; +} +tbody tr:nth-of-type(odd) { + background: var(--table-row-odd-bg-color); +} +tbody tr:hover { + background: var(--table-row-hover-bg-color); +} +caption, +th, +td { + padding: 8px; +} +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: var(--btn-default-bg); + border: 2px solid var(--btn-default-border-color); + border-radius: 2px; + color: var(--btn-default-color); + display: inline-block; + font-size: 0.875em; + line-height: 2; + padding: 0 20px; + transition: background-color 0.2s ease-in-out; +} +.btn:hover { + background: var(--btn-default-hover-bg); + border-color: var(--btn-default-hover-border-color); + color: var(--btn-default-hover-color); +} +.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: block; + height: 2px; + left: 0; + position: relative; + top: 0; + transition: all 0.4s; + width: 100%; +} +.toggle .toggle-line:first-child { + margin-top: 1px; +} +.toggle .toggle-line:not(:first-child) { + margin-top: 4px; +} +.toggle.toggle-arrow :first-child { + left: 50%; + top: 2px; + transform: rotate(45deg); + width: 50%; +} +.toggle.toggle-arrow :last-child { + left: 50%; + top: -2px; + transform: rotate(-45deg); + width: 50%; +} +.toggle.toggle-close :nth-child(2) { + opacity: 0; +} +.toggle.toggle-close :first-child { + top: 6px; + transform: rotate(45deg); +} +.toggle.toggle-close :last-child { + top: -6px; + transform: rotate(-45deg); +} +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} +code, +kbd, +figure.highlight, +pre { + background: var(--highlight-background); + color: var(--highlight-foreground); +} +figure.highlight, +pre { + line-height: 1.6; + margin: 0 auto 20px; +} +figure.highlight figcaption, +pre .caption, +pre figcaption { + background: var(--highlight-gutter-background); + color: var(--highlight-foreground); + display: flow-root; + font-size: 0.875em; + line-height: 1.2; + padding: 0.5em; +} +figure.highlight figcaption a, +pre .caption a, +pre figcaption a { + color: var(--highlight-foreground); + float: right; +} +figure.highlight figcaption a:hover, +pre .caption a:hover, +pre figcaption a:hover { + border-bottom-color: var(--highlight-foreground); +} +pre, +code { + font-family: consolas, Menlo, monospace, 'PingFang SC', 'Microsoft YaHei'; +} +code { + border-radius: 3px; + font-size: 0.875em; + padding: 2px 4px; + overflow-wrap: break-word; +} +kbd { + border: 2px 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; +} +figure.highlight { + overflow: auto; + position: relative; +} +figure.highlight pre { + border: 0; + margin: 0; + padding: 10px 0; +} +figure.highlight table { + border: 0; + margin: 0; + width: auto; +} +figure.highlight td { + border: 0; + padding: 0; +} +figure.highlight .gutter { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +figure.highlight .gutter pre { + background: var(--highlight-gutter-background); + color: var(--highlight-gutter-foreground); + padding-left: 10px; + padding-right: 10px; + text-align: right; +} +figure.highlight .code pre { + padding-left: 10px; + width: 100%; +} +figure.highlight .marked { + background: rgba(0,0,0,0.3); +} +pre .caption, +pre figcaption { + margin-bottom: 10px; +} +.gist table { + width: auto; +} +.gist table td { + border: 0; +} +pre { + overflow: auto; + padding: 10px; + position: relative; +} +pre code { + background: none; + padding: 0; + text-shadow: none; +} +.blockquote-center { + border-left: 0; + margin: 40px 0; + padding: 0; + position: relative; + text-align: center; +} +.blockquote-center::before, +.blockquote-center::after { + left: 0; + line-height: 1; + opacity: 0.6; + position: absolute; + width: 100%; +} +.blockquote-center::before { + border-top: 1px solid #ccc; + text-align: left; + top: -20px; + content: '\f10d'; + font-family: 'Font Awesome 6 Free'; + font-weight: 900; +} +.blockquote-center::after { + border-bottom: 1px solid #ccc; + bottom: -20px; + text-align: right; + content: '\f10e'; + font-family: 'Font Awesome 6 Free'; + font-weight: 900; +} +.blockquote-center p, +.blockquote-center div { + text-align: center; +} +.group-picture { + margin-bottom: 20px; +} +.group-picture .group-picture-row { + display: flex; + gap: 3px; + margin-bottom: 3px; +} +.group-picture .group-picture-column { + flex: 1; +} +.group-picture .group-picture-column img { + height: 100%; + margin: 0; + object-fit: cover; + width: 100%; +} +.post-body .label { + color: #555; + 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 .link-grid { + display: grid; + grid-gap: 1.5rem; + gap: 1.5rem; + grid-template-columns: 1fr 1fr; + margin-bottom: 20px; + padding: 1rem; +} +@media (max-width: 767px) { + .post-body .link-grid { + grid-template-columns: 1fr; + } +} +.post-body .link-grid .link-grid-container { + border: solid #ddd; + box-shadow: 1rem 1rem 0.5rem rgba(0,0,0,0.5); + min-height: 5rem; + min-width: 0; + padding: 0.5rem; + position: relative; + transition: background 0.3s; +} +.post-body .link-grid .link-grid-container:hover { + animation: next-shake 0.5s; + background: var(--card-bg-color); +} +.post-body .link-grid .link-grid-container:active { + box-shadow: 0.5rem 0.5rem 0.25rem rgba(0,0,0,0.5); + transform: translate(0.2rem, 0.2rem); +} +.post-body .link-grid .link-grid-container .link-grid-image { + border: 1px solid #ddd; + border-radius: 50%; + box-sizing: border-box; + height: 5rem; + padding: 3px; + position: absolute; + width: 5rem; +} +.post-body .link-grid .link-grid-container p { + margin: 0 1rem 0 6rem; +} +.post-body .link-grid .link-grid-container p:first-of-type { + font-size: 1.2em; +} +.post-body .link-grid .link-grid-container p:last-of-type { + font-size: 0.8em; + line-height: 1.3rem; + opacity: 0.7; +} +.post-body .link-grid .link-grid-container a { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +@keyframes next-shake { + 0% { + transform: translate(1pt, 1pt) rotate(0deg); + } + 10% { + transform: translate(-1pt, -2pt) rotate(-1deg); + } + 20% { + transform: translate(-3pt, 0pt) rotate(1deg); + } + 30% { + transform: translate(3pt, 2pt) rotate(0deg); + } + 40% { + transform: translate(1pt, -1pt) rotate(1deg); + } + 50% { + transform: translate(-1pt, 2pt) rotate(-1deg); + } + 60% { + transform: translate(-3pt, 1pt) rotate(0deg); + } + 70% { + transform: translate(3pt, 1pt) rotate(-1deg); + } + 80% { + transform: translate(-1pt, -1pt) rotate(1deg); + } + 90% { + transform: translate(1pt, 2pt) rotate(0deg); + } + 100% { + transform: translate(1pt, -2pt) rotate(-1deg); + } +} +.post-body .note { + border-radius: 3px; + margin-bottom: 20px; + padding: 1em; + position: relative; + border: 1px solid #eee; + border-left-width: 5px; +} +.post-body .note summary { + cursor: pointer; + outline: 0; +} +.post-body .note summary p { + display: inline; +} +.post-body .note h2, +.post-body .note h3, +.post-body .note h4, +.post-body .note h5, +.post-body .note h6 { + border-bottom: initial; + margin: 0; + padding-top: 0; +} +.post-body .note :first-child { + margin-top: 0; +} +.post-body .note :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; +} +.post-body .tabs { + margin-bottom: 20px; +} +.post-body .tabs, +.tabs-comment { + padding-top: 10px; +} +.post-body .tabs ul.nav-tabs, +.tabs-comment ul.nav-tabs { + background: var(--content-bg-color); + display: flex; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 0; + padding: 0; + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 5; +} +@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 { + border-bottom: 1px solid #ddd; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-radius: 0 0 0 0; + border-top: 3px solid transparent; + flex-grow: 1; + list-style-type: none; +} +@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; + padding: 0.25em 0.75em; + text-align: center; + transition: all 0.2s 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-color: transparent; + border-left-color: #ddd; + border-right-color: #ddd; + border-top-color: #fc6423; +} +@media (max-width: 413px) { + .post-body .tabs ul.nav-tabs li.tab.active, + .tabs-comment ul.nav-tabs li.tab.active { + border-bottom-color: #ddd; + border-left-color: #fc6423; + border-right-color: #ddd; + border-top-color: #ddd; + } +} +.post-body .tabs ul.nav-tabs li.tab.active a, +.tabs-comment ul.nav-tabs li.tab.active a { + cursor: default; +} +.post-body .tabs .tab-content, +.tabs-comment .tab-content { + border: 1px solid #ddd; + border-radius: 0 0 0 0; + border-top-color: transparent; +} +@media (max-width: 413px) { + .post-body .tabs .tab-content, + .tabs-comment .tab-content { + border-radius: 0; + border-top-color: #ddd; + } +} +.post-body .tabs .tab-content .tab-pane, +.tabs-comment .tab-content .tab-pane { + padding: 20px 20px 0; +} +.post-body .tabs .tab-content .tab-pane:not(.active), +.tabs-comment .tab-content .tab-pane:not(.active) { + display: none; +} +.pagination .prev, +.pagination .next, +.pagination .page-number, +.pagination .space { + display: inline-block; + margin: -1px 10px 0; + padding: 0 10px; +} +@media (max-width: 767px) { + .pagination .prev, + .pagination .next, + .pagination .page-number, + .pagination .space { + margin: 0 5px; + } +} +.pagination .page-number.current { + background: #ccc; + border-color: #ccc; + color: var(--content-bg-color); +} +.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: border-color 0.2s ease-in-out; +} +.pagination .prev:hover, +.pagination .next:hover, +.pagination .page-number:hover { + border-top-color: var(--link-hover-color); +} +@media (max-width: 767px) { + .pagination { + border-top: 0; + } + .pagination .prev, + .pagination .next, + .pagination .page-number { + border-bottom: 1px solid #eee; + border-top: 0; + } + .pagination .prev:hover, + .pagination .next:hover, + .pagination .page-number:hover { + border-bottom-color: var(--link-hover-color); + } +} +.pagination .space { + margin: 0; + padding: 0; +} +.comments { + margin-top: 60px; + overflow: hidden; +} +.comment-button-group { + display: flex; + display: flex; + flex-wrap: wrap; + justify-content: center; + justify-content: center; + margin: 1em 0; +} +.comment-button-group .comment-button { + margin: 0.1em 0.2em; +} +.comment-button-group .comment-button.active { + background: var(--btn-default-hover-bg); + border-color: var(--btn-default-hover-border-color); + color: var(--btn-default-hover-color); +} +.comment-position { + display: none; +} +.comment-position.active { + display: block; +} +.tabs-comment { + margin-top: 4em; + padding-top: 0; +} +.tabs-comment .comments { + margin-top: 0; + padding-top: 0; +} +.headband { + background: var(--theme-color); + height: 3px; +} +@media (max-width: 991px) { + .headband { + display: none; + } +} +.site-brand-container { + display: flex; + flex-shrink: 0; + padding: 0 10px; +} +.use-motion .column, +.use-motion .site-brand-container .toggle { + opacity: 0; +} +.site-meta { + flex-grow: 1; + text-align: center; +} +@media (max-width: 767px) { + .site-meta { + text-align: center; + } +} +.custom-logo-image { + margin-top: 20px; +} +@media (max-width: 991px) { + .custom-logo-image { + display: none; + } +} +.brand { + border-bottom: 0; + color: var(--brand-color); + display: inline-block; + padding: 0; +} +.brand:hover { + color: var(--brand-hover-color); +} +.site-title { + font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-size: 1.375em; + font-weight: normal; + line-height: 1.5; + margin: 0; +} +.site-subtitle { + color: #ddd; + font-size: 0.8125em; + margin: 10px 10px 0; +} +.use-motion .site-title, +.use-motion .site-subtitle, +.use-motion .custom-logo-image { + opacity: 0; + position: relative; + top: -10px; +} +.site-nav-toggle, +.site-nav-right { + display: none; +} +@media (max-width: 767px) { + .site-nav-toggle, + .site-nav-right { + display: flex; + flex-direction: column; + justify-content: center; + } +} +.site-nav-toggle .toggle, +.site-nav-right .toggle { + color: var(--text-color); + padding: 10px; + width: 22px; +} +.site-nav-toggle .toggle .toggle-line, +.site-nav-right .toggle .toggle-line { + background: var(--text-color); + border-radius: 1px; +} +@media (max-width: 767px) { + .site-nav { + --scroll-height: 0; + height: 0; + overflow: hidden; + transition: 0.2s ease-in-out; + transition-property: height, visibility; + visibility: hidden; + } + body:not(.site-nav-on) .site-nav .animated { + animation: none; + } + body.site-nav-on .site-nav { + height: var(--scroll-height); + visibility: unset; + } +} +.menu { + margin: 0; + padding: 1em 0; + text-align: center; +} +.menu-item { + display: inline-block; + list-style: none; + margin: 0 10px; +} +@media (max-width: 767px) { + .menu-item { + display: block; + margin-top: 10px; + } + .menu-item.menu-item-search { + display: none; + } +} +.menu-item a { + border-bottom: 0; + display: block; + font-size: 0.8125em; + transition: border-color 0.2s ease-in-out; +} +.menu-item a:hover, +.menu-item a.menu-item-active { + background: var(--menu-item-bg-color); +} +.menu-item .fa, +.menu-item .fab, +.menu-item .far, +.menu-item .fas { + margin-right: 8px; +} +.menu-item .badge { + display: inline-block; + font-weight: bold; + 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 { + visibility: hidden; +} +.sidebar-inner { + color: #999; + padding: 18px 10px; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; +} +.cc-license .cc-opacity { + border-bottom: 0; + opacity: 0.7; +} +.cc-license .cc-opacity:hover { + opacity: 0.9; +} +.cc-license img { + display: inline-block; +} +.site-author-image { + border: 1px solid #eee; + max-width: 120px; + padding: 2px; +} +.site-author-name { + color: var(--text-color); + font-weight: 600; + margin: 0; +} +.site-description { + color: #999; + font-size: 0.8125em; + margin-top: 0; +} +.links-of-author a { + font-size: 0.8125em; +} +.links-of-author .fa, +.links-of-author .fab, +.links-of-author .far, +.links-of-author .fas { + margin-right: 2px; +} +.sidebar .sidebar-button:not(:first-child) { + margin-top: 15px; +} +.sidebar .sidebar-button button { + background: transparent; + color: #fc6423; + cursor: pointer; + line-height: 2; + padding: 0 15px; + border: 1px solid #fc6423; + border-radius: 4px; +} +.sidebar .sidebar-button button:hover { + background: #fc6423; + color: #fff; +} +.sidebar .sidebar-button button .fa, +.sidebar .sidebar-button button .fab, +.sidebar .sidebar-button button .far, +.sidebar .sidebar-button button .fas { + margin-right: 5px; +} +.links-of-blogroll { + font-size: 0.8125em; +} +.links-of-blogroll-title { + font-size: 0.875em; + font-weight: 600; +} +.links-of-blogroll-list { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar-nav { + font-size: 0.875em; + height: 0; + margin: 0; + overflow: hidden; + padding-left: 0; + pointer-events: none; + transition: 0.2s ease-in-out; + transition-property: height, visibility; + visibility: hidden; +} +.sidebar-nav-active .sidebar-nav { + height: calc(2em + 1px); + pointer-events: unset; + visibility: unset; +} +.sidebar-nav li { + border-bottom: 1px solid transparent; + color: var(--text-color); + cursor: pointer; + display: inline-block; + transition: 0.2s ease-in-out; + transition-property: border-bottom-color, color; +} +.sidebar-nav li.sidebar-nav-overview { + margin-left: 10px; +} +.sidebar-nav li:hover { + color: #fc6423; +} +.sidebar-toc-active .sidebar-nav-toc, +.sidebar-overview-active .sidebar-nav-overview { + border-bottom-color: #fc6423; + color: #fc6423; + transition-delay: 0.2s; +} +.sidebar-toc-active .sidebar-nav-toc:hover, +.sidebar-overview-active .sidebar-nav-overview:hover { + color: #fc6423; +} +.sidebar-panel-container { + align-items: start; + display: grid; + flex: 1; + overflow-x: hidden; + overflow-y: auto; + padding-top: 0; + transition: padding-top 0.2s ease-in-out; +} +.sidebar-nav-active .sidebar-panel-container { + padding-top: 20px; +} +.sidebar-panel { + animation: deactivate-sidebar-panel 0.2s ease-in-out; + grid-area: 1/1; + height: 0; + opacity: 0; + overflow: hidden; + pointer-events: none; + transform: translateY(0); + transition: 0.2s ease-in-out; + transition-delay: 0s; + transition-property: opacity, transform, visibility; + visibility: hidden; +} +.sidebar-nav-active .sidebar-panel, +.sidebar-overview-active .sidebar-panel.post-toc-wrap { + transform: translateY(-20px); +} +.sidebar-overview-active:not(.sidebar-nav-active) .sidebar-panel.post-toc-wrap { + transition-delay: 0s, 0.2s, 0s; +} +.sidebar-overview-active .sidebar-panel.site-overview-wrap, +.sidebar-toc-active .sidebar-panel.post-toc-wrap { + animation-name: activate-sidebar-panel; + height: auto; + opacity: 1; + pointer-events: unset; + transform: translateY(0); + transition-delay: 0.2s, 0.2s, 0s; + visibility: unset; +} +.sidebar-panel.site-overview-wrap { + display: flex; + flex-direction: column; + justify-content: center; + gap: 10px; + justify-content: flex-start; +} +@keyframes deactivate-sidebar-panel { + from { + height: var(--inactive-panel-height, 0); + } + to { + height: var(--active-panel-height, 0); + } +} +@keyframes activate-sidebar-panel { + from { + height: var(--inactive-panel-height, auto); + } + to { + height: var(--active-panel-height, auto); + } +} +.sidebar-toggle { + bottom: 61px; + height: 16px; + padding: 5px; + width: 16px; + background: #222; + cursor: pointer; + opacity: 0.6; + position: fixed; + z-index: 30; + right: 30px; +} +@media (max-width: 991px) { + .sidebar-toggle { + right: 20px; + } +} +.sidebar-toggle:hover { + opacity: 0.8; +} +@media (max-width: 991px) { + .sidebar-toggle { + opacity: 0.8; + } +} +.sidebar-toggle:hover .toggle-line { + background: #fc6423; +} +@media (any-hover: hover) { + body:not(.sidebar-active) .sidebar-toggle:hover :first-child { + left: 50%; + top: 2px; + transform: rotate(45deg); + width: 50%; + } + body:not(.sidebar-active) .sidebar-toggle:hover :last-child { + left: 50%; + top: -2px; + transform: rotate(-45deg); + width: 50%; + } +} +.sidebar-active .sidebar-toggle :nth-child(2) { + opacity: 0; +} +.sidebar-active .sidebar-toggle :first-child { + top: 6px; + transform: rotate(45deg); +} +.sidebar-active .sidebar-toggle :last-child { + top: -6px; + transform: rotate(-45deg); +} +.post-toc { + font-size: 0.875em; +} +.post-toc ol { + list-style: none; + margin: 0; + padding: 0 2px 0 10px; + text-align: left; +} +.post-toc ol > :last-child { + margin-bottom: 5px; +} +.post-toc ol > ol { + padding-left: 0; +} +.post-toc ol a { + transition: all 0.2s ease-in-out; +} +.post-toc .nav-item { + line-height: 1.8; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.post-toc .nav .nav-child { + --height: 0; + height: 0; + opacity: 0; + overflow: hidden; + transition-property: height, opacity, visibility; + transition: 0.2s ease-in-out; + visibility: hidden; +} +.post-toc .nav .active > .nav-child { + height: var(--height, auto); + opacity: 1; + visibility: unset; +} +.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; + flex-wrap: wrap; + justify-content: center; + line-height: 1.4; +} +.site-state-item { + padding: 0 15px; +} +.site-state-item a { + border-bottom: 0; + display: block; +} +.site-state-item-count { + display: block; + font-size: 1em; + font-weight: 600; +} +.site-state-item-name { + color: #999; + font-size: 0.8125em; +} +.footer { + color: #999; + font-size: 0.875em; + padding: 20px 0; + transition: 0.2s ease-in-out; + transition-property: left, right; +} +.footer.footer-fixed { + bottom: 0; + left: 0; + position: absolute; + right: 0; +} +.footer-inner { + box-sizing: border-box; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + margin: 0 auto; + width: calc(100% - 20px); +} +@media (max-width: 767px) { + .footer-inner { + width: auto; + } +} +@media (min-width: 1200px) { + .footer-inner { + width: 1160px; + } +} +@media (min-width: 1600px) { + .footer-inner { + width: 73%; + } +} +.use-motion .footer { + opacity: 0; +} +.languages { + display: inline-block; + font-size: 1.125em; + position: relative; +} +.languages .lang-select-label span { + margin: 0 0.5em; +} +.languages .lang-select { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; +} +.with-love { + color: #f00; + display: inline-block; + margin: 0 5px; +} +@keyframes icon-animate { + 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 { + font-size: 12px; + align-items: center; + bottom: -100px; + color: #fff; + display: flex; + height: 26px; + transition: bottom 0.2s ease-in-out; + background: #222; + cursor: pointer; + opacity: 0.6; + position: fixed; + z-index: 30; + right: 30px; +} +.back-to-top span { + margin-right: 8px; + display: none; +} +.back-to-top .fa { + text-align: center; + width: 26px; +} +@media (max-width: 991px) { + .back-to-top { + right: 20px; + } +} +.back-to-top:hover { + opacity: 0.8; +} +@media (max-width: 991px) { + .back-to-top { + opacity: 0.8; + } +} +.back-to-top:hover { + color: #fc6423; +} +.back-to-top.back-to-top-on { + bottom: 30px; +} +.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-button { + margin-top: 40px; + text-align: center; +} +.use-motion .post-block, +.use-motion .pagination, +.use-motion .comments { + visibility: hidden; +} +.use-motion .post-header { + visibility: hidden; +} +.use-motion .post-body { + visibility: hidden; +} +.use-motion .collection-header { + visibility: hidden; +} +.posts-collapse .post-content { + margin-bottom: 35px; + margin-left: 35px; + position: relative; +} +@media (max-width: 767px) { + .posts-collapse .post-content { + margin-left: 0; + margin-right: 0; + } +} +.posts-collapse .post-content .collection-title { + font-size: 1.125em; + position: relative; +} +.posts-collapse .post-content .collection-title::before { + background: #999; + border: 1px solid #fff; + margin-left: -6px; + margin-top: -4px; + position: absolute; + top: 50%; + border-radius: 50%; + content: ' '; + height: 10px; + width: 10px; +} +.posts-collapse .post-content .collection-year { + font-size: 1.5em; + font-weight: bold; + margin: 60px 0; + position: relative; +} +.posts-collapse .post-content .collection-year::before { + background: #bbb; + margin-left: -4px; + margin-top: -4px; + position: absolute; + top: 50%; + border-radius: 50%; + content: ' '; + height: 8px; + width: 8px; +} +.posts-collapse .post-content .collection-header { + display: block; + margin-left: 20px; +} +.posts-collapse .post-content .collection-header small { + color: #bbb; + margin-left: 5px; +} +.posts-collapse .post-content .post-header { + border-bottom: 1px dashed #ccc; + margin: 30px 2px 0; + padding-left: 15px; + position: relative; + transition: border 0.2s ease-in-out; +} +.posts-collapse .post-content .post-header::before { + background: #bbb; + border: 1px solid #fff; + left: -6px; + position: absolute; + top: 0.75em; + transition: background 0.2s ease-in-out; + border-radius: 50%; + content: ' '; + height: 6px; + width: 6px; +} +.posts-collapse .post-content .post-header:hover { + border-bottom-color: #666; +} +.posts-collapse .post-content .post-header:hover::before { + background: #222; +} +.posts-collapse .post-content .post-meta-container { + display: inline; + font-size: 0.75em; + margin-right: 10px; +} +.posts-collapse .post-content .post-title { + display: inline; +} +.posts-collapse .post-content .post-title a { + border-bottom: 0; + color: var(--link-color); +} +.posts-collapse .post-content .post-title .fa-external-link-alt { + font-size: 0.875em; + margin-left: 5px; +} +.posts-collapse .post-content::before { + background: #f5f5f5; + content: ' '; + height: 100%; + margin-left: -2px; + position: absolute; + top: 1.25em; + width: 4px; +} +.post-body { + font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; + overflow-wrap: break-word; +} +@media (min-width: 1200px) { + .post-body { + font-size: 1.125em; + } +} +@media (min-width: 992px) { + .post-body { + text-align: justify; + } +} +@media (max-width: 991px) { + .post-body { + text-align: justify; + } +} +.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, +.post-body h1 .headerlink, +.post-body h2 .headerlink, +.post-body h3 .headerlink, +.post-body h4 .headerlink, +.post-body h5 .headerlink, +.post-body h6 .headerlink { + border-bottom-style: none; + color: inherit; + float: right; + font-size: 0.875em; + margin-left: 10px; + opacity: 0; +} +.post-body h1 .header-anchor::before, +.post-body h2 .header-anchor::before, +.post-body h3 .header-anchor::before, +.post-body h4 .header-anchor::before, +.post-body h5 .header-anchor::before, +.post-body h6 .header-anchor::before, +.post-body h1 .headerlink::before, +.post-body h2 .headerlink::before, +.post-body h3 .headerlink::before, +.post-body h4 .headerlink::before, +.post-body h5 .headerlink::before, +.post-body h6 .headerlink::before { + content: '\f0c1'; + font-family: 'Font Awesome 6 Free'; + font-weight: 900; +} +.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, +.post-body h1:hover .headerlink, +.post-body h2:hover .headerlink, +.post-body h3:hover .headerlink, +.post-body h4:hover .headerlink, +.post-body h5:hover .headerlink, +.post-body h6:hover .headerlink { + opacity: 0.5; +} +.post-body h1:hover .header-anchor:hover, +.post-body h2:hover .header-anchor:hover, +.post-body h3:hover .header-anchor:hover, +.post-body h4:hover .header-anchor:hover, +.post-body h5:hover .header-anchor:hover, +.post-body h6:hover .header-anchor:hover, +.post-body h1:hover .headerlink:hover, +.post-body h2:hover .headerlink:hover, +.post-body h3:hover .headerlink:hover, +.post-body h4:hover .headerlink:hover, +.post-body h5:hover .headerlink:hover, +.post-body h6:hover .headerlink:hover { + opacity: 1; +} +.post-body .exturl .fa { + font-size: 0.875em; + margin-left: 4px; +} +.post-body .image-caption, +.post-body img + figcaption, +.post-body .fancybox + figcaption { + color: #999; + font-size: 0.875em; + font-weight: bold; + line-height: 1; + margin: -15px auto 15px; + text-align: center; +} +.post-body iframe, +.post-body img, +.post-body video, +.post-body embed { + 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 { + display: flex; + min-height: 200px; +} +.post-gallery .post-gallery-image { + flex: 1; +} +.post-gallery .post-gallery-image:not(:first-child) { + clip-path: polygon(40px 0, 100% 0, 100% 100%, 0 100%); + margin-left: -20px; +} +.post-gallery .post-gallery-image:not(:last-child) { + margin-right: -20px; +} +.post-gallery .post-gallery-image img { + height: 100%; + object-fit: cover; + opacity: 1; + width: 100%; +} +.posts-expand .post-gallery { + margin-bottom: 60px; +} +.posts-collapse .post-gallery { + margin: 15px 0; +} +.posts-expand .post-header { + font-size: 1.125em; + margin-bottom: 60px; + text-align: center; +} +.posts-expand .post-title { + font-size: 1.5em; + font-weight: normal; + margin: initial; + overflow-wrap: break-word; +} +.posts-expand .post-title-link { + border-bottom: 0; + color: var(--link-color); + display: inline-block; + position: relative; +} +.posts-expand .post-title-link::before { + background: var(--link-color); + bottom: 0; + content: ''; + height: 2px; + left: 0; + position: absolute; + transform: scaleX(0); + transition: transform 0.2s ease-in-out; + width: 100%; +} +.posts-expand .post-title-link:hover::before { + transform: scaleX(1); +} +.posts-expand .post-title-link .fa-external-link-alt { + font-size: 0.875em; + margin-left: 5px; +} +.post-sticky-flag { + display: inline-block; + margin-right: 8px; + transform: rotate(30deg); +} +.posts-expand .post-meta-container { + color: #999; + font-family: Lato, 'PingFang SC', 'Microsoft YaHei', sans-serif; + font-size: 0.75em; + margin-top: 3px; +} +.posts-expand .post-meta-container .post-description { + font-size: 0.875em; + margin-top: 2px; +} +.posts-expand .post-meta-container time { + border-bottom: 1px dashed #999; +} +.post-meta { + display: flex; + flex-wrap: wrap; + justify-content: center; +} +:not(.post-meta-break) + .post-meta-item::before { + content: '|'; + margin: 0 0.5em; +} +.post-meta-item-icon { + margin-right: 3px; +} +@media (max-width: 991px) { + .post-meta-item-text { + display: none; + } +} +.post-meta-break { + flex-basis: 100%; + height: 0; +} +.post-nav { + border-top: 1px solid #eee; + display: flex; + gap: 30px; + justify-content: space-between; + margin-top: 1em; + padding: 10px 5px 0; +} +.post-nav-item { + flex: 1; +} +.post-nav-item a { + border-bottom: 0; + display: block; + font-size: 0.875em; + line-height: 1.6; +} +.post-nav-item a:active { + top: 2px; +} +.post-nav-item .fa { + font-size: 0.75em; +} +.post-nav-item:first-child .fa { + margin-right: 5px; +} +.post-nav-item:last-child { + text-align: right; +} +.post-nav-item:last-child .fa { + margin-left: 5px; +} +.post-footer { + display: flex; + flex-direction: column; + justify-content: center; +} +.post-eof { + background: #ccc; + height: 1px; + margin: 80px auto 60px; + width: 8%; +} +.post-block:last-of-type .post-eof { + display: none; +} +.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; +} +.social-like { + border-top: 1px solid #eee; + font-size: 0.875em; + margin-top: 1em; + padding-top: 1em; + display: flex; + flex-wrap: wrap; + justify-content: center; +} +.social-like a { + border-bottom: none; +} +.reward-container { + margin: 1em 0 0; + padding: 1em 0; + text-align: center; +} +.reward-container button { + background: transparent; + color: #fc6423; + cursor: pointer; + line-height: 2; + padding: 0 15px; + border: 2px solid #fc6423; + border-radius: 2px; + outline: 0; + transition: all 0.2s ease-in-out; + vertical-align: text-top; +} +.reward-container button:hover { + background: #fc6423; + color: #fff; +} +.post-reward { + display: none; + padding-top: 20px; +} +.post-reward.active { + display: block; +} +.post-reward div { + display: inline-block; +} +.post-reward div span { + display: block; +} +.post-reward img { + display: inline-block; + margin: 0.8em 2em 0; + max-width: 100%; + width: 180px; +} +@keyframes next-roll { + from { + transform: rotateZ(30deg); + } + to { + transform: rotateZ(-30deg); + } +} +.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: ' ('; +} +.category-all-page .category-list-count::after { + content: ') '; +} +.category-all-page .category-list-child { + padding-left: 10px; +} +.event-list hr { + background: #222; + margin: 20px 0 45px; +} +.event-list hr::after { + background: #222; + color: #fff; + content: 'NOW'; + display: inline-block; + font-weight: bold; + padding: 0 5px; +} +.event-list .event { + --event-background: #222; + --event-foreground: #bbb; + --event-title: #fff; + background: var(--event-background); + padding: 15px; +} +.event-list .event .event-summary { + border-bottom: 0; + color: var(--event-title); + margin: 0; + padding: 0 0 0 35px; + position: relative; +} +.event-list .event .event-summary::before { + animation: dot-flash 1s alternate infinite ease-in-out; + background: var(--event-title); + left: 0; + margin-top: -6px; + position: absolute; + top: 50%; + border-radius: 50%; + content: ' '; + height: 12px; + width: 12px; +} +.event-list .event:nth-of-type(odd) .event-summary::before { + animation-delay: 0.5s; +} +.event-list .event:not(:last-child) { + margin-bottom: 20px; +} +.event-list .event .event-relative-time { + color: var(--event-foreground); + display: inline-block; + font-size: 12px; + font-weight: normal; + padding-left: 12px; +} +.event-list .event .event-details { + color: var(--event-foreground); + display: block; + line-height: 18px; + padding: 6px 0 6px 35px; +} +.event-list .event .event-details::before { + color: var(--event-foreground); + display: inline-block; + margin-right: 9px; + width: 14px; + font-family: 'Font Awesome 6 Free'; + font-weight: 900; +} +.event-list .event .event-details.event-location::before { + content: '\f041'; +} +.event-list .event .event-details.event-duration::before { + content: '\f017'; +} +.event-list .event .event-details.event-description::before { + content: '\f024'; +} +.event-list .event-past { + --event-background: #f5f5f5; + --event-foreground: #999; + --event-title: #222; +} +@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:not(:first-child)::before { + content: '/\00a0'; + font-weight: normal; + padding: 0.5em; +} +ul.breadcrumb li:last-child { + font-weight: bold; +} +.tag-cloud { + text-align: center; +} +.tag-cloud a { + display: inline-block; + margin: 10px; +} +.tag-cloud-0 { + border-bottom-color: #aaa; + color: #aaa; +} +.tag-cloud-1 { + border-bottom-color: #9a9a9a; + color: #9a9a9a; +} +.tag-cloud-2 { + border-bottom-color: #8b8b8b; + color: #8b8b8b; +} +.tag-cloud-3 { + border-bottom-color: #7c7c7c; + color: #7c7c7c; +} +.tag-cloud-4 { + border-bottom-color: #6c6c6c; + color: #6c6c6c; +} +.tag-cloud-5 { + border-bottom-color: #5d5d5d; + color: #5d5d5d; +} +.tag-cloud-6 { + border-bottom-color: #4e4e4e; + color: #4e4e4e; +} +.tag-cloud-7 { + border-bottom-color: #3e3e3e; + color: #3e3e3e; +} +.tag-cloud-8 { + border-bottom-color: #2f2f2f; + color: #2f2f2f; +} +.tag-cloud-9 { + border-bottom-color: #202020; + color: #202020; +} +.tag-cloud-10 { + border-bottom-color: #111; + color: #111; +} +.use-motion .animated { + animation-fill-mode: none; + visibility: inherit; +} +.use-motion .sidebar .animated { + animation-fill-mode: both; +} +header.header { + background: var(--content-bg-color); + 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); +} +@media (max-width: 991px) { + header.header { + border-radius: initial; + } +} +.main { + align-items: stretch; + display: flex; + justify-content: space-between; + margin: 0 auto; + width: calc(100% - 20px); +} +@media (max-width: 767px) { + .main { + width: auto; + } +} +@media (min-width: 1200px) { + .main { + width: 1160px; + } +} +@media (min-width: 1600px) { + .main { + width: 73%; + } +} +@media (max-width: 991px) { + .main { + display: block; + width: auto; + } +} +.main-inner { + border-radius: initial; + box-sizing: border-box; + width: calc(100% - 252px); +} +@media (max-width: 991px) { + .main-inner { + border-radius: initial; + width: 100%; + } +} +.footer-inner { + padding-left: 252px; +} +@media (max-width: 991px) { + .footer-inner { + padding-left: 0; + padding-right: 0; + width: auto; + } +} +.column { + width: 240px; +} +@media (max-width: 991px) { + .column { + width: auto; + } +} +.site-brand-container { + background: var(--theme-color); +} +@media (max-width: 991px) { + .site-nav-on .site-brand-container { + box-shadow: 0 0 16px rgba(0,0,0,0.5); + } +} +.site-meta { + padding: 20px 0; +} +@media (min-width: 768px) and (max-width: 991px) { + .site-nav-toggle, + .site-nav-right { + display: flex; + flex-direction: column; + justify-content: center; + } +} +.site-nav-toggle .toggle, +.site-nav-right .toggle { + color: #fff; +} +.site-nav-toggle .toggle .toggle-line, +.site-nav-right .toggle .toggle-line { + background: #fff; +} +@media (min-width: 768px) and (max-width: 991px) { + .site-nav { + --scroll-height: 0; + height: 0; + overflow: hidden; + transition: 0.2s ease-in-out; + transition-property: height, visibility; + visibility: hidden; + } + body:not(.site-nav-on) .site-nav .animated { + animation: none; + } + body.site-nav-on .site-nav { + height: var(--scroll-height); + visibility: unset; + } +} +.menu .menu-item { + display: block; + margin: 0; +} +.menu .menu-item a { + padding: 5px 20px; + position: relative; + text-align: left; + transition-property: background-color; +} +@media (max-width: 991px) { + .menu .menu-item.menu-item-search { + display: none; + } +} +.menu .menu-item .badge { + background: #ccc; + border-radius: 10px; + color: var(--content-bg-color); + float: right; + padding: 2px 5px; + text-shadow: 1px 1px 0 rgba(0,0,0,0.1); +} +.main-menu .menu-item-active::after { + background: #bbb; + border-radius: 50%; + content: ' '; + height: 6px; + margin-top: -3px; + position: absolute; + right: 15px; + top: 50%; + width: 6px; +} +.sub-menu { + margin: 0; + padding: 6px 0; +} +.sub-menu .menu-item { + display: inline-block; +} +.sub-menu .menu-item a { + background: transparent; + margin: 5px 10px; + padding: initial; +} +.sub-menu .menu-item a:hover { + background: transparent; + color: #fc6423; +} +.sub-menu .menu-item-active { + border-bottom-color: #fc6423; + color: #fc6423; +} +.sub-menu .menu-item-active:hover { + border-bottom-color: #fc6423; +} +.sidebar { + position: -webkit-sticky; + position: sticky; + top: 12px; +} +@media (max-width: 991px) { + .sidebar { + display: none; + } +} +.sidebar-inner { + background: var(--content-bg-color); + 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: var(--text-color); + margin-top: 12px; + max-height: calc(100vh - 24px); + visibility: hidden; +} +.site-state-item { + padding: 0 10px; +} +.sidebar .sidebar-button { + border-bottom: 1px dotted #ccc; + border-top: 1px dotted #ccc; +} +.sidebar .sidebar-button button { + border: 0; + color: #fc6423; + display: block; + width: 100%; +} +.sidebar .sidebar-button button:hover { + background: none; + border: 0; + color: #e34603; +} +.links-of-author { + display: flex; + flex-wrap: wrap; + justify-content: center; +} +.links-of-author-item { + margin: 5px 0 0; + width: 50%; +} +.links-of-author-item a { + box-sizing: border-box; + display: inline-block; + max-width: 100%; + overflow: hidden; + padding: 0 5px; + text-overflow: ellipsis; + white-space: nowrap; +} +.links-of-author-item a { + border-bottom: 0; + border-radius: 4px; + display: block; +} +.links-of-author-item a:hover { + background: var(--body-bg-color); +} +.main-inner .sub-menu, +.main-inner .post-block, +.main-inner .tabs-comment, +.main-inner > .comments, +.main-inner .comment-position .comments, +.main-inner .pagination { + background: var(--content-bg-color); + 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); +} +.main-inner .post-block:not(:first-child):not(:first-child) { + 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; +} +@media (min-width: 768px) and (max-width: 991px) { + .main-inner .post-block:not(:first-child):not(:first-child) { + margin-top: 10px; + } +} +@media (max-width: 767px) { + .main-inner .post-block:not(:first-child):not(:first-child) { + margin-top: 8px; + } +} +.main-inner .tabs-comment, +.main-inner > .comments, +.main-inner .comment-position .comments, +.main-inner .pagination { + 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; +} +@media (min-width: 768px) and (max-width: 991px) { + .main-inner .tabs-comment, + .main-inner > .comments, + .main-inner .comment-position .comments, + .main-inner .pagination { + margin-top: 10px; + } +} +@media (max-width: 767px) { + .main-inner .tabs-comment, + .main-inner > .comments, + .main-inner .comment-position .comments, + .main-inner .pagination { + margin-top: 8px; + } +} +.post-block, +.comments { + padding: 40px; +} +.post-eof { + display: none; +} +.pagination { + border-top: initial; + padding: 10px 0; +} +.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) { + .main-inner { + padding: 10px; + } + .posts-expand .post-button { + margin-top: 20px; + } + .post-block { + padding: 20px; + } + .comments { + padding: 10px 20px; + } +} +@media (max-width: 767px) { + .main-inner { + padding: 8px; + } + .posts-expand .post-button { + margin: 12px 0; + } + .post-block { + padding: 12px; + } + .comments { + padding: 10px 12px; + } +} diff --git a/css/noscript.css b/css/noscript.css new file mode 100644 index 0000000..6418c57 --- /dev/null +++ b/css/noscript.css @@ -0,0 +1,48 @@ +body { + margin-top: 2rem; +} +.use-motion .menu-item, +.use-motion .sidebar, +.use-motion .sidebar-inner, +.use-motion .post-block, +.use-motion .pagination, +.use-motion .comments, +.use-motion .post-header, +.use-motion .post-body, +.use-motion .collection-header { + visibility: visible; +} +.use-motion .column, +.use-motion .site-brand-container .toggle, +.use-motion .footer { + opacity: initial; +} +.use-motion .site-title, +.use-motion .site-subtitle, +.use-motion .custom-logo-image { + opacity: initial; + top: initial; +} +.use-motion .logo-line { + transform: scaleX(1); +} +.search-pop-overlay, +.sidebar-nav { + display: none; +} +.sidebar-panel { + display: block; +} +.noscript-warning { + background-color: #f55; + color: #fff; + font-family: sans-serif; + font-size: 1rem; + font-weight: bold; + left: 0; + position: fixed; + text-align: center; + top: 0; + width: 100%; + z-index: 50; +} diff --git a/images/abstract_health.png b/images/abstract_health.png new file mode 100644 index 0000000000000000000000000000000000000000..72a0ff3adf65e2ba62e1490a6d3f57a56cd777c6 GIT binary patch literal 409482 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

^xZH5v^bZ{CmI=lBW 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 z

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

;2c+Ayff2Z7(SR4IVq6^HG6@dt|4<e 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

%aaFnc^I7ocs5~ z?98tg)0d&eb$SQR_p(8+^A*s1)QzRWi6>Hlo|$>@2$j^Nc?szzKrZz`oW4)}-JiyE zl{Eh6>+=2Q-^+7(=AC9N5x2hj;t%b^DD+)cgr}LL9|q)meV8LTpq*`|4Hc(cfbma1 z5UjLv=;fDAE(0vnC@E72>gTEaO&+#k>{)=YkK{-MOtEOG6J-x^1gz1TbEZ1e%<*P~ z^r!EjA|5J$Jf`X)y5|M}~Gvw0Mw;z{|uXkV0?7m^C>7`>m#ndc~_uGz=z#`96c za_7t%OoYGJMoOXhNMXdfofysI7|8Y8-)-Ky{KhCUnf;i8#a=y=kBM@f5_jX~H=95C zi@!)QcVUq7kDvU0bEja&$Lq`f*+LUEt6n*i6I#UnqWYOg`C;5`!gyfb@@C?C)Y8V-?k0^%3zM$gxkq|TGN99FnRhfs zCX~j>_5`W-VHUhc_ZJUeM~a9?0`B@c;W(=UPEa=5ht#l-j)vFt)ASPXaVFsEg>z0p zMEt%>7|xp3cCW-exZT6`Iyl>V%JY3?Bz{}UViY8fSyJ_$J}X~)Nk?=w$~Fl}%8+NJ zHTRb93%z-+Zdb__6Y;)}dW{>VI%OS}ZG3`MNE|*sN*M`Z4l)&Px7J1NV+Kof+e(_S zh9qJ1cPd%`U^t!)Z)u8}CiSxkpvwG4yp}Q+EL|{@rQL@mDdF!XNb>hP>z+!8$PYVw znR1dSde)|}B$3lcE^O{Jh%ejI@kWGs=Hlhq<*Q_!HmkDetbwJK|MO>QQxg2NjVM2Q ziGCBWDf4Wmdlev=A?;peHYR~B&U4~*HY+7{h^F>-$7uedpww4L4Z-4hh{WUeVop>4 z;G>T=-~9S-$K-4I^}$CUrqF$3oQJ+>9}1+{O0?EC>+Y8!_wk&->}4^tPy(`wSt34; zh#^!1mzMtN=9Bz>ZnxBV03KXZ5SEMi_~3QPGohIhQ}2A}-lv&~lpKi(-nJ@Ah3rd<6}&Qvxj3Z10?KnSQQ_Sb=+3O4iqzv ze$NEw-B}w?Df29zP)hljvYhhsK}tvG6d|m=aGM_GQKs*`;Jep8turkTPbYDj*&~_F ztt2i!L{BrHBRKv=O9VHb#tTlU-?D3AZs{WG69++7BTG$;bqMZ|AdMr_G$w%Xy?-nm za+Q|y^m`gVzkT=K>j@6as~pS%V0>WdLjW@~m}xXQ^kY%XiPP z5&3AYIMOL&l-)gBj;o208~Y|F#sO*P#|HgHGlLoUaRhoIf{4*Jqz$@4t3xm$?#=VN zdq26pdmchhV>Duz#)2fqnb`VD*$A1%pfV{8M>eiFtM1#HYt%ftbB-@I?0#R9U#e^D&UK`LWCaV7*n_^u-3wEg->yE^jq@y5 zje(`j)+>YrY2i$GmGaZ_a$zJfru1{m^M%-ywZu$WmN|>!6E;EcaHemwKP5)bA8LQU zSh?M%tFwGbsWIaUy(n1sj;1J2T0PsizKQ|f&*kCH-Q4pF2Pv)&mj>l>FA#TSmd&g} z!G?nQ+2iswE8F`M^=zJW-;6PVv3xHfd}$?QWzfAn3}(YfD<9)g&x(&LvygX9OaGSg ze3yrWgNaD1LRDESgYg_5d#25=C->LDM2D;_uz(?&Up~V`V!rBIbXbc-M01X5T{w0& ziRa-+p~k}GzVp19z(z0w0pP)>j#-Z*yY8DsLS(MWmM=K-K>-=YS*grpY3TiF2%yv^ z4VZs(JK{x;eV+-Wez6i!Bzmm;>4&~7uvgRocgj&#pV#kku~wv@z{iT9wf`{2QfNNs zw+Li>H2;yK5%tsB2T|2@v@!rudndWB-yx!9TX|+s>pZ73KzIgOVgP6Iz1V6Ndzv$o z0aMm;RAtJ!B!;v3j+}{k*d4o@NQ?;`M92b3zevhEp6E+w^LdPpgupawH?jB-0t=IR z%zm8HY%(N%o8{~`v4L@jAr?SWUW29!rMBZ|Kkhs#JH6itzk>5Stb)qU4BGl+)X^p-b;!w>pRJWA^*z_M%_e&(=r_qM;VC})=ofP^*r$K^<6Lc>*Ze`}Qv-iTqoW(-c?VdZy&-#34bT`^rnX0MH z1Hitnj8A(6rgnfhFUFi8rUAV6%&c?LT7+=!;)MaSWgB4Y!SO_8x{ga1E;dJUn-B@B zrAUOj=SF<_=oA1)FBm}n$CUbsu3%`mstS z>-#GVJX4SH!3@A_m3lC5_c$`ThbhZHaH-q{hA?$Wv(2DDO&^N!~}wlgew z7o8A`=efMN9a*Y9bXT1U*&rtp?=*`(Nwhnj*isjl${UUs0b@b~G-d|W%ssQUWs7zV zLosZg2iRc8{a8aJbH{Y3`{RgHd3+FrAfP>;O=**}yi?$UF!OGCe@31qli&7;0RG;b zj{=v7#m%xI{BE1G4w`K_jadflv^k6)3<;=~^l7Qn?6I6#e8`+a?uspyH>eVSpEry3 zdPJ6vAU_jkV~WI+NjuLo^^r#Qi|e7!wx8=GcX83&>6Y%M*!CNt08Y$%k&=%&i=emNY~Jvf1waB`|3*pMEy_x3WZdvo5!gs3 zHrTx^T%y^2&b*Bn8pkrH#OmIQT&)kDQFbm4RgU$1@uGMk`^h1#&9;f>XD&9==ee19 z^$HV7qombO z#kE21K?DCVqo*vnB=%FX@C{%xZFmw5_XQ(w+3cj=cO zZ9e_s+vTj)2>83NZ*KnZtH0gc`TAOG&tnsD?aedGxv|b#kstzH1gQbR?6&>cGJ)ci zA`enPkkv|I$pUG5ZQSr@mJF_zF7nKtmd5fyjNx~mU)}ui^RLD<&9`D718IpSbRq(H z5-b92GjwB_4+jRy=Vp+;wj7IK`J?>i_rKeG)v}GN{N)ed+x%6Idv>4x_P4)F(VCa1 z5((8x_M@e}<9i6tGNzp6b?D3XLYary8;l@@3Y*Ss>7gEQZVhna8 zzX~s&KmDQ83(iI4n-uUZ6EUa!eI6GXVmrKe5uV*i-*G?5^~Z4UWm3>?OPGTvKP1iB zyOi|U>5XAc@mh+;pXAK|fIxr08SiB}B+L3a=Cd}xAhn%fapHh>ePyhfx07*naR6M$ua0#_HcuVrhj|sT0?}FJ#RN*0s z(EcdlD)}N=)L~w96Rb@mEm!x9lS0v+-_;8?Lx<=sXv(wJ$qj;;+;)mdP0}RYvAXsC z?H})Lj(yjeI@{^tTESd;^R1jSuaeMkdvkRNo5&hW>U9O<8GYQB)&{vkW|eWc**ey{ z+m-?lEG}C^X1U{e12AG~?*mw`4ssq~Bmo-ph;OD;tntl2G#aFqm(BhnXwmf3=CfOC zCqV5*KqrrMl&+%AZ0BUfOv-!JmU878n1#z$ zfA4`q%_=BSdvr1{Lk{=s`9QEwZzWbf&m*>e(sLl*ab|)m^_#xqjTDqeV`^J%C3xq( z_on~yo$9y_?|t=oOPQkF-}&;|=JTu|H^08IIn(al|Ls5cv&`6`afEW>+}*y$*#^n&n2T{bnRQ3(m7{%b-1=_Db~_ke zeD|%xS$t6}&T*ERkF|@ZtUef5ej7w(W=m1Yo}{zj(l0{&UXtHP6q#2M0ACuLF^`>$ zd|uHvorpo@2$;2zx3KsaqlXJEpQdepkwL*$h$qa)^^m^@_W3@9lMeD{+21Cc;ds?pF;CC7R`ucCldC zRK|oxC#URtcYhe^U^iU_jXOmfvy^=ubHqjkHQtrmyVYa%)4r**r5%7EMpqnPI6tP( zhY{X?ye5l{e}P(K$wUJdw1SU@L}uE{8MW9k{~p)@N}? z_G3Jdb^wmlXfB)e zIEGtYBZc7g5&T|bEWr_YW=h%4Relt`IYmCqjDP3x-I!J;=}h?-56{HW#}k#0j(L`X z*Qu;hoY;Q+AxFB#k&@eaO$WK-)B8A*);YkK2&rl}Sdl7u=XP`2#iKWn)&H2tt3oE! zA4JNk1@>FT@-)`qawG|8VFHT;p%0ji3{r38LyIxMpx40Agx5~ zyZYd%KKm%kxEmwMd)hd-Tv^H+{Kb^|tW0Fuurid&9LK!+H`mHn4@QHjto5vQ*0r#E zVJz-R{{vrt+H_fx9QK_zGoL5-%v!Sct*aN1Xbwn9Bq7mAYWV^)W-{>$NZ&!GFCjC% zo)<$KQX^5rkr5-ANunqS1Vj)NK~fDuK%=+nuI}2ia;e;(+~@!ExF;*wgPF*@&pr2? zI1wHm?j9Z<9v&jcJ$P_=>SG|Uw)nCFEVaor61qRZFr7<7(8&^}UQE-EI*Qi9Roc6w z#*o&HfREdM@T8@o?gnW00{9t1sESih+Cd1hjLRQ`LF*V}V0l%?Yt)7|PFmw49$6wn zu`;V+sZmsY_u(MB?A^f%sqdv(BGpao_y>j;F<>G2oV-UQcRGb-qmYlR2Y zG4~n~(`80F_u^8Gn`RAs;p;)MVU7GJ(t3<$!zlSy*n{(BBmA9gGUBAzSVrxA+QjEnk9hux$~WRmmt0M)zzHP(jL-k^Jxw}D<-K01S={jBcmZ%x_#6%hUY5c zpD92%O_U{AqV{O)FwWsNU}QEZMd%H9rebp8i0-$#GoI142Y&F7@;J}kDW1=<^C7IX zF|zB82cEwkp;X5!1AU|YO>oS!aOM71$Jl2ON(r6LJNl}7n>OUSZX8-2xPndH{h9B% z2Jim&6t=&{o1QDfwR-(_-jtOq_oUVL?h`yAH#%Bku!mmouZs|{)EcG^4U>#TlgIP& zJx;>t4h%Yy$8!bNPOBsc^ih_3ngrt|W1so?NKH$fsR$Zxq*Es=Iqyqz@CUa;Di|u? z*~2qzG-^^^FT}9tOcHj8`mn|oO7ae1^bCcBa-)Ko~c$wjwPTj zXMec;$>rVs4xw&~U(Q+Y?G7&_%u-KJRe;qMu}JcN z!D}QlBGd9X7M)CEJ4W3P_xHl@!#y6va-q`eD?z2-eCw^<%LSAs)Z}&6FnbDm5M+ws zn$|XBO2Ryp^(1UsG(Ai77Uw!vm!AIa1_&P7&vxS8?(ViX=@P6J@@o_MTdSO+(e?6WPb7tt>JEN(d_uCShnu>8t_b@tZqLF$ZjBv$H9&mz@0x$hbT5o{P5Zn`lDZ}fZARDkAz@iT`E^EMNl5kWL9 zTm89%$7^XKPW@|%4WLOwz6w-%YySiey9<90qq%lzGEECdoAv&Id^`-Vi~= zJvN%kiyvVqbx*$pTZ}U}2@`?|nM*^;sWd6eU-z0bGQe7Gu|5BC2dUpIy4?NGuk6nB z{LL4O)E3de*Zpu}^W24|Dwpy$Rn?OS^Og7Bou$SzXB{aTzGzv53?Z1I^+{)(eAN=) zL9o2>Mxi3JM-XC&$g!)}n+|;Z@u$20$AA6zc0W)1xz@Do&{VN^A@~jxKBi!I z^XC8$^>i8<|0szA-;W6}H-IJf@*Y$R9 zw6cWI+Jb=ILAYR?JcJ31C3IKZmc6UTN#DFOyspLxlAXX#Ju?Xi_J|!<)=7$>{y-SQ`1*dZ zy43?A4<9Fa5q@t*$Z06$AB#7(O5LS_aj^1zJVrhp91mJ5{?Whu-tN}rtGhEzLtZXM z>Xclli8nocOa_U79eEYm7#>$wc0U`~ESENOSO<({KB zBZ$`vy!2Z8WLBFZ*5>(NHe!G8U;WYUw}1P89V4oP#Y1^QBxXqKfLq>-rYeYX5v({L z%b$dXWwttJ86})1`u(1G;fAI+MAmgIFj^x#MmXz(2KooiN2&c1BGl(2K(q{x?(h^Q*WQi3R(?dMU)lbmtKjhMvk4CGZtxj+Y?r*A?SEgG-)ecqMS+kLZ8yX&kj-&)Xv>x}#m-^U?M) zFB=I40ieJ|fPIu2NQ)TbXx~+tlqZV_lqy-+ixGRVDS+x=6tD-4tfz|7&Nd(z67`!$ z>uHPMCv@v zfCv7IoT(B<_R5?{J78{N*uCFU_!pmky1Vt^r@Kqx;B9>0|yUzKvmiv{5X%AEBlOeUS<@E@hQyI@uFoD62-48zaVE23f z^q=j1|6l&^Ig4EhZX--}1{>Scw6|v4AC&Ued##2v>Ymg;4A1qgK6H+-@CWB}R^yz8 z@g!PesGl^UBI@aGMRc~lFW(u&^o0E=98eXv=vk+O^>|t!7-)h98+|gwUpYeqC?_F2 z#=~H-)O@>DsuMA!sB)&c^6P`VJ_3j;AM*tJ7oUF7(tHA_svU%OBj1%%KmBo9+PU33 zFTYn`#CT6yP7b$>&ZbrMa_w%JK7T2RoeK^O6q;#;&tYdtlxV+xnFi0xu7Q?(HU>nG5*k#V_j$X@v)v#1?1#LB2;6L%h&g68|MnRe_CjQQiBlto5 zqBsoqLNG%mhpFSK#1knVHfx|IyCr7{OZ7%HV~vWj2sxTZ?Sg2=;$a9vE6$rO`)N2< zHN<}=R0isw5dbK zBQ#lQhi(*i(A>V=*6+Og?F_2zXUT|r_NBruX8WOyI64zPPiE*$l-IfK3%T=P_dosi z@3jK+`@8Rb?|Y-_5(LLvBDFOiaj_8`W`h}FYl${ZPAm@1K2yvP_&dtpQuf_D-~8t8 z?Qec#>>tCt^{LH!gQ@x!V=VkJGd7iri66E9XQ`+?t}cm2f+kFPsJ3&UIHIflN=QbR zDZ_BMp0jYOe9gn7sbIs*r}l$c?(Xzl z#JKC1uZ(XAXFKt0jy2FFI%cpX%uELfNP>^{1n;IDPJPrCgC~0nCgt;i`QT^Sjn-5K zeG(GxGfpE}%xSO|io!syO!dfv<_R9YGgivn!|?if40h2ejhS19WE!jA8IhMZwgd{{ zJSia{sTVBs-Q|;r&%%X)Api%)Q76lxFK90uSS9V#=Lgp9C%|r%B3hFBMAM2jVx$5Z zfqGeWgoe4HQOt_RVTMf0Z=@t9gp?btO0blh_v%~?HR_P?rc2^qo_wK>IF=V?bJz=w zj;Hp19rkEg`M8`DSkRP*UrTCwqpv9oWS@$l5Qf!&PxIRli^0aSgPg`3{%lzoO-+L} zI?y3>8tu9p_hV2ALa2B&3!Q@K!CTFPplNscCl*Br6Z7@;H#!sNUarWM^-6YxpZ@IU zL&yxw-~av(c4ve4d>u7GoU`DQ?l0xEb}Zt5`<*wNww>A?wKMj70g~=DlD_on%Q^MD z9^S)6?>!RYEk`&)&&mr!CN^^p?(Z~p`OV+_tyVD#r^m-Ivc& zqO`rU^#$A_yjd-&UEonV{N8`mw6~7KaA0LebC{RkYXn?VaLc=#Agze8b(sD-qZz|J z?H>D{0Z=`(1`O}}M<4uX_h!rD=d+*DXf4&Q=WVfwW=3*H3mEin{fqvGxx=xgZhWCV zm~e}h22MEM+6n()_3a*hFi`r|N0R&wsRtiCgTb|r_N+c!4SrV797!?8$wiw} z-js=87C}ruu4U2nSik;qV%&6JTNVw0!w=ucJYizM>mJREfSKt}0tKDHoqbfa68Ogi zf(dO*DxBp#_bacerfpk3OZ>yY;g9{r5;QO8&sz04*0l)eFSShW3}Oewb4U}8(r9mL zY_~7l4H^NHvJ8}LI_}X>ZWoGR7{7Pa%do#Ol>EXk`VHRGr%93t_l-FMp3F3^tSBRLM$i-SmNHv}R#PDFNZI=WFh zmkMtLK9goCh}=vaWG8%;~3X?JB>;R62*4tpGf58QZX zo9esffopq*{NCS$+NO;W8Zc++R~~e%EM=qPUJ5_URtE-oeCE18>h#XMO9&{V_tYH% zXMh|b0i$~u**mv9@*RtY7G0#ZWv4qHowyGME1ztFQ*W?T%nZn$FF&jVm9o)_ek+f> z!5#o5H+*o;@d+bfeh{Jp;#8y6nbdk~{(+RuV1?ng?8&2WZM{xSs=YKzRhv9 z{`0w-&k~|eN$@KGo4w3bH2I6Y%OMeiD6M&bv%`Q`YSM1Y7| z$0N#FQg$a~bvt6IoqObsXKrl~5$s7TM4u-_UORI!BX6p7?PUza8snT5Q4yjib0HT1 z=S1%vo-Hn}Jhg>SfD`zrn5^YAv8SD#`-30-WcPRe_J6ti=l|jl#*l2e?J%LweVmby zfSi#s0Rl$EILwEzD)&z6zfo$uU+bq!1*(4kTi?v#?d6Wc&@Ll7Mo8e+UW}xnRvi$c zH1sf6i=dIm5OC!Wp;edfjdnJ|LQ~uIdS?;lDw9AkG6!4Q=-Q&s27B9N^e7FwHEL2FOo-_`@`l zYvJVE11tLod^+}3o6rZw@@@LBjcgqf+`B(QVUGj#ZTT5^wSW8Vovl3A+9v<=_}zZX zN05Nwc|5u%PPTV^n+-hg57NWYMmFtHT|*n)mw#L$D#yy8`|7I8V{-$=QbUh-A18ok zf*Eza!GbQlmk2NSvYkx1m5q8U$lQ2YX@g|ek*%Vf3;FhJjMGqzIhsO5c}KwCD$+Pe zg%}QH3N_L@GnoD3V$z<`Nac4Uj+^Zwwddi?0f(RTsn&53)$KNG2`Uuj6uqj$k3ys| z;dq8k0eFN3d?Sy~OZ*91%fFv7^wT1Bi9hnkob#4_K1P5O2^;W%eS~I$Mth)YV-legCLmKV&Ad5KM0OU~Y#S4DjN`7k3|b;P!9+}n?k+)t1Q$~-&2is()*8p{KMV*?|-Xh_1A)N9oO)%!4B;D z3tTi3(;Q{HM?h@CWN3bm3wgH$H+~O1y{Fw=AhLK$FOLW=^T`^ej5DngahJAIVwv;4_Qik)ZTxaB@ymt! zW52kS9mN*?4?p_FsA!G`c*4h`G6ShHBIrgih@U9lMqEfu19EgEM*6tv)a*ma?cBVW zzW_wCKKrItk;YUxYU|0q83TYFQT_VkA(_(nEQ4RM#YNGnPzyH7Q{+s{T|9kh7k3UNTdtrC- z+>1pfTjBYPB6c9_*cS>PK=5EPL~i6BSN!VG7l@2+iqYJWmhXP!z1<7h1K12|R1CW` z#bKq*&4RNXo7v4YTp9{3&;V#P zZX4XV)VmgEgy*Y>>IWGPZRAA528N&i?57PB?at1NH(4|AVHR!CM)}aat@;5v^tsW! zJldmghdBv=(lA@^c5~|Rd)i%F=@wP9`fC5aeia|rv#mTl`8w-qII%*PZ|e+)$WqW;_S!7Qv)*YQ@*7A~r$-^vEBw844+K{A<7 z5h5qLela&~hEb!&y$pVL2$4n$UW*vk%a-Ach7iQgvQ2&1Ksn*_KFO%DeLArZ+T(hq;d1NcTm{ zbC%%{=#*cXG$^V+WRAciIC3=5>EMI`Z9NsSiC22P6Y|WX?IcBTJY^r%&LQpK+zfY_ z`NrPB_HnEExQ%3=b*}1%AAZ@)H;m`wPHeiIN8$LyoJ+n_VX)$nHn z<=DZ3+GfkEm%rRyc;nLK1LNzh#N4^jvUxPfXi9rtb*_V|;N1$)_ya`)Hk>&=!bZGV zt*oEfl*EF$^4S-y#JxQ2RW?}1SY7)G9C(ML3B^!Z@G|WRCz5yIM|lTThB2~KIk!{60o@xe2Pv%9zP z{`6_}sLKb=du^U8=R}&T*uiK=B9_()?xF{9Rbq{di5-l5rnxs8f){Ql1a9R}L>;uW ziHQjoY{nnKywp;LC}(!vo{EvEe-0nNeX|Z|v_TlhPg$vmLBq}ZW3 z=M*_po*19+hh96XJ-3T6e(zygLQML34p9#i0#*Tzolmt+vw%0TC0=~31H;eOAw2H# zZ7`L4YWmglyGdr1SYHN5(#*R>+vR};5 zt36jcpXPB9c@V^5z9X|_m=LAmL>)6yJxl-a+D|(I z)}ovVOkLJztymy#u{GGstk8{bQ`!U7dg_P{kL9iU#fKm7-u>pcI>;^JPD?v1ZtvBP zznBBlS~;Hqf$fRjWB|F40rhJB9z2j)uh@^!Ib4W3C$5L+n`05#vYbU21U z1%^mQ#}i@2xw_{pGd5B_sG@r@*YY2!@vZ7mYc-q=LICJ#97Apm-aS0KyBL$wa2{N! zqtCRW@L9{D%~@ag_BV3}7ucxdF*2;#PjS6{BVwUmztcAHxZrL^y89Wx&KKnQsCu}k zpKXQXNuBf{)g02)qk%A~%B%&`scbZi#KRa7i4j-cdrc8c!{EanmJ8Wx#zAUGli`ns^IO05 z+q>WRjo)ZGP-kTyxcKrigy}F-jAorLf2`r_Q#jtGs2ZQB=<Hh9vk>e}AU_4L+lEKCv?eg%@>r=Grq_1X$fq+C6)wOe6C!XoJaCo^NUJ zB2P47#9vySK3I(=q~zK1KmYywwX&YUzKVA1|0`|vd9Yn?-v$oX;Pnj;>e!xZpE{)3 zt5sX4uM!{+vN;+QXe5)rd^01s7{eeo40tbDACXZpiwigIStSAR#%JZr<rud8GX_uc-Q{p-}|S# zzw=-G-Eb9=wru@cF*lA{1)7*6;cJ9lBaG=2LB0G+1Sv{guk)vK_X1#geFSwl&fauB zo6^~RK14Ev5**qw<@Ww!luaEUZV$r#1?yJ6a=q*KmNtUhzCGX4)U*G=8nDWX==x{G zbj~j4CcC@mt^SO+bR(i=M@y$q+x>k+u;(X4W3XDL_VGn&U=TX-YW)Cyrv%#lO6VRH zbA?9Nh&MtB?yb1I)X|=BcJ0Bn5ghI}SC0l4jxoZtr8Z)sQKqX;TdeZTh+AFYAdG0< z>VA^F4_*u+1dRJ5NcO@9p7}S)gC3Pf7@>oup)I_6z6JtJ9nOMh!>MQ6HMF|+eEU5A z%=2kSNcGJE}}=S&n7LB5sR>;)e*VEI=_|gnNz351RK-RYS$7agfd?&|Dy9T8CJ3 zBs++J&Yt)v;gMrj$ba3m@4PX`I6Td>_3{tDw>$XNoTlFW3(bd5>|T5K z^+GCM-QEA_+U|#+f6}p&*LN?yRrwLo`9`Gs?b@_=h1N6%-E1jBIUdW`f>JS%>BvsY z!?X}){wuA{iP>s{J1qWYZUWexZffS3hS@gIJtxl}nzuuQ@BQe*K# z^RVS?o6=|x#O%|E>$TV3%5DD6?!WlEe^2cZU@JCxzuv#iNsSPyTpA+cOlT1#RuYmv zvqFJs*fbC)reUSW{IegXdM~`3MwNluew`<2CxrTJiSI3|Mg{>yK~q_TxM!rGkv2iI zo~?V^^}^d4t=5zO|9^)tw=BVCYSaIz12H=rr3MdUf{9(}UWV1%;=0`K(5;BJjtYn6 z#f-K0RGo7t$FZvi?Juf7^Z{mGD-ItMur1)n6N|n zXdnBSHhV{$nS;9t5#FIRl9}(s5cZF-Ks+XCVh(4PFw_YIO`1m9ljnBER{KyMhpZ=6 z6gf2VHl=8uX_T$cd#BO1=NgxSt{XdZ3=k?fUYyLW%>*LD|< zH!2@}xjVZ2v)%nqKG>c5wQui^PUYzJULKiu4tKx!@T)O&Iz^9wyIuIbIlL5uBEQ!x=II4SqB>r5&G+b5G)JyY#FXu0@6~H}oBQz|H2VWR@#%S(iAOdKf^?akJX;1ZU zg2Z<}o(Ug<%`^*sN6_@{pO!ZK|MIi1as10qR-3lF^8IpNzrhawOey_bpYB;a@l4_Y zJT4RUhc;>}k6d`RoX(%7BBt%iWCTCBX>~yV#t=?I6CJAnR2{yQ0X6A^8Sf|c8DwZA zC$foLYm~GsYAKVk)q4aCCo{~$VTB3{{ZIRT94G6ZgFHGYkavpmp754o3 zY#u-T(eA=m#rOQTdj8tkPHDSV+>sNzDCIq?~hS|f#kA%&H zIbt+OLak@YM>A|F{7f3@_IO#-hiOOe5EA$I&DcC>!L5G?X=$yh-14xt`LHK?4klXz2o%A?tU6kH*Z$;j=h~>;C>27D;w04zjc9jsRJzk>a6I+h zHgt2M2Q~P167^mkfJ6kHX*E*sBt&|#JP;rd^I^X|dQt~E7o*wY?rc+vQ;igDGuwUp zl}|RQ(zx;>)Z1>8aYiH_b*Q>K=XcwzD3$uVhU;e?L6yxLi?)Is6 z$u^W6RX+TmD~2gU6(=1Vzibm1^VKTOW3JWER^B-PjNz4LVkIF>2@xd?8VTFPm!O15 zz9jb5G@0nNd{1h>RRyD$IG{%zL-|4{oZxcl3LcstG5F(5`k{V;;P0>;;5&z!R=QODaM4%Y+;uT&$Y zC3u8wbfsN`b(k+eW>u~FFE*-H>pZhhs&I7K@S1{FCoG^}V0&*91{j?%(IDEBYk0+I z+UxiD^K@?n{vKA(ltF8nzJrW?+RA=RBZl)hWW$|jKGMeAp7}g4OkA(uAYc78_rme^ zY%9}m_?Yr4XS?3|)Au$#yPu8Gwa;b*-pccBpP20~myRxt{b`K;QG85TB_a7BpNex4 zrDF~sB^1~j64xy}4qMJ$qHW*3 zTF~f(iM>NSS9PwDjqz5Le4UE{EW28EKO3&^2djMiB4`jm?dD#IWNOAtLG#B)vbxNoZn-)@qdf_HBk0qL*wz+KzQ*VCxSbdFf8_ITOUilH2cCGo|G4jZ!^a&4 z?D7xZ&_l^{?VvdcuD;a^WWt1^Fz)yf9j8x+ami1BzEV`egGVj1Iw8zS>>6~`)MMOs zQ^^I~eUhLM9e$j5vMo6H;P{EJrXrQ7a7O0{n~@8V^8?7_*zV3$!aDhJ!lbUO`zl8# zcQDfBJ7;$P?!Wi%@1B18uXZ2)Q2~xmzqWfTb@uiLf83d@@9fUK{O<0pSKi+}`N1FU z4qFy}+_v{?t%e-^;*++*S6)lMU!<~rl^@9cD_`c%QD}iWHR+N-Y-CU4m{o$|nmQ&1 ziG6z>(bSGH-bIw*r_noRPJ>}ACWsy%&zm&g5ABI7YH|50SDad#5>2B%{XB=bB+w92 z$p6J3e}DH!Kl$;feSiKh{p#-Z_O>8yD-XAts@zWF`ttKHcYpHzA7sqcseBI_K?`{N zY*nby_-t)3o#7usbFk+K;W`RZUFyT%p07b7o1TN=;2 zOE6U47#l}pLfB0iatg$JG&1ef1_o;minEdycCWMo!|2bK;bxA4med1e@|vPyV1zFr z`0?UR*b{gTh8M!o$_oK-JX#LH!CN2qn;p#@UcL(%TrD81qi2^^@@bBR-}>e^NAS>Y zPPB@sji#;yoO%hFsM|4<&40YN&({~+F$|!yve7^+V3dGh8ii+9hxn&V#RM&}=ZRA4h1#+zjn#U&`DT+^f&D zft|=V!J#g(Nv1zXC`TURBT@LPiC+Lu?xYxv-F+696Y ze3%8@y#C~Q#6y!=d>wX5)KMw9+3Bo74D~;OkTx^u+V5ECF0=(2-igVc#I2(PD<^IJ^vp?QGlv^3n z?zd5e>UGdEvi&-*q_sRI2tp7;7Np#2`oMn$vGRW9{W+ron1j!%h3x>Lv)_=nuC-0# z4o?>uhqCUKwen-=+E~_t67kGT+i2OlE{v!mjDAzedHa5H?UPnv3aJ=F+HAbj_=0_GKrxWU%NtpGb2K~qr;|jmjp)5nPxsIKTte+2mOtnf4AWwe5C;gak&(eGZ3PQug*4xMRSuvf36rv|V`d zzUSU2_=XmH7juN{md?th(@2IBeHYm^7JJ=`><87RV)?+qWym@=nb0MI1VQIA)~ z)KM8Y)qNk)F1_zFt3kEFeR+L?Z1|i;aX+#P)IMbocFWP}}II7N*#KBx&I#uFY7pRDLrnEI$u_^6>t!!4~r z$YW>A2CKHs7VBE~JY%z3ua$%dqvhjc3993HsBWEMdH7N9Kd6JeH=}!mz_#&K+Q+R< zD?EGlYCa`jW#PWKd+V*YcK^m-{i`DwZa3=v_CNSvGA5rN0R?A#4IHb$=LSsE;kqT5 z2}A;Ab{aRDK8i7qXGuQSmH`2IxYW}W^!MbC5T$2C#;~~mjiFcB`Y9)^M$gLyNxF9J z+U~;-e-`d9%;vQx)x$HFC#;ncjLoo2_3lS7_C59O1#^`fSqTU@f*;z5YezrK5^ch7 z!Bij6Y9eM!y*FB=!SoX{A|dmHeJAkr4=BAe?>+mD%;3Euw58lF#YYW|wjp3}VEQmZ z_<3elUi3QnPB<#t^k)X11PP}$Lc-L2F+~|l7<6z}negW`M&FppwALuEHH@gU&7y+Q zPEb$Z&0wW-N)ynj_c5RM);)M#WuqmHUjkqa+UnlYMt{ne2tm&W&s~Gv_5Eal^@wCkkEdZxS`i6rhdQ*?G4vLNuZdU_FnAFM6 z{uqL;VaL-KC;WaLJSrr@vO}{1rom&3BuG}}z&O)Lyt@ah;BP8i%43-kE>&SvRkwR|yd_Rgb-@6A8+XYw)Wy7|&e zMUW@Zh9LUZ@KaRTgw~8o*tzAe# zS=4B5^#~XFsry!{toE8WKTc4MFbRhfTq(SqJ9lwL`7a(^X~b;_H(QCYlV=#HiUsmF z{@s74>CVlGx#}2%Gie~)w1r$S_tZg-{{-)Jo-w3yhfu2X;lw3bPK3wLHJUVI!*1@!?Z|I*4xhp|9A$4aps+{KPTDymjYZ_k9l@yob+w_ep&<8ri-q?RI>}@JR0yB!jcA{^0xC+xcu(8UFo8=NnRvNAiEth@x?>thKmK5O zdMZqZNKl{>7`%Hc57n5-v74e`ohzvGd#~jOlBRJ`$bh5EpC@O&+P(ZvyKg%<+S$Q} zFT?=BaI6poM^9ha{j5W+-}{Syu`^&^NOImw+IMbE^XwIKK0^yk2l5!sx+ihS=h^w4z{_ zE+TN!pAMHy3rv3~1n_NX`9==LX9@BZEP7v&kuJM7mV8&oDW#2QhkyJVQ*ywCIlORVM;OD$&8wU+% zi+QS#wPETHIti?3Wf&?LFd$43tizzu0zoei_#9>~4|9xiMrbuH6${ukA&6NeFv2zX z)FZ!gw(G$Y_`2sK-OJV`ZF#sifLXhipjdRU!6UDJn}A;p!j6RX?0_a7JXR**QBvkI zdc)&_1+H>5ts#A8nv$^40Z;B!5zV9D_OCchSx1lKRs}WA4PuANDtsEz{gpCmr6D}b z?(z6!qf|z}4_j6FsOijizw^%Sul)M2?~dgl^y!B`m|eUVT4A_Q=*F`zc7S%W!D#!{ zlicMi%zhNRV6EQh)F-JAx7u9C$;^?9H*-dN`1o4%)Cv)sLG>OsB;USoySGL|_*{mN zj=88juF1FWEXn*t?_iPi4&38MoT%jz~{8jd;7Mj(s!H*D!-SOdak$-_t)$U3Iv2eo;WED+%h)fAL8M z%bfV~nR&J4Q^clx1fs3J$CVx70xa+dPvu^%PaO-vc&?ocxtzM@dOwH0|L(or>ur3Ka= z_uv+;1lxjN!h_Z{bx{xTHare3_Ckqq*7Wb7C~w=!Pdfa-$yPJx5HoIuN9P~GHF{8& z^!&GL#&}6z`y8SLc$v@QTlc3w`yRnKZ!GY(_uMjeOqhZxmyj<{_%qXxH)8Y)jZz0WgIzcsvmL*)JNV+n09`<$ zzwR4vyu5oQqwBjbJnD3}S6cILPfEh!Ow0sEt1j1UC=76xZ=J!Dmhr5gog$EW379hp z$Kle|aC314PMszwUwYZ8^OY9GwMU?<%8v-|M@07@_T3chQIc6FL(;=K6b@$Ot8*Ug ziNYu~sY;J!s()0RQL3&zOLm4j1Nk8>s&~#NEFH07W##+d|Kox+y|#Pr{cjB8I`rGw zyml3{g{)=hrCwv?i6fFA7rwyMO0DpGKVg0Ii#D-!+=37TPc!5qWC>9}OEC|IK=48j z-ne>g_faPRKIr`u3C$O?LFrekNCe!mmbIPCXGvSL5llVa``JI5qJ0@*f0g!N8lv0z z$z(H+S>Y@X(P)EVRj?rpEFQ1DST|ZB!u)4q7EFn09!CSF1y+wRwzGj83A$)&2{3Jy zw9VE58ruDcTfZu220?ggV)x1xAzo==<3;w!SijpMLFqniZ|&Nt;Hu z5nSDHxxp|abd8=V4Z#sy81F*UA`CiAO$d0Q$*Uzi2te=}41EJd!lM-*zpUwyzM1;qr2Ypx zjSCLlCsZn=%gXEHTVdM!tnRXa@!;OoM(@nLO>qlxm@3y6_Yn-eG5bB*f^LSW5C~Pk zi4M75zo~Osdb@9=ABhafA#Do>co?BNR>0|O_L*4Cr#alZnsvYB$*=BSZXR9TC)=K% zk@8e_l3Ta0B!KdOr7<+R--*%A<>PYoTGN`g-XF&N4`L3ZBB}X_bYT zeb0G5X;-B8;kjUlxoC73+m&oYv~pvK{akx#{^B?PjTx0~=QhRRO!eOT?~bs$lXh_X z`n4fy?*3JlR6O(o>doUd*4zeR|?5xS{_zNUR>-|?oB@NlCr23PW8+~jz_nvP0@5hgFQ_@&IZDLf2u=UYE76aDO-8^qR;bb+P#Mh zo`&gVsH{!93W$Zn{fk?uL>}r=sG8@4XTSDs(f{gaJB@VX-z7*0V0ov$>Q?90PX|w0 ziaizLEZod_CaKd0j)ABFBbgEqd=k#a$fxI+ie7GcZ(}^61O!EP94C)Xsxe~(>8=Be z4w7pf22ti>Coe2#vU5cOJEbGbcB0iA?)X3c_V^0P@R3@rNS*Xk|$!h<2!zFG>NpLYN;&|S0fqb^P$2VLe5|-(Uu+P zVIBPdQ3dDuR!=%cr`@xsiUYEambl$WtW5|D)0+BW*qPt&iT^QMQbLA-QxrHM7O26N z)e+f@(jCt9^Iv>EBj2UML=uFbe){R|=bwB$n!#)NpPXyi8yrSx_7$7?jG6>qn}!y1 zhqL3HvTDSg>qiN}mf+e|?5tdeyE`?m8%_Vxj`F%amS%bF(=T^F{Xc$~z{)@v;jr28 zk$Cadp0|`fjMncnG)SZr&K_m6($|Cy!SGen($V2)71e!)4t05He9rb?B$X5Ey^O;E2^C zVoV562%8YVM7)EosLkq~jhj95zI-QZ$EfMO$E=q43q?&^`!P1882oDO`^H=E?vCFK z&uL!Db)<)p8he4qR)#~<_xhTXCfk;F+j1{(xRIFK{zzoRj|Kb;{zpyiB=Ca^37+Xa z3JGoXM11zRY5SA<&KW=)M(xBu8y%YR5bTcQ7;UR}EgKJBq7NDdI372+k8rKcDi}YQ z@W2F6w)i8Q^{%>YhZ)-*E$A7p_V})>xmP}Pra!m7KtG-Z$Oxc3(YsOM?%BX(9?F0w zoE{Z&qH=Y8Dj{+v{|?c(1d74j5IBL28}SJcT8WD8-f3zO;pzm(EspvaFp?(7gE(zW z6Mm7(jKLWRuV+K}Qr8<2=i|7NH7EYggB}M1*bfAmX2{GN>H z+`}1ZX|KUE4CZ%) zZ|Qjx7H~gYQ_b=`pX4FrX#>?Z4ROw1WgCoNby3 z#GY3EixJK*HqqfGu;t(m*z!g}D_ z^hRCamoKp~n09?|h{)?OBc{{toS65LHT52zOd4Kn$x;yK!{*=o3J@y)1B7VGuvNe) zc{c|wD&dtc+X9~ItOH2M0krbW?=_s{y@%*hb!`IDFbvL*LTt^4Ctuoqe&cBO{@cZW zt*#&Z^MAT~<*oL&oV(QM+acODLF|fOedoR1)eL^0XOOy`%3c9G4t5O{Fwp-!N%3(Z z&&yX)Z`DFLS$Da}UnRmPH2^U|-~bjPxB`!FK$=L3SCX_9o2yqcu0G!V+rR#ocZVHed7|SXUw`$TRR52P zzJ8_SER%l0XRiMCo9`5SsLgU|N7oWuU#7+ruml9^i(l%_B~`^5F%1#5tl1DPcrQ*7 zbC-1j<0(X*1aI)@TrTFL683C}Ej3tBB1aZll6B&}G#yUW)v0N3_ru%$0I<3+OXfkb#!;dPV7@G)4J2@n7w!@seB47g zG_9BOf#I8Sx^M;atX^}PBEfXj0CMX_YIn%wCO}i_&FR<1(ZG#a>K7aIByODBY~74cmQaA}0Gen1$dB09)TDCu99l5n3Og7@87MVWrGcHySsM9Bn9g2odF0#gq#Uzu^%+FJuZ} z)4P?ow~dDAPx8EqCy#uaDZsnhs7_NdLRFpe5axJGd+^tT@OhwZ<@fO}q2y$P5i;eS zdRCPH+peB{v)@de-Pz#wz1>r9zXm4v)N}A&C%s)b)Ask7W+*F$&xhe8>v_|GJFV(C zgVxzJFTD8b1WLZpio{1PA%67HCu1xWMgVa94jyN)bv&ic2IAuyXJpe@Oy=Wy5D=p6 z12BiXP={$~4|jj_-~aXO7M;A;^B;WhNvF|$XZOuN|Ce_E@PGN8h_t{k7t>to?AUy! z4wriOQfm77=Cs%HQMh}ENUAFU<^Z93%HdSCd9l~*cc#Z+oUua zO7GZf6KY9~V69C>Y@_v1IkjJ(q{-IaC6p$ZP_$vbdpz7Ib0tKUpy~y9m{0@>1LwEs z7*h_35%$$0uGyzzd;QI}ajS=bvugDq4`OAG;V!M~sp#Of`}*fscMn>5uymNz$*8(; ztNTGJz)^ECBF1{5sQdhk9y?MrI}?Ip#O6ph zF+}urt7`feI~genGX09T#dk4eX!H1rSWU`r#L<*PoLOoILx?jt_1Ko`kp_W!YtJOx zecwamF6zH|9?tvG8%;Tvjg1~~m!|1w<=cEe`?ENwKYUTOQDANxOB9^am; zQyLqI3ve;)amX@17s9SZ%;r1!THIrg=xBnbJ8yQD%4@H^F>^Wgli&T{{$T7M1cczY zMmbh^z*?KSl z=XbyIo$nUF_@&P0&hnp8%BgB6vjIG$i|It+6sy3duh%+kyYR2O&mOm05WyeSU<5ez z_KlgZIbs=8VN%9|KE>mz`t?rut|gynCD6wy)`Nqt>b2h4*#1n%n2pg#;u^`?u8$!R{mBq~J{A1Zlg?+Y zysV88{qTA1tA)X2QdqmE@qYRNIcx-0uI$=0+JjXajA26{^&kyJ!k`>=dTYHO{K7m^ zFST>xGX$?#B0-U66&yxiFjNMOW9$!=&k$zSjO#hdG)Few;c%uLM(wd9B~+|Lyz#~x zyRTaAr5sfi=yK{!nADC3HP-a(-qkz1+b3?!ax=rBse=v|i{qMAjSRO&Z=Sc05?XiC z3JIqdUwd%`AVy*AHIVQ-dA;~67%Rf)J0o(9Kao(m-&FK&Q%oMImlGg&T8ciF4-Q5L z7np`I`{wkR>KP6jc>x|i27^7jSJ~cyPJ)Fjfk(g$&dW0fz@A|wWlq_CH(Fr(}!@Im;#{OYBlMduNNakcqt z8e8QqXq1W3G5Enln#nq&+N!6Xyx)NCeZs~!8nK~r+Ep7jyjaC~SRS?+d994{v>u!( zsd{`obMN6{cFAZK&nRo#bh&W6aJRL8a1w36^YdxLk?;8g-_l4{Uj#ww=QJ+=kyJ|? z^2{AyZuENVoxBnw<}Y(#`lQ34ZsrS-nvg2G_OxJ%ac+r`sAodm0mNzV8zYVvppGIn zkyqI8Y^i^FeDb4+xL>T39;X#uZ+i0Qzx(HQ7vDU&`|0=o-kW zbcEqT;$iRdi$ETssxpaIX+MR^4xp~*jehXrAK}V9T-gkD2MLhD(Fls#)XIxZf|x@f zZZ-%$3PUu(g@ARSJ_DoW;9=YDIdX%VP4oKvCLHK#pMmib{!}*ultX>l6s%u(hV9nI(*1g=^6C9%H-@ATm0tX4g ztj(g+Ejs9;3LzYy5nnH&hyHkm!azet1pO~0AW2x zu;2X7cZQHu`e6rTf8M?f*T{lr=()Wl^xiLbgx^Nq0hIBNvs=_$8>)jHGBr7bI|Pf7 z@Iq53<%kf*CUE+dPCI+E<-=l+y#JT~+V1Fsk9J@F(VrBrb(R- zDtDSmY!I@TR`#8kMsYF;|3XmAK|e8VXUE6*!BJl#^vBf=RpXhOfFL**I+l=OR3>-` z9qP1B3i>|fONg-D`0akRto#0=_UiO9t1mWk}uad;f06xQdU-baI`s~7aUzA z==BecNg4VU0>LtTS(}xwA3V44AhaiZOK8l7%1vrl!rXuMr}rheeLm5SO{k`kye!{% zEwtBVG zxIV~po^5skOKyiTkWwGl=(FE^clTPz{OE%ZcE<`R^jF^fGrON$X@w#fsB4((*d96B zr#^_MKAvquqJ1nJ;K+tSUPu(#P5C205a?b@nUw)B$Nbt5o+ovua%)d0R6Z4!R^a+y zO9@5>-lLdN-`G22m*~p(b*C)B)SJ|qeUb-!apK(Zepsw6oAEAqroNTW_4;6kHL}Ad zd(NCd$oSfWCF~G(gqNBuT}qHx#^sYjGko!lSJO}u_C@@^)-t+&{;YsMR*Yywufub& za<;pZZR`3MUrdnYJ72XwsHx6qNEm$I{|Hq=z>BehagQ%p^pr5r@78PPy>O=;41o-S z$??*{@zW(3Gi@1~ zh*{aM(ANmYp^f#9{DgWvG{TAzFBQa7!zvtlqs90KK79` z>jTmDqIW_<-;0__zUTe9 zv#v)&sSG^#{4-e&EbH1I@vDFKSH>Q4p{@Eq`te7*FY-CC{{w&|9zY-xF%5M6bZt9KZfg(Vqv7GsH-`;)el`Q8! z`1$UOpMS9kq)yUl-0$o8MU2%2CMq90%+p4^?PN4ZW_UKl0vXjCguxjMklVGI{cdmw zq~J+7FN7@wI|y5wGc4yW+7SO*;;+xro`$e>Y`6*1 zKCAuUm8RW$&Ff^-H%r;hI=T@fXqPyvq{qU~!uuF)dw2E06f@JRg`=%c>dPKIUytn` z+dIAq3Gi)%sINbO8oUWMG+PTIAPge1?! zBOZ+#{Z+0{t%4kXmvHV@wbssldz3)ml6%fh_Wb#zoOxe)W%^o6-{#)k<%zAAzB|1=)5BhzGMEQqq~KA$T_e* zN0w_Rcyd`BCyFz^>Ts`f`3=$j2n|cO$1_mcv7O=-akf&>!9COW8G>(Iy)goWQI+xW zM4F3Mn`<)!+t0K)F>P>6JDv%astt#BOBtHg2g~~6KwXtHn=bmxOBXg5d^Z3yb9UWJ&2SP{PkyU4RTZl zshqw}bei6bifIj-E3TY6(h5rdrwq)-sODV~@>WLIvxjHe6&Z3yD6EeCB0I{D^K%#k zAtc06{^uLI8e9D}mWSXACo+u=q61sjgwFx0s2nfim~89Zoln6jpVTNkW;n5%vx z_SFVun2UNs$n>lBEj4yMlN-_YE6oJ*X=4kwXsK^R_FJQHT)Nwi^%&n9> zNrPlxBHTxiEWn0v2j+kmMA}GoETTJVf0FWta#Ybjzs>t?euI;-g(S>rAy32GVRo!> z>}ZI@CFMwPMp(+Y(*_T)Jt>ypxx{=e!xUnkFbxDouxHZmO*Q}kbb|4(*5Z6C}Fr*r73JRLUQ>W9=l0#!J+XvALo z&V*biz@I2;n;0KYvY6|*nEc7+7V5Q68`iLvyXc8wrvii@?E7wgt9z87+g@|Nd~&X{h5 z$-e#SpLSH9Z?JAK%`*(5o#Di$J8;c1HjEKc>g^+eW%BNsHRL^GM7b=9oAT)c(~p?~ zMsv@mB?aQrH-0Y<@N6RLseZm9Jh-*n2OUUwX4C4li-1@D%P+suGV$e^R<3Cb?bJZF z-mB0lhppt^9!`esZJ<#$65pmHWuG)-Uinwc*S#?<1gB@m(*)*d)o?(_dmkRA-U`u{ zXQ}%KKmX|C-KTk}o@}3s=;%lLm7C`o6VeHc!_;2@DpNxd@cgJmekSYQLb~^@@IdmG zcZ-j(JVY@vi47p+W0vm|qGF1>2`)Y+r*q+N(z*NakAJ-T!+-Gy$%u$BqA==Eu(-Al zQ)($8U^B5Liuak5gad1%i4u;Dw~~vedA)PIrW?0&V|#jG}5*_U0Z>|pzYWU z#jDKT7@H$QX!zZ01#qLzvPjxCJ4!L@zU}&Gh_ANlS4m%NxMO5Y(U~;;S^l-M^8CF( zpsp2KOh5a`yDc5hw*2aIU-EZf*|kxvb%e&=wdOr zb8wBKPwPm;yQysqg2(C*lK*V({B|+tV$o7y!mNBcm*Y-8xFJYA$ZQce@7(#7bro{X z<{>+67%KDx59u6j&to=w%OXF>AB;|(t;4A9u6^w5T<*O3HQC6}~W$OG|z(##AaT8b*)WxM&HMU>|!=-n%t*n9wpUEdbAeQ9CyS ztoj{JFZ{sir>Ca97DBn%vVK3SGXasKc=nE@_ zqWGyt-9E~mc7-SRwQB~gS~9ro+kGDd^SCz3|6NLn^{-o|`ZM zFN8m$s?k8R7|-5tJcUdm;RI9p+mZ>s~g38c4g49=0rvkg3@GOyJ8V zuJJkPdi*CctQw{5cT$eg4;+}_cB3EfL^c!k@cN~S_IL;z&TkdE(K7dm!(a_3wk8Np zL>q9NhNEw^Q1VZNm9Dr@wJLgs(EAtVs#Z0N~vA zIJo$7G;rlzi+;MF7IDmKO;a2JuOGy0BFF{e;8Yj`0_a!+MU$XmV0N~r3HQ1vAz3@3 z6>&M(&EVBCEKQhm9$QkVsLcU{XiN5h#i>IhTE(x3A^wzUPMVc{Ufr$yu~^S&YqTFb zN5I>Q6jVL0oURE;8t_qct1df@4Pd9k?PwR(=?v#1?I^>>aHEZc8>?L6x|kYa?gzns zRJ**3cTN@A&vb_S(A{=T(~`CEe!;_EfAihlC!c+pJu74Di5AW4bM*6|cF+503w-)H zc_4hnBby;BU)es;$jNSEu)>W-fVr=k&XFVG^)!RGNB!>S>SBUBUYb>&=&M4e4?LG4 zL;9IvW|n%Lqk#_Z!EB*Dr>b3yd9TLPMgorhneb@_m{Uz_;s~`)Ar*%?T4JOMEk;@r za0F6$ObHGNtO&xrV*xxPay8kJYV#K9eOQMd=5_Npr?Vga;9re1&Ou=eUTBp2%*M7X zev7m$d@YVY68Uqz4G#%~wt64nd%-u2sOTJ?-D!dw5gG_dtUduUgj-}pVO z9lQ&60@t)*v`4S<9jV=jmSzHXJYvU-xW{96iO|KXJ)ch!W)KwHwgQ?9p(nB%Lo4P) z*j+rs=>}VOs~Ikq2B9sk#ecDZZ|gs8Fp?5H^TJlZbKlcGZR{g?XDfG`5__f(ws#`U za;#>`>$!ArbZ-&BEWu7MRCooBR4xx@5Scs_S4dX()b@w11k8Lfd{O@F$uLhHK@-8B zEL0(YRZ0>*5T7IB#3&2!h^>Fqs2FDvdq72GfE2y#Sofc_&H8)4|9iWC^Vk2a{2Ln8 z8?D}d_08S2V@9wVljy_!D8-wCY2hl1a;Cjb5{7A{z=$R{q@I1z#sK2S3@&TR5Mk|SXQDMYEsr;}Y2%Z$5Oyn3*3gaJzy$ia1V7bZ zo2?4cQ!f@DmZo(#XEwH%QPEM+9#8sb2_(daSP}ISB=A8alW1+zFO{`95Z0(3^biwx zulzofzh_&UeY;P9ALFSQo|u?dTYFZoDChb2^?NOyvNl?=TJor}CeCrVheN{Rc!S%N zwG{J#pYU+NJ$~SHH+0ZF1L<5>GX9W`8q`g%4_fuKlY9x1$DNP#Mxin<7vp8|jCM>t zy|ckOWoh4(L?KD|!a?^49WZL~JcpzHMQWj7;RN0W=e@Ja+~d2KHvEljsJxZr%Lrj- zCQnGNz#A}}W4t6U8Fu22nd*Xse58L*JdPTQKQx&+%-7QNsJ?+ zRHRZzuQK+~41+WB-OlOh*gLN$M2d6r@h^6V%?BM{@&2#>wcQ_{`q}P>A@am4#oI_) z-;NMZBuo&wpg+px=fL)|H5y?WWx+YjQH5JO)lJ=%$FxExOuHAKFQGQLSwv>j+&Iix zhuo)yr*IWPFN1BwuXFsXbEp?kZt5t_Vde?m4Th~G9ULuB5<8aW2Ob#5ScD;>pn7BW z=Ob%9t{(_dOgkD`r64eP5kF*WS3pepVB2gao0p`#2uMuWr_@lmP>y!2*Jhd%Y4)y0-Uylu#hiM)d#k5Nd4}M7xjtU16eOzrtXz-k4n;0bG%$lk=^xY8{@ImkzjD{IV z?zxB1*Ry~c_!l#juezU4V{inU_kJl2%+)((@1M!HM(kCN>E85bf_n+Cf1O6RJ{!aY z(-L~|K;;pL+U~=sZVCX-seGX>ZLD?ARNcAT zPEydn?#bg_*IRoqy5~MyxtnIRt7xY~v>&Kp+I9B{|-PB8WlE5N>cU+e5kb9W{*`7_@Cq5c^R=`$epGUpjH3WzRZ< zAQ;9Bd6;HY&pHp`%>BKP@%}>a>Y;rxy}#y^G=t;L9`3=`dGpTHvEG4?A)+CYMwRf7 z;Pt^c$?1W9O9;rck1)Zo>h>;}&9}GrR(m!E)1G;~KbUB>uNOyHovKU;T0EcwB~y;}&1>kqzcMDFy%`ju9iM4LQp8yLV+ zH-R#6r9RJI8bYn|w1MEG(I5it^fAqm!0Kx2JHNO4+qGwtZ(pAL%8(xK^Pf($dR_~f z^7i;rRoIFN*Nu(N*mC6CexGRPqFvdGcFK=$vXMOONIFNNO3$9vrVVEIO=pzT&AxYI zQ?aoRKl(nr!fB1|Y)wnHvV3cc``V~{A7%OI3*Qsusr!Sg-r4dmZKMiI^Zsz^{Om^k zvyeOQbz@%#JS0f|;$Qgg+*pW4Q28O~z{xH)3CU;N{F*Tx3O-Yw4)DHp=V1pwXG7_{ z-5X!sZnVrm7qGOIN3FO(yIHgqA0C(1(9r?onE5qf@PMQX$iv+8&lb-F(tr1#{Lb$G z`k(#hyZ`9_{D0Y1u=dMxV44g zM?fbJJ8w5)-Uw*gScP!CwP$AY-Mupk7D-ROQR8cq{$iZR zD2%g5h_0qNDR2y^)hR-}UDLFX2W%{JFID|eRp zvtju@SHFVM=w3mSZxc-5r8N_-PWF2?-Dr?tboYD)gK*0DO{sm@tl{yaQ^i8=Sl6^Z zVJK`>kXJd9L1q&i1{=@(R@T5?p6780|M+icL7VpUsS3A-!!k)^7Pr4f_u?~I??NSgId*_PG`9&J7wqbN&KF9AWbAaKWXw)>mm zPkqYV@{ac};nY0_+DXxmJz|nP&JJT5y{@*ZFK7cZU{HkncbVF1R-1A{|{q-`n*|^ z9rk@s?Mqiz@5@YgPtSsFFyH`$%rIyIphOyGn6g5$P1BU*2>&bmFC5_)ey0e_e&bL$ z!j>$HwiKj50)vIbHVbA3Gu=JCFV(eg?eFL0lU2WI0Wh=b{_cJ5&E@1dCr_R{c`{SO zsOgR2&onIoF^I1A$)%Vwr0O}3dCN;U`TJfA-J~(~dnRWUdC%(E2#2tywlUJOJ;hWu ze{L2kF+BO`MF#Hjg+FDuFuHo^UG}?8hf^`9{Y&8eX4@o2oykL;)z!CM$1PMIj1XI6 z^{GQc*iART1^Mp_?6Ws%uIn7t96@41n(1CP6+vULjR3~RkZc+QHQ~pFTOQ$qSFEPS zb|mcj=m@}o$=%0RBTmToTRioEEtvQ0X{UD=z`Bp!aWbvoZHlz31%GbZQL|QW0hl zoz$HM8}cAQ!}I;VE8#ZN;u?zYkdkb5o^Umr-+BpZ_c;5+*k_$jTf7Hj3yM9)uONmB zPWW}rv^Jr1zkMX?-K;y>g5~C|wF^5K*j^qPX)8y*gq`4heSJa{`C; zVKhv2Io<3E!#~7|!&Sk_ixwR+d~1FL>P&}+b9SAfRm9PFUGUJ$W`pV=<2UQ0%53r@ zXb6fe@EsCnWwo*ilIL5jr$Zx*EM*XHG_mqxKjgh^A6c})-}sp(&YM<8K*;ZQr@lk! zsy>1MOm#XFKY=1|^&jCQrh1i^_N&c={3CnCf927q;b(iN41ET@BE*srGNeEpZcQBSxu5B3=6syI9fLJ`f_vvd6h#@*yLt6GK3i~!ODPm0ip-N8g2F7*S&tPo+ZH(LdC(XSXhw1xWmZelFr>- z#>3pM#Ua3qZ}lj$DYw!sW2y8uQI7Wq&imPp)MqrM@KeOeW0xnt35HVroA;Q%TzA<6 zSMi4Fb4=p!HG9eiA7(JaCGP1o%`#uYMd94)E;_;Jt_`cy3%YG_?I=~@*oAz*Q z6WYbDqkJZ9cdLA7pPlZEsym+%n0+6o#qx4$0wFd6ygWI&$p;)8Zv(*b&xTJq!iJr& z5?`k>G{x)XQG}&Eg(jVicW}FedGs)jE$q1NXRqh3{ZR*8zx&=thqvE(zmvw+c7{{Y zn1p{xeQ;_}3|gN?{r|Kbo*;VsN4nEW_!cb57UN`Og{*V+##<#O&3t!RBQRUpp=UiM z!{k$GBd0sA^I|RR-~Fw>fB3?yuQWz#3bEgMyDLq5J^$iME!lpmhHSxCheEZ<4zJei zkPHXo)CCrr1K$D_B((Ib1Q349*4nuCXTs94>IK!{A(|j zdh@Z95F|C?>hIL|6~sHbdp~l{E03DL@JU{$@N?;6Q1L6rx-@h0qf z2k_smTbSOWmutOJL@r9Ch-tIV*IU@W(P?|*#aIKELm-9w%E+nCOcq0`p66o6dk}u7 z8%AQ@6qxBG;Lgy5XXQm3Yqy69*zH?NK--iWUG;=;>w;UbZ~V=3%kuOs#gf!6y!i%C=JDycHuqQv-Uv1xhcy@@kA+@0mKe{X5J+JefzQM)zrg z?{-?!%@Dm#)=RCc_q~_l(|0zG&8QHgF`O@d+6rR&Hub_#!9NT52F3lX@!Yu;GJ|g; ziyR+^u45dQMc>S{f0-sdstMjF7G24DhTkajaxSed%sv*4~yg0F++5l?ikk=3~xz^&AH zd$XRc*TdYVIp<`6ghhxvy#BSHiCzsM!o6L*`2AQNJg)S`oyKwOu?ZQruRAoC@H@-=U9Z@!d~`9jBb<^-g;-j^~}scQ{z@@ZFl)H;j=78`A{N6XEw{+*S61 zb*87&uEDey=ZWi5=MC5JO?BPny8AXfSD6f#4-=^HaG`JV6Q-HVuXj2n?(LuEd-F-# z4ouwWWcBpeP>w@i`R@9A#>Z$4rjz_Df8Y1rccN5KeRV^pc^5p+sFp7b>#(LA>HT*< zvfBvs$t6MZ+rRfm2@gOzcCmFANw>-wKt|(;vDT{H1jA9VoSx~R3O+hbZ6K#`0OTj} zFvH$wb%BozVigFPE{AR*qOpV_6)0miN=omT@Uu(vux&{Zhl(&fuxm(S2f50+7!=Qy5!;5oCUh$5%O1PAtHHHD4_gb{qv68&bw zFdJrn*3$`=J8e4Ux?Mh2UvEAhTpi;wu7g1U4;c5gVf1aDk8%7S-mc2Z=xFCAbSkdvcy-yBZhuVuqlvA zU7>S$HfeWM;l`D@27D`yHJ;XpAmr4X9oxzD#_CC3>oP0`Jl_I7nh8%;+YbKVyWcy! z@uN3ePBW1XEi0rS=uZYqfmrXto2nKL0A;uuIsMb#S=G2pi1S=-jT%v!AW4 zE!Vy-s}}@6ZDR?!fo5=wxP9=yi-5^FFJ>|%q(RKi?Y*n%#?6FF2VGsd8sS&(Hu=S{ za6t}O9GHsqNZqw5^ZCmC?zg{l_{lqOPh+|q%ronvQ6FimUdQ%V!(P0iA@G!)UBRkX zi3jHKsfZ4EWYudiy}H00EbRuc?*%Q``*)dHw^Cb)7jy} ztsR@C(ev|;r4i%Z&8KD_M+>QKpphZbXtQ`1kMKX`}SBcY{{r*PH^L=1cWe9RUjbADlC&{IEX<*8YiNiYD3Kz6^; z7f^c8g_P_Y6;=^_SQ$=S?FO0W@Zq1Oh&-Mg2pUg7jms^`@+$z zaPh)A&t!g7$b-689-Kg64Zjf$hUh7(m;szFbn^aU^_p_aVB#elCSHO{`Qr>2qjCDX zmvDW6nZt8abfbk_$3QB4Pg=pjo#C|9q|+@ezjx10SUHd}{56(L zM3tZBTp?12A|8L+noKAhh0}Z+fTpA+e5R17Y$N59fv2oPnjnC;5P91)j*-@_zxSFp z7GM1bK1?m&nQ{)x4etw!pS#ygj1b=~>w_dCBGpPgfZ`YHDq0UlgCy=I{;IrCXw(p%w; zC%8~N3}?ytgmpAZh_JaCDL5e!A6wYDB%7Ong7}U;y?bUPKh(^q)-w#U;TPQrP+hxTxfmH$A9wehA{Q0 zSD$Uak+$i-srOD|$Hy0IAYbkX4JXh&*EzWtTBmTUozU5O$aHIf7;I-+xcWiPlCmK* znAr#H?K*o-koXbre5cN7l%`Q*r{G+OGb=MwbnTm}XQM8=R$blUE5ZE0^8QK>Z+^!H zLzqo0jN(~Pk0p@lZoJU zG=}U1y%#$0tRp9?>ve`v9e|-@zg6u_an80G)R|^&p8vv2htD|tmFGukA-57bhNQxo zgqDq_Bm$RNCOgnA+DlVIYli1kcr#05HfMy0;ZOfYm{(sQ&kR-Z)&E!pj5N=2#?Xr= zvNb(yG*PBhgjfz;O)*pP6HRkKS5k9Gp|RPQhF7W=>d7bOVnb(T^X)MFrAdmr&M)4L zxKTBucf;kiorTrn&6ouH*`o%m!PqKp8cyklnS-CEi1!7(xqWGAr{c{LgJ3rN5NIES zsfN#6m`1l6EP=6j67A6ijpU0{T#G0A);k*IZaaj|Nde(Eh8Yt?cW?~ux8`f_0pGO@K4(Y@=nCTz%S%S@^e4;^GWazI_&z| z;o}<}7un3g2kq`<`qGZx8mZN#Kl<^H4<9#GX;x&pjV~u0_L_5PLH7QPiw6QMFpV2B z35ztEjhCr|cr`2`IwW8goZ_gDZ4TFc#j%WF7B{BhRZ!(;XJ}X;PKC~p!}B8k5-RH( zkm_Z44-?oUMArA!2}FYcxOJRfCkO=g5S#E2kkWnFImz(x%+nn+*|e>xLrk+&>t&3k zLOXpekEyYn#7Rl88bt5Gbu-QGR+`)2I^>7d>w}J!4786lTKOd@%V1lX$ip^Qr|a>%HMo}rv&jdQs3apZ?y2;Z`aB6 z8z=kShT-Jz$@s({u*y#v;+?$j^vYc@cSu)S`3#pTo6XL9aDaWo{V3fDd?;s}P-_F* zHs#&faVQJ13!$O-Xs|p1BY91OSQh%z7_m7?glsqv{MbcZ2y0&-u7ay>LmO79qPnvVO;OP=cg~fe)!7kuO9yJ zkN;?d2}Ip2FW*d6?&A|?1!rXnHtMm8RD;`fP)FC1hX&66>h7+;WFDwhc6pC3Fp#UZY5+G z{J?K`IgO(_>+#KKu%Qj!rW}B3!b@;$T*^zF{tREt5Gx_*`?46EjCqWEe5D@4PuYG} zJ}ccg_SGYe7FfQEv@{2_S@23r;5|HH5KrX_Ps_d&u+!+p+X0-b%*DsE%NW=TLkqf5 zzo$OE!#`Ux?{SO#rKyTO^a?_#el0a`tHfu_;Cpwpz$eP5uIei;kIcEMhu>jy)Y}VbA!qG1h>^`&)B~Cnu@R88h6TpG z%HOWqvwdPVAo&a&M+0r79pO}FZ56mQk;$`oPV>8;hIKx#)XN=t`NUPTKFed6CI_cO z*Wf@qPHDV&*-3^Daf#iytXe+T@RAU@@yWGmaMszJ(_oKGWYZoST-$?GzF-IE7Qh2{ z4RymmG~QAR8jJtPxUDjU(Y7jLw1R$%)1Q@hkHQ)X_265}T{6x-4bGBXo zrok9?>S4q`;&aW&fbXaY4tNlNug&}Ta2oUxw;PxHKENFRfM3{m&pY0J_xZc;F6Ds*3}6vY2ds1P?e(vG zxwDQwnuFjcjl3&vFx`FDpM~880zntuL+kW!v9&yBkZkO~C3dgp!{-6rz_{-Uh$EAe zmv_Rh#L4^m;_vD;MtH;q2!THWHK6nS%wzR@MyGfG;)iM8rw{+lfBVl5|Kbn-DC1s3 zorJ-e^G}R+GDe?>|I9N_9bQfwvCjj(;OTd|mBtoFee)Z?*lNkA55N1Z-yh+_k%|-r z*A&|GvGA#fnH@}mY=g|=5e+*&n8%(1)_{dvI5~+I-iCh9v^7N6uxbfQCG7p}h6a2M zhPpL{U&Ct99<{<*_5FTHTM^z2iIi&q=QWa}^$ zZfuS&#*Am1MhEBkCiF@}V8b;dM<~oNC%cHH1j>K+op&4B+;}9gR-+70#ico&O)EK{ z2G%KD7+_|8#?cEc;k5vM_1?_A-;a|UA_J)4{ro$TZunrbSwk2?WCzSENXIsVcXk+| z5r?aT_lfH0uwWi|f_1|q4eicVX4CPUuhA3kgSTU*p4C6H6^&-I$_7!jm@s+w!8^8_ z`SvKCp{>b_rRfkHTf0L~9iqChS?tCxQ~V>%hSz;xQ)quSPWSK6fA@Z;-#qG0>vWf1 znOl1jA57}ty8y>DciUv*VYPPa)ugAnaBgg{(Jkr9 za^CN>e($g=w0>(uDiU()am8P2Q;^0X&dnCQ@y6jt|K?vG{&}9a|DW&u;BYog<5$~q z@%Mh`_hzFP`#z8wci;cu@Y-vy%v9x*S1zx{_Sw0^J8!>tc*&WzRrJ-Islfl={&)X< z+D=OVDqACjqzWI2YkiI>;$5c=xBJxR$jp=Oh-BZ?YpK+$9^TnZ*!u)`LES2k@h`@> z-{wvFPw=okTxjJp#-dv9Fg>3+{ia!MSTz16X%=(*XiPxMxD(CJCp0d<@XX<f|A&APi z)X~a2Va~`g;}B^-*;t+yDz_e6MyOpkNtMZ zYw&gaz2EP6zVD%xVgL8O^WDi;UWPH^3Hv_pD_cJ5M3{Tl7B_@!5`9^U%)pB>)*(T^IB zxBlku{^sGeSH5s~zn!%I;E%sOl_5DbHrx7@<5bSwO3tgD8h^dj!JOKzWHWg6{qEtDV=u7lSyP?qX9QkScSF07ITm=FcT~}}c|)1g4RO?M3B}b5%9D$8 z;$t$|Yh@gp`B_u!Xmqs$zTlJ=;@X7T_>>b5L$e+Tjp$*S>hT z`r`9*KC;5DoVhXv)H?~A6;|US&>pmv!Hlx{@LArgs-rwx9m1JIwahrYpVOK5L-XSh zYUrt6hC+<8r6C->AGDNC{JX_rf1vGbnr|HYy{{v1bE9n#=*@gT;yYfsBP>40N0S!> z9>Xwl&)&}p?TN3WTlNP$9Xm}xTf8MKUYW<0HbJmv5$$2~Scu5?B>ZC=DNo>?e6KOV z#o%dWJKxoJ3k{8TE#^F)t#pJ%oNeqBcWI`}9`*V1#ob}^iaN<#*&Dy^C*c#vwbOIC zV5mSj4 z%Prh{D!Yjp8D(Q&vo*7Du!`B+!G=c~vhTOX<^Ob>4nN)IxnDf|{LlXE;rIURPZf*$ z>wc`0_~69Y%cijysb3TCv*XlXwXZ_Qo-ww>nucpQjL>1lmyhAgS^>Ol5ws7Ca-s8s zrkvuAR#togPQ1UyE%05>wt%# zovi@$nCLUvnhFiR(ZXu=@|Tx#PutYH-y*8JA>qgE-gU9_5H@{=o>fgCBxok+?z@JJ zsXVLK{jS+9&G51OM&m2pvTxLb9hq5tvPP&Nu1R ztxM&@Sc492*VI%KTA1mNVwD40MP0<9GL*zK$?2E!$n%dxpq5?;=NmvoW^4GxBM9vvrZjjJQ{~X zsW!1k{V%_@he<=29Od9dLvsx-C;2eK;LCW7ux)d?oTM9OB!H!w}|jc%8LU)twT`W-@Du!r7^oCh##){-rjd zYCd_kbA02+Z?!2=y>lAPr6-n}olP>2*EF1P;apk6;BhcaxETtLij0w}qoIy^ok`=N z>29W88e4S@=D}M6dD|`mx_6Zsg-w&2lANJ-)t)m{MhmQ42tS6OGXz_lu0=$F;HWHh zBjf~353jVq2?>@n;4R(oZ|}`k7@pBUE?s&e+O#cYvrYFK_Qf$PZNoowpM{gf57Kz4 zeBrZ3KXgmz4PRH3y5Vg6vV~}+EIfpNy*Y7H<-FM;h@Ao?@`-O<7 zNUrc4fQA?m@=k`r!`TiHI`{J7-R8P~{+qutyFrbmJeB_UzxAgxrgMxT7kN_j!_F@L z`Cq6v3?A>eI3wUpji#L#$KMUH5(TMT=KvFXjqk{&bj;Dn?N@4!}m z6gLbqHiLweo}axSE}pu=g*-UcAs8Ve?Zm6xVP5G&&o~-&t__2v&6R9mV++19zLgK$ zH<}&+ccpC*o=k{52w^{Y_npJ@uYRF2nq>)g3-Z9aXp+X51|seCHcx^F21Kyfht<9$ zV|S_Hp^f)owjIDH@4YwW6Ut9qd1@BuRe>pg764Wc!2wWuG@J9_2Mt5;+tj)s>e2@K z5z@dnmVbDyWlmP{sbvA;87dG$XY9mQgVngF2b_p$HiP^4G4rCsVF>E3Hq9rt3F6$aC{Iob0&XyY_E)G~VxLiwVN+7-u5>R2;*m#~PS)C+#JE zD@~pPxXdmxzM5e~OYjNeoGe?~{Y|>vF1;7eJI{jqeim=|%!h=D4&sRiZD$()5ljU5 z$@rqdiOc(qAMXV?P9sUe9SiePL(y}nz!okF-bi-$dj}bBfOp~UJM4GjxP*&&3hIgU zz}AE4E9`joWG?b{>-t+i|LWo6_dhy(P@J#*(l=Kn@+P(Iz#snEx7SWvF)d*SMt&sn zdZuaLDdRY0%DtZEs&^zzlx~*f)r8Q88EJ3*=*OdVaM)V#)f-l(24A5`-tIMo*^D@@ z9o+OzZ%Rn;p>PVJjhqAsMnG-L&iO;+W1S=UNcw3OE$O7OY=YiOh&iO&_6%i^0+Lpk zmDt%mPb5UByEXls>)L3l>!UyZxb;OZH)He6OeGVtnyWgTO`~(b8Sl=^S6c8zAjKSn z*EH&*{bVyBS9S)+cYpHs99RXPmnsture}&ajJCqqYV?3P4C)M~uC;=DEuyrYz};rs z){=%AMKCFJym8@jitk;|gqdL2$A{&dAzN)_@D8`^Fvt6v;+7Z#$A{H(LE}}qR%iTr zlII8*+Ji7|4e$e=!o-_oHSS))8D0;XI<$4T_e4DY+5Efj;-j1VymKE7sOQPMn)1fw zli@cW)y4#IrKjb4-r9s`*Gj);PBt&0hieNI`AN5fH1c$vOz-<{@H@`_E$-0rIHZ#I zZqq~aBb+-w!kM3s;N1xH{aZO*XGup)rDsVs8#wn};QkI!&nJIx z#`SJAgz}qX7WGCE@nK$|7h|61W8!Dp>h2Fd`pMyozw}Fo=U@Bk;o9wMshoEY|N4*q z&Ea~z)zuuWc(jfSc#YVOWAAxS3VC#rdptN?j=aXgbp0YH9n8XhDdKc2!xnKHT_I-^9g~w|U5r2)<@! z=ZK<^;{OPiT3&Tu4TOPn2Tug1Am15scHcbcj&>UHj&o9wOi?51G&rvzSq3ly zHz9m74E!g`*u1gh5L#32u^j}#EG3{B>Ugvx-^U5=*oNex@jmLD<5%T~2S>hZ*t9(G zX_MM1n(lTft}uC*R(k2gm9Mb#^eo=aU!E?m@}o)Ci49i6jr3!aE3Z;WIxwN2A&xR= zAd_GBX%>BJZQN3w6si&cB}fDSLGG4TJC1KMlBrAZZGYeI#F_k#$dun8FGl3UK#j(r z7n)gl=IT?2Z+z)XhhOOWlmG7jdU!LZs4u?sv(2#NC7B1_TW|j4@PohjaTRSS@!6f$ zTeO8hQ>hM;diAT%w)*$l;q(uGc=+1azLv_rhF6wygJtoKF>Y|jWO~!9HPG>NwfZ$| zAXMtbGzJDkEGwu}gOt)jYp6`>FnG?v<0Meu;H?*vPgtzXC4{{n`+!)wKlucN25C4m z3nV!OAy{xKi+AXQG?B~MM4Ev@JI#EHLg2y1{`lQDHyZ_=}9-d8*5Gc=OKf)ka z62wpNYRx`#twt^*OwH@`Tr*8*J`J)>lg@m0{_xSe8Cc8j>GsEk2lgs(L)dKZckH?D zCU6}4afX15iQw^8g4pq!OLM4`h^7QMnCChQ*UcMKmtesgmJ)zXnPB3zJX(yg4xA)_ z(FW><(Zkeimc@?ZGe!<)n-?Dm?otn;qqXt~lO0bZsK+?|UdtEo2tL{k&~Nb-y5UyF zE@ume;jLq%q;<^q0Q0_t^LwwF_j(sJmqz-*S#fq*$`^kdW5ttB5XZG) zoR|HX@{d1!6X#^`4xiwO$^VF>i5G48KMC_Yd_5|oY;=NiRO>OrF+)Kqz(q73^SqG> z_$8qqH>i`9lxAOm*}*&UR0hHU?A^|91XG-0fs*f*yj-e*$l{IE>yO@Tm~!LH;hl~p zJeR@o>E~WPyzv+B9De&>erw{#sqvT9tu34@{VT7&c6h2aC5)@@eenLw;Jn^6afQ|# zV(0|btgne_jl;opGlLpAVbK(Kb$g#s`*9Abf3v+~L*F2I36X%~2}y{I7Q%^Gy_OJV zaGDBC9zBL^muXOqY9Q%(R&OSxZgv#u-ltjn$w3;_#nf+}4o3>q^0(dNn(*?s-iBy?+o^{gj+ax-rpzf5m|th-v$WK2qjPP z&NZ}{UBWepfG~UVpe6I~xA(G@W*zV?-`4uX{tyB*$mnK- z7Y<+l)n7hb$WAhwR`q@M{bbvj9v|;CRxZtz9Ql&w(^$toQO)3U1WR<|%r-r_22#Vc zm~XaNj9%XBbq#Cqh_HL#usF0Cw|~4rJcSGbR#t2xPAxo>-Kwr9Uh=jEIbVB3w=Tm< zI4{9yW}D}966H8JBWMKQ7|X$8h)WxR8a%m!xHj=QAI3w(krY+(}foC&qcfyG{JAQ>yO&`JX=>3sS1WM&UmdYZi82f|5b|rSj z6$Hp3>MHh896zPs$R#nwJ;{*1D{uB;t=GETY4ucU4dT;JTY*@wXBqhQyH6Y*<_7=W z?|%32oqzGI!%zO=gZ3QxN{uUPb_{;6d|zoA^wlpXL}JD{N+3Q__9xjr-v8*s87f`L z^OGTQoTMViW){6aSa#30>fQDOsqHsgEle9Y8T2p&(K4{=!8DlFNZ_f~<>$Pki9BZ6 za5A4`oQ$NiqBe%PZThqK4k+RfR$tvzZbO9_hU)l1Gbk4tnmpagT^flaM91(uz4OC- zYT5)lO~kpyAAj`G7(1O{c&ecajp9Lz8Q;G5*5Q?}e);f1n`WcKsqjksvb!9ku6J+^ zCsbtu0bT6we>l5E=oVbhL(hxeYzVU*)WZKMkq8MjanG z)^~I)_22-{sKf5$2FT#tb&=<)!!hrE5AIM64v&{jod!n%tSIm0F)(~C5BVuioDl{+ z6An|C;Bl8$JaOE;+wZ*t^R{bl7f>{^5A6t zs2jQ(Eh22p;tUPp=FRJ~#zJG&&{P<6nq?sUustHsFaV_BDZGlh4`S^89+7Wm0Ccxq zVkoU50bI|`u*ivQrU)@}JZe47;Yy<Xv_58Us&1#UWsMV>#?fy!mOBZ;`)Nk_;(@I=F}Q{! z{&9HWL;(vEXNX5r>%a6E@JzID<_%T)O#6yB9`kO9+D9BD;)fS#KFX$zoyh<_d!!_Q z?p79mk}L5GFWk#5hj6T^&A(4aH};!{;R4?AXW500{`81HX?#h?_$6Mc7q*ep?F_{h ze&TJzE?T5u2#saeuhP~5&GD#x!yBgGFE%72+@`GZs)+SGaaPCbn+vX%P@oB}lNRKD zIl6!L+0$!?8JyY(xdiCC^R%im^{YHKugOQCHF}30hUMCy=YeNpJcj4^bK*!p0%35p z^1?SIoE8pm+S_P}=o*d<<4y;QPK4VAjn>{LI+yIKHgpC;5jWmRWUfDCMU1)W! zt`FRN7F_n`0OR$>{lbE8)o?%WySl5#%u+-&@4a(*W{*&n5yIhs+Ipv(uMD@yzY`vis{e(z3=nBnW5ov zL;D0Pe(?QvqXFApXq-P4pY~R{-ob_E9lXs-MOYdN4hgI&v z*P}Sc@*dSU!N2JLSU4s~)&esOt!J#LuBHj2iX;705_8McSu&7LVsF8)D|d2ginELS zHi0$(`+lySsAkAIWR*FLCs8Y*2dom#c*HFB!_9My2|(-6=zm@(k(jFqP{gm3uVw{MMl z3;VvG2M-t_Dq!p(@Z#Aalpz6TztOD5_3PJS`V5>!rdHPmXE) z_Fl;;>~HJwqKY9D@!^^q*Kb1{`hHxb<=(&#RcqP1i=eyrO z{LA0|ox`VTK87b}oB8=S|NS3U#|wwAed8C>JY&+xYbZ%*-8&yW^K^aK@0;xbWBULC z4$T>6XINAHsk(QAf2Inf!E6eS8LKZ`u?OIT!BO#TvIKu@N=_%ZlJL6N@_-`DxADt? z(;DMAKLJX5!XtXvJ62w&>I7y;lVH*e#>b)e1mE>f8`9NybP!{nl2@dfJ!ng>BU(-5 zaif#xf_G`#_K2BX{Ez-4(u+fW8)6Y^G$-2l(oTt)F`W-w@HBN+m*ToK($yGyc_Qq1 z^Q}0BTeBu8jp|}{qSL1@_S>RUM~SRP|M`4Q=CR8=DOi-fFR;1P_hdfOc_-b#dIDbY z_6796tUT|eb=gl@9_ZK>3~P+25hB9aHj1>o0X4+sD!t~L*N$1ng9Ahb16G5aVNi{f zM8u2&fOo|<@FSGWPy~PwTtjr_3F4hk<+PpP?cl+X=dN5my!hOUhbyFY4X2s)M-^6a z%m@B5ox3sjt$J7e>6IGoxfpS_n&>-~_d*R;K9_5tV1L-g(tD`33FQ8H0t|rt(cnqs zN}YPE6S!mF(NYGN2@z{$>_kO~1lSlk^^m)_l@3Aduj2jl9S;4`M;|oXa`x~K|K8s{ z{Qdv=KbZYhZgu=dCCmx*5AP%(8a6!FRIQmSJ(yvdtrWhP$Lq_@+WbHMtN-%weg~e} z?(l4G-v8#e|6mSv|K(Dr@c{lFvBxL_rhm+mNndsASwO?_znkT@i=tJ z|0t-a_q%Zoza>aMHWL+ph$COQjPQ;&a2=M9h4izJ1OXbk2&ap6W}f%Zv{(h5XnBE& zCemG;M8x_ExPtWfeRime?;gcd2e3&0R|Mb0DT^r^FDc`4!@RgP9N#!xt79w5qr7$+ z?}QO@C(4ojQRuz)hb{x-k;i@gINkV6qeb6E`kn)bYAdZC(Td@RF+PG_O6oJzLBZHQng%8a zl)HEM0xw$*!Wv2l8)^IQojQ$L*M0Aru1*45(|k{ea56JY!We?>9^sB-9Gq#8v?%ur zjr}>w-DvB`U;dSE9R4@|tAE&#?pM-U&L2Mb@RP%vfAJT~02+fl)t)OFpxG50EuYOE zRW;hs`qTVCo;>{Wzw>D@85yEQj+FU?)r5gf)t(-Fm|w2>lDoT5+IG+p+V z<4a#=n6ets;={$W@}KocM<=w!ufs$mEQcSp+GAGY3-YkU0o@5K>3rMQ&>22X1m9Nv zWfu~MPpa1zWcHP{jKO*z$I;IF@J49w{0x}~chO#Y&pWVJc(=>I$DXC#INoVa!l`2w z2EOhq&XER3+W79hIKp(I;0g}!2!2G=eiI;Dvr+j$NDXH-K)?aUtU`7U)05rJO<%rrWtj4Ovm19>SZ2qu zjXD(*hR!imgO))6%BVeW+ z{Os4h6db1cZXZ6$H^x~*U;6UvBY4?cED~gMxtBqhJ&Oi+`C)!Qcp_T-;xGLCH1_}Z zfBpYGeCPW=JUrP-&-dPVqwN$fO+BBm3q*CucI62`X5v%*a`jpR(A1Xj6m; z2RaRxCIYup*Ae5Ti3o;W)9W*iCde*aSPS6@8(Sibv@5Nl42P$UkIkF}i6CG0l^IsV zJEMt==EK;%mTlblcn!gZ4#nyJ(0<45WHmWWeuRju7hkeRtUQ!&7=dS3zzwtyqnT|q zFCUqE*O$qoIxyJJkV_HD?*pi_oP1R+0X5P<{7S(IwL>G5)++D(kWqzFaLf z`*&-2%}~%AX7O6~1+d=<+2CP-9Z%a31SY$S3xjlA^11M+UaZ(5QxI1#$v$+w?GN1b zcE;iITd3}p4bb=-9GPdKV>Q&l4@s_(1)H?9uZQ2> zC)h&En$hVSdjswmJ}Ez8RBLxVT0x%jnHeANi)Y=@`RD}?zOPNa6KvsW)<#L!WtI0p z6YL8%U5AFD=VVg@WBDW~>NiKI>OjO*9)?X>zzLPe3P5pvxI-4VGn>`59akT6G zUl-t&Mh@TdwesB|Z-h8rvUkplFFoHv)TK4w^$ijMGGPe>kDCv*MfjO_3H!SVDtN=& zQ#bXKM?sqXJTH!a=Kaa%;%nRD2H7J%7iH>D{wI0ABW7ZrDu7r#{q%4(+vP(Laz_gx zK?8~~S!%gevdd0Eh#*v#6|l`fkcL?OhjjHK8RZyLscGV<&l6318pd$zc6!>`b__G+$2I=N=blQ0o@zEI zSM}h<7%cQRvOf?27g`4YR|SZD410`O`Fcc0E@iEAA&UPsiB=ss2R`u z&bILn|NVb(_@Dm$-$;qt%!NB`mB|L}kOKaGa>Ni#a^6{$>zD;Z*WrjDUG!!B5;s?)Gi z_4Uox#LVKnY!T{Nq^XCxxWaz#7Gs$vx9_X^qMiN-PS9ARg(K6po5_{u+W2IA6jvWc z6W)s&aibZI-FW4>gmeSl-fLkLDfwXhG8w+W{DjEBIK*6yfyTS(A+Irb%18YQ8!kET zu;0PK@O8Yh`PnyN<7CI(@8;v@{+L9V?G6(p1dwU`IcF#y=V<6)GQ7(!`5*&%P|daA zj@RNJRr@JEggZ1T?+ue;y#uRv;=9y);)?KB1Zf2KYCX?8-<^k--kG>KdtdKeLp*zm zmH?S~jpk)a-M$w?bjU?E{~B}W`QFW#D#{a$e>EBeHHREj;7<)D35yER^BfT66TSv; z^Wn&B_Tu9Cdej8R*)z?+B$W2p`C(2~toP%nHN;Jv1fLGh@P(g%MPX-qr`MpyIuY!A z#=P6NKWyXYtA{VW@^dpQLKSvi@pzDy-g0@1%}&+OK4{h=WuQG7IIVqlct4|~I$1qS zy&ss3NvoK>D$d#L#|dZAl;6O4L%-@pZ71X&v=8g8o7WE4+pyZ6CTL1XvJu>^k(-&B z&9y(P2Q&wtAp4oGzJB;m{?mVa_|?Dp%^4e~6mm{&QC#;PKD}>Gl7wwY-D)_(-D$0n z@f+UHO|o+5>{}=U#D9FC(X6`gn%^EgkO!#@&I-n>wA)T9mc(OX6F`vJ3c0G z&IeOVv&y4C)5fEv9_0HW6f@?+jG>Z6V4XJ4^38bS?(TL8KZVb@s)we4- z`0zae&X!mh3CII6PR)$U`+X^;o$_$d~WQK$uipJ+Z0B?ZVB;?JKW; z`S8;7Iabx!gsl4n)Du8X8R6DtyP&eC0(8-I@d-9#!e)`WYZ?IY1NA)Saj_|JwllEkD(-@@b zB7l67pMQft-=ahFunS2`f<@qZLY|&mP?$a8V5ESN!`<~(!uXmDV6=l3b|o;E@hCfs z;fgziaJ;&ZT0I`6gi|FES*x;GPTXT=f5nYvLQ{}Vd8(*VSMm`2!pkqFG2~IpX)0Bk zbk)<-Ui`*@Y$D3Ll$w9_>ea(1433C2I15EbL{8qvXQ24aGZI5R+UvHS;C4H^Id_;U zIzz)?p&?zm^kg`0rm9}nCc(Bn_|kK)9{&Ds{rchW{GGquIXo?@3nr_58=z$OU_{l+ z9-Zqd6Vs3I2%nn~*>Gre8soMxfDf?+bz@J_z@AKSp~JuTo4+xuh2L%;7KUJ6tmnhO znHc+?UQ(I+Z&{cjtTDUS&d*-EZFbbQb0HvU;ub;F|I3F-`LH@U^yh{Cj`zZy%mYh}^B0 zy#TM_mj$1&wNTC!Al$Im=!L-L_tr+_yH$0~_ewkYX?tIK<%@@B+FD|4gVk$cXWI*P~|4vrdH}_OwM+NLCMjzhMpHde-pp1A`O;qzot1 zAt1(SQIl!Pyc=!uYe=Y3 zb85Xaw5o2@SHi^cpQhVxH0HdXl&6|$w1f%BHquU(y9u%p%y|!-d^z}vFaRP{AT8J$ z$}Bv@!1g@J%TxU<&Pq`!gxhctKp7!Zu?;7Ci|MbmG+%i;Y%&g zGlMPzFQFIF=K9s9g^M{tL_Xr}ya@mT2qWsb$2O66<9ViIHE@j-uf!~DKsLKRNi+FP z!zJL3LT&`bhP7VDaBRxdD0=@H0g|8_?RRLpm|R`N126m2oooo_Yxsu8V~DLRLSgD! z6*ty)eMZQ@!wDS0tN1SYZ@l^a`EP!slOfHcg?YjAZyR7t9ls6McY}uJ>tT!uACiq(WSbjoAC{9-Hq9A2tC^xBeNtJ@^;RA-Vqf1OaApA{^{XQ{`A}B zw|Z$brxAdC>K*=sa-X|;&oH<9yswb4&%keGm-*mE8PZ$OwmT(vac9XzQT;aLp)rKi zrH#;V{4Tx5AK?by^2Ta#!i9gfoG6X=^5elg!k{>MYs?MAji&|oqMdgGdpzU)`lfSH zEV!Yw8kb(pNBH!93&n|3nL8h`{;II@1IsE0yjzgS7e2NDdB;tpRj1`bU^8=@n_q4} z8lKEnj=!Ak@45EqW#7|53t$6}PD>bkRVF&i*SEF@o;EOa73oNefz9t@nD3BK@a?Y( zzUjoL40v~Wr=dBA#klx><8;8pCb4(ZorC+nB`{{%sJk%8h;X5)xP~}}LJ=h`pxok# zE*eULWTsPlTecNQLN=pZBV0lS0oe&E2t<|3A7QB5uN^*LF}(wXs0`m1&UDGaAr?dM z`p=Pp^M6XYX9i)qU?EKJ*9{Oe3I!wM3&OKY>w ze*Npe{_BSywrwTjo-G+UsWB9rWg*~%%~%@NG@c_4d;^nf35Ob2^gBr-X_vq_3Ssnx zeo%L(DLw39IiCQd)gzvjZl zD+z{-mT5Ad5w_L;lNS2j%x}adLi$mbTv{CgdNI#i_@lg*Fu={?oI3n^i{_qeZOplb zjZd}>g1u$WROeW0)bwV8eLz^s-O>eXR#k9DocXU?1N8?kvakd zh7)jT2-SMtqX8FeyRM<_rS{0Zk>L2z58oW7gu6&LNUzxpUe=H!?R2P?P!*xPg;N=C zpX)s3XP&t_M;M^2jzoEc@x$z8hM2Q701Ux5g1S7W6G&x0mnuHHa>=tw7(#H{$DkP2 zc|EfqO2)+xQ}s3AyWyYq$X7)<=lFlb6uevSOA}L{jqlLzRJJ&WiC;+goImG4vS?Yl zl0{P+S-0ZbkEv7lXu)8ACZR@CGoy1kZ{e$@Up%&Op#0H-!%ulwY;pcw-YuOmjG%I-R@Kmk}H0m2| z)u}$`?Z;C-Mh$Fiw%lCigU1@l3`ye)ZEFN|a4A=qdUf9dWI+UunhZKrzr7ZR7Nm`9 zpV<9WowN3MHd;T~0#Yq%3LyytX$ZJ`X_ej=gt!#CqdOEC&?);Rq@@nBYaqorh%cn>B^1FxmVOaEzj_7qXX<=N+- zs}VLvPK(gniVGKLf{d4G~#%2I#hXdabjh`#Xh7bo5@b}$G!&R8t?K^ zR}A-!Z+zqM>Z`9Fe&=6(Yj(1;GWg=<4lGOCAl^_C83~}-OsHotfRok`bM)qMfV0t9 z;JEs*0l3qY2FAWmZ_>*3~JELP>@>#jf3qL1c@S}q=1mzBV-Qhv-ecDsMS6x7|Hh9)}?Ou2O z#m;a#f93Gq@BHBK<(wElY72$L=-Bq~gc%?96Y1gV^Ff&dgF19!)`f$0-|=@mcY+CQ zf_m8JSG_%hmxJhzFR%PnNzDXClFbg?#%_8S9-A`K3mEH9BdTYW2+Jle0$i12Ujo1d z>0ReakGNAH5(T(^dnzJY|m_$V*U`}LM) zhi*S?eM)f3P8`?O9KM_?_P~ZgNmXLj&SdU8pIsifrwl{8GEpXv-5br)Fwnx!q$yu0 zmu@k`v2H|oWuNYTvBv-8amevm0z_VOYzD!a#0z8XwnYfX{O}(`=(VWn4*mY%-H#4G z%8$a(^~@J)!#O;0SUR)fsKUak}?oqavV+ha2E=uVPnEq?iyL z7oE#x*a;6wQPOTM-{F}cnfImFn}bgfd*?APPW&PG<)}<`p~391d6t%^ZOBhP%Grm# zd&WaLRRZ5}AkRJbbog0;_(T3C7p5)=8?GGc8K)&k!pyx?ISr2efOf&#^KSMAhRN9~ zF#;+?rfeyC(j`oeji(-U7X3v)aWo7hB|xUR`%|5^IyeZ2FjN`(uWC-k#%@A*Ov)2g zUyl$rYgI6+^s9u*J)1kR^Ih)LP;6O{IvlZ#p{Mt+Jky|8o=gL|(J&>x)`LHhAQ|C^ z;atT7$IME}zs5dlaSdBwA7N}|-wC4=cRpwqr5^z*{k#mX4Y@9ifXL|9Owk+#TDd%O z4NsrC8 zyVUmJm^yUdxTcZpY2`QGcw?ABgBhU}Jf@!S-VV15skm{kstWAp?VFJh1&Hf^U2NwfoXpV8bZB3Imd02`g z|JAX9P2TXcuc1z5z%OlhP8sxFT6LnyHo=w?dJ%_XszNi;$LqD@52v1&Y$Gj;@&@e z<*TpdGXJB)*M8=!*-*X}kGH{78hFr58F-vC`^z5dB-?X7IwqlGs&1hK4zfNki&uR>lz#v30`$mEa&n{%6ks#e- z`dL+}XGpcJKTyUn#~LujkVD6X_>uhnM4&~CiCiibS`FEoVE5ObBSMy7VcdJzI9E`S zMX06XGGLP2XU|@(m%QA}%JrT(60MWoA?M1~D-k&+rESH$dz(cqZt|+pTVsM5&BseK z>uI`k78@ZF&OkFl;1LYL8Usz^FYfMn?QLqmR}I!sgl%R7TPWb_FMoJ2^F@G|c^ciZ z%%uU-)x3ePH0v`xPiaiq3l6q&(x4%Q?EzkV`K8e;d}DYv-7fzvENm7{2>kGeKdhnW z92g9GZ{IZ>F8tRUgAZdN(IUe1$b25~0UFtO%66Cca_hG(BrU|s)hE*iKjTPm3UF7wfe(2`yQ-RnHeAP7@lWd&L=hsSt%_It%Y z*tGIjo$wd<5+cV2NT>yEJeqK*Z2K24`<~tUqH}FQSm}u~bn7B8JRj>i&&mNu_l2t^ z{KPqV`L2-??(oj&4qt>XqF8KttMjbie*3+aQM@)9A0zz5C(a$7KeR($`|Q5|UQ^<5 z6ht%#vyvyv7@=1=1J@Czlh3<86QMtTe?IJbg!bXxpkYJlagWThH2k z;^;vlk=UMjPrf zKb7~JI{n_Ce?N==cN%AZ@9<}T`kibKw?}BGGk*oGjgX_h?p_EizPmK&X&BuxyUxdX z#ir0NJeBRH>B*;Gc&?q%*2#?<*V60@KH$c;T~~E7bWs-?31Okfc3#d5accC+-a^=2 z`n8tpI2+SUA2$X(L3kMIjZjqnzF;K`=Z%nVPwL<0qpZly$go@aG+cP zu6^Ivu8-fn90BDdMLsr$UxIJq?R-4LGalPv;~lNTb2%?aQn}WibBqo}-8(5aROz2oVO=BY;5B_W)2+f?!o7AyK~3B3|uJ zOtXA0x+hIMt6I^g6At%9F~(m=_f187-$6D=x)GtmcS*%wg6E?TKW)t4z8*+k6?a`0?;zTuN6P0Ra@cX!B|`#|CIYP0Z#-Wy(@32t!i zbY`1;*S2Z&r`ZTF`)&xH^_&nc(CSoP2JVE44E3xV2#8uUIHlY1r#Vipk-CNuQAW6^ z5JAy9gr==5p;HeWP|<42QHJtPmaV+4T?}xt>Kz0;iklYlscjA$JFfK!Ys-EDbIov= zwb=eAdEVwFiHNRQcT`@&AhkN~<@<|3$Hp-+)}M`o{c00$-xsbN`u;==#U_*58jj~^ zPB>6rxM3S%G~{V4PfUS9+!?>YXZWard*1bhGkMJWkoVlv&&)zZdA$4XyX`Rl=Im+W zHwLx{?!^~hoP6QKxOX#%X=`KiRn{7wO6O9ZP-!Df4Qrms=zBK%(v2GWEyJ6Pg^S$A>$7S|>0yXT!RjT3$0%=cXm7(C0LAao}n zU9?aQ(lf2dYTsMo(4>Kr5Ydu7jL<_T*B3iUK*xqpHb0>8$*{}b?>0Oe)|2mjbIC(~ z;=sYldTczRg}6EjI~Sh$hyUS!`cLoPiE&%4O3K);;!c&J72Hde|I9+P5@_rY#8^dJ zFhQ+)Jx?N@lHM3`B}G;>Tf6cn4Ox-W&eD_gKA$jiqFuTCA@VUT;{FD zCCm_d;0RG%;V;RfRla93GBH9Ef~x_pJQS`+A3{|xLP1`9BdnKr|NZxBWM>X9Gz7R8 zPS0oW;InWuX8Dx5*gM8faWoRR!9rW zR=4MxIikgmR)ZkDvoe=~lt!`mr4Q2g8P3oLUTGRP3Fydhvwo7a=ew+H_X_3--39qiC6mb8O86!L+)c|8RV=J4`(K^`08W$ zZ7)~hYWAm#@rTW<&Sm6&x3y9iO8;I*+}_LAW{kp986$~k*bHGzJhZR(3a~nPopbq) zU?{FKw!lyZ`l!3k4wd>`y$I}8H*tg!*zpBlG4OFsXlSzxG!P+UVTe+p{0cA{&Cz#~ zYK&BU6Fd*X6%?SDP0xQW6--WREzV+snX22y%z%^*VqKso5Xe$fz)@TF^DVmjJYi-@ zJoRG3I<@VU@*u@nTd$|Fb45R$@$X`XFx6KceJDb@DS*N%k&&y$Q3D}5^w@WEWP^0| zRnAEXy?bx(_qFRWb=h#RoQEHVLTZ|gl>XK4{QlvO{`gN1zxkWL)|LnD;+B@e>BumP zQTS$!>Pij37=O^xAG2tl>rNZuEVY-B!RklMI#j#Bky;F&I}(bQ{LzZulxJ%Q3s~-owC99==vYN z(-13Y#W~iwq)V`1$YZAu7V%CRS4~VPTT|RYS+jt%`{vz=Q`#L@M?U;GS<*z`mi5`wXPVJ@`tai)<-k~(@T^naUa|^P@7nyM`hsiVIo9js zGkDc$I(M)hf6qgIHqQJuyj0%AFYZ}PLuCdC!`v{9iia>nnC0zB5{*n8GYh;48Mi9& z$mpaOpx1DOAOXD!=mle=;wBLTz`Gy<%Y>2oQ(hI0DfAc<2$Le~49clj>pgj^Lc`R( znw)A3(jp?5Rgg;k_D?>{`X5Yrwm#Q+z-`$yhBNui;=cNiGp&QMy&eCOcTT@If)jEy zEGpam8j}1rv&!Fh*IyNAAOmsQ%fe^avu$El_-koG|M&mrKWhV~*A8F%YDa25_iPK% z@?&XRH267PnYBkPzclEwxONXI*T+>pJg^U(({r_R*V%kQE^|^0Bkgkkj$%V|21lDM=}ZVuWku{sLs%Fl7{c6B$MV7O;!LlPJ_B0~ zz8+NG^X-T?TF%%-(5y>(_}YpG4N4k#A8qJ3)i}ce8iO9QG{c_+9lKp|X_~V!b8xS^ z>DU%e`wa&9Zg{3nmF&L1p{a?5c~=^IFX*j3`sJJaT$5MtJS$6k5;k{CKBbzwvdchR z@Zt^kJ}#}UyLTHt!*fd|F15YGJMX*`Pk(i6e<@B4NjtJN-hJ)0R}SC*{tsu14&@H5 z;t6Fu0;2cI7v}wXd{mEJpNY_)Ed%!NMV*z$&S!?*wA+Grqme9wo5s>mCN4H!4@I$5 z6^rP$t}|mZt6qCM?$Dzm*UH08b)O2Xf=S~b9fW~c(@#hwAWWgE2qc>VHPrAsG{a?C z#n?*iJ^=U9zv*gZKFC=@O)hd5f*?36gEUT!bHLUGn<2+wpI*Or`0*R>PrR#F&mW$w z$J)dmqi;fyM)1VZ6`D%^u+`2QnD3@~sj{~l^0Asj^2u=0_$3ydFJVs zX}sC&%@=2;EfG09qA>WIY1tF?-{pc!Q10jJ;QhcfaP=eF3CAR>4y7a97rf!;*vXv5 z2p18&peG2;L#$N@L6KoE#7;vES+f^w6|bEHaLCYOrgo2}Fv4L0BOkLoFp39g3?-lY z7`+lA!!-S^#2Q-KP7$b8;sSQk_YEsd#k+eh>D;xVA%tRT0ED3J4fG;Qvmp#aa185| zzK88knzE47)Nv>i;mlAyOjtk&CK!zaw-@AX%2zozBP#pFem@V#KjH~+_6TqN-ppwj zVwgk8^6p{|T&Ei6-p(rjaZ`IAe0Xg!!&5QA3{`SSs<*$HC+pSld$o;?Xvk6{eD3gYWD2n{s5(UAB4{ihD+TPyb7yC2NP z&`(~yIG)XK<&dZow8g*=e()EiUP3rvYeyBL!Ht<9P65uePc&Hd*yU|F_8ko1>yIdf zBawRVo3%`vFTjXyL9Yj@QfVAs>YdCJ%am5a^2k%LXu~vf_>`WpUSN*UEzSrNLZu>s zSf^SjUmG)*R!_XXcn>%YJfZOjzN4^-X?lu*`s$-(1Bds8-ub7OP&o#{MB3ancJQ;y z*o}=fyI(y!dLqN89-V{@iBGnZydGJwPwK5U85)i2h$!GrZ(11`lL~JmqWm4Fj7j*H z{Mm#!Tlt}DkWCX&Uj$excte8rWaZ}mg)h9+LaY`9R^BIhF@j&?xRMv^g9O~|G@H{I zFP(90_Uta3RdEPEyf6)~Mtqu)FoFNcCm$ZZ`|a$BJmL$qDvo1*TdmBF(C6?} z-Fk0tk%^Ze8258{@7lv&jb!Q<4)^{d@)|oxxYQA_2VpQ8t#3oE@<6-A*TI6eG?6aP zz9IF*?>Aw<7DTh4VMu2;`w{eD=sQ7$enZ3RzhTo0tM?Z8;2oHiF+8Y->)G#lcf4x@ zev5DDHSzkR{IMB;RNUUd`+V=WTC&SoMnZ@zZDxHhvxzs^Ju0U>!v9Y1j^-<@hD%_o zlU`rFbq1ex$lH5O1AnD0A)b1=A#5E2`^bkMTswUAt6$E^@cXsn_&oerF|9t^g+cpW zH98h^yzTm)e7o`G-O#LrgGaxsgD@kQ@>jpXVeihWq{|o_&qcoprgLRrXu~p3Fz9*M zMy#VSw!N)qU=hxY4pc({F2{ooM!fPh!vi4cM-mnXIFt7@{_+p~6R$51tMu$8+PFBj zul&9h55Oxw`Ba*B8mN4=mEhmT-TU?QjDc2{@_@BM(agG?TfD@1lM>LJl3+X z@ITr4xt7$=9wOmD&R}G`x|QDsrbpCacsT2u>+@mKwDv?}gK)MO0t91(i!@P+uM2Caxi-HC->TS;@L^tm}X{ak__Wx!Dm4E(^HrKRJ;0J>&)Kw zFMV)$r$fYl^2Sf*JA4_Yxf6!dPzFt_H}`v(En1#S2%*6W@EadY2eRJC1G6vuNBdwf zdxIYc4?Pq$cxIbopy4IZ9qA@LBGE!7C)B8_%4#@={@ zm$YXBRUU&YwCbO>VVel}+GUHQOhpZDHLn_q?|5bR_-O67`Y@hzX}Ep+e4WkJ*5Eul z-mlKVxmt&G<2vIx$F#NK5&qy0VhtUfGfjYh{qgYAVe0Nxd3c`d7zJE#%jRV^X@?DG zi&b}nS*oO-iviDmpc)zpJ3Uk>H7>|FmvK%{%ijb77eZ2RASSfUZ=axLM@>eIU>Jn=PH(j8J;xCjL?)-!PMp;EHnz{AcLA@z3qHyoS{1M3lwp7r7&llQ(D zFQ1O^R?J?#vb;xWBG$#&Fv^}P5W~OX+K)ateCgHKr`Ne-Bc`+!4e)Ngk&@MZwh5^5 z+MDCUHVMY8v%~rfPai`E7dI;d!8g&-N1aA%i@EILcIvcEbrwC;b2nB;lK4GSe3k6^ zvxJx-h5XoO2$d{L{p;IwNGnahj)GyqLkn>%g^uNsgWECx>1={a;G#|lvJns@c6vi2 zFu^OqIB@I+s(UAfF(g=fCWa?_2X&IMGKW6TX~PrIegmGE$sjSti7N*FM{-{V45;;2WD_TIF+%tq2H}m2|xSvb7?vk z4ln0(@r&R1g)s;>?U1{%llWGB&NTdTYy`YeW9=e-x+&aS3EF#UFgM#F%Ywc=P0hp6 zkr(yPfgP^H8*T8dH{R%;ARiu1-1fkKW;MWI?6(sEENc9;(*Qrs>(v?{821gM2w>QO zKqU+bZw#czJ=MN0{5K5$)^73a0>=hgLR!Mmuej_pd_?Z&>tItN_6ypglLIv%e8CPt zh{LIL_u9V$KlY-%eiI-uFS?J<%ycvff&>V9U}laFHgNA{%1+xNZo)^h4>b?VfX7KMnx z0^AV{dEqeezUQYFNNO}|#Hr0kWSfAYu`qCjKf<4Ba{!A19-T1*OgNHfuW-p8Tc821yNl9aa6j=T-iO6$p&XbDH=XilC=6xO z_l7?<2ZEQL0|N7zNQcT`BXPd}c$mbJSLGP7Oiu%cX=<(p(16|dw7fjyGsuO0 zMRYKvq(NXXhUj(l1~E?6c9|3*jFd))jM;^YS@`wpYp>+eq0DAP@OZ(QnN0Al-1kDC za?C;khqJvA4>LA39CFDN#BqSRork||H$mE^EVvu=OgxJtc+*S69ojvJGFOi>^t!HKP~Y?oByrz) zuPppzxxdh9`!s0O*{FaveuF|ezW-EMr`5r9-c7!&<&pCI*6EDKjrO8HJc3QTisV$> zw0Q@HXJyTy^uY8~BHBk7eYeh(1Lw+RA-l@;x!qH}+4Fvl9v7^G|7cX5}y>Ky`$Wnpp7+6{q zmAPa9-nV8)M-?7X)!#KU^oLvCV!2oW8ZDAY1 zpn%?a_pK^5!9T_O-rbw4 zQyHFZZ)D+GdI@d9U{2QJh>Knc4JeW{I&f%LF)Xe$Fah)4-sh@3`URG?F!RrNc=+1$TH0@V1Q!~D8Eo*RyEM2H$N+d| zJ${GKqiw0n(S%JC;kL_|GJykaH2ixmO9D9JEj_T50DNeIKRm1VUaYwDmo8M1?1Vo# zUoT#~xVn)It1%tYS*d@>rSFF1MNDuh2MoT2^>4CyEcMMrXRLO08^-EXDHX5^rB}-6 zO?xS2AadZr>n8F?1wNy41ku9<$S4~B;Eo`h8KL!hc1aK|p7skH;nN@sgAWpq)tXTU zX`no_9^I%M>x=*g(@RdzfWTEcv>9`8!zX!^eKJ#;7hZgR^_{n0tD|;%J7!@BVI$j# z40Gxf3``C~{wfM6Ez$JBpkZidh}uK)Tm-@Rye43fcPjVuei=gB+Rog6%L#!`rsud9Snp>z;3xq@lv+&zsR7>OATRyOTpLwf4`QLY zL&a31UBZ|ny1(tA+@fv=^OT8Va)-ew4-CYbQyw$g9W*5&bif1Jgc!cec5s##o(Q=0 zBbK*gFHC$kS7SJb^!@kWZ@Gj>+A?Z{b7N6t$vH;?$Ev{3o~M;JUU z(+GYG_!c9A8e1|l#WEYV>y54`5X>y=<49_R9<+8d<_K-Khq+aay`FC4YDPF zcxw85`=t&iO^9vLDw^_34DDS7->OzS}HGO&0wad z-uOgJU^4_w#bH8#1>utORMXy_845tHXCWLo_F)NwjkiM~87BBm^-xms(aPV7PXxU8 zO402+i7Nf}esZh%{c}4n24U_)=O~ z6iLey7udmXsvXJ9ve;kbo8gVZgI9*dLa_K0Fbdy?Ocm;dFW{TX>N*eU{*f^0Gx<_- z_09O1-R~LJ-%UQIOgUGl+{|8?5`ky<(7g%r*I60bOsgVD=sWZhr=7J%^3Ce<8~<1a z?__!Pc$NkX*3#fx={TVu#A=2|i`C5Dh~uCJmwzJ|F+|o<_f&}Dl{deeK6%tNFZr``60o4x(+aaQV{%7H*z z5lmK;UbsgA1|yKt)5$V5i%=XFCmjwQ<>P>8^Wx6d;5*qmcBW+;bKbc2SuU6w@Xg+3 z!r|M8xoRcsf6U#!rsgOMcsiQJLr0A_!#o(}$&Wx4 zbl`v7-Jns7d@R9@Rizk94|PA5S8<;*%8=-W=$SGo9yK;0pcOv2qjc>8c3?1H3sZUL z@pkcw39Cp`{-IpBZjFlJgKJ35dbu2p^&rh5_{&EXhm5P!gLZ1hxqSKG;9I-ZQ)RKHL<)C0DDMcUHh4B=UNR*w8d?(1&uFM? zkD0rHbx0-s#5quBe`??)h8csdc8!oLN_k_if=Y*ZMJtXCcll23 zJG4rArQJ+93X|Awof{;4hJg7FGnOzxOvqP4sjxF9Q6vIO<3SMbTF?q-m=0q?l+~Pw z@;Dma=~;HU>S49=X{H{0pWZq>1S-qxAH)-%(eFT55PLKp@^c&KBbmQKzG&erdulg_9=l#;fFcd!2-W7x4+XznWJIKwnY zk0xKb6Eg-64v+O36X#1&ZCCyvN@?ZTNNicNB6$2Nio|SI#E?FYUnx_MixTPaiB;5j zmw$690Xz{HN_#Rd{E743W$~$RhRzn@k0lN+F}NPeFk5FMc)vW3h;R5ic~?C%%yMVk z`fqXg%s1Y~OB2r4m-yyOab`B0%L1-h7KJf}DT7a|Fj6t4=y9J!YWmpm9m}%(6R-Tie#WEW|zxQET%1e^8RC!TU$)jAv(L3wq#53Q`1{gz% zX92jx8}pgA)1&Y|KuABat_*`Lx4wMor7EMTATZCvC+RUG$QN>yq4dIRUw`BeI5C)U z?O*-Xe+ppmH*kQFC=vCmyKM^hV+;WS&DxyF?2LDQtA`K8w<+I;Q6fy(?l2AZ9dF>e zP;E3bqAqQR3pmb?e&nwbNjjFux?>luuB)A9eZ$yH6EgDwLK?Ol8U%5!${b-fwiN zwHI^9kQ$$}Oz;G3;_F#1dMW?>h1@cb*~ZoznG@G~qlCppU=_U|)H&NcVHHP?{hoIO ztt)DorI~rr%1siDK>gilzp!E$ktGp=#;@3$_By{F1hi*~5=bw&m)RGl-B+1*W%d~Y zJdO`wGs5O}`{>e9PAVPj;5%Yd*&4k!gc|QV-RyC`EpYP>fceu86H4z*E;!k2V1pR5 zE(}j;cQfVdicxv~;U7L&xwP(N_Me>1#ZbGMmv_cWcsebMW>3etlOd0Tft?kCP+g}G z*dE1!wUyzA_*3b5Epc{*%{ZRpf4wwAoq{V$0Gh$Z@9rhky6) zSFgYFY6UKfCqg?tPI}Pb8t;|34f7ch83KcgW|Bn z*&3hj$PN4!uUT;`R2hf)Y*X-D4||sA&j3H-E?vH`I&xg?26w-C@Dh6RRokFWWiy^Lm4K8W;i%7_-$#qPX$AdZ(T}= zawMD_v2BxeEEs!VIF%W`Egr%*oQ1*^o+*e^5%?`gk5!!kV{3uV2hIq$jzEV;&}!l% ze1hL#o9}fV6fV&@0bjNee)zr12@Tm-O>_Ry5OamZ=s|WdiM_&V|{}2)KDT zeu(7lrmxh?64EP>BxWN;IIN+R%lb(97L_@~Fr~JBvk)<l3re1kWFG5aI$s$yMfoCWCVvq6 zasobC+AQI4peBR5swT#>cx9C@aTOq>N#4m{Bj(v(?`D|w`n?{%{(e5sZ+X-S7sX%d zo%MCdiVMOo-Bysa(szqSaNMCz<3@e*jl9ak`wMR^@XKpm)WG@ZD8Zp_N{lQ%iA%t6 zS6XzPWuoc&kU4C!j}vKxma8tm^O6{hMV}lujU;x56 zG`Ml_J0$|JK{zS-qN>qwP$`+I-jB z;gk`DrFS|VOUa@##}IOoy4Th8EathB;{`qs>=xN!ib>24FEB~qphyf0v>y>n;ojQ( zGN;GC)J06Dh50)SU$hT{Ki3Ebi(|`q{^DX6MLn+w|viczV~@2 zW$=k4Vr1}=f>+l!gz}y|fp26Rf_^Zm_v=A@GY*_!Cdd`$)Q2`LZ}f_#i{XIIj1qxA zbelL&%hro;+lz<9PCB>D)Jtiozjs#S(PR}TeYa8sr`wt71E1NW(J753>^j5K&MJvS z;FXCtX**ma1fieb-p#tfIoF7w_l%!7kk)7Z))>#DRo|dUW(633gz-H9O179-H8)e} z!5~c=%b6K-zOxlkMs>O_Ow(ago-M~{PZgjMYLq|tqXb%jR85shh^GisYlzuA0f0Z_ z`CK4$HOs>}?!+I@EQhiG*;piwg4;cLC<2?)!qOWv0r_XZ>DxG;5)l~RG;frCottnG zJ)Qj$-V9!azWvVI9r7K^vUh|uO>Ow52f2Ck%Idl! z9dopz;JqdIl+aH0xqSKM?Up6JZ4G>$Sv}fyI5e?{&RxB%kq&vHU>;;M-|s&7aP{D& zhpRW)DoW%G^@@;a|F+ z>F7JPl*-T{ifP<3QgJjGQ~tPF(-90GPz>hGk|kZrPHftsgE4iQdV}&w^C|)<7M`Na zr++HZ`}K_Um^pF&*>dQI@2`nU7)97^1k19t&5G>*lUfB0s!Ex*%l`~;tbx`7p)GA2CWcL%c|ZnjIBw#^F)u=OU+&wN-O zhR1wn?xB9jiVUvh(Qa^XD#<6!iA=>OOBD$|k`8+0q4aS1etmhCzc5mc!L8rYic{u4 z7WRiW&9I2@%rvGC(-hW88QkWqX9_`{^@@h&k=(Ro(mjnfp_DLPk~VF99%8_@0H~K8 z8aluS9~xN1EP$xPhO9b_lIL#BIz8K7;(qthl}^>Va)HT@iRHIb(tP`|V|Qc1pN_vH z)2d-^NaZvvj5*WQjKpq+KBiFB9eKxXfjfxz905KQN1=s0uAg+)gSz)bU&ZAP+`s+x|6KjAU;ka&ytjJs1>3yOc8!R3j^Sc@vUsy?3#aHP3WRfzk~JNA z97CQX$KiY8pD^ZrkvNb!Orr|wcj2_NRtBSe`suaR_J959>gCIqR`0y?R;L4R-n?Gi zY-~6P`&h21U=aoBzb zr7bg^_oEXS$^iUCaxXkE z>->x$6{fTW_I0Ffx3;D64zW6Xc-*k)s8hq%JGb1zH-<&{oq_@jp){o%F5Xubg(Yk*`?FV8jPW7~G5KIDzZAcJr2FKvSm|qJme(L%Y zW@~0GUU((*_P_fiCgoQhQk)1uT_5n%pZ>H=^VXXY&88GlPQ z{4Gr6@+S0O7T0sC~%OmKfZ7G>iWzQ7-od40nnc4&NSc*dJEUoh4( z<{xm| zwff0Ve$qMr)2Gjtc@14=dl4J+ST=8(+HWwrgT_*Ma8L7iGMV;J6mUW4oOuFTjLCYy z1cn&*bGY>`IHgSdh7<2Odo#BXoD9Z;Z@wb$!b!ywcxPL*XVMvsPi6XYD^vIOk8C=! zf*xCZa~&=%bxoc*2oIS4SeS6DPxz+1Gj6sA+@8hHe3KXb_KaSgo)3LynD2ZmgTD#A zw0C||YKKXNO8jqryH&4#j+Coj9T%Q}*TK7Hb|@d6jUo5wC@C?r0iJfK$*b;lxWOh4 z?gigIQ;Epy{meIUA?SY`U@g%t9+uuWP0bAy&0_SMj>njNvkJ8S{UzXG-KS}?eNn1 zFZoht7+e^KDo3MdEc!S-^{+o7MTmeeciS33IsgDQi@+nsje>EQNPQr{-+Ns$!yE zyY_jOMBhjqS!o)dh%+QO$q@Ls&5)_Pwo>piglCx5$Ff(56OgIuILITRN%t&;9q(tI z%ITaeZ#vpND91CEZJGVcFP~q%{^sjt=-B5&Ii_Z-f)Oy}%{eOL>=Vp??dtX36@1-( zo)FL7&bv=D#?Md}<94by5VHR8jCR%WoM*eSt#>$lc&v#*KWk|=Y^?~h%0Gn_b5iX1 z<&{@1rAIwo;ko+Br}cLk0$Nn(tdrFyyCQYPiS4S{t@Or@e6Z74Ig}OLc@}Keq#!vW z`Mh$J$6(p735+<3BJgWN${u&cD39_+fwU)iSy~DJ@A1&`Y=+JRUw+EM22oa>a5&2j zI9F||v|2hvM|!Pii7z8r zG<{8Rp@rd}1CaPTq=O8W<>&zNd$E4RYikUj;tPi4X+{0^jA@gQ`Mq0W46P=|uq+l0 zhZy;nvhsI)rWRx7LSEcL1;|)FI%Ge;-hFz{Ieun7+V)V0&6E!h7s%isb5f?3GYVQIK>=2B)2ZDRw6t0izx%TF5jgq(lzLK#(W+uot+6&X`9!W(I5c}zam ziG!6lp9GE&)_xv60SiGdeLm-nT=~s!v&8;n8S2MB{&5wAbUfx?-nbe6$qOkmFvTBa z=kc&ao~*8Z@>yn_K5Kkum@tdRF758a@&~TqdcL1+^qtrxKIPW}h*LHKh6ykUr?YVR z^5rsn_pJnlJ@+K_4GSSFCu6xen&Ea1bAqq!2lra8eMk>jQmLzL0ecLD^ABUfmEapp zK8Cdep1{hxS>M{A#TX`kUC7I@OBu?N_hhCo-+S-9;@!n%zxc&3qRg(e9&Pz5$~m=_ z|0XWvJs9@kD1JuS;s$!bG~kzSmg60qNjE><=U0VKX1GFE7hIi-?~5X-fF>V)*@+KC z8flBeI9F?lq|7SYlqEeYLpq<`IKJJoNFiCdDm^$TlFD6RP?pbO$F8x^Qa;N=oulK= z>|mU*tTw#o-Q9F3@~q?8c8VG1kVaX!i0`DBUBj8Q^Sx(yQ6A-5eCD}|WF~ZhxL}p& zWR4z$n+&t+A{SaySfcks6-ppM;GrZi+Hl-VUrAROCWo~cC06|oz)xI|<{XYX(_%#o z9vps*Vlw5@T7;Z`#DOgvS@EX}3*ib4)dv^pM4+C07dL}ChO$~3xx_a%ESGx;l&iigFqb@I&W_MN-A#Omhi57)nl^+ebmcSyw!1{un8 z2q*l^ou!@;v4kb0X)g!qIxXN<&?aaTUV7=JDn0FoPk8FJ7b(k`Af~AA1g2}*r}610 zpL7Q4TzbbdC!brLdHcE5y(rw@eDFaO%-sw*C{e;T${zI%Sj#s$5Y|z7gu@lXrP{zU z;2s%03)&-}4_Y}gk`TQ4=9_h3bEJPBg#v#MGjuzY1E0$Eqx${7>YJf_>UVls!S7iI zU(9-1a7?&nI>U?toxI*z%vg9+-Vo+7oM7d4y-0Xa`J>)}f9Y5utWL^(3Nyvvr2K)y z{0Otk%d*lL-MD?dN(S##k)-a48{e8V^QxaBQnvbZdPf`t6yBheEPJ4^4#z63Z)<4} zIOW54l=FZMETgS(rVjPB-Ag{d`6kOp84ZM(rHhv`4L6)%;pi$6yLlg{j89^T ze01e%o`-cZrg;e!zr;`!i0cDKe>%Xxz=d=elHzoj5W*8m?Za67G2$?&;|jL25$ti6 zv|r1L+UrpwkHhpm-Y`wQo7368{NhHdcD@R@EOcWcQ{IDLmL=GW5KqQ~(^S(mLpT*P z;PiV2WeD@zyH7H0ekF?7fl?Q;L)juf3+609^gYwgGJKaOmvZNOJTT+IrGpEXHQP+% z+ef;li7?K0vok{j^cE-q0!#Qf);+TxgmzNl8^=57@C+BdtK&KG%Ee>o>3P!E`X=i@ zoC<$D+Y>rtxWLtd^9O9he>L)j#fL)6P?H5h=D;*z@J+$ZcB#uVo;F48yJ>=BTOI`O zg_%~JKElLFpOb9;x3cOZf!sqecbJ|tp>L>TzWB$iZjlr~XK}us7J`{XWtAY^4Rw$_ zO}CnF$qTS?vQ{*-a#M$V4H-_vs*V5zFocWn0!agvTx%uqhfUiiEkyJjSV#{1N^#ai z42dvY%1y+>_&c13!76gg{h^qJ7b4(yGKI|Qz?f9L?frXE0K$nlBM)!HLWspsmaQCZ>L6ht4Gq0n;g-TgFe$}<1>T@V{z;7y@C zvIs&7YTU%5cXKH1`J00Hb|ew>y>wPV;eHu>2l(F^I{58m@ac9&IH0f}#b;E1Nd&iT z4{z+{_{=(;@q5}f;qy!h4?ILp!keb;&*ea_3m0FE0vbae)pwWy+yxe8BzN)Td0Nl_ z^;>&;25;mCpR-oPqlI?@m@Plp%P^a-r!tgxwZQV8%n0&<(f7g7@)F(mDOTCtb2bxW z!WpUs=SvR!k}AOOO}ScFs6gJ;qiLTw0Q0HS7K$1sX~j(SS9v((pp?S@P;HfwZ2Zks9pK_FykEBz{ z6=vh!S(he+M|u=Sa2N5(??v#!KPjMTmCb}F+-E{hL!F))s{FLs+8-U0%e(i2L&~9f zf@}Pxe$GlA2j{AH;L_p7OPSBFqbKUk4RInI314&~yRc^aEI zia{ED#ZMy7P#z=CP->(7eNO%=gtWYL8xlO?l6O5QYX)^RU-H*r@B+Mnt)ak<#{$dl z(8JX-SsLaw4ejTWtvNimvM?XEtYXM4N}WpaYZx;0;G1Z10WgLM7MpdPp5f4=%!KeK z(D>?|<2nS;`vRVoVoKJyZ!ZhVb~ZAf!iN#XV&)^z)oB>z9tD!0082jWDK6zKS46g0 zjZ;^zxfzr2)QNFEi1ImS&Dlqnq%KpxsW(#0RCJWx#<9b(DDD*Trdze|OdN!_zHm}m zRxYNeSKslJd;Rl2bV&2Uxfde9$5tQx{z{c73nm3bX=Z%d8Hb^aqYcwe%5s4_U&2)E z0P*WHA-I>a~K8 z_=b+>TRF$FFz&hM&a7@k35H~CyXp4QBWW-tJak$=KpKi-F!&fjgBJQF{bWk@j5b7Y zQif;sQ@;0e#N==O{{K`ESR&|})DilWrOk><#RIMfGb=FGgFySRJ`7qy+LRdrrZ+s46Qvy| zU2 zt_0nAIC|%&8Dgv}k}0gdeN6qrOG;i~1FIo)=(fPS4zp(;j_g{X(Vp(_*$j;L>@A_- zqG2tlThBksXyo!|#-+G@C89l54oNfXny~g=aWIC!Xv6g9@T_klt-z<#&xBryD*ag6 zEM#{KjaA8a+v%YB#0ep7+d^-%q4HCR;?HKi4~zHq-CI3EQ>USRs)qbHKUO>1xdisU zON6rVsB2qhJ+n@}HcDmE5v)}j$-{r63~7BE(oTF33vj{5!7$^b#TS+q%y$1@J}r~i TIr_y`00000NkvXXu0mjfk2~#+ literal 0 HcmV?d00001 diff --git a/images/favicon-16x16-next.png b/images/favicon-16x16-next.png new file mode 100644 index 0000000000000000000000000000000000000000..de8c5d3a5f8215c3f7b095c9e284e061bda65f86 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%A+0*}aIAe|4wj2{=>aRxHH1AIbUeKHFb!9Yn#DLy_vBO^maMdk0`zd#Zw z0tY~@yu3V6p{Ay$mX_Az$B+O0`?r4m`qisfPnj~MwY3$f@^9nqaG!lvI6;x#X;^) z4C~IxyaaMM3p^r=f%IJvW-JI^#13S11^9%x`eYU=fq|TyoQjGHgbgIWfB*jF%NI8{ zx2;>Zu3x`iO-&6bs0aoM3JPUqWq0n}*}Qo(P|Le_@AmKC57(%ytPE5IHwwrGiqzKD z{{8#c)YSCg!Gk}3{P_R>|Gj(no6k4eJyZq^Jd4Jw%*zpM57yY9pK zMcQgs21j>QigM54W!RCVazM0UCtHDVhG46xh5pA!(TqDDnlwLEm~eRS(JM@6p3293 zNMwDW(!P~x!s$%jghh-wOB)P19fJ88oOHECttPa5*~LF^Vp#0%pwrbyN~~|szWB|o z_J4%n&U>rEu5s2%I6jof{A;(j!|>g|;yo?%ZfFGheBJp^9_Zijs*s41pu}>8f};Gi z%$!t(lFEWqh0KDIWCn(cIgdZ_a1@4VXq@stea7=?5CgL^w_Y;0u(GiCWD#az1(ybs x!zs+ln?n>%-?(z($eANDN7zp{cr5VJV|XPlSn|oqbSlsa22WQ%mvv4FO#p=N1nU3* literal 0 HcmV?d00001 diff --git a/images/http_upload_01.png b/images/http_upload_01.png new file mode 100644 index 0000000000000000000000000000000000000000..8e594168181106d359913dc964fc19bb694874cb GIT binary patch literal 73492 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

?1E8ecWvT@BiYNzAOHb0B*73@cmK-J*E8`x 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

dvEoLOoa^|F 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 literal 0 HcmV?d00001 diff --git a/images/http_upload_02.png b/images/http_upload_02.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b59f4d243d33a6cf439ddf89cfbef4678df54f GIT binary patch literal 27583 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 \ No newline at end of file diff --git a/images/logo.svg b/images/logo.svg new file mode 100644 index 0000000..992c1a5 --- /dev/null +++ b/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..74cd185 --- /dev/null +++ b/index.html @@ -0,0 +1,1142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +业精于勤荒于嬉 + + + + + + + + + + + + + +

+ +
+
+
+ + + + + + + + +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

期望

作为个人工作中实际用到的DevOps相关工具链的整合搭建,同时也作为新手上手DevOps的Quick Setup。

+

背景

长话短说:

+
    +
  • 数据分析师: 作为一名数学专业的划水学生,毕业之后无比憧憬能成为一名“数据分析师”,然后被忽悠到“信老师”(化名,具体内容可以参见我的一个视频总结)旗下工作;

    +
  • +
  • 爬虫:老师告诉我,数据平台还没搭建好,这样吧,你先自己去公网上爬取数据

    +
  • +
  • 爬虫 *2: 第一份正式的工作,技术栈是自动化的请求接口 / 操作浏览器界面完成业务;

    +
  • +
  • 测试开发 + DevOps:凭借上述后者,找到了UI自动化测试开发的工作;再在工作中要用到整合流水线为业务开发同事提供服务,于是职位变成了DevOps;

    +
  • +
  • DevOps:来到上海成为专职DevOps,负责Daily CI/CD & Release platform 的搭建。

    +
  • +
+

之前的工作中部分组件是我去的时候已经安装、配置好了的,因此在这里把用到的工具链进行全流程的安装,回顾并系统的梳理技术栈,同时也作为新手上手DevOps的Quick Setup。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

选择

在我自己在作为一名初学者学习编程的时候,曾看到过一位前辈在知乎日报中写道:

+

他们当年学习编程痛苦在根本找不到参考资料,只能自己硬着头皮摸索前进,不过好处是每个方向的技术选型基本上是固定的,不会有纠结;

+

而现在的初学者在一开始学习编程,就会很容易迷失在面对浩如烟海的技术路线选择中,尤其是热门的方向,总有前人做好了各种版本的教程、工具,完全不知道从哪里开始。

+

在我一开始学习DevOps的时候背过官方推荐的minikube教程, 到后来也尝试过搭建轻量化的k3s环境,算上业务中的阿里云容器服务Kubernetes版(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK),最终发现“搭建环境”本身也是造轮子的一部分,对提高理解应用能力甚微。

+

因此本文选择最简单的一种方式:
在 Linux 上以 All-in-One 模式安装 KubeSphere(以下简称官方文档),直接最简化地安装,然后再在使用中进行学习,毕竟背诵任何的学习资料都不如自己动手部署一遍

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

有位前辈用“Linux本身不要钱,但是你(折腾)的时间更费钱”来形容Linux上可能遇到的适配问题,从而表达自己对该系统又爱又恨的感情。

+

而寄宿在Windows上的WSL,更是将这个说法发挥到极致。

+

在我自己从头搭建Kubernetes工具链的时候,由于家境贫寒,本想就着手上4台老旧PC搭建个基本能用的集群就行,结果在Windows里面装WSL,以及WSL里面装Kubernetes的时候,遇到太多看不到尽头的问题,遂放弃。

+

目前我的解决方案是安装Ubuntu系统到其中2台PC,至少先跑起来一个最小的主从集群。

+

而本次我本身就是为了学习才搭建环境,因此记录下遇到的WSL相关的问题,以便学有余力的时候更加透彻的掌握操作系统相关的知识。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

再也不是毕业在即两眼一黑,更不是初入职场惶恐不安的状态了。
不知不觉已经6年工作六年,在3年的时候拍了第一个 vlog ,那个时候说三年应该跨过新手期,深耕一个领域,现在看来没有辜负当时的期待。
迄今,我的职业生涯从成都小公司做 python 后端 + 爬虫,经过深圳上海做 效能 / DevOps,现在定居上海,基本快完成从小就“想进入世界一流公司的梦想”了。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

背景

早在成都公司,就听闻 Go 大名, 当时业务后台正在从 Java 逐步重写过来,当时还经常在技术周会上听到大家的分享学习心得。
当时的领导说的,不要觉得自己学的时候有多聪明而洋洋得意,是因为 Go 的设计者足够优秀,才让这个语言如此容易上手。

+

学习路线

官方文档看一遍
https://go.dev/learn/#

+

example 看一遍
https://go.dev/tour/welcome/1

+

目标

写一个 restful 的 api,实现前端传入 cmd 后端执行。(比如 pwd, ls 那种)

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

依赖

可用的外部可访问的k8s集群

+

部署并访问 Bookinfo

开启网关

在依赖中我们开启了集群网关,提供了外部访问KubeSphere整个集群的入口。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

需求

现在有一个Web Service的api,请求的时候有json字符串、文件,或者两者都有,应该怎样设置接口协议。(以Flask为例)

+

背景

在 HTTP 协议消息头中,使用 Content-Type 来表示请求和响应中的媒体类型信息。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ +
+ +
+ +
+
+ +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

https://www.v2ex.com/t/732765
https://www.bilibili.com/video/BV1C54y167y3

+

肥胖

    +
  • 196斤 29.3% 2022.05 看起来比在深圳的时候瘦一圈了,能看到下巴轮廓了,极端达到过193.7 28%
  • +
  • 208斤 30.0% 2021.09 在深圳准备跑路,坚持跑步 + 游泳一段时间了
  • +
  • 210斤 29.9% 2021.04
  • +
  • 217斤 31.5% 2020.10 B超 中度脂肪肝 很严重
  • +
+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

背景

我最重要的一道题,第一次遇到看题解也无法理解的题,想起了以前高中去竞赛划水的日子,想起了在大学划水地没有去竞赛的日子。

+

第一次看到这个题的时候,我还不知道做工程分前端和后端,我还可能只有170斤,我还看着Java代码觉得太丑陋看不懂;

+

后来小付快速的把这题理解并做出来了,我还是没有足够的行动力,后来就开始了一系列的迷茫的日子;

+

这么多年过去了,只有山东大哥的红轴Cherry键盘一直陪着我,他拿这键盘打Dota,考研;我拿这把键盘打Lol,假装考研;又在磨子桥的电脑城被我的老乡阵修理+魔改;然后在成都摸鱼,在深圳打字。

+

有很多变化了,又有很多没有变,不过看样子我的行动力确实螺旋上升了。

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/js/bookmark.js b/js/bookmark.js new file mode 100644 index 0000000..8e3ae6a --- /dev/null +++ b/js/bookmark.js @@ -0,0 +1,56 @@ +/* global CONFIG */ + +document.addEventListener('DOMContentLoaded', () => { + 'use strict'; + + const doSaveScroll = () => { + localStorage.setItem('bookmark' + location.pathname, window.scrollY); + }; + + const scrollToMark = () => { + let 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 + const init = function(trigger) { + // Create a link element + const link = document.querySelector('.book-mark-link'); + // Scroll event + window.addEventListener('scroll', () => link.classList.toggle('book-mark-link-fixed', window.scrollY === 0), { passive: true }); + // Register beforeunload event when the trigger is auto + if (trigger === 'auto') { + // Register beforeunload event + window.addEventListener('beforeunload', doSaveScroll); + document.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(); + document.addEventListener('pjax:success', scrollToMark); + }; + + init(CONFIG.bookmark.save); +}); diff --git a/js/comments-buttons.js b/js/comments-buttons.js new file mode 100644 index 0000000..505c21b --- /dev/null +++ b/js/comments-buttons.js @@ -0,0 +1,25 @@ +/* global CONFIG */ + +(function() { + const commentButton = document.querySelectorAll('.comment-button'); + commentButton.forEach(element => { + const commentClass = element.classList[2]; + element.addEventListener('click', () => { + commentButton.forEach(active => active.classList.toggle('active', active === element)); + document.querySelectorAll('.comment-position').forEach(active => active.classList.toggle('active', active.classList.contains(commentClass))); + if (CONFIG.comments.storage) { + localStorage.setItem('comments_active', commentClass); + } + }); + }); + let { activeClass } = CONFIG.comments; + if (CONFIG.comments.storage) { + activeClass = localStorage.getItem('comments_active') || activeClass; + } + if (activeClass) { + const activeButton = document.querySelector(`.comment-button.${activeClass}`); + if (activeButton) { + activeButton.click(); + } + } +})(); diff --git a/js/comments.js b/js/comments.js new file mode 100644 index 0000000..4045e8c --- /dev/null +++ b/js/comments.js @@ -0,0 +1,21 @@ +/* global CONFIG */ + +window.addEventListener('tabs:register', () => { + let { activeClass } = CONFIG.comments; + if (CONFIG.comments.storage) { + activeClass = localStorage.getItem('comments_active') || activeClass; + } + if (activeClass) { + const activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`); + if (activeTab) { + activeTab.click(); + } + } +}); +if (CONFIG.comments.storage) { + window.addEventListener('tabs:click', event => { + if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return; + const commentClass = event.target.classList[1]; + localStorage.setItem('comments_active', commentClass); + }); +} diff --git a/js/config.js b/js/config.js new file mode 100644 index 0000000..caa0075 --- /dev/null +++ b/js/config.js @@ -0,0 +1,66 @@ +if (!window.NexT) window.NexT = {}; + +(function() { + const className = 'next-config'; + + const staticConfig = {}; + let variableConfig = {}; + + const parse = text => JSON.parse(text || '{}'); + + const update = name => { + const targetEle = document.querySelector(`.${className}[data-name="${name}"]`); + if (!targetEle) return; + const parsedConfig = parse(targetEle.text); + if (name === 'main') { + Object.assign(staticConfig, parsedConfig); + } else { + variableConfig[name] = parsedConfig; + } + }; + + update('main'); + + window.CONFIG = new Proxy({}, { + get(overrideConfig, name) { + let existing; + if (name in staticConfig) { + existing = staticConfig[name]; + } else { + if (!(name in variableConfig)) update(name); + existing = variableConfig[name]; + } + + // For unset override and mixable existing + if (!(name in overrideConfig) && typeof existing === 'object') { + // Get ready to mix. + overrideConfig[name] = {}; + } + + if (name in overrideConfig) { + const override = overrideConfig[name]; + + // When mixable + if (typeof override === 'object' && typeof existing === 'object') { + // Mix, proxy changes to the override. + return new Proxy({ ...existing, ...override }, { + set(target, prop, value) { + target[prop] = value; + override[prop] = value; + return true; + } + }); + } + + return override; + } + + // Only when not mixable and override hasn't been set. + return existing; + } + }); + + document.addEventListener('pjax:success', () => { + variableConfig = {}; + }); +})(); diff --git a/js/motion.js b/js/motion.js new file mode 100644 index 0000000..aad22db --- /dev/null +++ b/js/motion.js @@ -0,0 +1,140 @@ +/* global NexT, CONFIG */ + +NexT.motion = {}; + +NexT.motion.integrator = { + queue: [], + init : function() { + this.queue = []; + return this; + }, + add: function(fn) { + const sequence = fn(); + if (CONFIG.motion.async) this.queue.push(sequence); + else this.queue = this.queue.concat(sequence); + return this; + }, + bootstrap: function() { + if (!CONFIG.motion.async) this.queue = [this.queue]; + this.queue.forEach(sequence => { + const timeline = window.anime.timeline({ + duration: 200, + easing : 'linear' + }); + sequence.forEach(item => { + if (item.deltaT) timeline.add(item, item.deltaT); + else timeline.add(item); + }); + }); + } +}; + +NexT.motion.middleWares = { + header: function() { + const sequence = []; + + function getMistLineSettings(targets) { + sequence.push({ + targets, + scaleX : [0, 1], + duration: 500, + deltaT : '-=200' + }); + } + + function pushToSequence(targets, sequenceQueue = false) { + sequence.push({ + targets, + opacity: 1, + top : 0, + deltaT : sequenceQueue ? '-=200' : '-=0' + }); + } + + pushToSequence('.column'); + CONFIG.scheme === 'Mist' && getMistLineSettings('.logo-line'); + CONFIG.scheme === 'Muse' && pushToSequence('.custom-logo-image'); + pushToSequence('.site-title'); + pushToSequence('.site-brand-container .toggle', true); + pushToSequence('.site-subtitle'); + (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') && pushToSequence('.custom-logo-image'); + + const menuItemTransition = CONFIG.motion.transition.menu_item; + if (menuItemTransition) { + document.querySelectorAll('.menu-item').forEach(targets => { + sequence.push({ + targets, + complete: () => targets.classList.add('animated', menuItemTransition), + deltaT : '-=200' + }); + }); + } + + return sequence; + }, + + subMenu: function() { + const subMenuItem = document.querySelectorAll('.sub-menu .menu-item'); + if (subMenuItem.length > 0) { + subMenuItem.forEach(element => { + element.classList.add('animated'); + }); + } + return []; + }, + + postList: function() { + const sequence = []; + const { post_block, post_header, post_body, coll_header } = CONFIG.motion.transition; + + function animate(animation, elements) { + if (!animation) return; + elements.forEach(targets => { + sequence.push({ + targets, + complete: () => targets.classList.add('animated', animation), + deltaT : '-=100' + }); + }); + } + + document.querySelectorAll('.post-block').forEach(targets => { + sequence.push({ + targets, + complete: () => targets.classList.add('animated', post_block), + deltaT : '-=100' + }); + animate(coll_header, targets.querySelectorAll('.collection-header')); + animate(post_header, targets.querySelectorAll('.post-header')); + animate(post_body, targets.querySelectorAll('.post-body')); + }); + + animate(post_block, document.querySelectorAll('.pagination, .comments')); + + return sequence; + }, + + sidebar: function() { + const sequence = []; + const sidebar = document.querySelectorAll('.sidebar-inner'); + const sidebarTransition = CONFIG.motion.transition.sidebar; + // Only for Pisces | Gemini. + if (sidebarTransition && (CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini')) { + sidebar.forEach(targets => { + sequence.push({ + targets, + complete: () => targets.classList.add('animated', sidebarTransition), + deltaT : '-=100' + }); + }); + } + return sequence; + }, + + footer: function() { + return [{ + targets: document.querySelector('.footer'), + opacity: 1 + }]; + } +}; diff --git a/js/next-boot.js b/js/next-boot.js new file mode 100644 index 0000000..1225fd2 --- /dev/null +++ b/js/next-boot.js @@ -0,0 +1,75 @@ +/* global NexT, CONFIG */ + +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 => { + event.currentTarget.classList.toggle('toggle-close'); + const siteNav = document.querySelector('.site-nav'); + if (!siteNav) return; + siteNav.style.setProperty('--scroll-height', siteNav.scrollHeight + 'px'); + document.body.classList.toggle('site-nav-on'); + }); + + document.querySelectorAll('.sidebar-nav li').forEach((element, index) => { + element.addEventListener('click', () => { + NexT.utils.activateSidebarPanel(index); + }); + }); + + window.addEventListener('hashchange', () => { + const tHash = location.hash; + if (tHash !== '' && !tHash.match(/%\S{2}/)) { + const 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 'scripts/helpers/next-config.js' file. + */ + CONFIG.prism && window.Prism.highlightAll(); + CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img', { + background: 'var(--content-bg-color)' + }); + CONFIG.lazyload && window.lozad('.post-body img').observe(); + CONFIG.pangu && window.pangu.spacingPage(); + + CONFIG.exturl && NexT.utils.registerExtURL(); + NexT.utils.wrapTableWithBox(); + NexT.utils.registerCopyCode(); + NexT.utils.registerTabsTag(); + NexT.utils.registerActiveMenuItem(); + NexT.utils.registerLangSelect(); + NexT.utils.registerSidebarTOC(); + NexT.utils.registerPostReward(); + NexT.utils.registerVideoIframe(); +}; + +NexT.boot.motion = function() { + // Define Motion Sequence & Bootstrap Motion. + if (CONFIG.motion.enable) { + NexT.motion.integrator + .add(NexT.motion.middleWares.header) + .add(NexT.motion.middleWares.postList) + .add(NexT.motion.middleWares.sidebar) + .add(NexT.motion.middleWares.footer) + .bootstrap(); + } + NexT.utils.updateSidebarPosition(); +}; + +document.addEventListener('DOMContentLoaded', () => { + NexT.boot.registerEvents(); + NexT.boot.refresh(); + NexT.boot.motion(); +}); diff --git a/js/pjax.js b/js/pjax.js new file mode 100644 index 0000000..f81a6a0 --- /dev/null +++ b/js/pjax.js @@ -0,0 +1,50 @@ +/* global NexT, CONFIG, Pjax */ + +const pjax = new Pjax({ + selectors: [ + 'head title', + 'script[type="application/json"]', + // Precede .main-inner to prevent placeholder TOC changes asap + '.post-toc-wrap', + '.main-inner', + '.languages', + '.pjax' + ], + switches: { + '.post-toc-wrap': function(oldWrap, newWrap) { + if (newWrap.querySelector('.post-toc')) { + Pjax.switches.outerHTML.call(this, oldWrap, newWrap); + } else { + const curTOC = oldWrap.querySelector('.post-toc'); + if (curTOC) { + curTOC.classList.add('placeholder-toc'); + } + this.onSwitch(); + } + } + }, + analytics: false, + cacheBust: false, + scrollTo : !CONFIG.bookmark.enable +}); + +document.addEventListener('pjax:success', () => { + pjax.executeScripts(document.querySelectorAll('script[data-pjax]')); + NexT.boot.refresh(); + // Define Motion Sequence & Bootstrap Motion. + if (CONFIG.motion.enable) { + NexT.motion.integrator + .init() + .add(NexT.motion.middleWares.subMenu) + .add(NexT.motion.middleWares.postList) + // Add sidebar-post-related transition. + .add(NexT.motion.middleWares.sidebar) + .bootstrap(); + } + if (CONFIG.sidebar.display !== 'remove') { + const hasTOC = document.querySelector('.post-toc:not(.placeholder-toc)'); + document.querySelector('.sidebar-inner').classList.toggle('sidebar-nav-active', hasTOC); + NexT.utils.activateSidebarPanel(hasTOC ? 0 : 1); + NexT.utils.updateSidebarPosition(); + } +}); diff --git a/js/schedule.js b/js/schedule.js new file mode 100644 index 0000000..8f0c26c --- /dev/null +++ b/js/schedule.js @@ -0,0 +1,138 @@ +/* global CONFIG */ + +// https://developers.google.com/calendar/api/v3/reference/events/list +(function() { + // Initialization + const calendar = { + orderBy : 'startTime', + showLocation: false, + offsetMax : 72, + offsetMin : 4, + showDeleted : false, + singleEvents: true, + maxResults : 250 + }; + + // Read config form theme config file + Object.assign(calendar, CONFIG.calendar); + + const now = new Date(); + const timeMax = new Date(); + const timeMin = new Date(); + + timeMax.setHours(now.getHours() + calendar.offsetMax); + timeMin.setHours(now.getHours() - calendar.offsetMin); + + // Build URL + const params = { + key : calendar.api_key, + orderBy : calendar.orderBy, + timeMax : timeMax.toISOString(), + timeMin : timeMin.toISOString(), + showDeleted : calendar.showDeleted, + singleEvents: calendar.singleEvents, + maxResults : calendar.maxResults + }; + + const request_url = new URL(`https://www.googleapis.com/calendar/v3/calendars/${calendar.calendar_id}/events`); + Object.entries(params).forEach(param => request_url.searchParams.append(...param)); + + function getRelativeTime(current, previous) { + const msPerMinute = 60 * 1000; + const msPerHour = msPerMinute * 60; + const msPerDay = msPerHour * 24; + const msPerMonth = msPerDay * 30; + const msPerYear = msPerDay * 365; + + let elapsed = current - previous; + const tense = elapsed > 0 ? ' ago' : ' later'; + + elapsed = Math.abs(elapsed); + + if (elapsed < msPerHour) { + return Math.round(elapsed / msPerMinute) + ' minutes' + tense; + } else if (elapsed < msPerDay) { + return Math.round(elapsed / msPerHour) + ' hours' + tense; + } else if (elapsed < msPerMonth) { + return 'about ' + Math.round(elapsed / msPerDay) + ' days' + tense; + } else if (elapsed < msPerYear) { + return 'about ' + Math.round(elapsed / msPerMonth) + ' months' + tense; + } + + return 'about ' + Math.round(elapsed / msPerYear) + ' years' + tense; + } + + function buildEventDOM(tense, event, start, end) { + const durationFormat = { + weekday: 'short', + hour : '2-digit', + minute : '2-digit' + }; + const relativeTime = tense === 'now' ? 'NOW' : getRelativeTime(now, start); + const duration = start.toLocaleTimeString([], durationFormat) + ' - ' + end.toLocaleTimeString([], durationFormat); + + let location = ''; + if (calendar.showLocation && event.location) { + location = `${event.location}`; + } + let description = ''; + if (event.description) { + description = `${event.description}`; + } + + const eventContent = `
+

+ ${event.summary} + ${relativeTime} +

+ ${location} + ${duration} + ${description} +
`; + return eventContent; + } + + function fetchData() { + const eventList = document.querySelector('.event-list'); + if (!eventList) return; + + fetch(request_url.href).then(response => { + return response.json(); + }).then(data => { + if (data.items.length === 0) { + eventList.innerHTML = '
'; + return; + } + // Clean the event list + eventList.innerHTML = ''; + let prevEnd = 0; // used to decide where to insert an
+ const utc = new Date().getTimezoneOffset() * 60000; + + data.items.forEach(event => { + // Parse data + const start = new Date(event.start.dateTime || (new Date(event.start.date).getTime() + utc)); + const end = new Date(event.end.dateTime || (new Date(event.end.date).getTime() + utc)); + + let tense = 'now'; + if (end < now) { + tense = 'past'; + } else if (start > now) { + tense = 'future'; + } + + if (tense === 'future' && prevEnd < now) { + eventList.insertAdjacentHTML('beforeend', '
'); + } + + eventList.insertAdjacentHTML('beforeend', buildEventDOM(tense, event, start, end)); + prevEnd = end; + }); + }); + } + + fetchData(); + const fetchDataTimer = setInterval(fetchData, 60000); + document.addEventListener('pjax:send', () => { + clearInterval(fetchDataTimer); + }); +})(); diff --git a/js/schemes/muse.js b/js/schemes/muse.js new file mode 100644 index 0000000..ba60b51 --- /dev/null +++ b/js/schemes/muse.js @@ -0,0 +1,60 @@ +/* global CONFIG */ + +document.addEventListener('DOMContentLoaded', () => { + + const isRight = CONFIG.sidebar.position === 'right'; + + const sidebarToggleMotion = { + mouse: {}, + init : function() { + 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)); + window.addEventListener('sidebar:show', this.showSidebar); + window.addEventListener('sidebar:hide', this.hideSidebar); + }, + mousedownHandler: function(event) { + this.mouse.X = event.pageX; + this.mouse.Y = event.pageY; + }, + mouseupHandler: function(event) { + const deltaX = event.pageX - this.mouse.X; + const deltaY = event.pageY - this.mouse.Y; + const clickingBlankPart = Math.hypot(deltaX, deltaY) < 20 && event.target.matches('.main'); + // Fancybox has z-index property, but medium-zoom does not, so the sidebar will overlay the zoomed image. + if (clickingBlankPart || event.target.matches('img.medium-zoom-image')) { + this.hideSidebar(); + } + }, + clickHandler: function() { + document.body.classList.contains('sidebar-active') ? this.hideSidebar() : this.showSidebar(); + }, + showSidebar: function() { + document.body.classList.add('sidebar-active'); + const animateAction = isRight ? 'fadeInRight' : 'fadeInLeft'; + document.querySelectorAll('.sidebar .animated').forEach((element, index) => { + element.style.animationDelay = (100 * index) + 'ms'; + element.classList.remove(animateAction); + setTimeout(() => { + // Trigger a DOM reflow + element.classList.add(animateAction); + }); + }); + }, + hideSidebar: function() { + document.body.classList.remove('sidebar-active'); + } + }; + if (CONFIG.sidebar.display !== 'remove') sidebarToggleMotion.init(); + + function updateFooterPosition() { + const footer = document.querySelector('.footer'); + const containerHeight = document.querySelector('.main').offsetHeight + footer.offsetHeight; + footer.classList.toggle('footer-fixed', containerHeight <= window.innerHeight); + } + + updateFooterPosition(); + window.addEventListener('resize', updateFooterPosition); + window.addEventListener('scroll', updateFooterPosition, { passive: true }); +}); diff --git a/js/third-party/addtoany.js b/js/third-party/addtoany.js new file mode 100644 index 0000000..f9009f8 --- /dev/null +++ b/js/third-party/addtoany.js @@ -0,0 +1,8 @@ +/* global NexT */ + +document.addEventListener('page:loaded', () => { + NexT.utils.getScript('https://static.addtoany.com/menu/page.js', { condition: window.a2a }) + .then(() => { + window.a2a.init(); + }); +}); diff --git a/js/third-party/analytics/baidu-analytics.js b/js/third-party/analytics/baidu-analytics.js new file mode 100644 index 0000000..c10e7d0 --- /dev/null +++ b/js/third-party/analytics/baidu-analytics.js @@ -0,0 +1,7 @@ +/* global _hmt */ + +if (!window._hmt) window._hmt = []; + +document.addEventListener('pjax:success', () => { + _hmt.push(['_trackPageview', location.pathname]); +}); diff --git a/js/third-party/analytics/google-analytics.js b/js/third-party/analytics/google-analytics.js new file mode 100644 index 0000000..2cd128f --- /dev/null +++ b/js/third-party/analytics/google-analytics.js @@ -0,0 +1,35 @@ +/* global CONFIG, dataLayer, gtag */ + +if (!CONFIG.google_analytics.only_pageview) { + if (CONFIG.hostname === location.hostname) { + window.dataLayer = window.dataLayer || []; + window.gtag = function() { + dataLayer.push(arguments); + }; + gtag('js', new Date()); + gtag('config', CONFIG.google_analytics.tracking_id); + + document.addEventListener('pjax:success', () => { + gtag('event', 'page_view', { + page_location: location.href, + page_path : location.pathname, + page_title : document.title + }); + }); + } +} else { + const sendPageView = () => { + if (CONFIG.hostname !== location.hostname) return; + const uid = localStorage.getItem('uid') || (Math.random() + '.' + Math.random()); + localStorage.setItem('uid', uid); + navigator.sendBeacon('https://www.google-analytics.com/collect', new URLSearchParams({ + v : 1, + tid: CONFIG.google_analytics.tracking_id, + cid: uid, + t : 'pageview', + dp : encodeURIComponent(location.pathname) + })); + }; + document.addEventListener('pjax:complete', sendPageView); + sendPageView(); +} diff --git a/js/third-party/analytics/growingio.js b/js/third-party/analytics/growingio.js new file mode 100644 index 0000000..0460833 --- /dev/null +++ b/js/third-party/analytics/growingio.js @@ -0,0 +1,10 @@ +/* global CONFIG, gio */ + +if (!window.gio) { + window.gio = function() { + (window.gio.q = window.gio.q || []).push(arguments); + }; +} + +gio('init', `${CONFIG.growingio_analytics}`, {}); +gio('send'); diff --git a/js/third-party/analytics/matomo.js b/js/third-party/analytics/matomo.js new file mode 100644 index 0000000..290a3e0 --- /dev/null +++ b/js/third-party/analytics/matomo.js @@ -0,0 +1,19 @@ +/* global CONFIG */ + +if (CONFIG.matomo.enable) { + window._paq = window._paq || []; + const _paq = window._paq; + + /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ + _paq.push(['trackPageView']); + _paq.push(['enableLinkTracking']); + const u = CONFIG.matomo.server_url; + _paq.push(['setTrackerUrl', u + 'matomo.php']); + _paq.push(['setSiteId', CONFIG.matomo.site_id]); + const d = document; + const g = d.createElement('script'); + const s = d.getElementsByTagName('script')[0]; + g.async = true; + g.src = u + 'matomo.js'; + s.parentNode.insertBefore(g, s); +} diff --git a/js/third-party/chat/chatra.js b/js/third-party/chat/chatra.js new file mode 100644 index 0000000..e495b8e --- /dev/null +++ b/js/third-party/chat/chatra.js @@ -0,0 +1,19 @@ +/* global CONFIG, Chatra */ + +(function() { + if (CONFIG.chatra.embed) { + window.ChatraSetup = { + mode : 'frame', + injectTo: CONFIG.chatra.embed + }; + } + + window.ChatraID = CONFIG.chatra.id; + + const chatButton = document.querySelector('.sidebar-button button'); + if (chatButton) { + chatButton.addEventListener('click', () => { + Chatra('openChat', true); + }); + } +})(); diff --git a/js/third-party/chat/gitter.js b/js/third-party/chat/gitter.js new file mode 100644 index 0000000..2b26d05 --- /dev/null +++ b/js/third-party/chat/gitter.js @@ -0,0 +1,5 @@ +/* global CONFIG */ + +((window.gitter = {}).chat = {}).options = { + room: CONFIG.gitter.room +}; diff --git a/js/third-party/chat/tidio.js b/js/third-party/chat/tidio.js new file mode 100644 index 0000000..bffb918 --- /dev/null +++ b/js/third-party/chat/tidio.js @@ -0,0 +1,10 @@ +/* global tidioChatApi */ + +(function() { + const chatButton = document.querySelector('.sidebar-button button'); + if (chatButton) { + chatButton.addEventListener('click', () => { + tidioChatApi.open(); + }); + } +})(); diff --git a/js/third-party/comments/changyan.js b/js/third-party/comments/changyan.js new file mode 100644 index 0000000..18a1be4 --- /dev/null +++ b/js/third-party/comments/changyan.js @@ -0,0 +1,39 @@ +/* global NexT, CONFIG */ + +document.addEventListener('page:loaded', () => { + const { appid, appkey } = CONFIG.changyan; + const mainJs = 'https://cy-cdn.kuaizhan.com/upload/changyan.js'; + const countJs = `https://cy-cdn.kuaizhan.com/upload/plugins/plugins.list.count.js?clientId=${appid}`; + + // Get the number of comments + setTimeout(() => { + return NexT.utils.getScript(countJs, { + attributes: { + async: true, + id : 'cy_cmt_num' + } + }); + }, 0); + + // When scroll to comment section + if (CONFIG.page.comments && !CONFIG.page.isHome) { + NexT.utils.loadComments('#SOHUCS') + .then(() => { + return NexT.utils.getScript(mainJs, { + attributes: { + async: true + } + }); + }) + .then(() => { + window.changyan.api.config({ + appid, + conf: appkey + }); + }) + .catch(error => { + // eslint-disable-next-line no-console + console.error('Failed to load Changyan', error); + }); + } +}); diff --git a/js/third-party/comments/disqus.js b/js/third-party/comments/disqus.js new file mode 100644 index 0000000..4d1ca9e --- /dev/null +++ b/js/third-party/comments/disqus.js @@ -0,0 +1,41 @@ +/* global NexT, CONFIG, DISQUS */ + +document.addEventListener('page:loaded', () => { + + if (CONFIG.disqus.count) { + if (window.DISQUSWIDGETS) { + window.DISQUSWIDGETS.getCount({ reset: true }); + } else { + // Defer loading until the whole page loading is completed + NexT.utils.getScript(`https://${CONFIG.disqus.shortname}.disqus.com/count.js`, { + attributes: { id: 'dsq-count-scr', defer: true } + }); + } + } + + if (CONFIG.page.comments) { + // `disqus_config` should be a global variable + // See https://help.disqus.com/en/articles/1717084-javascript-configuration-variables + window.disqus_config = function() { + this.page.url = CONFIG.page.permalink; + this.page.identifier = CONFIG.page.path; + this.page.title = CONFIG.page.title; + if (CONFIG.disqus.i18n.disqus !== 'disqus') { + this.language = CONFIG.disqus.i18n.disqus; + } + }; + NexT.utils.loadComments('#disqus_thread').then(() => { + if (window.DISQUS) { + DISQUS.reset({ + reload: true, + config: window.disqus_config + }); + } else { + NexT.utils.getScript(`https://${CONFIG.disqus.shortname}.disqus.com/embed.js`, { + attributes: { dataset: { timestamp: '' + +new Date() } } + }); + } + }); + } + +}); diff --git a/js/third-party/comments/disqusjs.js b/js/third-party/comments/disqusjs.js new file mode 100644 index 0000000..d8401ee --- /dev/null +++ b/js/third-party/comments/disqusjs.js @@ -0,0 +1,23 @@ +/* global NexT, CONFIG, DisqusJS */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.page.comments) return; + + NexT.utils.loadComments('#disqus_thread') + .then(() => NexT.utils.getScript(CONFIG.disqusjs.js, { condition: window.DisqusJS })) + .then(() => { + window.dsqjs = new DisqusJS({ + api : CONFIG.disqusjs.api || 'https://disqus.com/api/', + apikey : CONFIG.disqusjs.apikey, + shortname : CONFIG.disqusjs.shortname, + url : CONFIG.page.permalink, + identifier: CONFIG.page.path, + title : CONFIG.page.title + }); + window.dsqjs.render(document.querySelector('.disqusjs-container')); + }); +}); + +document.addEventListener('pjax:send', () => { + if (window.dsqjs) window.dsqjs.destroy(); +}); diff --git a/js/third-party/comments/gitalk.js b/js/third-party/comments/gitalk.js new file mode 100644 index 0000000..08d07f4 --- /dev/null +++ b/js/third-party/comments/gitalk.js @@ -0,0 +1,24 @@ +/* global NexT, CONFIG, Gitalk */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.page.comments) return; + + NexT.utils.loadComments('.gitalk-container') + .then(() => NexT.utils.getScript(CONFIG.gitalk.js, { + condition: window.Gitalk + })) + .then(() => { + const gitalk = new Gitalk({ + clientID : CONFIG.gitalk.client_id, + clientSecret : CONFIG.gitalk.client_secret, + repo : CONFIG.gitalk.repo, + owner : CONFIG.gitalk.github_id, + admin : [CONFIG.gitalk.admin_user], + id : CONFIG.gitalk.path_md5, + proxy : CONFIG.gitalk.proxy, + language : CONFIG.gitalk.language || window.navigator.language, + distractionFreeMode: CONFIG.gitalk.distraction_free_mode + }); + gitalk.render(document.querySelector('.gitalk-container')); + }); +}); diff --git a/js/third-party/comments/isso.js b/js/third-party/comments/isso.js new file mode 100644 index 0000000..2c70601 --- /dev/null +++ b/js/third-party/comments/isso.js @@ -0,0 +1,15 @@ +/* global NexT, CONFIG */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.page.comments) return; + + NexT.utils.loadComments('#isso-thread') + .then(() => NexT.utils.getScript(`${CONFIG.isso}js/embed.min.js`, { + attributes: { + dataset: { + isso: `${CONFIG.isso}` + } + }, + parentNode: document.querySelector('#isso-thread') + })); +}); diff --git a/js/third-party/comments/livere.js b/js/third-party/comments/livere.js new file mode 100644 index 0000000..c4bcd2e --- /dev/null +++ b/js/third-party/comments/livere.js @@ -0,0 +1,19 @@ +/* global NexT, CONFIG, LivereTower */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.page.comments) return; + + NexT.utils.loadComments('#lv-container').then(() => { + window.livereOptions = { + refer: CONFIG.page.path.replace(/index\.html$/, '') + }; + + if (typeof LivereTower === 'function') return; + + NexT.utils.getScript('https://cdn-city.livere.com/js/embed.dist.js', { + attributes: { + async: true + } + }); + }); +}); diff --git a/js/third-party/comments/utterances.js b/js/third-party/comments/utterances.js new file mode 100644 index 0000000..332ee05 --- /dev/null +++ b/js/third-party/comments/utterances.js @@ -0,0 +1,17 @@ +/* global NexT, CONFIG */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.page.comments) return; + + NexT.utils.loadComments('.utterances-container') + .then(() => NexT.utils.getScript('https://utteranc.es/client.js', { + attributes: { + async : true, + crossOrigin : 'anonymous', + 'repo' : CONFIG.utterances.repo, + 'issue-term': CONFIG.utterances.issue_term, + 'theme' : CONFIG.utterances.theme + }, + parentNode: document.querySelector('.utterances-container') + })); +}); diff --git a/js/third-party/fancybox.js b/js/third-party/fancybox.js new file mode 100644 index 0000000..bb436ab --- /dev/null +++ b/js/third-party/fancybox.js @@ -0,0 +1,38 @@ +document.addEventListener('page:loaded', () => { + + /** + * Wrap images with fancybox. + */ + document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(element => { + const $image = $(element); + const imageLink = $image.attr('data-src') || $image.attr('src'); + const $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'); + } + + const imageTitle = $image.attr('title') || $image.attr('alt'); + if (imageTitle) { + // Do not append image-caption if pandoc has already created a figcaption + if (!$imageWrapLink.next('figcaption').length) { + $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 + } + } + }); +}); diff --git a/js/third-party/math/katex.js b/js/third-party/math/katex.js new file mode 100644 index 0000000..ad745b1 --- /dev/null +++ b/js/third-party/math/katex.js @@ -0,0 +1,7 @@ +/* global NexT, CONFIG */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.enableMath) return; + + NexT.utils.getScript(CONFIG.katex.copy_tex_js).catch(() => {}); +}); diff --git a/js/third-party/math/mathjax.js b/js/third-party/math/mathjax.js new file mode 100644 index 0000000..fe4d448 --- /dev/null +++ b/js/third-party/math/mathjax.js @@ -0,0 +1,36 @@ +/* global NexT, CONFIG, MathJax */ + +document.addEventListener('page:loaded', () => { + if (!CONFIG.enableMath) return; + + if (typeof MathJax === 'undefined') { + window.MathJax = { + tex: { + inlineMath: { '[+]': [['$', '$']] }, + tags : CONFIG.mathjax.tags + }, + options: { + renderActions: { + insertedScript: [200, () => { + document.querySelectorAll('mjx-container').forEach(node => { + const target = node.parentNode; + if (target.nodeName.toLowerCase() === 'li') { + target.parentNode.classList.add('has-jax'); + } + }); + }, '', false] + } + } + }; + NexT.utils.getScript(CONFIG.mathjax.js, { + attributes: { + defer: true + } + }); + } else { + MathJax.startup.document.state(0); + MathJax.typesetClear(); + MathJax.texReset(); + MathJax.typesetPromise(); + } +}); diff --git a/js/third-party/pace.js b/js/third-party/pace.js new file mode 100644 index 0000000..c22d59f --- /dev/null +++ b/js/third-party/pace.js @@ -0,0 +1,7 @@ +/* global Pace */ + +Pace.options.restartOnPushState = false; + +document.addEventListener('pjax:send', () => { + Pace.restart(); +}); diff --git a/js/third-party/quicklink.js b/js/third-party/quicklink.js new file mode 100644 index 0000000..2543ad1 --- /dev/null +++ b/js/third-party/quicklink.js @@ -0,0 +1,37 @@ +/* global CONFIG, quicklink */ + +(function() { + if (typeof CONFIG.quicklink.ignores === 'string') { + const ignoresStr = `[${CONFIG.quicklink.ignores}]`; + CONFIG.quicklink.ignores = JSON.parse(ignoresStr); + } + + let resetFn = null; + + const onRefresh = () => { + if (resetFn) resetFn(); + if (!CONFIG.quicklink.enable) return; + + let ignoresArr = CONFIG.quicklink.ignores || []; + if (!Array.isArray(ignoresArr)) { + ignoresArr = [ignoresArr]; + } + + resetFn = quicklink.listen({ + timeout : CONFIG.quicklink.timeout, + priority: CONFIG.quicklink.priority, + ignores : [ + uri => uri.includes('#'), + uri => uri === CONFIG.quicklink.url, + ...ignoresArr + ] + }); + }; + + if (CONFIG.quicklink.delay) { + window.addEventListener('load', onRefresh); + document.addEventListener('pjax:success', onRefresh); + } else { + document.addEventListener('page:loaded', onRefresh); + } +})(); diff --git a/js/third-party/search/algolia-search.js b/js/third-party/search/algolia-search.js new file mode 100644 index 0000000..12a554c --- /dev/null +++ b/js/third-party/search/algolia-search.js @@ -0,0 +1,130 @@ +/* global instantsearch, algoliasearch, CONFIG, pjax */ + +document.addEventListener('DOMContentLoaded', () => { + const { indexName, appID, apiKey, hits } = CONFIG.algolia; + + const search = instantsearch({ + indexName, + searchClient : algoliasearch(appID, apiKey), + searchFunction: helper => { + if (document.querySelector('.search-input').value) { + helper.search(); + } + } + }); + + if (typeof pjax === 'object') { + search.on('render', () => { + pjax.refresh(document.querySelector('.algolia-hits')); + }); + } + + // Registering Widgets + search.addWidgets([ + instantsearch.widgets.configure({ + hitsPerPage: hits.per_page || 10 + }), + + instantsearch.widgets.searchBox({ + container : '.search-input-container', + placeholder : CONFIG.i18n.placeholder, + // Hide default icons of algolia search + showReset : false, + showSubmit : false, + showLoadingIndicator: false, + cssClasses : { + input: 'search-input' + } + }), + + instantsearch.widgets.stats({ + container: '.algolia-stats', + templates: { + text: data => { + const stats = CONFIG.i18n.hits_time + .replace('${hits}', data.nbHits) + .replace('${time}', data.processingTimeMS); + return `${stats} + Algolia`; + } + }, + cssClasses: { + text: 'search-stats' + } + }), + + instantsearch.widgets.hits({ + container : '.algolia-hits', + escapeHTML: false, + templates : { + item: data => { + const { title, excerpt, excerptStrip, contentStripTruncate } = data._highlightResult; + let result = `${title.value}`; + const content = excerpt || excerptStrip || contentStripTruncate; + if (content && content.value) { + const div = document.createElement('div'); + div.innerHTML = content.value; + result += `

${div.textContent.substring(0, 100)}...

`; + } + return result; + }, + empty: data => { + return `
+ ${CONFIG.i18n.empty.replace('${query}', data.query)} +
`; + } + }, + cssClasses: { + list: 'search-result-list' + } + }), + + instantsearch.widgets.pagination({ + container: '.algolia-pagination', + scrollTo : false, + showFirst: false, + showLast : false, + templates: { + first : '', + last : '', + previous: '', + next : '' + }, + cssClasses: { + list : ['pagination', 'algolia-pagination'], + item : 'pagination-item', + link : 'page-number', + selectedItem: 'current', + disabledItem: 'disabled-item' + } + }) + ]); + + search.start(); + + // Handle and trigger popup window + document.querySelectorAll('.popup-trigger').forEach(element => { + element.addEventListener('click', () => { + document.body.classList.add('search-active'); + setTimeout(() => document.querySelector('.search-input').focus(), 500); + }); + }); + + // Monitor main search box + const onPopupClose = () => { + document.body.classList.remove('search-active'); + }; + + document.querySelector('.search-pop-overlay').addEventListener('click', event => { + if (event.target === document.querySelector('.search-pop-overlay')) { + onPopupClose(); + } + }); + document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); + document.addEventListener('pjax:success', onPopupClose); + window.addEventListener('keyup', event => { + if (event.key === 'Escape') { + onPopupClose(); + } + }); +}); diff --git a/js/third-party/search/local-search.js b/js/third-party/search/local-search.js new file mode 100644 index 0000000..92a264d --- /dev/null +++ b/js/third-party/search/local-search.js @@ -0,0 +1,99 @@ +/* global CONFIG, pjax, LocalSearch */ + +document.addEventListener('DOMContentLoaded', () => { + if (!CONFIG.path) { + // Search DB path + console.warn('`hexo-generator-searchdb` plugin is not installed!'); + return; + } + const localSearch = new LocalSearch({ + path : CONFIG.path, + top_n_per_article: CONFIG.localsearch.top_n_per_article, + unescape : CONFIG.localsearch.unescape + }); + + const input = document.querySelector('.search-input'); + + const inputEventFunction = () => { + if (!localSearch.isfetched) return; + const searchText = input.value.trim().toLowerCase(); + const keywords = searchText.split(/[-\s]+/); + const container = document.querySelector('.search-result-container'); + let resultItems = []; + if (searchText.length > 0) { + // Perform local searching + resultItems = localSearch.getResultItems(keywords); + } + if (keywords.length === 1 && keywords[0] === '') { + container.classList.add('no-result'); + container.innerHTML = '
'; + } else if (resultItems.length === 0) { + container.classList.add('no-result'); + container.innerHTML = '
'; + } else { + resultItems.sort((left, right) => { + if (left.includedCount !== right.includedCount) { + return right.includedCount - left.includedCount; + } else if (left.hitCount !== right.hitCount) { + return right.hitCount - left.hitCount; + } + return right.id - left.id; + }); + const stats = CONFIG.i18n.hits.replace('${hits}', resultItems.length); + + container.classList.remove('no-result'); + container.innerHTML = `
${stats}
+
+
    ${resultItems.map(result => result.item).join('')}
`; + if (typeof pjax === 'object') pjax.refresh(container); + } + }; + + localSearch.highlightSearchWords(document.querySelector('.post-body')); + if (CONFIG.localsearch.preload) { + localSearch.fetchData(); + } + + if (CONFIG.localsearch.trigger === 'auto') { + input.addEventListener('input', inputEventFunction); + } else { + document.querySelector('.search-icon').addEventListener('click', inputEventFunction); + input.addEventListener('keypress', event => { + if (event.key === 'Enter') { + inputEventFunction(); + } + }); + } + window.addEventListener('search:loaded', inputEventFunction); + + // Handle and trigger popup window + document.querySelectorAll('.popup-trigger').forEach(element => { + element.addEventListener('click', () => { + document.body.classList.add('search-active'); + // Wait for search-popup animation to complete + setTimeout(() => input.focus(), 500); + if (!localSearch.isfetched) localSearch.fetchData(); + }); + }); + + // Monitor main search box + const onPopupClose = () => { + document.body.classList.remove('search-active'); + }; + + document.querySelector('.search-pop-overlay').addEventListener('click', event => { + if (event.target === document.querySelector('.search-pop-overlay')) { + onPopupClose(); + } + }); + document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose); + document.addEventListener('pjax:success', () => { + localSearch.highlightSearchWords(document.querySelector('.post-body')); + onPopupClose(); + }); + window.addEventListener('keyup', event => { + if (event.key === 'Escape') { + onPopupClose(); + } + }); +}); diff --git a/js/third-party/statistics/firestore.js b/js/third-party/statistics/firestore.js new file mode 100644 index 0000000..3ea7ba6 --- /dev/null +++ b/js/third-party/statistics/firestore.js @@ -0,0 +1,60 @@ +/* global CONFIG, firebase */ + +firebase.initializeApp({ + apiKey : CONFIG.firestore.apiKey, + projectId: CONFIG.firestore.projectId +}); + +(function() { + const getCount = (doc, increaseCount) => { + // IncreaseCount will be false when not in article page + return doc.get().then(d => { + // Has no data, initialize count + let count = d.exists ? d.data().count : 0; + // If first view this article + if (increaseCount) { + // Increase count + count++; + doc.set({ + count + }); + } + return count; + }); + }; + + const db = firebase.firestore(); + const articles = db.collection(CONFIG.firestore.collection); + + document.addEventListener('page:loaded', () => { + + if (CONFIG.page.isPost) { + // Fix issue #118 + // https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent + const title = document.querySelector('.post-title').textContent.trim(); + const doc = articles.doc(title); + let increaseCount = CONFIG.hostname === location.hostname; + if (localStorage.getItem(title)) { + increaseCount = false; + } else { + // Mark as visited + localStorage.setItem(title, true); + } + getCount(doc, increaseCount).then(count => { + document.querySelector('.firestore-visitors-count').innerText = count; + }); + } else if (CONFIG.page.isHome) { + const promises = [...document.querySelectorAll('.post-title')].map(element => { + const title = element.textContent.trim(); + const doc = articles.doc(title); + return getCount(doc); + }); + Promise.all(promises).then(counts => { + const metas = document.querySelectorAll('.firestore-visitors-count'); + counts.forEach((val, idx) => { + metas[idx].innerText = val; + }); + }); + } + }); +})(); diff --git a/js/third-party/statistics/lean-analytics.js b/js/third-party/statistics/lean-analytics.js new file mode 100644 index 0000000..8397112 --- /dev/null +++ b/js/third-party/statistics/lean-analytics.js @@ -0,0 +1,107 @@ +/* global CONFIG */ +/* eslint-disable no-console */ + +(function() { + const leancloudSelector = url => { + url = encodeURI(url); + return document.getElementById(url).querySelector('.leancloud-visitors-count'); + }; + + const addCount = Counter => { + const visitors = document.querySelector('.leancloud_visitors'); + const url = decodeURI(visitors.id); + const title = visitors.dataset.flagTitle; + + Counter('get', `/classes/Counter?where=${encodeURIComponent(JSON.stringify({ url }))}`) + .then(response => response.json()) + .then(({ results }) => { + if (results.length > 0) { + const counter = results[0]; + leancloudSelector(url).innerText = counter.time + 1; + Counter('put', '/classes/Counter/' + counter.objectId, { + time: { + '__op' : 'Increment', + 'amount': 1 + } + }) + .catch(error => { + console.error('Failed to save visitor count', error); + }); + } else if (CONFIG.leancloud_visitors.security) { + leancloudSelector(url).innerText = 'Counter not initialized! More info at console err msg.'; + console.error('ATTENTION! LeanCloud counter has security bug, see how to solve it here: https://github.com/theme-next/hexo-leancloud-counter-security. \n However, you can still use LeanCloud without security, by setting `security` option to `false`.'); + } else { + Counter('post', '/classes/Counter', { title, url, time: 1 }) + .then(response => response.json()) + .then(() => { + leancloudSelector(url).innerText = 1; + }) + .catch(error => { + console.error('Failed to create', error); + }); + } + }) + .catch(error => { + console.error('LeanCloud Counter Error', error); + }); + }; + + const showTime = Counter => { + const visitors = document.querySelectorAll('.leancloud_visitors'); + const entries = [...visitors].map(element => { + return decodeURI(element.id); + }); + + Counter('get', `/classes/Counter?where=${encodeURIComponent(JSON.stringify({ url: { '$in': entries } }))}`) + .then(response => response.json()) + .then(({ results }) => { + for (const url of entries) { + const target = results.find(item => item.url === url); + leancloudSelector(url).innerText = target ? target.time : 0; + } + }) + .catch(error => { + console.error('LeanCloud Counter Error', error); + }); + }; + + const { app_id, app_key, server_url } = CONFIG.leancloud_visitors; + const fetchData = api_server => { + const Counter = (method, url, data) => { + return fetch(`${api_server}/1.1${url}`, { + method, + headers: { + 'X-LC-Id' : app_id, + 'X-LC-Key' : app_key, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data) + }); + }; + if (CONFIG.page.isPost) { + if (CONFIG.hostname !== location.hostname) return; + addCount(Counter); + } else if (document.querySelectorAll('.post-title-link').length >= 1) { + showTime(Counter); + } + }; + + let api_server; + if (server_url) { + api_server = server_url; + } else if (app_id.slice(-9) === '-MdYXbMMI') { + api_server = `https://${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com`; + } + + document.addEventListener('page:loaded', () => { + if (api_server) { + fetchData(api_server); + } else { + fetch(`https://app-router.leancloud.cn/2/route?appId=${app_id}`) + .then(response => response.json()) + .then(({ api_server }) => { + fetchData(`https://${api_server}`); + }); + } + }); +})(); diff --git a/js/third-party/tags/mermaid.js b/js/third-party/tags/mermaid.js new file mode 100644 index 0000000..9623dc5 --- /dev/null +++ b/js/third-party/tags/mermaid.js @@ -0,0 +1,32 @@ +/* global NexT, CONFIG, mermaid */ + +document.addEventListener('page:loaded', () => { + const mermaidElements = document.querySelectorAll('.mermaid'); + if (mermaidElements.length) { + NexT.utils.getScript(CONFIG.mermaid.js, { + condition: window.mermaid + }).then(() => { + mermaidElements.forEach(element => { + const newElement = document.createElement('div'); + newElement.innerHTML = element.innerHTML; + newElement.className = element.className; + const parent = element.parentNode; + // Fix issue #347 + // Support mermaid inside backtick code block + if (parent.matches('pre')) { + parent.parentNode.replaceChild(newElement, parent); + } else { + parent.replaceChild(newElement, element); + } + }); + mermaid.initialize({ + theme : CONFIG.darkmode && window.matchMedia('(prefers-color-scheme: dark)').matches ? CONFIG.mermaid.theme.dark : CONFIG.mermaid.theme.light, + logLevel : 4, + flowchart: { curve: 'linear' }, + gantt : { axisFormat: '%m/%d/%Y' }, + sequence : { actorMargin: 50 } + }); + mermaid.init(); + }); + } +}); diff --git a/js/third-party/tags/pdf.js b/js/third-party/tags/pdf.js new file mode 100644 index 0000000..7e82891 --- /dev/null +++ b/js/third-party/tags/pdf.js @@ -0,0 +1,23 @@ +/* global NexT, CONFIG, PDFObject */ + +document.addEventListener('page:loaded', () => { + if (document.querySelectorAll('.pdf-container').length) { + NexT.utils.getScript(CONFIG.pdf.object_url, { + condition: window.PDFObject + }).then(() => { + document.querySelectorAll('.pdf-container').forEach(element => { + PDFObject.embed(element.dataset.target, element, { + pdfOpenParams: { + navpanes : 0, + toolbar : 0, + statusbar: 0, + pagemode : 'thumbs', + view : 'FitH' + }, + PDFJS_URL: CONFIG.pdf.url, + height : element.dataset.height + }); + }); + }); + } +}); diff --git a/js/utils.js b/js/utils.js new file mode 100644 index 0000000..ee10f61 --- /dev/null +++ b/js/utils.js @@ -0,0 +1,452 @@ +/* global NexT, CONFIG */ + +HTMLElement.prototype.wrap = function(wrapper) { + this.parentNode.insertBefore(wrapper, this); + this.parentNode.removeChild(this); + wrapper.appendChild(this); +}; + +(function() { + const onPageLoaded = () => document.dispatchEvent( + new Event('page:loaded', { + bubbles: true + }) + ); + + if (document.readyState === 'loading') { + document.addEventListener('readystatechange', onPageLoaded, { once: true }); + } else { + onPageLoaded(); + } + document.addEventListener('pjax:success', onPageLoaded); +})(); + +NexT.utils = { + + registerExtURL: function() { + document.querySelectorAll('span.exturl').forEach(element => { + const link = document.createElement('a'); + // https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings + link.href = decodeURIComponent(atob(element.dataset.url).split('').map(c => { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + link.rel = 'noopener external nofollow noreferrer'; + link.target = '_blank'; + link.className = element.className; + link.title = element.title; + link.innerHTML = element.innerHTML; + element.parentNode.replaceChild(link, element); + }); + }, + + /** + * One-click copy code support. + */ + registerCopyCode: function() { + let figure = document.querySelectorAll('figure.highlight'); + if (figure.length === 0) figure = document.querySelectorAll('pre:not(.mermaid)'); + figure.forEach(element => { + element.querySelectorAll('.code .line span').forEach(span => { + span.classList.forEach(name => { + span.classList.replace(name, `hljs-${name}`); + }); + }); + if (!CONFIG.copycode.enable) return; + let target = element; + if (CONFIG.copycode.style !== 'mac') target = element.querySelector('.table-container') || element; + target.insertAdjacentHTML('beforeend', '
'); + const button = element.querySelector('.copy-btn'); + button.addEventListener('click', () => { + const lines = element.querySelector('.code') || element.querySelector('code'); + const code = lines.innerText; + if (navigator.clipboard) { + // https://caniuse.com/mdn-api_clipboard_writetext + navigator.clipboard.writeText(code).then(() => { + button.querySelector('i').className = 'fa fa-check-circle fa-fw'; + }, () => { + button.querySelector('i').className = 'fa fa-times-circle fa-fw'; + }); + } else { + const 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); + ta.select(); + ta.setSelectionRange(0, code.length); + ta.readOnly = false; + const result = document.execCommand('copy'); + button.querySelector('i').className = result ? 'fa fa-check-circle fa-fw' : 'fa fa-times-circle fa-fw'; + ta.blur(); // For iOS + button.blur(); + document.body.removeChild(ta); + } + }); + element.addEventListener('mouseleave', () => { + setTimeout(() => { + button.querySelector('i').className = 'fa fa-copy fa-fw'; + }, 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); + const width = Number(element.width); + const height = Number(element.height); + if (width && height) { + box.style.paddingTop = (height / width * 100) + '%'; + } + } + }); + }, + + updateActiveNav: function() { + if (!Array.isArray(NexT.utils.sections)) return; + let index = NexT.utils.sections.findIndex(element => { + return element && element.getBoundingClientRect().top > 10; + }); + if (index === -1) { + index = NexT.utils.sections.length - 1; + } else if (index > 0) { + index--; + } + this.activateNavByIndex(index); + }, + + registerScrollPercent: function() { + const backToTop = document.querySelector('.back-to-top'); + const readingProgressBar = document.querySelector('.reading-progress-bar'); + // For init back to top in sidebar if page was scrolled after page refresh. + window.addEventListener('scroll', () => { + if (backToTop || readingProgressBar) { + const contentHeight = document.body.scrollHeight - window.innerHeight; + const scrollPercent = contentHeight > 0 ? Math.min(100 * window.scrollY / contentHeight, 100) : 0; + if (backToTop) { + backToTop.classList.toggle('back-to-top-on', Math.round(scrollPercent) >= 5); + backToTop.querySelector('span').innerText = Math.round(scrollPercent) + '%'; + } + if (readingProgressBar) { + readingProgressBar.style.setProperty('--progress', scrollPercent.toFixed(2) + '%'); + } + } + this.updateActiveNav(); + }, { passive: true }); + + 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(); + // Prevent selected tab to select again. + if (element.classList.contains('active')) return; + const nav = element.parentNode; + // Get the height of `tab-pane` which is activated before, and set it as the height of `tab-content` with extra margin / paddings. + const tabContent = nav.nextElementSibling; + tabContent.style.overflow = 'hidden'; + tabContent.style.transition = 'height 1s'; + // Comment system selection tab does not contain .active class. + const activeTab = tabContent.querySelector('.active') || tabContent.firstElementChild; + // Hight might be `auto`. + const prevHeight = parseInt(window.getComputedStyle(activeTab).height.replace('px', ''), 10) || 0; + const paddingTop = parseInt(window.getComputedStyle(activeTab).paddingTop.replace('px', ''), 10); + const marginBottom = parseInt(window.getComputedStyle(activeTab.firstElementChild).marginBottom.replace('px', ''), 10); + tabContent.style.height = prevHeight + paddingTop + marginBottom + 'px'; + // Add & Remove active class on `nav-tabs` & `tab-content`. + [...nav.children].forEach(target => { + target.classList.toggle('active', target === element); + }); + // https://stackoverflow.com/questions/20306204/using-queryselector-with-ids-that-are-numbers + const tActive = document.getElementById(element.querySelector('a').getAttribute('href').replace('#', '')); + [...tActive.parentNode.children].forEach(target => { + target.classList.toggle('active', target === tActive); + }); + // Trigger event + tActive.dispatchEvent(new Event('tabs:click', { + bubbles: true + })); + // Get the height of `tab-pane` which is activated now. + const hasScrollBar = document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight); + const currHeight = parseInt(window.getComputedStyle(tabContent.querySelector('.active')).height.replace('px', ''), 10); + // Reset the height of `tab-content` and see the animation. + tabContent.style.height = currHeight + paddingTop + marginBottom + 'px'; + // Change the height of `tab-content` may cause scrollbar show / disappear, which may result in the change of the `tab-pane`'s height + setTimeout(() => { + if ((document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight)) !== hasScrollBar) { + tabContent.style.transition = 'height 0.3s linear'; + // After the animation, we need reset the height of `tab-content` again. + const currHeightAfterScrollBarChange = parseInt(window.getComputedStyle(tabContent.querySelector('.active')).height.replace('px', ''), 10); + tabContent.style.height = currHeightAfterScrollBarChange + paddingTop + marginBottom + 'px'; + } + // Remove all the inline styles, and let the height be adaptive again. + setTimeout(() => { + tabContent.style.transition = ''; + tabContent.style.height = ''; + }, 250); + }, 1000); + if (!CONFIG.stickytabs) return; + const offset = nav.parentNode.getBoundingClientRect().top + window.scrollY + 10; + window.anime({ + targets : document.scrollingElement, + duration : 500, + easing : 'linear', + scrollTop: offset + }); + }); + }); + + window.dispatchEvent(new Event('tabs:register')); + }, + + registerCanIUseTag: function() { + // Get responsive height passed from iframe. + window.addEventListener('message', ({ data }) => { + if (typeof data === 'string' && data.includes('ciu_embed')) { + const featureID = data.split(':')[1]; + const height = data.split(':')[2]; + document.querySelector(`iframe[data-feature=${featureID}]`).style.height = parseInt(height, 10) + 5 + 'px'; + } + }, false); + }, + + registerActiveMenuItem: function() { + document.querySelectorAll('.menu-item a[href]').forEach(target => { + const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', ''); + const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname); + target.classList.toggle('menu-item-active', target.hostname === location.hostname && (isSamePath || isSubPath)); + }); + }, + + registerLangSelect: function() { + const selects = document.querySelectorAll('.lang-select'); + selects.forEach(sel => { + sel.value = CONFIG.page.lang; + sel.addEventListener('change', () => { + const target = sel.options[sel.selectedIndex]; + document.querySelectorAll('.lang-select-label span').forEach(span => { + span.innerText = target.text; + }); + // Disable Pjax to force refresh translation of menu item + window.location.href = target.dataset.href; + }); + }); + }, + + registerSidebarTOC: function() { + this.sections = [...document.querySelectorAll('.post-toc:not(.placeholder-toc) li a.nav-link')].map(element => { + const target = document.getElementById(decodeURI(element.getAttribute('href')).replace('#', '')); + // TOC item animation navigate. + element.addEventListener('click', event => { + event.preventDefault(); + const offset = target.getBoundingClientRect().top + window.scrollY; + window.anime({ + targets : document.scrollingElement, + duration : 500, + easing : 'linear', + scrollTop: offset, + complete : () => { + history.pushState(null, document.title, element.href); + } + }); + }); + return target; + }); + this.updateActiveNav(); + }, + + registerPostReward: function() { + const button = document.querySelector('.reward-container button'); + if (!button) return; + button.addEventListener('click', () => { + document.querySelector('.post-reward').classList.toggle('active'); + }); + }, + + activateNavByIndex: function(index) { + const nav = document.querySelector('.post-toc:not(.placeholder-toc) .nav'); + if (!nav) return; + + const navItemList = nav.querySelectorAll('.nav-item'); + const target = navItemList[index]; + if (!target || target.classList.contains('active-current')) return; + + const singleHeight = navItemList[navItemList.length - 1].offsetHeight; + + nav.querySelectorAll('.active').forEach(navItem => { + navItem.classList.remove('active', 'active-current'); + }); + target.classList.add('active', 'active-current'); + + let activateEle = target.querySelector('.nav-child') || target.parentElement; + let navChildHeight = 0; + + while (nav.contains(activateEle)) { + if (activateEle.classList.contains('nav-item')) { + activateEle.classList.add('active'); + } else { // .nav-child or .nav + // scrollHeight isn't reliable for transitioning child items. + // The last nav-item in a list has a margin-bottom of 5px. + navChildHeight += (singleHeight * activateEle.childElementCount) + 5; + activateEle.style.setProperty('--height', `${navChildHeight}px`); + } + activateEle = activateEle.parentElement; + } + + // Scrolling to center active TOC element if TOC content is taller then viewport. + const tocElement = document.querySelector(CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini' ? '.sidebar-panel-container' : '.sidebar'); + if (!document.querySelector('.sidebar-toc-active')) return; + window.anime({ + targets : tocElement, + duration : 200, + easing : 'linear', + scrollTop: tocElement.scrollTop - (tocElement.offsetHeight / 2) + target.getBoundingClientRect().top - tocElement.getBoundingClientRect().top + }); + }, + + updateSidebarPosition: function() { + if (window.innerWidth < 1200 || CONFIG.scheme === 'Pisces' || CONFIG.scheme === 'Gemini') return; + // Expand sidebar on post detail page by default, when post has a toc. + const hasTOC = document.querySelector('.post-toc:not(.placeholder-toc)'); + let 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')); + } + }, + + activateSidebarPanel: function(index) { + const sidebar = document.querySelector('.sidebar-inner'); + const activeClassNames = ['sidebar-toc-active', 'sidebar-overview-active']; + if (sidebar.classList.contains(activeClassNames[index])) return; + + const panelContainer = sidebar.querySelector('.sidebar-panel-container'); + const tocPanel = panelContainer.firstElementChild; + const overviewPanel = panelContainer.lastElementChild; + + let postTOCHeight = tocPanel.scrollHeight; + // For TOC activation, try to use the animated TOC height + if (index === 0) { + const nav = tocPanel.querySelector('.nav'); + if (nav) { + postTOCHeight = parseInt(nav.style.getPropertyValue('--height'), 10); + } + } + const panelHeights = [ + postTOCHeight, + overviewPanel.scrollHeight + ]; + panelContainer.style.setProperty('--inactive-panel-height', `${panelHeights[1 - index]}px`); + panelContainer.style.setProperty('--active-panel-height', `${panelHeights[index]}px`); + + sidebar.classList.replace(activeClassNames[1 - index], activeClassNames[index]); + }, + + getScript: function(src, options = {}, legacyCondition) { + if (typeof options === 'function') { + return this.getScript(src, { + condition: legacyCondition + }).then(options); + } + const { + condition = false, + attributes: { + id = '', + async = false, + defer = false, + crossOrigin = '', + dataset = {}, + ...otherAttributes + } = {}, + parentNode = null + } = options; + return new Promise((resolve, reject) => { + if (condition) { + resolve(); + } else { + const script = document.createElement('script'); + + if (id) script.id = id; + if (crossOrigin) script.crossOrigin = crossOrigin; + script.async = async; + script.defer = defer; + Object.assign(script.dataset, dataset); + Object.entries(otherAttributes).forEach(([name, value]) => { + script.setAttribute(name, String(value)); + }); + + script.onload = resolve; + script.onerror = reject; + + if (typeof src === 'object') { + const { url, integrity } = src; + script.src = url; + if (integrity) { + script.integrity = integrity; + script.crossOrigin = 'anonymous'; + } + } else { + script.src = src; + } + (parentNode || document.head).appendChild(script); + } + }); + }, + + loadComments: function(selector, legacyCallback) { + if (legacyCallback) { + return this.loadComments(selector).then(legacyCallback); + } + return new Promise(resolve => { + const element = document.querySelector(selector); + if (!CONFIG.comments.lazyload || !element) { + resolve(); + return; + } + const intersectionObserver = new IntersectionObserver((entries, observer) => { + const entry = entries[0]; + if (!entry.isIntersecting) return; + + resolve(); + observer.disconnect(); + }); + intersectionObserver.observe(element); + }); + } +}; diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..3e661c1 --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

yield的作用

首先yield就是return,不要想多了,所以搭配yield from func()能够递归,就是这么简单;

+

只是说普通的函数返回的是一个value或者obj,而yield返回的是一个生成器对象。

+

生成器的定义&同迭代器的区别

在python中实现了__iter__和__next__方法,可以迭代操作的对象就叫迭代器;
构建迭代器的时候,并不一次性加载所有元素到内存,只有调用next方法的时候才会返回需要的该元素;

+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+ + +

install

connect

setting

usage

docker container 互联

背景: 我现在启动了n个container,他们之前需要通过端口互相访问,但是按照docker的默认网络模式,是会自己拉一个小局域网的,服务部署好了也访问不进去。

+

尝试1: 更改docker run --network=net模式,直接共享宿主机的网络,然后开心的发现 -p 暴露的端口没了,服务一样的无法被访问了。

+

尝试2: 改用docker run --link=container1互相关联起来,然后可以ping了,但是发现通过端口访问container1的服务还是不行,后来发现互联和端口能访问是两个东西。。。然后灵光一闪,把container1别名设置成localhost然后就能访问了。。。

+

正确做法: 使用docker-compose进行编排啊,想暴露什么端口暴露什么端口,哦豁,这下要提前看docker的东西了。

+ + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+ + +

install

connect

局域网ssh延迟非常严重的问题

    +
  1. 首先考虑ping该ip,如果出现丢包严重延迟正常就重启路由器,不能解决再排查;
  2. +
  3. 上诉不能解决或延迟≥100ms,考虑被ARP攻击、有人蹭网or下片、操作系统层面or物理设备问题等;
  4. +
+

setting

在ssh 终端找不到环境变量的问题

问题描述:按照教程apt-get 之后手动在添加到profile文件之后依旧Command ‘node’ not found

+
    +
  1. 注意自己当前的登录账户,我之前不是root,~/ 出来的肯定就只能自己享受了

    +
  2. +
  3. 具体那个配置文件不要改错了, 教材上面都是默认root账户来教你,我当时登录上去根本没有这个文件(因为以前没用root搞过

    +
  4. +
  5. 教程上面的版本可能不一样,直接复制添加到文件里面可能因为版本不同所以文件名不同,导致添加失败

    +
  6. +
+

各个配置文件区别如下:

+
+

/.bashrc和 ~/.bash_profile, \/.profile 用于各个用户,这里的~符号就是各当前用户的$HOME

+
+
+

~/.bash_profile 和 ~/.profile 只在登陆时读取一次。

+
+
+

~/.bashrc 每次都读取

+
+

usage

ssh ubuntu 无法使用root账户登陆问题

改ssh本身的配置文件
sshd服务的配置文件默认在/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。

+

配置文件的内容可以分为以下三个部分:

+
    +
  1. 常见SSH服务器监听的选项如下:
  2. +
+

Port 22 //监听的端口为22

+

Protocol 2 //使用SSH V2协议

+

ListenAdderss 0.0.0.0 //监听的地址为所有地址

+

UseDNS no //禁止DNS反向解析

+
    +
  1. 常见用户登录控制选项如下:
  2. +
+

PermitRootLogin no //禁止root用户登录

+

PermitEmptyPasswords no //禁止空密码用户登录

+

LoginGraceTime 2m //登录验证时间为2分钟

+

MaxAuthTries 6 //最大重试次数为6

+

AllowUsers user //只允许user用户登录,与DenyUsers选项相反

+
    +
  1. 常见登录验证方式如下:
  2. +
+

PasswordAuthentication yes //启用密码验证

+

PubkeyAuthentication yes //启用秘钥验证

+

AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件

+ + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+

0. Blog

    +
  • leetcode solution
  • +
  • blogs
  • +
  • flask source code
  • +
  • selenium source code
  • +
  • requests source code
  • +
  • python source code
  • +
  • python version diff
  • +
+ +
+ + 阅读全文 » + +
+ + + +
+ + + + + +
+
+ +
+
+
+ + + + + + + +
+ + + +
+ + + + + + + +
+

+ +

+ + +
+ + + + +
+ + +

install

connect

setting

usage

MySQL clinet局域网访问 mysqld

    +
  1. (使用docker启动)这个没啥说的,直接docker run 一把过,唯一注意的就是如果宿主机上在已经启动过mysqld了,那么docker run -p的端口号就要换一个了;ps: 密码是通过docker run -e MYSQL_ROOT_PASSWORD=’pwd’启动的时候传环境变量设置的;
  2. +
  3. (我就是要练习自己搭建,咋说):按照教程里面进入>mysql,也创建用户update user set user.Host=’%’ where user.User=’root’; 本机连接是没有问题的,但是另一台机器client局域网登录的时候就报61 “Connection refused”;
  4. +
  5. 之前在公司里面都是叫网管然后秒解决,现在要自力更生了。
  6. +
  7. 首先再另一台机器client里面乱输入一个ip地址,报错为”Unknown MySQL server host”,不同于之前的被拒绝连接,说明当前host是ok,使用netstat -apn | grep 3306,看到tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1016/mysqld 绑定到127.0.0.1,也就是回环了;
  8. +
  9. 目前既然知道是由于网络没有走通,那肯定就是配置的问题了,我找到mysql的配置文件,其中关于当前mysql用的是哪个配置文件里面有很多种说法,我不愿意深究,改成功的是/etc/mysql/mysql.conf.d/mysqld.cnf里边的bind-address;
  10. +
  11. 之后连接提示为1698 - Access denied for user ‘root‘@’IP’,说明现在的问题是密码设置的问题,大概要做的就是在启动的时候或者配置文件里面弄好连接密码,到时候client连接对口供就ok,我这边用在局域网又只玩就直接空密码了,反正以后也不会去没有网管的公司。 ps: 实际的默认密码在配置文件 /etc/mysql/debian.cnf 里面。
  12. +
+ + +
+ + + + + +
+
+ +
+
+
+ + + + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/placeholder b/placeholder deleted file mode 100644 index e69de29..0000000 diff --git a/tags/Hard/index.html b/tags/Hard/index.html new file mode 100644 index 0000000..f8817de --- /dev/null +++ b/tags/Hard/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: Hard | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Hard + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Health/index.html b/tags/Health/index.html new file mode 100644 index 0000000..dabbace --- /dev/null +++ b/tags/Health/index.html @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: Health | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Health + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/OJ/index.html b/tags/OJ/index.html new file mode 100644 index 0000000..f7b8fe7 --- /dev/null +++ b/tags/OJ/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: OJ | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

OJ + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Python-HTTP/index.html b/tags/Python-HTTP/index.html new file mode 100644 index 0000000..ac54e27 --- /dev/null +++ b/tags/Python-HTTP/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: Python, HTTP | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Python, HTTP + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/Sum-up/index.html b/tags/Sum-up/index.html new file mode 100644 index 0000000..ab2a7f2 --- /dev/null +++ b/tags/Sum-up/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: Sum-up | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

Sum-up + 标签 +

+
+ + +
+ 2024 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/TodoList/index.html b/tags/TodoList/index.html new file mode 100644 index 0000000..028a9e2 --- /dev/null +++ b/tags/TodoList/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: TodoList | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

TodoList + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/computer/index.html b/tags/computer/index.html new file mode 100644 index 0000000..cb3d51c --- /dev/null +++ b/tags/computer/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: computer | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

computer + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..6c65be3 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +tags | 业精于勤荒于嬉 + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+ +

tags +

+ + + +
+ + + +
+
+ 目前共计 11 个标签 +
+ +
+ +
+ + + +
+ + + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/linux/index.html b/tags/linux/index.html new file mode 100644 index 0000000..f1b9a5c --- /dev/null +++ b/tags/linux/index.html @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: linux | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

linux + 标签 +

+
+ + +
+ 2022 +
+ + + + + + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/python/index.html b/tags/python/index.html new file mode 100644 index 0000000..0e8ee2f --- /dev/null +++ b/tags/python/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: python | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

python + 标签 +

+
+ + +
+ 2022 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/setup-go/index.html b/tags/setup-go/index.html new file mode 100644 index 0000000..3e8a38c --- /dev/null +++ b/tags/setup-go/index.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: setup, go | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

setup, go + 标签 +

+
+ + +
+ 2023 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/setup/index.html b/tags/setup/index.html new file mode 100644 index 0000000..4c7f9bd --- /dev/null +++ b/tags/setup/index.html @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +标签: setup | 业精于勤荒于嬉 + + + + + + + + + + + + + +
+ +
+
+
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ +
+ + + + + +
+
+
+

setup + 标签 +

+
+ + +
+ 2024 +
+ + + + + + + + +
+ 2023 +
+ + + +
+
+ + + + +
+
+ +
+ +
+ + +
+ + 0% +
+ + + + + + + + + + + + + + + + + + + + + +

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 literal 0 HcmV?d00001 diff --git a/images/avatar.gif b/images/avatar.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b5d744b17ae541e331e9296640f0418d4e7c821 GIT binary patch literal 1785 zcmc(eiCfYK1Au>kC}AoSube4(tj%1XGs-IqwL{J4`&#nMW_^ZNl2cuo5V((w@KF|BSr-Dy?Ci?Qibx<>SXfwIUgogbVv$IpPzd>aHjAZHDkmh84Xt*5 zetu+ln8)SL&&~0%H{C|LeZF5GCnaWl}%00$Q845^9#jbGjmg0YYZq% z1HxF_nwpz|7kNflF9N9Q5iJvD0w&0S9`em0*f}BgKh?c=3?YfFSYWEn(AG8D&f9}T zF|^Ozg(s2g21~=--BqP2;U+HbKfJ-6t^Mpd+Vd(rH9aPG>VjZaYzrEFkzM1W4W*?PEbt7_?0ObX=R3 zfm*vF0T2e?IaX0s7omGCFNR2kL@?w2C0yDOh`J7v?|JOT+#U{?U0_{uqpk}`=r+VP zC12fo8O3{HxoZwDCgwbOZNi&VzKT}`9?t!=AVtC=y%<;l+psDMv*su+IEO5Q?TgN0 z=&H7$Gf?L=qqi5`@bimQ^6tFqKOeh&ck{=aiDvo7nlqFv&4wkwGeO}maQB{~k%?ck zE7Cdok^c8R9AM5IP1JJ)~Cz5Sv{>KNvX5%lB* z9%4%%UT_Wehfmg@gc%I&MaBNNZg03yUt|q!t%QXZJ9njhaoqbXT&%>qob*i$7vJ9{ z<5xiO5wWzi1105!#^PQCsto8sM4BepmIPkI5zoZ?*-1r_m8zst+M_T+_C9c`BdGyZ z()dMh4bJ_{K1iXtN>KzH?;xb$$ACsu8o5!>Fp}gw-jJ7^zUL{9PKe8II{SSj5atkhyp)&z8{9L0;5~dN8IV%e^8!Cm#@R*x{T5QR+y!yez%{*GTHhd}S&e?yi8`c_py&b`IA#{jM67?2A- z96X6KMj50BNJHBI?9Zj78OXyk^6Q>ufCnUfBpmb@X3fgX_M_S)8KAM>*1*t+*UyZc z^4w;`mO~qzDlqH`0`+#Ffh1i?m ztGf;Harv-B6uCo0TB=_qclsj^84AC_7^!(v;Oi5;Kl$z+X{K*fpE(N zWyVw!0PLHXpb*M(Bl@dIQsB%LhJP-?;tE={h{Y(QpYjdD9`hDbfEiJN) znh_Ry7j#5m>=)N|?3XDh_r1_zMIHc&wJ0=9`=ky7CuDT$ia(uo`t1DDrGgKeCI{e@ z{!P0)EBNAc7g6Tp|0X`9!<~%Y?miKrA{MDPqrRMh1+NgBt?oT@PRlxMyn2}v=_`HO z`{&U{yA!^h75UlWQ#)`T_pCemHpYGaJuhRu^ZY~){h#)L$)<4Zd(gT$0zX0)xk sj2>F=QOaOm@==$w^6D`S!9xiV>IXt*{ozi=Q1Vaehf=%aC;;&N3lE276aWAK literal 0 HcmV?d00001 diff --git a/images/avatar.png b/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..4445a5818dd8dc8ebcdff99920d91922d00f79e9 GIT binary patch literal 152103 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