neon_arch commited on
Commit
15fc415
·
0 Parent(s):

initial commit

Browse files
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ /target
CONTRIBUTING.org ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * Things to consider before contributing.
2
+
3
+ ** Knowledge Required
4
+ - Rust basics.
5
+ - Actix-web crate basics.
6
+ - Tokio crate and async/await.
7
+ - Reqwest crate basics.
8
+ - Serde and serde_json crate basics.
9
+ - fake_useragent crate basics.
10
+ - pyo3/hlua/rlua crates basics.
11
+
12
+ ** Guidelines
13
+
14
+ - Please be patient.
15
+
16
+ - Treat everyone with respect --- ("give respect and take respect").
17
+
18
+ - Document your code properly with rust coding conventions in mind.
19
+
20
+ - Provide a brief description of what changes you made in the pull request.
21
+
22
+ - Provide an apropriate header to pull request.
23
+
24
+ *NOTE:* The rolling branch is where all the contributions should go. In simple terms, it is the working branch for this project.
Cargo.lock ADDED
@@ -0,0 +1,3454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 3
4
+
5
+ [[package]]
6
+ name = "actix-codec"
7
+ version = "0.5.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe"
10
+ dependencies = [
11
+ "bitflags",
12
+ "bytes 1.4.0",
13
+ "futures-core",
14
+ "futures-sink",
15
+ "log",
16
+ "memchr",
17
+ "pin-project-lite",
18
+ "tokio 1.27.0",
19
+ "tokio-util",
20
+ ]
21
+
22
+ [[package]]
23
+ name = "actix-files"
24
+ version = "0.6.2"
25
+ source = "registry+https://github.com/rust-lang/crates.io-index"
26
+ checksum = "d832782fac6ca7369a70c9ee9a20554623c5e51c76e190ad151780ebea1cf689"
27
+ dependencies = [
28
+ "actix-http",
29
+ "actix-service",
30
+ "actix-utils",
31
+ "actix-web",
32
+ "askama_escape",
33
+ "bitflags",
34
+ "bytes 1.4.0",
35
+ "derive_more",
36
+ "futures-core",
37
+ "http-range",
38
+ "log",
39
+ "mime",
40
+ "mime_guess",
41
+ "percent-encoding 2.2.0",
42
+ "pin-project-lite",
43
+ ]
44
+
45
+ [[package]]
46
+ name = "actix-http"
47
+ version = "3.3.1"
48
+ source = "registry+https://github.com/rust-lang/crates.io-index"
49
+ checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74"
50
+ dependencies = [
51
+ "actix-codec",
52
+ "actix-rt",
53
+ "actix-service",
54
+ "actix-utils",
55
+ "ahash 0.8.3",
56
+ "base64 0.21.0",
57
+ "bitflags",
58
+ "brotli",
59
+ "bytes 1.4.0",
60
+ "bytestring",
61
+ "derive_more",
62
+ "encoding_rs",
63
+ "flate2",
64
+ "futures-core",
65
+ "h2 0.3.18",
66
+ "http 0.2.9",
67
+ "httparse",
68
+ "httpdate",
69
+ "itoa 1.0.6",
70
+ "language-tags",
71
+ "local-channel",
72
+ "mime",
73
+ "percent-encoding 2.2.0",
74
+ "pin-project-lite",
75
+ "rand 0.8.5",
76
+ "sha1",
77
+ "smallvec 1.10.0",
78
+ "tokio 1.27.0",
79
+ "tokio-util",
80
+ "tracing",
81
+ "zstd",
82
+ ]
83
+
84
+ [[package]]
85
+ name = "actix-macros"
86
+ version = "0.2.3"
87
+ source = "registry+https://github.com/rust-lang/crates.io-index"
88
+ checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
89
+ dependencies = [
90
+ "quote 1.0.26",
91
+ "syn 1.0.109",
92
+ ]
93
+
94
+ [[package]]
95
+ name = "actix-router"
96
+ version = "0.5.1"
97
+ source = "registry+https://github.com/rust-lang/crates.io-index"
98
+ checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799"
99
+ dependencies = [
100
+ "bytestring",
101
+ "http 0.2.9",
102
+ "regex",
103
+ "serde",
104
+ "tracing",
105
+ ]
106
+
107
+ [[package]]
108
+ name = "actix-rt"
109
+ version = "2.8.0"
110
+ source = "registry+https://github.com/rust-lang/crates.io-index"
111
+ checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e"
112
+ dependencies = [
113
+ "futures-core",
114
+ "tokio 1.27.0",
115
+ ]
116
+
117
+ [[package]]
118
+ name = "actix-server"
119
+ version = "2.2.0"
120
+ source = "registry+https://github.com/rust-lang/crates.io-index"
121
+ checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327"
122
+ dependencies = [
123
+ "actix-rt",
124
+ "actix-service",
125
+ "actix-utils",
126
+ "futures-core",
127
+ "futures-util",
128
+ "mio 0.8.6",
129
+ "num_cpus",
130
+ "socket2",
131
+ "tokio 1.27.0",
132
+ "tracing",
133
+ ]
134
+
135
+ [[package]]
136
+ name = "actix-service"
137
+ version = "2.0.2"
138
+ source = "registry+https://github.com/rust-lang/crates.io-index"
139
+ checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
140
+ dependencies = [
141
+ "futures-core",
142
+ "paste",
143
+ "pin-project-lite",
144
+ ]
145
+
146
+ [[package]]
147
+ name = "actix-utils"
148
+ version = "3.0.1"
149
+ source = "registry+https://github.com/rust-lang/crates.io-index"
150
+ checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
151
+ dependencies = [
152
+ "local-waker",
153
+ "pin-project-lite",
154
+ ]
155
+
156
+ [[package]]
157
+ name = "actix-web"
158
+ version = "4.3.1"
159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
160
+ checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96"
161
+ dependencies = [
162
+ "actix-codec",
163
+ "actix-http",
164
+ "actix-macros",
165
+ "actix-router",
166
+ "actix-rt",
167
+ "actix-server",
168
+ "actix-service",
169
+ "actix-utils",
170
+ "actix-web-codegen",
171
+ "ahash 0.7.6",
172
+ "bytes 1.4.0",
173
+ "bytestring",
174
+ "cfg-if 1.0.0",
175
+ "cookie 0.16.2",
176
+ "derive_more",
177
+ "encoding_rs",
178
+ "futures-core",
179
+ "futures-util",
180
+ "http 0.2.9",
181
+ "itoa 1.0.6",
182
+ "language-tags",
183
+ "log",
184
+ "mime",
185
+ "once_cell",
186
+ "pin-project-lite",
187
+ "regex",
188
+ "serde",
189
+ "serde_json",
190
+ "serde_urlencoded 0.7.1",
191
+ "smallvec 1.10.0",
192
+ "socket2",
193
+ "time 0.3.20",
194
+ "url 2.3.1",
195
+ ]
196
+
197
+ [[package]]
198
+ name = "actix-web-codegen"
199
+ version = "4.2.0"
200
+ source = "registry+https://github.com/rust-lang/crates.io-index"
201
+ checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9"
202
+ dependencies = [
203
+ "actix-router",
204
+ "proc-macro2 1.0.56",
205
+ "quote 1.0.26",
206
+ "syn 1.0.109",
207
+ ]
208
+
209
+ [[package]]
210
+ name = "addr2line"
211
+ version = "0.19.0"
212
+ source = "registry+https://github.com/rust-lang/crates.io-index"
213
+ checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
214
+ dependencies = [
215
+ "gimli",
216
+ ]
217
+
218
+ [[package]]
219
+ name = "adler"
220
+ version = "1.0.2"
221
+ source = "registry+https://github.com/rust-lang/crates.io-index"
222
+ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
223
+
224
+ [[package]]
225
+ name = "ahash"
226
+ version = "0.7.6"
227
+ source = "registry+https://github.com/rust-lang/crates.io-index"
228
+ checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
229
+ dependencies = [
230
+ "getrandom 0.2.9",
231
+ "once_cell",
232
+ "version_check",
233
+ ]
234
+
235
+ [[package]]
236
+ name = "ahash"
237
+ version = "0.8.3"
238
+ source = "registry+https://github.com/rust-lang/crates.io-index"
239
+ checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
240
+ dependencies = [
241
+ "cfg-if 1.0.0",
242
+ "getrandom 0.2.9",
243
+ "once_cell",
244
+ "version_check",
245
+ ]
246
+
247
+ [[package]]
248
+ name = "aho-corasick"
249
+ version = "1.0.1"
250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
251
+ checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
252
+ dependencies = [
253
+ "memchr",
254
+ ]
255
+
256
+ [[package]]
257
+ name = "alloc-no-stdlib"
258
+ version = "2.0.4"
259
+ source = "registry+https://github.com/rust-lang/crates.io-index"
260
+ checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
261
+
262
+ [[package]]
263
+ name = "alloc-stdlib"
264
+ version = "0.2.2"
265
+ source = "registry+https://github.com/rust-lang/crates.io-index"
266
+ checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
267
+ dependencies = [
268
+ "alloc-no-stdlib",
269
+ ]
270
+
271
+ [[package]]
272
+ name = "askama_escape"
273
+ version = "0.10.3"
274
+ source = "registry+https://github.com/rust-lang/crates.io-index"
275
+ checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
276
+
277
+ [[package]]
278
+ name = "autocfg"
279
+ version = "0.1.8"
280
+ source = "registry+https://github.com/rust-lang/crates.io-index"
281
+ checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
282
+ dependencies = [
283
+ "autocfg 1.1.0",
284
+ ]
285
+
286
+ [[package]]
287
+ name = "autocfg"
288
+ version = "1.1.0"
289
+ source = "registry+https://github.com/rust-lang/crates.io-index"
290
+ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
291
+
292
+ [[package]]
293
+ name = "backtrace"
294
+ version = "0.3.67"
295
+ source = "registry+https://github.com/rust-lang/crates.io-index"
296
+ checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
297
+ dependencies = [
298
+ "addr2line",
299
+ "cc",
300
+ "cfg-if 1.0.0",
301
+ "libc",
302
+ "miniz_oxide",
303
+ "object",
304
+ "rustc-demangle",
305
+ ]
306
+
307
+ [[package]]
308
+ name = "base64"
309
+ version = "0.10.1"
310
+ source = "registry+https://github.com/rust-lang/crates.io-index"
311
+ checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
312
+ dependencies = [
313
+ "byteorder",
314
+ ]
315
+
316
+ [[package]]
317
+ name = "base64"
318
+ version = "0.21.0"
319
+ source = "registry+https://github.com/rust-lang/crates.io-index"
320
+ checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
321
+
322
+ [[package]]
323
+ name = "bit-set"
324
+ version = "0.5.3"
325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
326
+ checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
327
+ dependencies = [
328
+ "bit-vec",
329
+ ]
330
+
331
+ [[package]]
332
+ name = "bit-vec"
333
+ version = "0.6.3"
334
+ source = "registry+https://github.com/rust-lang/crates.io-index"
335
+ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
336
+
337
+ [[package]]
338
+ name = "bitflags"
339
+ version = "1.3.2"
340
+ source = "registry+https://github.com/rust-lang/crates.io-index"
341
+ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
342
+
343
+ [[package]]
344
+ name = "block-buffer"
345
+ version = "0.10.4"
346
+ source = "registry+https://github.com/rust-lang/crates.io-index"
347
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
348
+ dependencies = [
349
+ "generic-array",
350
+ ]
351
+
352
+ [[package]]
353
+ name = "brotli"
354
+ version = "3.3.4"
355
+ source = "registry+https://github.com/rust-lang/crates.io-index"
356
+ checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
357
+ dependencies = [
358
+ "alloc-no-stdlib",
359
+ "alloc-stdlib",
360
+ "brotli-decompressor",
361
+ ]
362
+
363
+ [[package]]
364
+ name = "brotli-decompressor"
365
+ version = "2.3.4"
366
+ source = "registry+https://github.com/rust-lang/crates.io-index"
367
+ checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
368
+ dependencies = [
369
+ "alloc-no-stdlib",
370
+ "alloc-stdlib",
371
+ ]
372
+
373
+ [[package]]
374
+ name = "bumpalo"
375
+ version = "3.12.1"
376
+ source = "registry+https://github.com/rust-lang/crates.io-index"
377
+ checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
378
+
379
+ [[package]]
380
+ name = "byteorder"
381
+ version = "1.4.3"
382
+ source = "registry+https://github.com/rust-lang/crates.io-index"
383
+ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
384
+
385
+ [[package]]
386
+ name = "bytes"
387
+ version = "0.4.12"
388
+ source = "registry+https://github.com/rust-lang/crates.io-index"
389
+ checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
390
+ dependencies = [
391
+ "byteorder",
392
+ "either",
393
+ "iovec",
394
+ ]
395
+
396
+ [[package]]
397
+ name = "bytes"
398
+ version = "1.4.0"
399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
400
+ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
401
+
402
+ [[package]]
403
+ name = "bytestring"
404
+ version = "1.3.0"
405
+ source = "registry+https://github.com/rust-lang/crates.io-index"
406
+ checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae"
407
+ dependencies = [
408
+ "bytes 1.4.0",
409
+ ]
410
+
411
+ [[package]]
412
+ name = "cc"
413
+ version = "1.0.79"
414
+ source = "registry+https://github.com/rust-lang/crates.io-index"
415
+ checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
416
+ dependencies = [
417
+ "jobserver",
418
+ ]
419
+
420
+ [[package]]
421
+ name = "cfg-if"
422
+ version = "0.1.10"
423
+ source = "registry+https://github.com/rust-lang/crates.io-index"
424
+ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
425
+
426
+ [[package]]
427
+ name = "cfg-if"
428
+ version = "1.0.0"
429
+ source = "registry+https://github.com/rust-lang/crates.io-index"
430
+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
431
+
432
+ [[package]]
433
+ name = "cloudabi"
434
+ version = "0.0.3"
435
+ source = "registry+https://github.com/rust-lang/crates.io-index"
436
+ checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
437
+ dependencies = [
438
+ "bitflags",
439
+ ]
440
+
441
+ [[package]]
442
+ name = "convert_case"
443
+ version = "0.4.0"
444
+ source = "registry+https://github.com/rust-lang/crates.io-index"
445
+ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
446
+
447
+ [[package]]
448
+ name = "cookie"
449
+ version = "0.12.0"
450
+ source = "registry+https://github.com/rust-lang/crates.io-index"
451
+ checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
452
+ dependencies = [
453
+ "time 0.1.45",
454
+ "url 1.7.2",
455
+ ]
456
+
457
+ [[package]]
458
+ name = "cookie"
459
+ version = "0.16.2"
460
+ source = "registry+https://github.com/rust-lang/crates.io-index"
461
+ checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
462
+ dependencies = [
463
+ "percent-encoding 2.2.0",
464
+ "time 0.3.20",
465
+ "version_check",
466
+ ]
467
+
468
+ [[package]]
469
+ name = "cookie_store"
470
+ version = "0.7.0"
471
+ source = "registry+https://github.com/rust-lang/crates.io-index"
472
+ checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
473
+ dependencies = [
474
+ "cookie 0.12.0",
475
+ "failure",
476
+ "idna 0.1.5",
477
+ "log",
478
+ "publicsuffix",
479
+ "serde",
480
+ "serde_json",
481
+ "time 0.1.45",
482
+ "try_from",
483
+ "url 1.7.2",
484
+ ]
485
+
486
+ [[package]]
487
+ name = "core-foundation"
488
+ version = "0.9.3"
489
+ source = "registry+https://github.com/rust-lang/crates.io-index"
490
+ checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
491
+ dependencies = [
492
+ "core-foundation-sys",
493
+ "libc",
494
+ ]
495
+
496
+ [[package]]
497
+ name = "core-foundation-sys"
498
+ version = "0.8.4"
499
+ source = "registry+https://github.com/rust-lang/crates.io-index"
500
+ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
501
+
502
+ [[package]]
503
+ name = "cpufeatures"
504
+ version = "0.2.7"
505
+ source = "registry+https://github.com/rust-lang/crates.io-index"
506
+ checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
507
+ dependencies = [
508
+ "libc",
509
+ ]
510
+
511
+ [[package]]
512
+ name = "crc32fast"
513
+ version = "1.3.2"
514
+ source = "registry+https://github.com/rust-lang/crates.io-index"
515
+ checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
516
+ dependencies = [
517
+ "cfg-if 1.0.0",
518
+ ]
519
+
520
+ [[package]]
521
+ name = "crossbeam-deque"
522
+ version = "0.7.4"
523
+ source = "registry+https://github.com/rust-lang/crates.io-index"
524
+ checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
525
+ dependencies = [
526
+ "crossbeam-epoch",
527
+ "crossbeam-utils",
528
+ "maybe-uninit",
529
+ ]
530
+
531
+ [[package]]
532
+ name = "crossbeam-epoch"
533
+ version = "0.8.2"
534
+ source = "registry+https://github.com/rust-lang/crates.io-index"
535
+ checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
536
+ dependencies = [
537
+ "autocfg 1.1.0",
538
+ "cfg-if 0.1.10",
539
+ "crossbeam-utils",
540
+ "lazy_static",
541
+ "maybe-uninit",
542
+ "memoffset",
543
+ "scopeguard",
544
+ ]
545
+
546
+ [[package]]
547
+ name = "crossbeam-queue"
548
+ version = "0.2.3"
549
+ source = "registry+https://github.com/rust-lang/crates.io-index"
550
+ checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
551
+ dependencies = [
552
+ "cfg-if 0.1.10",
553
+ "crossbeam-utils",
554
+ "maybe-uninit",
555
+ ]
556
+
557
+ [[package]]
558
+ name = "crossbeam-utils"
559
+ version = "0.7.2"
560
+ source = "registry+https://github.com/rust-lang/crates.io-index"
561
+ checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
562
+ dependencies = [
563
+ "autocfg 1.1.0",
564
+ "cfg-if 0.1.10",
565
+ "lazy_static",
566
+ ]
567
+
568
+ [[package]]
569
+ name = "crypto-common"
570
+ version = "0.1.6"
571
+ source = "registry+https://github.com/rust-lang/crates.io-index"
572
+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
573
+ dependencies = [
574
+ "generic-array",
575
+ "typenum",
576
+ ]
577
+
578
+ [[package]]
579
+ name = "cssparser"
580
+ version = "0.29.6"
581
+ source = "registry+https://github.com/rust-lang/crates.io-index"
582
+ checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa"
583
+ dependencies = [
584
+ "cssparser-macros",
585
+ "dtoa-short",
586
+ "itoa 1.0.6",
587
+ "matches",
588
+ "phf 0.10.1",
589
+ "proc-macro2 1.0.56",
590
+ "quote 1.0.26",
591
+ "smallvec 1.10.0",
592
+ "syn 1.0.109",
593
+ ]
594
+
595
+ [[package]]
596
+ name = "cssparser-macros"
597
+ version = "0.6.0"
598
+ source = "registry+https://github.com/rust-lang/crates.io-index"
599
+ checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
600
+ dependencies = [
601
+ "quote 1.0.26",
602
+ "syn 1.0.109",
603
+ ]
604
+
605
+ [[package]]
606
+ name = "derive_more"
607
+ version = "0.99.17"
608
+ source = "registry+https://github.com/rust-lang/crates.io-index"
609
+ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
610
+ dependencies = [
611
+ "convert_case",
612
+ "proc-macro2 1.0.56",
613
+ "quote 1.0.26",
614
+ "rustc_version 0.4.0",
615
+ "syn 1.0.109",
616
+ ]
617
+
618
+ [[package]]
619
+ name = "digest"
620
+ version = "0.10.6"
621
+ source = "registry+https://github.com/rust-lang/crates.io-index"
622
+ checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
623
+ dependencies = [
624
+ "block-buffer",
625
+ "crypto-common",
626
+ ]
627
+
628
+ [[package]]
629
+ name = "dtoa"
630
+ version = "0.4.8"
631
+ source = "registry+https://github.com/rust-lang/crates.io-index"
632
+ checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
633
+
634
+ [[package]]
635
+ name = "dtoa-short"
636
+ version = "0.3.3"
637
+ source = "registry+https://github.com/rust-lang/crates.io-index"
638
+ checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
639
+ dependencies = [
640
+ "dtoa",
641
+ ]
642
+
643
+ [[package]]
644
+ name = "ego-tree"
645
+ version = "0.6.2"
646
+ source = "registry+https://github.com/rust-lang/crates.io-index"
647
+ checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591"
648
+
649
+ [[package]]
650
+ name = "either"
651
+ version = "1.8.1"
652
+ source = "registry+https://github.com/rust-lang/crates.io-index"
653
+ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
654
+
655
+ [[package]]
656
+ name = "encoding_rs"
657
+ version = "0.8.32"
658
+ source = "registry+https://github.com/rust-lang/crates.io-index"
659
+ checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
660
+ dependencies = [
661
+ "cfg-if 1.0.0",
662
+ ]
663
+
664
+ [[package]]
665
+ name = "errno"
666
+ version = "0.3.1"
667
+ source = "registry+https://github.com/rust-lang/crates.io-index"
668
+ checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
669
+ dependencies = [
670
+ "errno-dragonfly",
671
+ "libc",
672
+ "windows-sys 0.48.0",
673
+ ]
674
+
675
+ [[package]]
676
+ name = "errno-dragonfly"
677
+ version = "0.1.2"
678
+ source = "registry+https://github.com/rust-lang/crates.io-index"
679
+ checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
680
+ dependencies = [
681
+ "cc",
682
+ "libc",
683
+ ]
684
+
685
+ [[package]]
686
+ name = "failure"
687
+ version = "0.1.8"
688
+ source = "registry+https://github.com/rust-lang/crates.io-index"
689
+ checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
690
+ dependencies = [
691
+ "backtrace",
692
+ "failure_derive",
693
+ ]
694
+
695
+ [[package]]
696
+ name = "failure_derive"
697
+ version = "0.1.8"
698
+ source = "registry+https://github.com/rust-lang/crates.io-index"
699
+ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
700
+ dependencies = [
701
+ "proc-macro2 1.0.56",
702
+ "quote 1.0.26",
703
+ "syn 1.0.109",
704
+ "synstructure",
705
+ ]
706
+
707
+ [[package]]
708
+ name = "fake-useragent"
709
+ version = "0.1.3"
710
+ source = "registry+https://github.com/rust-lang/crates.io-index"
711
+ checksum = "c341c3fa520d3c0ffb7e6d8ae5a6f3a2086201afb0bbb7c3f475c62e400e27b9"
712
+ dependencies = [
713
+ "rand 0.6.5",
714
+ "reqwest 0.9.24",
715
+ "select",
716
+ ]
717
+
718
+ [[package]]
719
+ name = "fastrand"
720
+ version = "1.9.0"
721
+ source = "registry+https://github.com/rust-lang/crates.io-index"
722
+ checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
723
+ dependencies = [
724
+ "instant",
725
+ ]
726
+
727
+ [[package]]
728
+ name = "flate2"
729
+ version = "1.0.25"
730
+ source = "registry+https://github.com/rust-lang/crates.io-index"
731
+ checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
732
+ dependencies = [
733
+ "crc32fast",
734
+ "miniz_oxide",
735
+ ]
736
+
737
+ [[package]]
738
+ name = "fnv"
739
+ version = "1.0.7"
740
+ source = "registry+https://github.com/rust-lang/crates.io-index"
741
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
742
+
743
+ [[package]]
744
+ name = "foreign-types"
745
+ version = "0.3.2"
746
+ source = "registry+https://github.com/rust-lang/crates.io-index"
747
+ checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
748
+ dependencies = [
749
+ "foreign-types-shared",
750
+ ]
751
+
752
+ [[package]]
753
+ name = "foreign-types-shared"
754
+ version = "0.1.1"
755
+ source = "registry+https://github.com/rust-lang/crates.io-index"
756
+ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
757
+
758
+ [[package]]
759
+ name = "form_urlencoded"
760
+ version = "1.1.0"
761
+ source = "registry+https://github.com/rust-lang/crates.io-index"
762
+ checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
763
+ dependencies = [
764
+ "percent-encoding 2.2.0",
765
+ ]
766
+
767
+ [[package]]
768
+ name = "fuchsia-cprng"
769
+ version = "0.1.1"
770
+ source = "registry+https://github.com/rust-lang/crates.io-index"
771
+ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
772
+
773
+ [[package]]
774
+ name = "fuchsia-zircon"
775
+ version = "0.3.3"
776
+ source = "registry+https://github.com/rust-lang/crates.io-index"
777
+ checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
778
+ dependencies = [
779
+ "bitflags",
780
+ "fuchsia-zircon-sys",
781
+ ]
782
+
783
+ [[package]]
784
+ name = "fuchsia-zircon-sys"
785
+ version = "0.3.3"
786
+ source = "registry+https://github.com/rust-lang/crates.io-index"
787
+ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
788
+
789
+ [[package]]
790
+ name = "futf"
791
+ version = "0.1.5"
792
+ source = "registry+https://github.com/rust-lang/crates.io-index"
793
+ checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
794
+ dependencies = [
795
+ "mac",
796
+ "new_debug_unreachable",
797
+ ]
798
+
799
+ [[package]]
800
+ name = "futures"
801
+ version = "0.1.31"
802
+ source = "registry+https://github.com/rust-lang/crates.io-index"
803
+ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
804
+
805
+ [[package]]
806
+ name = "futures-channel"
807
+ version = "0.3.28"
808
+ source = "registry+https://github.com/rust-lang/crates.io-index"
809
+ checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
810
+ dependencies = [
811
+ "futures-core",
812
+ ]
813
+
814
+ [[package]]
815
+ name = "futures-core"
816
+ version = "0.3.28"
817
+ source = "registry+https://github.com/rust-lang/crates.io-index"
818
+ checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
819
+
820
+ [[package]]
821
+ name = "futures-cpupool"
822
+ version = "0.1.8"
823
+ source = "registry+https://github.com/rust-lang/crates.io-index"
824
+ checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
825
+ dependencies = [
826
+ "futures",
827
+ "num_cpus",
828
+ ]
829
+
830
+ [[package]]
831
+ name = "futures-sink"
832
+ version = "0.3.28"
833
+ source = "registry+https://github.com/rust-lang/crates.io-index"
834
+ checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
835
+
836
+ [[package]]
837
+ name = "futures-task"
838
+ version = "0.3.28"
839
+ source = "registry+https://github.com/rust-lang/crates.io-index"
840
+ checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
841
+
842
+ [[package]]
843
+ name = "futures-util"
844
+ version = "0.3.28"
845
+ source = "registry+https://github.com/rust-lang/crates.io-index"
846
+ checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
847
+ dependencies = [
848
+ "futures-core",
849
+ "futures-task",
850
+ "pin-project-lite",
851
+ "pin-utils",
852
+ ]
853
+
854
+ [[package]]
855
+ name = "fxhash"
856
+ version = "0.2.1"
857
+ source = "registry+https://github.com/rust-lang/crates.io-index"
858
+ checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
859
+ dependencies = [
860
+ "byteorder",
861
+ ]
862
+
863
+ [[package]]
864
+ name = "generic-array"
865
+ version = "0.14.7"
866
+ source = "registry+https://github.com/rust-lang/crates.io-index"
867
+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
868
+ dependencies = [
869
+ "typenum",
870
+ "version_check",
871
+ ]
872
+
873
+ [[package]]
874
+ name = "getopts"
875
+ version = "0.2.21"
876
+ source = "registry+https://github.com/rust-lang/crates.io-index"
877
+ checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
878
+ dependencies = [
879
+ "unicode-width",
880
+ ]
881
+
882
+ [[package]]
883
+ name = "getrandom"
884
+ version = "0.1.16"
885
+ source = "registry+https://github.com/rust-lang/crates.io-index"
886
+ checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
887
+ dependencies = [
888
+ "cfg-if 1.0.0",
889
+ "libc",
890
+ "wasi 0.9.0+wasi-snapshot-preview1",
891
+ ]
892
+
893
+ [[package]]
894
+ name = "getrandom"
895
+ version = "0.2.9"
896
+ source = "registry+https://github.com/rust-lang/crates.io-index"
897
+ checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
898
+ dependencies = [
899
+ "cfg-if 1.0.0",
900
+ "libc",
901
+ "wasi 0.11.0+wasi-snapshot-preview1",
902
+ ]
903
+
904
+ [[package]]
905
+ name = "gimli"
906
+ version = "0.27.2"
907
+ source = "registry+https://github.com/rust-lang/crates.io-index"
908
+ checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
909
+
910
+ [[package]]
911
+ name = "h2"
912
+ version = "0.1.26"
913
+ source = "registry+https://github.com/rust-lang/crates.io-index"
914
+ checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
915
+ dependencies = [
916
+ "byteorder",
917
+ "bytes 0.4.12",
918
+ "fnv",
919
+ "futures",
920
+ "http 0.1.21",
921
+ "indexmap",
922
+ "log",
923
+ "slab",
924
+ "string",
925
+ "tokio-io",
926
+ ]
927
+
928
+ [[package]]
929
+ name = "h2"
930
+ version = "0.3.18"
931
+ source = "registry+https://github.com/rust-lang/crates.io-index"
932
+ checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
933
+ dependencies = [
934
+ "bytes 1.4.0",
935
+ "fnv",
936
+ "futures-core",
937
+ "futures-sink",
938
+ "futures-util",
939
+ "http 0.2.9",
940
+ "indexmap",
941
+ "slab",
942
+ "tokio 1.27.0",
943
+ "tokio-util",
944
+ "tracing",
945
+ ]
946
+
947
+ [[package]]
948
+ name = "handlebars"
949
+ version = "4.3.6"
950
+ source = "registry+https://github.com/rust-lang/crates.io-index"
951
+ checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a"
952
+ dependencies = [
953
+ "log",
954
+ "pest",
955
+ "pest_derive",
956
+ "serde",
957
+ "serde_json",
958
+ "thiserror",
959
+ "walkdir",
960
+ ]
961
+
962
+ [[package]]
963
+ name = "hashbrown"
964
+ version = "0.12.3"
965
+ source = "registry+https://github.com/rust-lang/crates.io-index"
966
+ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
967
+
968
+ [[package]]
969
+ name = "hermit-abi"
970
+ version = "0.2.6"
971
+ source = "registry+https://github.com/rust-lang/crates.io-index"
972
+ checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
973
+ dependencies = [
974
+ "libc",
975
+ ]
976
+
977
+ [[package]]
978
+ name = "hermit-abi"
979
+ version = "0.3.1"
980
+ source = "registry+https://github.com/rust-lang/crates.io-index"
981
+ checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
982
+
983
+ [[package]]
984
+ name = "html5ever"
985
+ version = "0.23.0"
986
+ source = "registry+https://github.com/rust-lang/crates.io-index"
987
+ checksum = "5ce65ac8028cf5a287a7dbf6c4e0a6cf2dcf022ed5b167a81bae66ebf599a8b7"
988
+ dependencies = [
989
+ "log",
990
+ "mac",
991
+ "markup5ever 0.8.1",
992
+ "proc-macro2 0.4.30",
993
+ "quote 0.6.13",
994
+ "syn 0.15.44",
995
+ ]
996
+
997
+ [[package]]
998
+ name = "html5ever"
999
+ version = "0.26.0"
1000
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1001
+ checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
1002
+ dependencies = [
1003
+ "log",
1004
+ "mac",
1005
+ "markup5ever 0.11.0",
1006
+ "proc-macro2 1.0.56",
1007
+ "quote 1.0.26",
1008
+ "syn 1.0.109",
1009
+ ]
1010
+
1011
+ [[package]]
1012
+ name = "http"
1013
+ version = "0.1.21"
1014
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1015
+ checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
1016
+ dependencies = [
1017
+ "bytes 0.4.12",
1018
+ "fnv",
1019
+ "itoa 0.4.8",
1020
+ ]
1021
+
1022
+ [[package]]
1023
+ name = "http"
1024
+ version = "0.2.9"
1025
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1026
+ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
1027
+ dependencies = [
1028
+ "bytes 1.4.0",
1029
+ "fnv",
1030
+ "itoa 1.0.6",
1031
+ ]
1032
+
1033
+ [[package]]
1034
+ name = "http-body"
1035
+ version = "0.1.0"
1036
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1037
+ checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
1038
+ dependencies = [
1039
+ "bytes 0.4.12",
1040
+ "futures",
1041
+ "http 0.1.21",
1042
+ "tokio-buf",
1043
+ ]
1044
+
1045
+ [[package]]
1046
+ name = "http-body"
1047
+ version = "0.4.5"
1048
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1049
+ checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
1050
+ dependencies = [
1051
+ "bytes 1.4.0",
1052
+ "http 0.2.9",
1053
+ "pin-project-lite",
1054
+ ]
1055
+
1056
+ [[package]]
1057
+ name = "http-range"
1058
+ version = "0.1.5"
1059
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1060
+ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
1061
+
1062
+ [[package]]
1063
+ name = "httparse"
1064
+ version = "1.8.0"
1065
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1066
+ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
1067
+
1068
+ [[package]]
1069
+ name = "httpdate"
1070
+ version = "1.0.2"
1071
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1072
+ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
1073
+
1074
+ [[package]]
1075
+ name = "hyper"
1076
+ version = "0.12.36"
1077
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1078
+ checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52"
1079
+ dependencies = [
1080
+ "bytes 0.4.12",
1081
+ "futures",
1082
+ "futures-cpupool",
1083
+ "h2 0.1.26",
1084
+ "http 0.1.21",
1085
+ "http-body 0.1.0",
1086
+ "httparse",
1087
+ "iovec",
1088
+ "itoa 0.4.8",
1089
+ "log",
1090
+ "net2",
1091
+ "rustc_version 0.2.3",
1092
+ "time 0.1.45",
1093
+ "tokio 0.1.22",
1094
+ "tokio-buf",
1095
+ "tokio-executor",
1096
+ "tokio-io",
1097
+ "tokio-reactor",
1098
+ "tokio-tcp",
1099
+ "tokio-threadpool",
1100
+ "tokio-timer",
1101
+ "want 0.2.0",
1102
+ ]
1103
+
1104
+ [[package]]
1105
+ name = "hyper"
1106
+ version = "0.14.26"
1107
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1108
+ checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
1109
+ dependencies = [
1110
+ "bytes 1.4.0",
1111
+ "futures-channel",
1112
+ "futures-core",
1113
+ "futures-util",
1114
+ "h2 0.3.18",
1115
+ "http 0.2.9",
1116
+ "http-body 0.4.5",
1117
+ "httparse",
1118
+ "httpdate",
1119
+ "itoa 1.0.6",
1120
+ "pin-project-lite",
1121
+ "socket2",
1122
+ "tokio 1.27.0",
1123
+ "tower-service",
1124
+ "tracing",
1125
+ "want 0.3.0",
1126
+ ]
1127
+
1128
+ [[package]]
1129
+ name = "hyper-tls"
1130
+ version = "0.3.2"
1131
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1132
+ checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
1133
+ dependencies = [
1134
+ "bytes 0.4.12",
1135
+ "futures",
1136
+ "hyper 0.12.36",
1137
+ "native-tls",
1138
+ "tokio-io",
1139
+ ]
1140
+
1141
+ [[package]]
1142
+ name = "hyper-tls"
1143
+ version = "0.5.0"
1144
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1145
+ checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
1146
+ dependencies = [
1147
+ "bytes 1.4.0",
1148
+ "hyper 0.14.26",
1149
+ "native-tls",
1150
+ "tokio 1.27.0",
1151
+ "tokio-native-tls",
1152
+ ]
1153
+
1154
+ [[package]]
1155
+ name = "idna"
1156
+ version = "0.1.5"
1157
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1158
+ checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
1159
+ dependencies = [
1160
+ "matches",
1161
+ "unicode-bidi",
1162
+ "unicode-normalization",
1163
+ ]
1164
+
1165
+ [[package]]
1166
+ name = "idna"
1167
+ version = "0.2.3"
1168
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1169
+ checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
1170
+ dependencies = [
1171
+ "matches",
1172
+ "unicode-bidi",
1173
+ "unicode-normalization",
1174
+ ]
1175
+
1176
+ [[package]]
1177
+ name = "idna"
1178
+ version = "0.3.0"
1179
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1180
+ checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
1181
+ dependencies = [
1182
+ "unicode-bidi",
1183
+ "unicode-normalization",
1184
+ ]
1185
+
1186
+ [[package]]
1187
+ name = "indexmap"
1188
+ version = "1.9.3"
1189
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1190
+ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
1191
+ dependencies = [
1192
+ "autocfg 1.1.0",
1193
+ "hashbrown",
1194
+ ]
1195
+
1196
+ [[package]]
1197
+ name = "instant"
1198
+ version = "0.1.12"
1199
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1200
+ checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
1201
+ dependencies = [
1202
+ "cfg-if 1.0.0",
1203
+ ]
1204
+
1205
+ [[package]]
1206
+ name = "io-lifetimes"
1207
+ version = "1.0.10"
1208
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1209
+ checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
1210
+ dependencies = [
1211
+ "hermit-abi 0.3.1",
1212
+ "libc",
1213
+ "windows-sys 0.48.0",
1214
+ ]
1215
+
1216
+ [[package]]
1217
+ name = "iovec"
1218
+ version = "0.1.4"
1219
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1220
+ checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
1221
+ dependencies = [
1222
+ "libc",
1223
+ ]
1224
+
1225
+ [[package]]
1226
+ name = "ipnet"
1227
+ version = "2.7.2"
1228
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1229
+ checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
1230
+
1231
+ [[package]]
1232
+ name = "itoa"
1233
+ version = "0.4.8"
1234
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1235
+ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
1236
+
1237
+ [[package]]
1238
+ name = "itoa"
1239
+ version = "1.0.6"
1240
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1241
+ checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
1242
+
1243
+ [[package]]
1244
+ name = "jobserver"
1245
+ version = "0.1.26"
1246
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1247
+ checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
1248
+ dependencies = [
1249
+ "libc",
1250
+ ]
1251
+
1252
+ [[package]]
1253
+ name = "js-sys"
1254
+ version = "0.3.61"
1255
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1256
+ checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
1257
+ dependencies = [
1258
+ "wasm-bindgen",
1259
+ ]
1260
+
1261
+ [[package]]
1262
+ name = "kernel32-sys"
1263
+ version = "0.2.2"
1264
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1265
+ checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
1266
+ dependencies = [
1267
+ "winapi 0.2.8",
1268
+ "winapi-build",
1269
+ ]
1270
+
1271
+ [[package]]
1272
+ name = "language-tags"
1273
+ version = "0.3.2"
1274
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1275
+ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
1276
+
1277
+ [[package]]
1278
+ name = "lazy_static"
1279
+ version = "1.4.0"
1280
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1281
+ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1282
+
1283
+ [[package]]
1284
+ name = "libc"
1285
+ version = "0.2.142"
1286
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1287
+ checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
1288
+
1289
+ [[package]]
1290
+ name = "linux-raw-sys"
1291
+ version = "0.3.3"
1292
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1293
+ checksum = "9b085a4f2cde5781fc4b1717f2e86c62f5cda49de7ba99a7c2eae02b61c9064c"
1294
+
1295
+ [[package]]
1296
+ name = "local-channel"
1297
+ version = "0.1.3"
1298
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1299
+ checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c"
1300
+ dependencies = [
1301
+ "futures-core",
1302
+ "futures-sink",
1303
+ "futures-util",
1304
+ "local-waker",
1305
+ ]
1306
+
1307
+ [[package]]
1308
+ name = "local-waker"
1309
+ version = "0.1.3"
1310
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1311
+ checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1"
1312
+
1313
+ [[package]]
1314
+ name = "lock_api"
1315
+ version = "0.3.4"
1316
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1317
+ checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
1318
+ dependencies = [
1319
+ "scopeguard",
1320
+ ]
1321
+
1322
+ [[package]]
1323
+ name = "lock_api"
1324
+ version = "0.4.9"
1325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1326
+ checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
1327
+ dependencies = [
1328
+ "autocfg 1.1.0",
1329
+ "scopeguard",
1330
+ ]
1331
+
1332
+ [[package]]
1333
+ name = "log"
1334
+ version = "0.4.17"
1335
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1336
+ checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
1337
+ dependencies = [
1338
+ "cfg-if 1.0.0",
1339
+ ]
1340
+
1341
+ [[package]]
1342
+ name = "mac"
1343
+ version = "0.1.1"
1344
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1345
+ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
1346
+
1347
+ [[package]]
1348
+ name = "markup5ever"
1349
+ version = "0.8.1"
1350
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1351
+ checksum = "f1af46a727284117e09780d05038b1ce6fc9c76cc6df183c3dae5a8955a25e21"
1352
+ dependencies = [
1353
+ "log",
1354
+ "phf 0.7.24",
1355
+ "phf_codegen 0.7.24",
1356
+ "serde",
1357
+ "serde_derive",
1358
+ "serde_json",
1359
+ "string_cache 0.7.5",
1360
+ "string_cache_codegen 0.4.4",
1361
+ "tendril",
1362
+ ]
1363
+
1364
+ [[package]]
1365
+ name = "markup5ever"
1366
+ version = "0.11.0"
1367
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1368
+ checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
1369
+ dependencies = [
1370
+ "log",
1371
+ "phf 0.10.1",
1372
+ "phf_codegen 0.10.0",
1373
+ "string_cache 0.8.7",
1374
+ "string_cache_codegen 0.5.2",
1375
+ "tendril",
1376
+ ]
1377
+
1378
+ [[package]]
1379
+ name = "matches"
1380
+ version = "0.1.10"
1381
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1382
+ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
1383
+
1384
+ [[package]]
1385
+ name = "maybe-uninit"
1386
+ version = "2.0.0"
1387
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1388
+ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
1389
+
1390
+ [[package]]
1391
+ name = "memchr"
1392
+ version = "2.5.0"
1393
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1394
+ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
1395
+
1396
+ [[package]]
1397
+ name = "memoffset"
1398
+ version = "0.5.6"
1399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1400
+ checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
1401
+ dependencies = [
1402
+ "autocfg 1.1.0",
1403
+ ]
1404
+
1405
+ [[package]]
1406
+ name = "mime"
1407
+ version = "0.3.17"
1408
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1409
+ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1410
+
1411
+ [[package]]
1412
+ name = "mime_guess"
1413
+ version = "2.0.4"
1414
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1415
+ checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
1416
+ dependencies = [
1417
+ "mime",
1418
+ "unicase",
1419
+ ]
1420
+
1421
+ [[package]]
1422
+ name = "miniz_oxide"
1423
+ version = "0.6.2"
1424
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1425
+ checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
1426
+ dependencies = [
1427
+ "adler",
1428
+ ]
1429
+
1430
+ [[package]]
1431
+ name = "mio"
1432
+ version = "0.6.23"
1433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1434
+ checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
1435
+ dependencies = [
1436
+ "cfg-if 0.1.10",
1437
+ "fuchsia-zircon",
1438
+ "fuchsia-zircon-sys",
1439
+ "iovec",
1440
+ "kernel32-sys",
1441
+ "libc",
1442
+ "log",
1443
+ "miow",
1444
+ "net2",
1445
+ "slab",
1446
+ "winapi 0.2.8",
1447
+ ]
1448
+
1449
+ [[package]]
1450
+ name = "mio"
1451
+ version = "0.8.6"
1452
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1453
+ checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
1454
+ dependencies = [
1455
+ "libc",
1456
+ "log",
1457
+ "wasi 0.11.0+wasi-snapshot-preview1",
1458
+ "windows-sys 0.45.0",
1459
+ ]
1460
+
1461
+ [[package]]
1462
+ name = "miow"
1463
+ version = "0.2.2"
1464
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1465
+ checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
1466
+ dependencies = [
1467
+ "kernel32-sys",
1468
+ "net2",
1469
+ "winapi 0.2.8",
1470
+ "ws2_32-sys",
1471
+ ]
1472
+
1473
+ [[package]]
1474
+ name = "native-tls"
1475
+ version = "0.2.11"
1476
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1477
+ checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
1478
+ dependencies = [
1479
+ "lazy_static",
1480
+ "libc",
1481
+ "log",
1482
+ "openssl",
1483
+ "openssl-probe",
1484
+ "openssl-sys",
1485
+ "schannel",
1486
+ "security-framework",
1487
+ "security-framework-sys",
1488
+ "tempfile",
1489
+ ]
1490
+
1491
+ [[package]]
1492
+ name = "net2"
1493
+ version = "0.2.38"
1494
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1495
+ checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
1496
+ dependencies = [
1497
+ "cfg-if 0.1.10",
1498
+ "libc",
1499
+ "winapi 0.3.9",
1500
+ ]
1501
+
1502
+ [[package]]
1503
+ name = "new_debug_unreachable"
1504
+ version = "1.0.4"
1505
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1506
+ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
1507
+
1508
+ [[package]]
1509
+ name = "nodrop"
1510
+ version = "0.1.14"
1511
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1512
+ checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
1513
+
1514
+ [[package]]
1515
+ name = "num_cpus"
1516
+ version = "1.15.0"
1517
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1518
+ checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
1519
+ dependencies = [
1520
+ "hermit-abi 0.2.6",
1521
+ "libc",
1522
+ ]
1523
+
1524
+ [[package]]
1525
+ name = "object"
1526
+ version = "0.30.3"
1527
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1528
+ checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
1529
+ dependencies = [
1530
+ "memchr",
1531
+ ]
1532
+
1533
+ [[package]]
1534
+ name = "once_cell"
1535
+ version = "1.17.1"
1536
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1537
+ checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
1538
+
1539
+ [[package]]
1540
+ name = "openssl"
1541
+ version = "0.10.51"
1542
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1543
+ checksum = "97ea2d98598bf9ada7ea6ee8a30fb74f9156b63bbe495d64ec2b87c269d2dda3"
1544
+ dependencies = [
1545
+ "bitflags",
1546
+ "cfg-if 1.0.0",
1547
+ "foreign-types",
1548
+ "libc",
1549
+ "once_cell",
1550
+ "openssl-macros",
1551
+ "openssl-sys",
1552
+ ]
1553
+
1554
+ [[package]]
1555
+ name = "openssl-macros"
1556
+ version = "0.1.1"
1557
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1558
+ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
1559
+ dependencies = [
1560
+ "proc-macro2 1.0.56",
1561
+ "quote 1.0.26",
1562
+ "syn 2.0.15",
1563
+ ]
1564
+
1565
+ [[package]]
1566
+ name = "openssl-probe"
1567
+ version = "0.1.5"
1568
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1569
+ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
1570
+
1571
+ [[package]]
1572
+ name = "openssl-sys"
1573
+ version = "0.9.86"
1574
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1575
+ checksum = "992bac49bdbab4423199c654a5515bd2a6c6a23bf03f2dd3bdb7e5ae6259bc69"
1576
+ dependencies = [
1577
+ "cc",
1578
+ "libc",
1579
+ "pkg-config",
1580
+ "vcpkg",
1581
+ ]
1582
+
1583
+ [[package]]
1584
+ name = "parking_lot"
1585
+ version = "0.9.0"
1586
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1587
+ checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
1588
+ dependencies = [
1589
+ "lock_api 0.3.4",
1590
+ "parking_lot_core 0.6.3",
1591
+ "rustc_version 0.2.3",
1592
+ ]
1593
+
1594
+ [[package]]
1595
+ name = "parking_lot"
1596
+ version = "0.12.1"
1597
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1598
+ checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
1599
+ dependencies = [
1600
+ "lock_api 0.4.9",
1601
+ "parking_lot_core 0.9.7",
1602
+ ]
1603
+
1604
+ [[package]]
1605
+ name = "parking_lot_core"
1606
+ version = "0.6.3"
1607
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1608
+ checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
1609
+ dependencies = [
1610
+ "cfg-if 0.1.10",
1611
+ "cloudabi",
1612
+ "libc",
1613
+ "redox_syscall 0.1.57",
1614
+ "rustc_version 0.2.3",
1615
+ "smallvec 0.6.14",
1616
+ "winapi 0.3.9",
1617
+ ]
1618
+
1619
+ [[package]]
1620
+ name = "parking_lot_core"
1621
+ version = "0.9.7"
1622
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1623
+ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
1624
+ dependencies = [
1625
+ "cfg-if 1.0.0",
1626
+ "libc",
1627
+ "redox_syscall 0.2.16",
1628
+ "smallvec 1.10.0",
1629
+ "windows-sys 0.45.0",
1630
+ ]
1631
+
1632
+ [[package]]
1633
+ name = "paste"
1634
+ version = "1.0.12"
1635
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1636
+ checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
1637
+
1638
+ [[package]]
1639
+ name = "percent-encoding"
1640
+ version = "1.0.1"
1641
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1642
+ checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
1643
+
1644
+ [[package]]
1645
+ name = "percent-encoding"
1646
+ version = "2.2.0"
1647
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1648
+ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
1649
+
1650
+ [[package]]
1651
+ name = "pest"
1652
+ version = "2.5.7"
1653
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1654
+ checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122"
1655
+ dependencies = [
1656
+ "thiserror",
1657
+ "ucd-trie",
1658
+ ]
1659
+
1660
+ [[package]]
1661
+ name = "pest_derive"
1662
+ version = "2.5.7"
1663
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1664
+ checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15"
1665
+ dependencies = [
1666
+ "pest",
1667
+ "pest_generator",
1668
+ ]
1669
+
1670
+ [[package]]
1671
+ name = "pest_generator"
1672
+ version = "2.5.7"
1673
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1674
+ checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e"
1675
+ dependencies = [
1676
+ "pest",
1677
+ "pest_meta",
1678
+ "proc-macro2 1.0.56",
1679
+ "quote 1.0.26",
1680
+ "syn 2.0.15",
1681
+ ]
1682
+
1683
+ [[package]]
1684
+ name = "pest_meta"
1685
+ version = "2.5.7"
1686
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1687
+ checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e"
1688
+ dependencies = [
1689
+ "once_cell",
1690
+ "pest",
1691
+ "sha2",
1692
+ ]
1693
+
1694
+ [[package]]
1695
+ name = "phf"
1696
+ version = "0.7.24"
1697
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1698
+ checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
1699
+ dependencies = [
1700
+ "phf_shared 0.7.24",
1701
+ ]
1702
+
1703
+ [[package]]
1704
+ name = "phf"
1705
+ version = "0.8.0"
1706
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1707
+ checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
1708
+ dependencies = [
1709
+ "phf_shared 0.8.0",
1710
+ ]
1711
+
1712
+ [[package]]
1713
+ name = "phf"
1714
+ version = "0.10.1"
1715
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1716
+ checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
1717
+ dependencies = [
1718
+ "phf_macros",
1719
+ "phf_shared 0.10.0",
1720
+ "proc-macro-hack",
1721
+ ]
1722
+
1723
+ [[package]]
1724
+ name = "phf_codegen"
1725
+ version = "0.7.24"
1726
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1727
+ checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
1728
+ dependencies = [
1729
+ "phf_generator 0.7.24",
1730
+ "phf_shared 0.7.24",
1731
+ ]
1732
+
1733
+ [[package]]
1734
+ name = "phf_codegen"
1735
+ version = "0.8.0"
1736
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1737
+ checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
1738
+ dependencies = [
1739
+ "phf_generator 0.8.0",
1740
+ "phf_shared 0.8.0",
1741
+ ]
1742
+
1743
+ [[package]]
1744
+ name = "phf_codegen"
1745
+ version = "0.10.0"
1746
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1747
+ checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
1748
+ dependencies = [
1749
+ "phf_generator 0.10.0",
1750
+ "phf_shared 0.10.0",
1751
+ ]
1752
+
1753
+ [[package]]
1754
+ name = "phf_generator"
1755
+ version = "0.7.24"
1756
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1757
+ checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
1758
+ dependencies = [
1759
+ "phf_shared 0.7.24",
1760
+ "rand 0.6.5",
1761
+ ]
1762
+
1763
+ [[package]]
1764
+ name = "phf_generator"
1765
+ version = "0.8.0"
1766
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1767
+ checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
1768
+ dependencies = [
1769
+ "phf_shared 0.8.0",
1770
+ "rand 0.7.3",
1771
+ ]
1772
+
1773
+ [[package]]
1774
+ name = "phf_generator"
1775
+ version = "0.10.0"
1776
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1777
+ checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
1778
+ dependencies = [
1779
+ "phf_shared 0.10.0",
1780
+ "rand 0.8.5",
1781
+ ]
1782
+
1783
+ [[package]]
1784
+ name = "phf_macros"
1785
+ version = "0.10.0"
1786
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1787
+ checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
1788
+ dependencies = [
1789
+ "phf_generator 0.10.0",
1790
+ "phf_shared 0.10.0",
1791
+ "proc-macro-hack",
1792
+ "proc-macro2 1.0.56",
1793
+ "quote 1.0.26",
1794
+ "syn 1.0.109",
1795
+ ]
1796
+
1797
+ [[package]]
1798
+ name = "phf_shared"
1799
+ version = "0.7.24"
1800
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1801
+ checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
1802
+ dependencies = [
1803
+ "siphasher 0.2.3",
1804
+ ]
1805
+
1806
+ [[package]]
1807
+ name = "phf_shared"
1808
+ version = "0.8.0"
1809
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1810
+ checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
1811
+ dependencies = [
1812
+ "siphasher 0.3.10",
1813
+ ]
1814
+
1815
+ [[package]]
1816
+ name = "phf_shared"
1817
+ version = "0.10.0"
1818
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1819
+ checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
1820
+ dependencies = [
1821
+ "siphasher 0.3.10",
1822
+ ]
1823
+
1824
+ [[package]]
1825
+ name = "pin-project-lite"
1826
+ version = "0.2.9"
1827
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1828
+ checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
1829
+
1830
+ [[package]]
1831
+ name = "pin-utils"
1832
+ version = "0.1.0"
1833
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1834
+ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1835
+
1836
+ [[package]]
1837
+ name = "pkg-config"
1838
+ version = "0.3.26"
1839
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1840
+ checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
1841
+
1842
+ [[package]]
1843
+ name = "ppv-lite86"
1844
+ version = "0.2.17"
1845
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1846
+ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
1847
+
1848
+ [[package]]
1849
+ name = "precomputed-hash"
1850
+ version = "0.1.1"
1851
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1852
+ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
1853
+
1854
+ [[package]]
1855
+ name = "proc-macro-hack"
1856
+ version = "0.5.20+deprecated"
1857
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1858
+ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
1859
+
1860
+ [[package]]
1861
+ name = "proc-macro2"
1862
+ version = "0.4.30"
1863
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1864
+ checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
1865
+ dependencies = [
1866
+ "unicode-xid 0.1.0",
1867
+ ]
1868
+
1869
+ [[package]]
1870
+ name = "proc-macro2"
1871
+ version = "1.0.56"
1872
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1873
+ checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
1874
+ dependencies = [
1875
+ "unicode-ident",
1876
+ ]
1877
+
1878
+ [[package]]
1879
+ name = "publicsuffix"
1880
+ version = "1.5.6"
1881
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1882
+ checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
1883
+ dependencies = [
1884
+ "idna 0.2.3",
1885
+ "url 2.3.1",
1886
+ ]
1887
+
1888
+ [[package]]
1889
+ name = "quote"
1890
+ version = "0.6.13"
1891
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1892
+ checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
1893
+ dependencies = [
1894
+ "proc-macro2 0.4.30",
1895
+ ]
1896
+
1897
+ [[package]]
1898
+ name = "quote"
1899
+ version = "1.0.26"
1900
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1901
+ checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
1902
+ dependencies = [
1903
+ "proc-macro2 1.0.56",
1904
+ ]
1905
+
1906
+ [[package]]
1907
+ name = "rand"
1908
+ version = "0.6.5"
1909
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1910
+ checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
1911
+ dependencies = [
1912
+ "autocfg 0.1.8",
1913
+ "libc",
1914
+ "rand_chacha 0.1.1",
1915
+ "rand_core 0.4.2",
1916
+ "rand_hc 0.1.0",
1917
+ "rand_isaac",
1918
+ "rand_jitter",
1919
+ "rand_os",
1920
+ "rand_pcg 0.1.2",
1921
+ "rand_xorshift",
1922
+ "winapi 0.3.9",
1923
+ ]
1924
+
1925
+ [[package]]
1926
+ name = "rand"
1927
+ version = "0.7.3"
1928
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1929
+ checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
1930
+ dependencies = [
1931
+ "getrandom 0.1.16",
1932
+ "libc",
1933
+ "rand_chacha 0.2.2",
1934
+ "rand_core 0.5.1",
1935
+ "rand_hc 0.2.0",
1936
+ "rand_pcg 0.2.1",
1937
+ ]
1938
+
1939
+ [[package]]
1940
+ name = "rand"
1941
+ version = "0.8.5"
1942
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1943
+ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1944
+ dependencies = [
1945
+ "libc",
1946
+ "rand_chacha 0.3.1",
1947
+ "rand_core 0.6.4",
1948
+ ]
1949
+
1950
+ [[package]]
1951
+ name = "rand_chacha"
1952
+ version = "0.1.1"
1953
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1954
+ checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
1955
+ dependencies = [
1956
+ "autocfg 0.1.8",
1957
+ "rand_core 0.3.1",
1958
+ ]
1959
+
1960
+ [[package]]
1961
+ name = "rand_chacha"
1962
+ version = "0.2.2"
1963
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1964
+ checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
1965
+ dependencies = [
1966
+ "ppv-lite86",
1967
+ "rand_core 0.5.1",
1968
+ ]
1969
+
1970
+ [[package]]
1971
+ name = "rand_chacha"
1972
+ version = "0.3.1"
1973
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1974
+ checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1975
+ dependencies = [
1976
+ "ppv-lite86",
1977
+ "rand_core 0.6.4",
1978
+ ]
1979
+
1980
+ [[package]]
1981
+ name = "rand_core"
1982
+ version = "0.3.1"
1983
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1984
+ checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
1985
+ dependencies = [
1986
+ "rand_core 0.4.2",
1987
+ ]
1988
+
1989
+ [[package]]
1990
+ name = "rand_core"
1991
+ version = "0.4.2"
1992
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1993
+ checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
1994
+
1995
+ [[package]]
1996
+ name = "rand_core"
1997
+ version = "0.5.1"
1998
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1999
+ checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
2000
+ dependencies = [
2001
+ "getrandom 0.1.16",
2002
+ ]
2003
+
2004
+ [[package]]
2005
+ name = "rand_core"
2006
+ version = "0.6.4"
2007
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2008
+ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2009
+ dependencies = [
2010
+ "getrandom 0.2.9",
2011
+ ]
2012
+
2013
+ [[package]]
2014
+ name = "rand_hc"
2015
+ version = "0.1.0"
2016
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2017
+ checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
2018
+ dependencies = [
2019
+ "rand_core 0.3.1",
2020
+ ]
2021
+
2022
+ [[package]]
2023
+ name = "rand_hc"
2024
+ version = "0.2.0"
2025
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2026
+ checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
2027
+ dependencies = [
2028
+ "rand_core 0.5.1",
2029
+ ]
2030
+
2031
+ [[package]]
2032
+ name = "rand_isaac"
2033
+ version = "0.1.1"
2034
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2035
+ checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
2036
+ dependencies = [
2037
+ "rand_core 0.3.1",
2038
+ ]
2039
+
2040
+ [[package]]
2041
+ name = "rand_jitter"
2042
+ version = "0.1.4"
2043
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2044
+ checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
2045
+ dependencies = [
2046
+ "libc",
2047
+ "rand_core 0.4.2",
2048
+ "winapi 0.3.9",
2049
+ ]
2050
+
2051
+ [[package]]
2052
+ name = "rand_os"
2053
+ version = "0.1.3"
2054
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2055
+ checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
2056
+ dependencies = [
2057
+ "cloudabi",
2058
+ "fuchsia-cprng",
2059
+ "libc",
2060
+ "rand_core 0.4.2",
2061
+ "rdrand",
2062
+ "winapi 0.3.9",
2063
+ ]
2064
+
2065
+ [[package]]
2066
+ name = "rand_pcg"
2067
+ version = "0.1.2"
2068
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2069
+ checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
2070
+ dependencies = [
2071
+ "autocfg 0.1.8",
2072
+ "rand_core 0.4.2",
2073
+ ]
2074
+
2075
+ [[package]]
2076
+ name = "rand_pcg"
2077
+ version = "0.2.1"
2078
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2079
+ checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
2080
+ dependencies = [
2081
+ "rand_core 0.5.1",
2082
+ ]
2083
+
2084
+ [[package]]
2085
+ name = "rand_xorshift"
2086
+ version = "0.1.1"
2087
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2088
+ checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
2089
+ dependencies = [
2090
+ "rand_core 0.3.1",
2091
+ ]
2092
+
2093
+ [[package]]
2094
+ name = "rdrand"
2095
+ version = "0.4.0"
2096
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2097
+ checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
2098
+ dependencies = [
2099
+ "rand_core 0.3.1",
2100
+ ]
2101
+
2102
+ [[package]]
2103
+ name = "redox_syscall"
2104
+ version = "0.1.57"
2105
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2106
+ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
2107
+
2108
+ [[package]]
2109
+ name = "redox_syscall"
2110
+ version = "0.2.16"
2111
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2112
+ checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
2113
+ dependencies = [
2114
+ "bitflags",
2115
+ ]
2116
+
2117
+ [[package]]
2118
+ name = "redox_syscall"
2119
+ version = "0.3.5"
2120
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2121
+ checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
2122
+ dependencies = [
2123
+ "bitflags",
2124
+ ]
2125
+
2126
+ [[package]]
2127
+ name = "regex"
2128
+ version = "1.8.1"
2129
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2130
+ checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
2131
+ dependencies = [
2132
+ "aho-corasick",
2133
+ "memchr",
2134
+ "regex-syntax",
2135
+ ]
2136
+
2137
+ [[package]]
2138
+ name = "regex-syntax"
2139
+ version = "0.7.1"
2140
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2141
+ checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
2142
+
2143
+ [[package]]
2144
+ name = "reqwest"
2145
+ version = "0.9.24"
2146
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2147
+ checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
2148
+ dependencies = [
2149
+ "base64 0.10.1",
2150
+ "bytes 0.4.12",
2151
+ "cookie 0.12.0",
2152
+ "cookie_store",
2153
+ "encoding_rs",
2154
+ "flate2",
2155
+ "futures",
2156
+ "http 0.1.21",
2157
+ "hyper 0.12.36",
2158
+ "hyper-tls 0.3.2",
2159
+ "log",
2160
+ "mime",
2161
+ "mime_guess",
2162
+ "native-tls",
2163
+ "serde",
2164
+ "serde_json",
2165
+ "serde_urlencoded 0.5.5",
2166
+ "time 0.1.45",
2167
+ "tokio 0.1.22",
2168
+ "tokio-executor",
2169
+ "tokio-io",
2170
+ "tokio-threadpool",
2171
+ "tokio-timer",
2172
+ "url 1.7.2",
2173
+ "uuid",
2174
+ "winreg 0.6.2",
2175
+ ]
2176
+
2177
+ [[package]]
2178
+ name = "reqwest"
2179
+ version = "0.11.16"
2180
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2181
+ checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
2182
+ dependencies = [
2183
+ "base64 0.21.0",
2184
+ "bytes 1.4.0",
2185
+ "encoding_rs",
2186
+ "futures-core",
2187
+ "futures-util",
2188
+ "h2 0.3.18",
2189
+ "http 0.2.9",
2190
+ "http-body 0.4.5",
2191
+ "hyper 0.14.26",
2192
+ "hyper-tls 0.5.0",
2193
+ "ipnet",
2194
+ "js-sys",
2195
+ "log",
2196
+ "mime",
2197
+ "native-tls",
2198
+ "once_cell",
2199
+ "percent-encoding 2.2.0",
2200
+ "pin-project-lite",
2201
+ "serde",
2202
+ "serde_json",
2203
+ "serde_urlencoded 0.7.1",
2204
+ "tokio 1.27.0",
2205
+ "tokio-native-tls",
2206
+ "tower-service",
2207
+ "url 2.3.1",
2208
+ "wasm-bindgen",
2209
+ "wasm-bindgen-futures",
2210
+ "web-sys",
2211
+ "winreg 0.10.1",
2212
+ ]
2213
+
2214
+ [[package]]
2215
+ name = "rustc-demangle"
2216
+ version = "0.1.23"
2217
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2218
+ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
2219
+
2220
+ [[package]]
2221
+ name = "rustc_version"
2222
+ version = "0.2.3"
2223
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2224
+ checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
2225
+ dependencies = [
2226
+ "semver 0.9.0",
2227
+ ]
2228
+
2229
+ [[package]]
2230
+ name = "rustc_version"
2231
+ version = "0.4.0"
2232
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2233
+ checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2234
+ dependencies = [
2235
+ "semver 1.0.17",
2236
+ ]
2237
+
2238
+ [[package]]
2239
+ name = "rustix"
2240
+ version = "0.37.13"
2241
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2242
+ checksum = "f79bef90eb6d984c72722595b5b1348ab39275a5e5123faca6863bf07d75a4e0"
2243
+ dependencies = [
2244
+ "bitflags",
2245
+ "errno",
2246
+ "io-lifetimes",
2247
+ "libc",
2248
+ "linux-raw-sys",
2249
+ "windows-sys 0.48.0",
2250
+ ]
2251
+
2252
+ [[package]]
2253
+ name = "ryu"
2254
+ version = "1.0.13"
2255
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2256
+ checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
2257
+
2258
+ [[package]]
2259
+ name = "same-file"
2260
+ version = "1.0.6"
2261
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2262
+ checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2263
+ dependencies = [
2264
+ "winapi-util",
2265
+ ]
2266
+
2267
+ [[package]]
2268
+ name = "schannel"
2269
+ version = "0.1.21"
2270
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2271
+ checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
2272
+ dependencies = [
2273
+ "windows-sys 0.42.0",
2274
+ ]
2275
+
2276
+ [[package]]
2277
+ name = "scopeguard"
2278
+ version = "1.1.0"
2279
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2280
+ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
2281
+
2282
+ [[package]]
2283
+ name = "scraper"
2284
+ version = "0.16.0"
2285
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2286
+ checksum = "59e25654b5e9fd557a67dbaab5a5d36b8c448d0561beb4c041b6dbb902eddfa6"
2287
+ dependencies = [
2288
+ "ahash 0.8.3",
2289
+ "cssparser",
2290
+ "ego-tree",
2291
+ "getopts",
2292
+ "html5ever 0.26.0",
2293
+ "once_cell",
2294
+ "selectors",
2295
+ "smallvec 1.10.0",
2296
+ "tendril",
2297
+ ]
2298
+
2299
+ [[package]]
2300
+ name = "security-framework"
2301
+ version = "2.8.2"
2302
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2303
+ checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
2304
+ dependencies = [
2305
+ "bitflags",
2306
+ "core-foundation",
2307
+ "core-foundation-sys",
2308
+ "libc",
2309
+ "security-framework-sys",
2310
+ ]
2311
+
2312
+ [[package]]
2313
+ name = "security-framework-sys"
2314
+ version = "2.8.0"
2315
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2316
+ checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
2317
+ dependencies = [
2318
+ "core-foundation-sys",
2319
+ "libc",
2320
+ ]
2321
+
2322
+ [[package]]
2323
+ name = "select"
2324
+ version = "0.4.3"
2325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2326
+ checksum = "ac645958c62108d11f90f8d34e4dc2799c838fc995ed4c2075867a2a8d5be76b"
2327
+ dependencies = [
2328
+ "bit-set",
2329
+ "html5ever 0.23.0",
2330
+ ]
2331
+
2332
+ [[package]]
2333
+ name = "selectors"
2334
+ version = "0.24.0"
2335
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2336
+ checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416"
2337
+ dependencies = [
2338
+ "bitflags",
2339
+ "cssparser",
2340
+ "derive_more",
2341
+ "fxhash",
2342
+ "log",
2343
+ "phf 0.8.0",
2344
+ "phf_codegen 0.8.0",
2345
+ "precomputed-hash",
2346
+ "servo_arc",
2347
+ "smallvec 1.10.0",
2348
+ ]
2349
+
2350
+ [[package]]
2351
+ name = "semver"
2352
+ version = "0.9.0"
2353
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2354
+ checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
2355
+ dependencies = [
2356
+ "semver-parser",
2357
+ ]
2358
+
2359
+ [[package]]
2360
+ name = "semver"
2361
+ version = "1.0.17"
2362
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2363
+ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
2364
+
2365
+ [[package]]
2366
+ name = "semver-parser"
2367
+ version = "0.7.0"
2368
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2369
+ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
2370
+
2371
+ [[package]]
2372
+ name = "serde"
2373
+ version = "1.0.160"
2374
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2375
+ checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
2376
+ dependencies = [
2377
+ "serde_derive",
2378
+ ]
2379
+
2380
+ [[package]]
2381
+ name = "serde_derive"
2382
+ version = "1.0.160"
2383
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2384
+ checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
2385
+ dependencies = [
2386
+ "proc-macro2 1.0.56",
2387
+ "quote 1.0.26",
2388
+ "syn 2.0.15",
2389
+ ]
2390
+
2391
+ [[package]]
2392
+ name = "serde_json"
2393
+ version = "1.0.96"
2394
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2395
+ checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
2396
+ dependencies = [
2397
+ "itoa 1.0.6",
2398
+ "ryu",
2399
+ "serde",
2400
+ ]
2401
+
2402
+ [[package]]
2403
+ name = "serde_urlencoded"
2404
+ version = "0.5.5"
2405
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2406
+ checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
2407
+ dependencies = [
2408
+ "dtoa",
2409
+ "itoa 0.4.8",
2410
+ "serde",
2411
+ "url 1.7.2",
2412
+ ]
2413
+
2414
+ [[package]]
2415
+ name = "serde_urlencoded"
2416
+ version = "0.7.1"
2417
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2418
+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
2419
+ dependencies = [
2420
+ "form_urlencoded",
2421
+ "itoa 1.0.6",
2422
+ "ryu",
2423
+ "serde",
2424
+ ]
2425
+
2426
+ [[package]]
2427
+ name = "servo_arc"
2428
+ version = "0.2.0"
2429
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2430
+ checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741"
2431
+ dependencies = [
2432
+ "nodrop",
2433
+ "stable_deref_trait",
2434
+ ]
2435
+
2436
+ [[package]]
2437
+ name = "sha1"
2438
+ version = "0.10.5"
2439
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2440
+ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
2441
+ dependencies = [
2442
+ "cfg-if 1.0.0",
2443
+ "cpufeatures",
2444
+ "digest",
2445
+ ]
2446
+
2447
+ [[package]]
2448
+ name = "sha2"
2449
+ version = "0.10.6"
2450
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2451
+ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
2452
+ dependencies = [
2453
+ "cfg-if 1.0.0",
2454
+ "cpufeatures",
2455
+ "digest",
2456
+ ]
2457
+
2458
+ [[package]]
2459
+ name = "signal-hook-registry"
2460
+ version = "1.4.1"
2461
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2462
+ checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
2463
+ dependencies = [
2464
+ "libc",
2465
+ ]
2466
+
2467
+ [[package]]
2468
+ name = "siphasher"
2469
+ version = "0.2.3"
2470
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2471
+ checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
2472
+
2473
+ [[package]]
2474
+ name = "siphasher"
2475
+ version = "0.3.10"
2476
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2477
+ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
2478
+
2479
+ [[package]]
2480
+ name = "slab"
2481
+ version = "0.4.8"
2482
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2483
+ checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
2484
+ dependencies = [
2485
+ "autocfg 1.1.0",
2486
+ ]
2487
+
2488
+ [[package]]
2489
+ name = "smallvec"
2490
+ version = "0.6.14"
2491
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2492
+ checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
2493
+ dependencies = [
2494
+ "maybe-uninit",
2495
+ ]
2496
+
2497
+ [[package]]
2498
+ name = "smallvec"
2499
+ version = "1.10.0"
2500
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2501
+ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
2502
+
2503
+ [[package]]
2504
+ name = "socket2"
2505
+ version = "0.4.9"
2506
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2507
+ checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
2508
+ dependencies = [
2509
+ "libc",
2510
+ "winapi 0.3.9",
2511
+ ]
2512
+
2513
+ [[package]]
2514
+ name = "stable_deref_trait"
2515
+ version = "1.2.0"
2516
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2517
+ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2518
+
2519
+ [[package]]
2520
+ name = "string"
2521
+ version = "0.2.1"
2522
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2523
+ checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
2524
+ dependencies = [
2525
+ "bytes 0.4.12",
2526
+ ]
2527
+
2528
+ [[package]]
2529
+ name = "string_cache"
2530
+ version = "0.7.5"
2531
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2532
+ checksum = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67"
2533
+ dependencies = [
2534
+ "lazy_static",
2535
+ "new_debug_unreachable",
2536
+ "phf_shared 0.7.24",
2537
+ "precomputed-hash",
2538
+ "serde",
2539
+ "string_cache_codegen 0.4.4",
2540
+ "string_cache_shared",
2541
+ ]
2542
+
2543
+ [[package]]
2544
+ name = "string_cache"
2545
+ version = "0.8.7"
2546
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2547
+ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
2548
+ dependencies = [
2549
+ "new_debug_unreachable",
2550
+ "once_cell",
2551
+ "parking_lot 0.12.1",
2552
+ "phf_shared 0.10.0",
2553
+ "precomputed-hash",
2554
+ "serde",
2555
+ ]
2556
+
2557
+ [[package]]
2558
+ name = "string_cache_codegen"
2559
+ version = "0.4.4"
2560
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2561
+ checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
2562
+ dependencies = [
2563
+ "phf_generator 0.7.24",
2564
+ "phf_shared 0.7.24",
2565
+ "proc-macro2 1.0.56",
2566
+ "quote 1.0.26",
2567
+ "string_cache_shared",
2568
+ ]
2569
+
2570
+ [[package]]
2571
+ name = "string_cache_codegen"
2572
+ version = "0.5.2"
2573
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2574
+ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
2575
+ dependencies = [
2576
+ "phf_generator 0.10.0",
2577
+ "phf_shared 0.10.0",
2578
+ "proc-macro2 1.0.56",
2579
+ "quote 1.0.26",
2580
+ ]
2581
+
2582
+ [[package]]
2583
+ name = "string_cache_shared"
2584
+ version = "0.3.0"
2585
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2586
+ checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
2587
+
2588
+ [[package]]
2589
+ name = "syn"
2590
+ version = "0.15.44"
2591
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2592
+ checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
2593
+ dependencies = [
2594
+ "proc-macro2 0.4.30",
2595
+ "quote 0.6.13",
2596
+ "unicode-xid 0.1.0",
2597
+ ]
2598
+
2599
+ [[package]]
2600
+ name = "syn"
2601
+ version = "1.0.109"
2602
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2603
+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2604
+ dependencies = [
2605
+ "proc-macro2 1.0.56",
2606
+ "quote 1.0.26",
2607
+ "unicode-ident",
2608
+ ]
2609
+
2610
+ [[package]]
2611
+ name = "syn"
2612
+ version = "2.0.15"
2613
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2614
+ checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
2615
+ dependencies = [
2616
+ "proc-macro2 1.0.56",
2617
+ "quote 1.0.26",
2618
+ "unicode-ident",
2619
+ ]
2620
+
2621
+ [[package]]
2622
+ name = "synstructure"
2623
+ version = "0.12.6"
2624
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2625
+ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
2626
+ dependencies = [
2627
+ "proc-macro2 1.0.56",
2628
+ "quote 1.0.26",
2629
+ "syn 1.0.109",
2630
+ "unicode-xid 0.2.4",
2631
+ ]
2632
+
2633
+ [[package]]
2634
+ name = "tempfile"
2635
+ version = "3.5.0"
2636
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2637
+ checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
2638
+ dependencies = [
2639
+ "cfg-if 1.0.0",
2640
+ "fastrand",
2641
+ "redox_syscall 0.3.5",
2642
+ "rustix",
2643
+ "windows-sys 0.45.0",
2644
+ ]
2645
+
2646
+ [[package]]
2647
+ name = "tendril"
2648
+ version = "0.4.3"
2649
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2650
+ checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
2651
+ dependencies = [
2652
+ "futf",
2653
+ "mac",
2654
+ "utf-8",
2655
+ ]
2656
+
2657
+ [[package]]
2658
+ name = "thiserror"
2659
+ version = "1.0.40"
2660
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2661
+ checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
2662
+ dependencies = [
2663
+ "thiserror-impl",
2664
+ ]
2665
+
2666
+ [[package]]
2667
+ name = "thiserror-impl"
2668
+ version = "1.0.40"
2669
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2670
+ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
2671
+ dependencies = [
2672
+ "proc-macro2 1.0.56",
2673
+ "quote 1.0.26",
2674
+ "syn 2.0.15",
2675
+ ]
2676
+
2677
+ [[package]]
2678
+ name = "time"
2679
+ version = "0.1.45"
2680
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2681
+ checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
2682
+ dependencies = [
2683
+ "libc",
2684
+ "wasi 0.10.0+wasi-snapshot-preview1",
2685
+ "winapi 0.3.9",
2686
+ ]
2687
+
2688
+ [[package]]
2689
+ name = "time"
2690
+ version = "0.3.20"
2691
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2692
+ checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
2693
+ dependencies = [
2694
+ "itoa 1.0.6",
2695
+ "serde",
2696
+ "time-core",
2697
+ "time-macros",
2698
+ ]
2699
+
2700
+ [[package]]
2701
+ name = "time-core"
2702
+ version = "0.1.0"
2703
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2704
+ checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
2705
+
2706
+ [[package]]
2707
+ name = "time-macros"
2708
+ version = "0.2.8"
2709
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2710
+ checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
2711
+ dependencies = [
2712
+ "time-core",
2713
+ ]
2714
+
2715
+ [[package]]
2716
+ name = "tinyvec"
2717
+ version = "1.6.0"
2718
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2719
+ checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
2720
+ dependencies = [
2721
+ "tinyvec_macros",
2722
+ ]
2723
+
2724
+ [[package]]
2725
+ name = "tinyvec_macros"
2726
+ version = "0.1.1"
2727
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2728
+ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2729
+
2730
+ [[package]]
2731
+ name = "tokio"
2732
+ version = "0.1.22"
2733
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2734
+ checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
2735
+ dependencies = [
2736
+ "bytes 0.4.12",
2737
+ "futures",
2738
+ "mio 0.6.23",
2739
+ "num_cpus",
2740
+ "tokio-current-thread",
2741
+ "tokio-executor",
2742
+ "tokio-io",
2743
+ "tokio-reactor",
2744
+ "tokio-tcp",
2745
+ "tokio-threadpool",
2746
+ "tokio-timer",
2747
+ ]
2748
+
2749
+ [[package]]
2750
+ name = "tokio"
2751
+ version = "1.27.0"
2752
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2753
+ checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
2754
+ dependencies = [
2755
+ "autocfg 1.1.0",
2756
+ "bytes 1.4.0",
2757
+ "libc",
2758
+ "mio 0.8.6",
2759
+ "num_cpus",
2760
+ "parking_lot 0.12.1",
2761
+ "pin-project-lite",
2762
+ "signal-hook-registry",
2763
+ "socket2",
2764
+ "tokio-macros",
2765
+ "windows-sys 0.45.0",
2766
+ ]
2767
+
2768
+ [[package]]
2769
+ name = "tokio-buf"
2770
+ version = "0.1.1"
2771
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2772
+ checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
2773
+ dependencies = [
2774
+ "bytes 0.4.12",
2775
+ "either",
2776
+ "futures",
2777
+ ]
2778
+
2779
+ [[package]]
2780
+ name = "tokio-current-thread"
2781
+ version = "0.1.7"
2782
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2783
+ checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
2784
+ dependencies = [
2785
+ "futures",
2786
+ "tokio-executor",
2787
+ ]
2788
+
2789
+ [[package]]
2790
+ name = "tokio-executor"
2791
+ version = "0.1.10"
2792
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2793
+ checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
2794
+ dependencies = [
2795
+ "crossbeam-utils",
2796
+ "futures",
2797
+ ]
2798
+
2799
+ [[package]]
2800
+ name = "tokio-io"
2801
+ version = "0.1.13"
2802
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2803
+ checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
2804
+ dependencies = [
2805
+ "bytes 0.4.12",
2806
+ "futures",
2807
+ "log",
2808
+ ]
2809
+
2810
+ [[package]]
2811
+ name = "tokio-macros"
2812
+ version = "2.0.0"
2813
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2814
+ checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
2815
+ dependencies = [
2816
+ "proc-macro2 1.0.56",
2817
+ "quote 1.0.26",
2818
+ "syn 2.0.15",
2819
+ ]
2820
+
2821
+ [[package]]
2822
+ name = "tokio-native-tls"
2823
+ version = "0.3.1"
2824
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2825
+ checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
2826
+ dependencies = [
2827
+ "native-tls",
2828
+ "tokio 1.27.0",
2829
+ ]
2830
+
2831
+ [[package]]
2832
+ name = "tokio-reactor"
2833
+ version = "0.1.12"
2834
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2835
+ checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
2836
+ dependencies = [
2837
+ "crossbeam-utils",
2838
+ "futures",
2839
+ "lazy_static",
2840
+ "log",
2841
+ "mio 0.6.23",
2842
+ "num_cpus",
2843
+ "parking_lot 0.9.0",
2844
+ "slab",
2845
+ "tokio-executor",
2846
+ "tokio-io",
2847
+ "tokio-sync",
2848
+ ]
2849
+
2850
+ [[package]]
2851
+ name = "tokio-sync"
2852
+ version = "0.1.8"
2853
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2854
+ checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
2855
+ dependencies = [
2856
+ "fnv",
2857
+ "futures",
2858
+ ]
2859
+
2860
+ [[package]]
2861
+ name = "tokio-tcp"
2862
+ version = "0.1.4"
2863
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2864
+ checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
2865
+ dependencies = [
2866
+ "bytes 0.4.12",
2867
+ "futures",
2868
+ "iovec",
2869
+ "mio 0.6.23",
2870
+ "tokio-io",
2871
+ "tokio-reactor",
2872
+ ]
2873
+
2874
+ [[package]]
2875
+ name = "tokio-threadpool"
2876
+ version = "0.1.18"
2877
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2878
+ checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
2879
+ dependencies = [
2880
+ "crossbeam-deque",
2881
+ "crossbeam-queue",
2882
+ "crossbeam-utils",
2883
+ "futures",
2884
+ "lazy_static",
2885
+ "log",
2886
+ "num_cpus",
2887
+ "slab",
2888
+ "tokio-executor",
2889
+ ]
2890
+
2891
+ [[package]]
2892
+ name = "tokio-timer"
2893
+ version = "0.2.13"
2894
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2895
+ checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
2896
+ dependencies = [
2897
+ "crossbeam-utils",
2898
+ "futures",
2899
+ "slab",
2900
+ "tokio-executor",
2901
+ ]
2902
+
2903
+ [[package]]
2904
+ name = "tokio-util"
2905
+ version = "0.7.7"
2906
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2907
+ checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
2908
+ dependencies = [
2909
+ "bytes 1.4.0",
2910
+ "futures-core",
2911
+ "futures-sink",
2912
+ "pin-project-lite",
2913
+ "tokio 1.27.0",
2914
+ "tracing",
2915
+ ]
2916
+
2917
+ [[package]]
2918
+ name = "tower-service"
2919
+ version = "0.3.2"
2920
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2921
+ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
2922
+
2923
+ [[package]]
2924
+ name = "tracing"
2925
+ version = "0.1.37"
2926
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2927
+ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
2928
+ dependencies = [
2929
+ "cfg-if 1.0.0",
2930
+ "log",
2931
+ "pin-project-lite",
2932
+ "tracing-core",
2933
+ ]
2934
+
2935
+ [[package]]
2936
+ name = "tracing-core"
2937
+ version = "0.1.30"
2938
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2939
+ checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
2940
+ dependencies = [
2941
+ "once_cell",
2942
+ ]
2943
+
2944
+ [[package]]
2945
+ name = "try-lock"
2946
+ version = "0.2.4"
2947
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2948
+ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
2949
+
2950
+ [[package]]
2951
+ name = "try_from"
2952
+ version = "0.3.2"
2953
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2954
+ checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
2955
+ dependencies = [
2956
+ "cfg-if 0.1.10",
2957
+ ]
2958
+
2959
+ [[package]]
2960
+ name = "typenum"
2961
+ version = "1.16.0"
2962
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2963
+ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
2964
+
2965
+ [[package]]
2966
+ name = "ucd-trie"
2967
+ version = "0.1.5"
2968
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2969
+ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
2970
+
2971
+ [[package]]
2972
+ name = "unicase"
2973
+ version = "2.6.0"
2974
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2975
+ checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
2976
+ dependencies = [
2977
+ "version_check",
2978
+ ]
2979
+
2980
+ [[package]]
2981
+ name = "unicode-bidi"
2982
+ version = "0.3.13"
2983
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2984
+ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
2985
+
2986
+ [[package]]
2987
+ name = "unicode-ident"
2988
+ version = "1.0.8"
2989
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2990
+ checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
2991
+
2992
+ [[package]]
2993
+ name = "unicode-normalization"
2994
+ version = "0.1.22"
2995
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2996
+ checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
2997
+ dependencies = [
2998
+ "tinyvec",
2999
+ ]
3000
+
3001
+ [[package]]
3002
+ name = "unicode-width"
3003
+ version = "0.1.10"
3004
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3005
+ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
3006
+
3007
+ [[package]]
3008
+ name = "unicode-xid"
3009
+ version = "0.1.0"
3010
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3011
+ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
3012
+
3013
+ [[package]]
3014
+ name = "unicode-xid"
3015
+ version = "0.2.4"
3016
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3017
+ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
3018
+
3019
+ [[package]]
3020
+ name = "url"
3021
+ version = "1.7.2"
3022
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3023
+ checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
3024
+ dependencies = [
3025
+ "idna 0.1.5",
3026
+ "matches",
3027
+ "percent-encoding 1.0.1",
3028
+ ]
3029
+
3030
+ [[package]]
3031
+ name = "url"
3032
+ version = "2.3.1"
3033
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3034
+ checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
3035
+ dependencies = [
3036
+ "form_urlencoded",
3037
+ "idna 0.3.0",
3038
+ "percent-encoding 2.2.0",
3039
+ ]
3040
+
3041
+ [[package]]
3042
+ name = "utf-8"
3043
+ version = "0.7.6"
3044
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3045
+ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3046
+
3047
+ [[package]]
3048
+ name = "uuid"
3049
+ version = "0.7.4"
3050
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3051
+ checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
3052
+ dependencies = [
3053
+ "rand 0.6.5",
3054
+ ]
3055
+
3056
+ [[package]]
3057
+ name = "vcpkg"
3058
+ version = "0.2.15"
3059
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3060
+ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
3061
+
3062
+ [[package]]
3063
+ name = "version_check"
3064
+ version = "0.9.4"
3065
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3066
+ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
3067
+
3068
+ [[package]]
3069
+ name = "walkdir"
3070
+ version = "2.3.3"
3071
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3072
+ checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
3073
+ dependencies = [
3074
+ "same-file",
3075
+ "winapi-util",
3076
+ ]
3077
+
3078
+ [[package]]
3079
+ name = "want"
3080
+ version = "0.2.0"
3081
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3082
+ checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
3083
+ dependencies = [
3084
+ "futures",
3085
+ "log",
3086
+ "try-lock",
3087
+ ]
3088
+
3089
+ [[package]]
3090
+ name = "want"
3091
+ version = "0.3.0"
3092
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3093
+ checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
3094
+ dependencies = [
3095
+ "log",
3096
+ "try-lock",
3097
+ ]
3098
+
3099
+ [[package]]
3100
+ name = "wasi"
3101
+ version = "0.9.0+wasi-snapshot-preview1"
3102
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3103
+ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
3104
+
3105
+ [[package]]
3106
+ name = "wasi"
3107
+ version = "0.10.0+wasi-snapshot-preview1"
3108
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3109
+ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
3110
+
3111
+ [[package]]
3112
+ name = "wasi"
3113
+ version = "0.11.0+wasi-snapshot-preview1"
3114
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3115
+ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
3116
+
3117
+ [[package]]
3118
+ name = "wasm-bindgen"
3119
+ version = "0.2.84"
3120
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3121
+ checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
3122
+ dependencies = [
3123
+ "cfg-if 1.0.0",
3124
+ "wasm-bindgen-macro",
3125
+ ]
3126
+
3127
+ [[package]]
3128
+ name = "wasm-bindgen-backend"
3129
+ version = "0.2.84"
3130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3131
+ checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
3132
+ dependencies = [
3133
+ "bumpalo",
3134
+ "log",
3135
+ "once_cell",
3136
+ "proc-macro2 1.0.56",
3137
+ "quote 1.0.26",
3138
+ "syn 1.0.109",
3139
+ "wasm-bindgen-shared",
3140
+ ]
3141
+
3142
+ [[package]]
3143
+ name = "wasm-bindgen-futures"
3144
+ version = "0.4.34"
3145
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3146
+ checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
3147
+ dependencies = [
3148
+ "cfg-if 1.0.0",
3149
+ "js-sys",
3150
+ "wasm-bindgen",
3151
+ "web-sys",
3152
+ ]
3153
+
3154
+ [[package]]
3155
+ name = "wasm-bindgen-macro"
3156
+ version = "0.2.84"
3157
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3158
+ checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
3159
+ dependencies = [
3160
+ "quote 1.0.26",
3161
+ "wasm-bindgen-macro-support",
3162
+ ]
3163
+
3164
+ [[package]]
3165
+ name = "wasm-bindgen-macro-support"
3166
+ version = "0.2.84"
3167
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3168
+ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
3169
+ dependencies = [
3170
+ "proc-macro2 1.0.56",
3171
+ "quote 1.0.26",
3172
+ "syn 1.0.109",
3173
+ "wasm-bindgen-backend",
3174
+ "wasm-bindgen-shared",
3175
+ ]
3176
+
3177
+ [[package]]
3178
+ name = "wasm-bindgen-shared"
3179
+ version = "0.2.84"
3180
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3181
+ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
3182
+
3183
+ [[package]]
3184
+ name = "web-sys"
3185
+ version = "0.3.61"
3186
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3187
+ checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
3188
+ dependencies = [
3189
+ "js-sys",
3190
+ "wasm-bindgen",
3191
+ ]
3192
+
3193
+ [[package]]
3194
+ name = "websurfx"
3195
+ version = "0.1.0"
3196
+ dependencies = [
3197
+ "actix-files",
3198
+ "actix-web",
3199
+ "fake-useragent",
3200
+ "handlebars",
3201
+ "reqwest 0.11.16",
3202
+ "scraper",
3203
+ "serde",
3204
+ "serde_json",
3205
+ "tokio 1.27.0",
3206
+ ]
3207
+
3208
+ [[package]]
3209
+ name = "winapi"
3210
+ version = "0.2.8"
3211
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3212
+ checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
3213
+
3214
+ [[package]]
3215
+ name = "winapi"
3216
+ version = "0.3.9"
3217
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3218
+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3219
+ dependencies = [
3220
+ "winapi-i686-pc-windows-gnu",
3221
+ "winapi-x86_64-pc-windows-gnu",
3222
+ ]
3223
+
3224
+ [[package]]
3225
+ name = "winapi-build"
3226
+ version = "0.1.1"
3227
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3228
+ checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
3229
+
3230
+ [[package]]
3231
+ name = "winapi-i686-pc-windows-gnu"
3232
+ version = "0.4.0"
3233
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3234
+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3235
+
3236
+ [[package]]
3237
+ name = "winapi-util"
3238
+ version = "0.1.5"
3239
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3240
+ checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
3241
+ dependencies = [
3242
+ "winapi 0.3.9",
3243
+ ]
3244
+
3245
+ [[package]]
3246
+ name = "winapi-x86_64-pc-windows-gnu"
3247
+ version = "0.4.0"
3248
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3249
+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3250
+
3251
+ [[package]]
3252
+ name = "windows-sys"
3253
+ version = "0.42.0"
3254
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3255
+ checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
3256
+ dependencies = [
3257
+ "windows_aarch64_gnullvm 0.42.2",
3258
+ "windows_aarch64_msvc 0.42.2",
3259
+ "windows_i686_gnu 0.42.2",
3260
+ "windows_i686_msvc 0.42.2",
3261
+ "windows_x86_64_gnu 0.42.2",
3262
+ "windows_x86_64_gnullvm 0.42.2",
3263
+ "windows_x86_64_msvc 0.42.2",
3264
+ ]
3265
+
3266
+ [[package]]
3267
+ name = "windows-sys"
3268
+ version = "0.45.0"
3269
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3270
+ checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
3271
+ dependencies = [
3272
+ "windows-targets 0.42.2",
3273
+ ]
3274
+
3275
+ [[package]]
3276
+ name = "windows-sys"
3277
+ version = "0.48.0"
3278
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3279
+ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
3280
+ dependencies = [
3281
+ "windows-targets 0.48.0",
3282
+ ]
3283
+
3284
+ [[package]]
3285
+ name = "windows-targets"
3286
+ version = "0.42.2"
3287
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3288
+ checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
3289
+ dependencies = [
3290
+ "windows_aarch64_gnullvm 0.42.2",
3291
+ "windows_aarch64_msvc 0.42.2",
3292
+ "windows_i686_gnu 0.42.2",
3293
+ "windows_i686_msvc 0.42.2",
3294
+ "windows_x86_64_gnu 0.42.2",
3295
+ "windows_x86_64_gnullvm 0.42.2",
3296
+ "windows_x86_64_msvc 0.42.2",
3297
+ ]
3298
+
3299
+ [[package]]
3300
+ name = "windows-targets"
3301
+ version = "0.48.0"
3302
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3303
+ checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
3304
+ dependencies = [
3305
+ "windows_aarch64_gnullvm 0.48.0",
3306
+ "windows_aarch64_msvc 0.48.0",
3307
+ "windows_i686_gnu 0.48.0",
3308
+ "windows_i686_msvc 0.48.0",
3309
+ "windows_x86_64_gnu 0.48.0",
3310
+ "windows_x86_64_gnullvm 0.48.0",
3311
+ "windows_x86_64_msvc 0.48.0",
3312
+ ]
3313
+
3314
+ [[package]]
3315
+ name = "windows_aarch64_gnullvm"
3316
+ version = "0.42.2"
3317
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3318
+ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
3319
+
3320
+ [[package]]
3321
+ name = "windows_aarch64_gnullvm"
3322
+ version = "0.48.0"
3323
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3324
+ checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
3325
+
3326
+ [[package]]
3327
+ name = "windows_aarch64_msvc"
3328
+ version = "0.42.2"
3329
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3330
+ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
3331
+
3332
+ [[package]]
3333
+ name = "windows_aarch64_msvc"
3334
+ version = "0.48.0"
3335
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3336
+ checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
3337
+
3338
+ [[package]]
3339
+ name = "windows_i686_gnu"
3340
+ version = "0.42.2"
3341
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3342
+ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
3343
+
3344
+ [[package]]
3345
+ name = "windows_i686_gnu"
3346
+ version = "0.48.0"
3347
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3348
+ checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
3349
+
3350
+ [[package]]
3351
+ name = "windows_i686_msvc"
3352
+ version = "0.42.2"
3353
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3354
+ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
3355
+
3356
+ [[package]]
3357
+ name = "windows_i686_msvc"
3358
+ version = "0.48.0"
3359
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3360
+ checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
3361
+
3362
+ [[package]]
3363
+ name = "windows_x86_64_gnu"
3364
+ version = "0.42.2"
3365
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3366
+ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
3367
+
3368
+ [[package]]
3369
+ name = "windows_x86_64_gnu"
3370
+ version = "0.48.0"
3371
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3372
+ checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
3373
+
3374
+ [[package]]
3375
+ name = "windows_x86_64_gnullvm"
3376
+ version = "0.42.2"
3377
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3378
+ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
3379
+
3380
+ [[package]]
3381
+ name = "windows_x86_64_gnullvm"
3382
+ version = "0.48.0"
3383
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3384
+ checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
3385
+
3386
+ [[package]]
3387
+ name = "windows_x86_64_msvc"
3388
+ version = "0.42.2"
3389
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3390
+ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
3391
+
3392
+ [[package]]
3393
+ name = "windows_x86_64_msvc"
3394
+ version = "0.48.0"
3395
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3396
+ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
3397
+
3398
+ [[package]]
3399
+ name = "winreg"
3400
+ version = "0.6.2"
3401
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3402
+ checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
3403
+ dependencies = [
3404
+ "winapi 0.3.9",
3405
+ ]
3406
+
3407
+ [[package]]
3408
+ name = "winreg"
3409
+ version = "0.10.1"
3410
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3411
+ checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
3412
+ dependencies = [
3413
+ "winapi 0.3.9",
3414
+ ]
3415
+
3416
+ [[package]]
3417
+ name = "ws2_32-sys"
3418
+ version = "0.2.1"
3419
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3420
+ checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
3421
+ dependencies = [
3422
+ "winapi 0.2.8",
3423
+ "winapi-build",
3424
+ ]
3425
+
3426
+ [[package]]
3427
+ name = "zstd"
3428
+ version = "0.12.3+zstd.1.5.2"
3429
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3430
+ checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
3431
+ dependencies = [
3432
+ "zstd-safe",
3433
+ ]
3434
+
3435
+ [[package]]
3436
+ name = "zstd-safe"
3437
+ version = "6.0.5+zstd.1.5.4"
3438
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3439
+ checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
3440
+ dependencies = [
3441
+ "libc",
3442
+ "zstd-sys",
3443
+ ]
3444
+
3445
+ [[package]]
3446
+ name = "zstd-sys"
3447
+ version = "2.0.8+zstd.1.5.5"
3448
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3449
+ checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
3450
+ dependencies = [
3451
+ "cc",
3452
+ "libc",
3453
+ "pkg-config",
3454
+ ]
Cargo.toml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [package]
2
+ name = "websurfx"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+
6
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
+
8
+ [dependencies]
9
+ reqwest = {version="*",features=["json"]}
10
+ tokio = {version="*",features=["full"]}
11
+ serde = {version="*",features=["derive"]}
12
+ handlebars = { version = "4.2.1", features = ["dir_source"] }
13
+ scraper = {version="*"}
14
+ actix-web = {version="4"}
15
+ actix-files = {version="0.6.2"}
16
+ serde_json = {version="*"}
17
+ fake-useragent = {version="*"}
README.org ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * Websurfx
2
+
3
+ a lightening fast, privacy respecting, secure [[https://en.wikipedia.org/wiki/Metasearch_engine][meta search engine]]. (pronounced as websurface or web-surface //wɛbˈsɜːrfəs//.)
4
+
5
+
6
+ * Installation and Testing
7
+
8
+ To start installing, testing and playing around with search engine. Clone the repo and then *cargo run* as shown below:
9
+
10
+ #+begin_src shell
11
+ git clone https://gitlab.com/NEON-MMD/websurfx.git
12
+ cd websurfx
13
+ cargo run
14
+ #+end_src
15
+
16
+ and then open your browser of choice and visit [[http://127.0.0.1:8080]] and then you can start playing with it right away.
17
+
18
+ *Important Note:* Do not over refresh your page or put too many requests or start hosting on production server as there are no behaviours right now in the code to prevent ip blocking (it is still work under process) and you can potential can get your ip blocked/banned and also the project is still under testing phase and far from being complete and ready to be hosted on production machines.
19
+
20
+ * Contributing
21
+
22
+ Contributions are welcome. It does not matter who you are you can still contribute to the project in your way :).
23
+
24
+ ** Not a developer but still want to contribute
25
+
26
+ Here is [[https://youtu.be/FccdqCucVSI][video]] by Mr. Nick on how to contribute and credit to him as well
27
+
28
+ ** Developer
29
+
30
+ If you are developer, have a look at the [[file:CONTRIBUTING.org][CONTRIBUTING.org]] document for more information.
31
+
32
+ * License
33
+
34
+ The project is available under the [[file:LICENSE][GPLv3]] license.
goals.org ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * TODO Goals for v0.1.0
2
+
3
+ - [ ] Add code to remove nsfw content from search results using a blocklist.
4
+
5
+ - [ ] Add code to disallow user to search sensitive content (similar functionality to swisscows search engine) if strict safe search is turned on.
6
+
7
+ - [ ] Add better error handling code to handle scraping error, reqwest error, etc.
8
+
9
+ - [ ] Add ability to change colorschemes with the theme style of the page.
10
+
11
+ =For example:=
12
+
13
+ If there is simple theme is there then there is option of 9 different colorschemes to choose from such as catppuccin-mocha, solarized dark, nord, etc.
14
+
15
+ - [ ] Add random delays and behaviours to emulate human behaviour if needed to evade ip blocking.
16
+
17
+ - [ ] Add python/lua config to the search engine and also ensuring and giving more control to the user (server maintainer/administrator).
18
+
19
+ - [ ] Add settings page to configure search engine on the fly by the user and save his preferences using cookies.
20
+
21
+ - [ ] Add search engine logo to index page and to the navbar (on the right hand side).
22
+
23
+ - [X] Add code to generate random user agent to protect user's privacy.
24
+
25
+ - [X] Add duckduckgo engine as an upstream.
26
+
27
+ - [X] Add atleast one searx engine instance as an upstream engine.
28
+
29
+ - [X] Add pagination support.
30
+
31
+ - [X] Add basic handlebars pages and theme with catppuccin colorscheme.
32
+
33
+ * Goals for the future
34
+
35
+ - Move from handlebars to faster templating engine /Tera/.
36
+
37
+ - Adding more upstream search engines.
38
+
39
+ - Add dorking support (like google).
40
+
41
+ - Add advanced search functionality and dropdown menu for it.
42
+
43
+ - Add more categories to search engine's search page like images, files, all, news, maps, etc.
44
+
45
+ - Add advanced image functionality to images category (which will be a great aid for content creators, video editors, etc.).
46
+
47
+ - Add GPT integration (taking insipiration from langchain module of python or incorporating it using pyo3) and give user the choice to add api key (giving user the choice is important as there are many people who are against ai and so this will ensure that those people also get satisfied like if they don't gpt so they will not their api key and so it will be disabled).
public/images/robot-404.svg ADDED
public/robots.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ User-agent: *
2
+ Allow: /search
3
+ Disallow: /*?*q=*
4
+ Disallow: /static
5
+ Disallow: /images
public/static/catppuccin-mocha.css ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ /* catppuccin-mocha colorscheme */
3
+ --bg: #1e1e2e;
4
+ --fg: #cdd6f4;
5
+ --1: #45475a;
6
+ --2: #f38ba8;
7
+ --3: #a6e3a1;
8
+ --4: #f9e2af;
9
+ --5: #89b4fa;
10
+ --6: #f5c2e7;
11
+ --7: #ffffff;
12
+ }
public/static/index.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ let search_box = document.querySelector('input')
2
+ function search_web() {
3
+ window.location = `search?q=${search_box.value}`
4
+ }
5
+
6
+ search_box.addEventListener('keyup', (e) => {
7
+ if (e.keyCode === 13) {
8
+ search_web()
9
+ }
10
+ })
public/static/style.css ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('./catppuccin-mocha.css');
2
+
3
+ * {
4
+ padding: 0;
5
+ margin: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ html {
10
+ font-size: 62.5%;
11
+ }
12
+
13
+ body {
14
+ display: flex;
15
+ flex-direction: column;
16
+ justify-content: space-between;
17
+ align-items: center;
18
+ height: 100vh;
19
+ background: var(--1);
20
+ }
21
+
22
+ /* styles for the index page */
23
+
24
+ .search-container {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 5rem;
28
+ justify-content: center;
29
+ align-items: center;
30
+ }
31
+
32
+ .search-container div {
33
+ display: flex;
34
+ }
35
+
36
+ /* styles for the search box and search button */
37
+
38
+ .search_bar {
39
+ display: flex;
40
+ }
41
+
42
+ .search_bar input {
43
+ padding: 1rem;
44
+ width: 50rem;
45
+ height: 3rem;
46
+ outline: none;
47
+ border: none;
48
+ box-shadow: rgba(0, 0, 0, 1);
49
+ background: var(--fg);
50
+ }
51
+
52
+ .search_bar button {
53
+ padding: 1rem;
54
+ border-radius: 0;
55
+ height: 3rem;
56
+ display: flex;
57
+ justify-content: center;
58
+ align-items: center;
59
+ outline: none;
60
+ border: none;
61
+ gap: 0;
62
+ background: var(--bg);
63
+ color: var(--3);
64
+ font-weight: 600;
65
+ letter-spacing: 0.1rem;
66
+ }
67
+
68
+ .search_bar button:active,
69
+ .search_bar button:hover {
70
+ filter: brightness(1.2);
71
+ }
72
+
73
+ /* styles for the footer and header */
74
+
75
+ header {
76
+ background: var(--bg);
77
+ width: 100%;
78
+ display: flex;
79
+ justify-content: right;
80
+ align-items: center;
81
+ padding: 1rem;
82
+ }
83
+
84
+ header ul,
85
+ footer ul {
86
+ list-style: none;
87
+ display: flex;
88
+ justify-content: space-around;
89
+ align-items: center;
90
+ font-size: 1.5rem;
91
+ gap: 2rem;
92
+ }
93
+
94
+ header ul li a,
95
+ footer ul li a,
96
+ header ul li a:visited,
97
+ footer ul li a:visited {
98
+ text-decoration: none;
99
+ color: var(--2);
100
+ text-transform: capitalize;
101
+ letter-spacing: 0.1rem;
102
+ }
103
+
104
+ header ul li a {
105
+ font-weight: 600;
106
+ }
107
+
108
+ header ul li a:hover,
109
+ footer ul li a:hover {
110
+ color: var(--5);
111
+ }
112
+
113
+ footer div span {
114
+ font-size: 1.5rem;
115
+ color: var(--4);
116
+ }
117
+
118
+ footer div {
119
+ display: flex;
120
+ gap: 1rem;
121
+ }
122
+
123
+ footer {
124
+ background: var(--bg);
125
+ width: 100%;
126
+ padding: 1rem;
127
+ display: flex;
128
+ flex-direction: column;
129
+ justify-content: center;
130
+ align-items: center;
131
+ }
132
+
133
+ /* Styles for the search page */
134
+
135
+ .results {
136
+ width: 90%;
137
+ display: flex;
138
+ flex-direction: column;
139
+ justify-content: space-around;
140
+ }
141
+
142
+ .results .search_bar {
143
+ margin: 1rem 0;
144
+ }
145
+
146
+ .results_aggregated {
147
+ display: flex;
148
+ flex-direction: column;
149
+ justify-content: space-between;
150
+ margin: 2rem 0;
151
+ }
152
+
153
+ .results_aggregated .result {
154
+ display: flex;
155
+ flex-direction: column;
156
+ margin-top: 1rem;
157
+ }
158
+
159
+ .results_aggregated .result h1 a {
160
+ font-size: 1.5rem;
161
+ color: var(--2);
162
+ text-decoration: none;
163
+ letter-spacing: 0.1rem;
164
+ }
165
+
166
+ .results_aggregated .result h1 a:hover {
167
+ color: var(--5);
168
+ }
169
+
170
+ .results_aggregated .result h1 a:visited {
171
+ color: var(--bg);
172
+ }
173
+
174
+ .results_aggregated .result small {
175
+ color: var(--3);
176
+ font-size: 1.1rem;
177
+ word-wrap: break-word;
178
+ line-break: anywhere;
179
+ }
180
+
181
+ .results_aggregated .result p {
182
+ color: var(--fg);
183
+ font-size: 1.2rem;
184
+ margin-top: 0.3rem;
185
+ word-wrap: break-word;
186
+ line-break: anywhere;
187
+ }
188
+
189
+ .results_aggregated .result .upstream_engines {
190
+ text-align: right;
191
+ font-size: 1.2rem;
192
+ padding: 1rem;
193
+ color: var(--5);
194
+ }
195
+
196
+ /* Styles for the 404 page */
197
+
198
+ .error_container {
199
+ display: flex;
200
+ justify-content: center;
201
+ align-items: center;
202
+ width: 100%;
203
+ gap: 5rem;
204
+ }
205
+
206
+ .error_container img {
207
+ width: 30%;
208
+ }
209
+
210
+ .error_content {
211
+ display: flex;
212
+ flex-direction: column;
213
+ justify-content: center;
214
+ gap: 1rem;
215
+ }
216
+
217
+ .error_content h1,
218
+ .error_content h2 {
219
+ letter-spacing: 0.1rem;
220
+ }
221
+
222
+ .error_content h1 {
223
+ font-size: 3rem;
224
+ }
225
+
226
+ .error_content h2 {
227
+ font-size: 2rem;
228
+ }
229
+
230
+ .error_content p {
231
+ font-size: 1.2rem;
232
+ }
233
+
234
+ .error_content p a,
235
+ .error_content p a:visited {
236
+ color: var(--2);
237
+ text-decoration: none;
238
+ }
239
+
240
+ .error_content p a:hover {
241
+ color: var(--5);
242
+ }
public/templates/404.html ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {{>header}}
2
+ <main class="error_container">
3
+ <img src="images/robot-404.svg" alt="Image of broken robot." />
4
+ <div class="error_content">
5
+ <h1>Aw! snap</h1>
6
+ <h2>404 Page Not Found!</h2>
7
+ <p>Go to <a href="/">search page</a></p>
8
+ </div>
9
+ </main>
10
+ {{>footer}}
public/templates/about.html ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {{>header}}
2
+ <main class="about-container">
3
+ <h1>Websurfx</h1>
4
+ <small
5
+ >a lightening fast, privacy respecting, secure meta search engine</small
6
+ >
7
+ <article>
8
+ Lorem ipsum dolor sit amet, officia excepteur ex fugiat reprehenderit enim
9
+ labore culpa sint ad nisi Lorem pariatur mollit ex esse exercitation amet.
10
+ Nisi anim cupidatat excepteur officia. Reprehenderit nostrud nostrud ipsum
11
+ Lorem est aliquip amet voluptate voluptate dolor minim nulla est proident.
12
+ Nostrud officia pariatur ut officia. Sit irure elit esse ea nulla sunt ex
13
+ occaecat reprehenderit commodo officia dolor Lorem duis laboris cupidatat
14
+ officia voluptate. Culpa proident adipisicing id nulla nisi laboris ex in
15
+ Lorem sunt duis officia eiusmod. Aliqua reprehenderit commodo ex non
16
+ excepteur duis sunt velit enim. Voluptate laboris sint cupidatat ullamco ut
17
+ ea consectetur et est culpa et culpa duis.
18
+ </article>
19
+ </main>
20
+ {{>footer}}
public/templates/footer.html ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <footer>
2
+ <div>
3
+ <span>Powered By <b>Websurfx</b></span><span>-</span><span>a lightening fast, privacy respecting, secure meta
4
+ search engine</span>
5
+ </div>
6
+ <div>
7
+ <ul>
8
+ <li><a href="#">Source Code</a></li>
9
+ <li><a href="#">Issues/Bugs</a></li>
10
+ </ul>
11
+ </div>
12
+ </footer>
13
+ </body>
14
+
15
+ </html>
public/templates/header.html ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title></title>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <link href="static/style.css" rel="stylesheet" type="text/css" />
8
+ </head>
9
+
10
+ <body>
11
+ <header>{{>navbar}}</header>
public/templates/index.html ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {{>header}}
2
+ <main class="search-container">
3
+ <img src="images/fps_logo.png" alt="Websurfx meta-search engine logo" />
4
+ {{>search_bar}}
5
+ </main>
6
+ <script src="static/index.js"></script>
7
+ {{>footer}}
public/templates/navbar.html ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <nav>
2
+ <ul>
3
+ <li><a href="about">about</a></li>
4
+ <li><a href="settings">settings</a></li>
5
+ </ul>
6
+ </nav>
public/templates/search.html ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {{>header}}
2
+ <main class="results">
3
+ {{>search_bar}}
4
+ <div class="results_aggregated">
5
+ {{#each results}}
6
+ <div class="result">
7
+ <h1><a href="{{this.visitingUrl}}">{{{this.title}}}</a></h1>
8
+ <small>{{this.url}}</small>
9
+ <p>{{{this.description}}}</p>
10
+ <div class="upstream_engines">
11
+ {{#each engine}}
12
+ <span>{{this}}</span>
13
+ {{/each}}
14
+ </div>
15
+ </div>
16
+ {{/each}}
17
+ </div>
18
+ </main>
19
+ <script src="static/index.js"></script>
20
+ {{>footer}}
public/templates/search_bar.html ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ <div class="search_bar">
2
+ <input
3
+ type="search"
4
+ name="search-box"
5
+ value="{{this.pageQuery}}"
6
+ placeholder="Type to search"
7
+ />
8
+ <button type="submit" onclick="search_web()">search</button>
9
+ </div>
public/templates/settings.html ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {{>header}}
2
+ <main class="settings">
3
+ <h1>Page is under construction</h1>
4
+ </main>
5
+ {{>footer}}
src/bin/websurfx.rs ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use websurfx::server::routes;
2
+
3
+ use actix_files as fs;
4
+ use actix_web::{web, App, HttpServer};
5
+ use handlebars::Handlebars;
6
+
7
+ // The function that launches the main server and handle routing functionality
8
+ #[actix_web::main]
9
+ async fn main() -> std::io::Result<()> {
10
+ let mut handlebars: Handlebars = Handlebars::new();
11
+
12
+ handlebars
13
+ .register_templates_directory(".html", "./public/templates")
14
+ .unwrap();
15
+
16
+ let handlebars_ref: web::Data<Handlebars> = web::Data::new(handlebars);
17
+
18
+ HttpServer::new(move || {
19
+ App::new()
20
+ .app_data(handlebars_ref.clone())
21
+ // Serve images and static files (css and js files).
22
+ .service(fs::Files::new("/static", "./public/static").show_files_listing())
23
+ .service(fs::Files::new("/images", "./public/images").show_files_listing())
24
+ .service(routes::robots_data) // robots.txt
25
+ .service(routes::index) // index page
26
+ .service(routes::search) // search page
27
+ .service(routes::about) // about page
28
+ .service(routes::settings) // settings page
29
+ .default_service(web::route().to(routes::not_found)) // error page
30
+ })
31
+ // Start server on 127.0.0.1:8080
32
+ .bind(("127.0.0.1", 8080))?
33
+ .run()
34
+ .await
35
+ }
src/engines/duckduckgo.rs ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use std::collections::HashMap;
2
+
3
+ use reqwest::header::USER_AGENT;
4
+ use scraper::{Html, Selector};
5
+
6
+ use crate::search_results_handler::aggregation_models::RawSearchResult;
7
+
8
+ // This function scrapes results from the upstream engine duckduckgo and puts all the scraped
9
+ // results like title, visiting_url (href in html),engine (from which engine it was fetched from)
10
+ // and description in a RawSearchResult and then adds that to HashMap whose keys are url and
11
+ // values are RawSearchResult struct and then returns it within a Result enum.
12
+ pub async fn results(
13
+ query: &str,
14
+ page: Option<u32>,
15
+ user_agent: &str,
16
+ ) -> Result<HashMap<String, RawSearchResult>, Box<dyn std::error::Error>> {
17
+ // Page number can be missing or empty string and so appropriate handling is required
18
+ // so that upstream server recieves valid page number.
19
+ let url: String = match page {
20
+ Some(page_number) => {
21
+ if page_number <= 1 {
22
+ format!("https://html.duckduckgo.com/html/?q={query}&s=&dc=&v=1&o=json&api=/d.js")
23
+ } else {
24
+ format!(
25
+ "https://duckduckgo.com/html/?q={}&s={}&dc={}&v=1&o=json&api=/d.js",
26
+ query,
27
+ page_number / 2 * 30,
28
+ page_number / 2 * 30 + 1
29
+ )
30
+ }
31
+ }
32
+ None => format!("https://html.duckduckgo.com/html/?q={query}&s=&dc=&v=1&o=json&api=/d.js"),
33
+ };
34
+
35
+ // fetch the html from upstream duckduckgo engine
36
+ // TODO: Write better error handling code to handle no results case.
37
+ let results: String = reqwest::Client::new()
38
+ .get(url)
39
+ .header(USER_AGENT, user_agent)
40
+ .send()
41
+ .await?
42
+ .text()
43
+ .await?;
44
+
45
+ let document: Html = Html::parse_document(&results);
46
+ let results: Selector = Selector::parse(".result")?;
47
+ let result_title: Selector = Selector::parse(".result__a")?;
48
+ let result_url: Selector = Selector::parse(".result__url")?;
49
+ let result_desc: Selector = Selector::parse(".result__snippet")?;
50
+
51
+ let mut search_results: HashMap<String, RawSearchResult> = HashMap::new();
52
+
53
+ // scrape all the results from the html
54
+ for result in document.select(&results) {
55
+ let search_result: RawSearchResult = RawSearchResult {
56
+ title: result
57
+ .select(&result_title)
58
+ .next()
59
+ .unwrap()
60
+ .inner_html()
61
+ .trim()
62
+ .to_string(),
63
+ visiting_url: format!(
64
+ "https://{}",
65
+ result
66
+ .select(&result_url)
67
+ .next()
68
+ .unwrap()
69
+ .inner_html()
70
+ .trim()
71
+ ),
72
+ description: result
73
+ .select(&result_desc)
74
+ .next()
75
+ .unwrap()
76
+ .inner_html()
77
+ .trim()
78
+ .to_string(),
79
+ engine: vec!["duckduckgo".to_string()],
80
+ };
81
+ search_results.insert(
82
+ format!(
83
+ "https://{}",
84
+ result
85
+ .select(&result_url)
86
+ .next()
87
+ .unwrap()
88
+ .inner_html()
89
+ .trim()
90
+ ),
91
+ search_result,
92
+ );
93
+ }
94
+
95
+ Ok(search_results)
96
+ }
src/engines/mod.rs ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ pub mod duckduckgo;
2
+ pub mod searx;
src/engines/searx.rs ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use std::collections::HashMap;
2
+
3
+ use reqwest::header::USER_AGENT;
4
+ use scraper::{Html, Selector};
5
+
6
+ use crate::search_results_handler::aggregation_models::RawSearchResult;
7
+
8
+ // This function scrapes results from the upstream engine searx instance and puts all the scraped
9
+ // results like title, visiting_url (href in html),engine (from which engine it was fetched from)
10
+ // and description in a RawSearchResult and then adds that to HashMap whose keys are url and
11
+ // values are RawSearchResult struct and then returns it within a Result enum.
12
+ pub async fn results(
13
+ query: &str,
14
+ page: Option<u32>,
15
+ user_agent: &str,
16
+ ) -> Result<HashMap<String, RawSearchResult>, Box<dyn std::error::Error>> {
17
+ // Page number can be missing or empty string and so appropriate handling is required
18
+ // so that upstream server recieves valid page number.
19
+ let url: String = match page {
20
+ Some(page_number) => {
21
+ if page_number <= 1 {
22
+ format!("https://searx.work/search?q={query}")
23
+ } else {
24
+ format!("https://searx.work/search?q={query}&pageno={page_number}",)
25
+ }
26
+ }
27
+ None => format!("https://searx.work/search?q={query}"),
28
+ };
29
+
30
+ // fetch the html from upstream searx instance engine
31
+ // TODO: Write better error handling code to handle no results case.
32
+ let results: String = reqwest::Client::new()
33
+ .get(url)
34
+ .header(USER_AGENT, user_agent)
35
+ .send()
36
+ .await?
37
+ .text()
38
+ .await?;
39
+
40
+ let document: Html = Html::parse_document(&results);
41
+ let results: Selector = Selector::parse(".result")?;
42
+ let result_title: Selector = Selector::parse("h3>a")?;
43
+ let result_url: Selector = Selector::parse("h3>a")?;
44
+ let result_desc: Selector = Selector::parse(".content")?;
45
+
46
+ let mut search_results: HashMap<String, RawSearchResult> = HashMap::new();
47
+
48
+ // scrape all the results from the html
49
+ for result in document.select(&results) {
50
+ let search_result: RawSearchResult = RawSearchResult {
51
+ title: result
52
+ .select(&result_title)
53
+ .next()
54
+ .unwrap()
55
+ .inner_html()
56
+ .trim()
57
+ .to_string(),
58
+ visiting_url: result
59
+ .select(&result_url)
60
+ .next()
61
+ .unwrap()
62
+ .value()
63
+ .attr("href")
64
+ .unwrap()
65
+ .to_string(),
66
+ description: result
67
+ .select(&result_desc)
68
+ .next()
69
+ .unwrap()
70
+ .inner_html()
71
+ .trim()
72
+ .to_string(),
73
+ engine: vec!["searx".to_string()],
74
+ };
75
+ search_results.insert(
76
+ result
77
+ .select(&result_url)
78
+ .next()
79
+ .unwrap()
80
+ .value()
81
+ .attr("href")
82
+ .unwrap()
83
+ .to_string(),
84
+ search_result,
85
+ );
86
+ }
87
+
88
+ Ok(search_results)
89
+ }
src/lib.rs ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ pub mod engines;
2
+ pub mod server;
3
+ pub mod search_results_handler;
src/search_results_handler/aggregation_models.rs ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use serde::Serialize;
2
+
3
+ #[derive(Debug, Serialize)]
4
+ #[serde(rename_all = "camelCase")]
5
+ pub struct SearchResult {
6
+ pub title: String,
7
+ pub visiting_url: String,
8
+ pub url: String,
9
+ pub description: String,
10
+ pub engine: Vec<String>,
11
+ }
12
+
13
+ pub struct RawSearchResult {
14
+ pub title: String,
15
+ pub visiting_url: String,
16
+ pub description: String,
17
+ pub engine: Vec<String>,
18
+ }
19
+
20
+ #[derive(Debug, Serialize)]
21
+ #[serde(rename_all = "camelCase")]
22
+ pub struct SearchResults {
23
+ pub results: Vec<SearchResult>,
24
+ pub page_query: String,
25
+ }
src/search_results_handler/aggregator.rs ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use std::collections::HashMap;
2
+
3
+ use fake_useragent::{Browsers, UserAgentsBuilder};
4
+
5
+ use super::aggregation_models::{RawSearchResult, SearchResult, SearchResults};
6
+ use crate::engines::{duckduckgo, searx};
7
+
8
+ // A function that aggregates all the scraped results from the above upstream engines and
9
+ // then removes duplicate results and if two results are found to be from two or more engines
10
+ // then puts their names together to show the results are fetched from these upstream engines
11
+ // and then removes all data from the HashMap and puts into a struct of all results aggregated
12
+ // into a vector and also adds the query used into the struct this is neccessory because otherwise
13
+ // the search bar in search remains empty if searched from the query url
14
+ //
15
+ // For Example:
16
+ //
17
+ // If you search from the url like *https://127.0.0.1/search?q=huston* then the search bar should
18
+ // contain the word huston and not remain empty.
19
+ pub async fn aggregate(
20
+ query: &str,
21
+ page: Option<u32>,
22
+ ) -> Result<SearchResults, Box<dyn std::error::Error>> {
23
+ // Generate random user agent to improve privacy of the user.
24
+ let user_agent: String = UserAgentsBuilder::new()
25
+ .cache(false)
26
+ .dir("/tmp")
27
+ .thread(1)
28
+ .set_browsers(
29
+ Browsers::new()
30
+ .set_chrome()
31
+ .set_safari()
32
+ .set_edge()
33
+ .set_firefox()
34
+ .set_mozilla(),
35
+ )
36
+ .build()
37
+ .random()
38
+ .to_string();
39
+
40
+ let mut result_map: HashMap<String, RawSearchResult> = HashMap::new();
41
+
42
+ let ddg_map_results: HashMap<String, RawSearchResult> =
43
+ duckduckgo::results(query, page, &user_agent).await?;
44
+ let searx_map_results: HashMap<String, RawSearchResult> =
45
+ searx::results(query, page, &user_agent).await?;
46
+
47
+ result_map.extend(ddg_map_results);
48
+
49
+ for (key, value) in searx_map_results.into_iter() {
50
+ if result_map.contains_key(&key) {
51
+ result_map
52
+ .get_mut(&key)
53
+ .unwrap()
54
+ .engine
55
+ .push(value.engine.get(0).unwrap().to_string())
56
+ } else {
57
+ result_map.insert(key, value);
58
+ }
59
+ }
60
+
61
+ let mut search_results: Vec<SearchResult> = Vec::new();
62
+
63
+ for (key, value) in result_map.into_iter() {
64
+ search_results.push(SearchResult {
65
+ title: value.title,
66
+ visiting_url: value.visiting_url,
67
+ url: key,
68
+ description: value.description,
69
+ engine: value.engine,
70
+ })
71
+ }
72
+
73
+ Ok(SearchResults {
74
+ results: search_results,
75
+ page_query: query.to_string(),
76
+ })
77
+ }
src/search_results_handler/mod.rs ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ pub mod aggregation_models;
2
+ pub mod aggregator;
src/server/mod.rs ADDED
@@ -0,0 +1 @@
 
 
1
+ pub mod routes;
src/server/routes.rs ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use std::fs::read_to_string;
2
+
3
+ use crate::search_results_handler::aggregator::aggregate;
4
+ use actix_web::{get, web, HttpRequest, HttpResponse};
5
+ use handlebars::Handlebars;
6
+ use serde::Deserialize;
7
+
8
+ #[derive(Debug, Deserialize)]
9
+ struct SearchParams {
10
+ q: Option<String>,
11
+ page: Option<u32>,
12
+ }
13
+
14
+ #[get("/")]
15
+ pub async fn index(
16
+ hbs: web::Data<Handlebars<'_>>,
17
+ ) -> Result<HttpResponse, Box<dyn std::error::Error>> {
18
+ let page_content: String = hbs.render("index", &"").unwrap();
19
+ Ok(HttpResponse::Ok().body(page_content))
20
+ }
21
+
22
+ pub async fn not_found(
23
+ hbs: web::Data<Handlebars<'_>>,
24
+ ) -> Result<HttpResponse, Box<dyn std::error::Error>> {
25
+ let page_content: String = hbs.render("404", &"")?;
26
+
27
+ Ok(HttpResponse::Ok()
28
+ .content_type("text/html; charset=utf-8")
29
+ .body(page_content))
30
+ }
31
+
32
+ #[get("/search")]
33
+ pub async fn search(
34
+ hbs: web::Data<Handlebars<'_>>,
35
+ req: HttpRequest,
36
+ ) -> Result<HttpResponse, Box<dyn std::error::Error>> {
37
+ let params = web::Query::<SearchParams>::from_query(req.query_string())?;
38
+ match &params.q {
39
+ Some(query) => {
40
+ if query.trim().is_empty() {
41
+ Ok(HttpResponse::Found()
42
+ .insert_header(("location", "/"))
43
+ .finish())
44
+ } else {
45
+ let results_json: crate::search_results_handler::aggregation_models::SearchResults =
46
+ aggregate(query, params.page).await?;
47
+ let page_content: String = hbs.render("search", &results_json)?;
48
+ Ok(HttpResponse::Ok().body(page_content))
49
+ }
50
+ }
51
+ None => Ok(HttpResponse::Found()
52
+ .insert_header(("location", "/"))
53
+ .finish()),
54
+ }
55
+ }
56
+
57
+ #[get("/robots.txt")]
58
+ pub async fn robots_data(_req: HttpRequest) -> Result<HttpResponse, Box<dyn std::error::Error>> {
59
+ let page_content: String = read_to_string("./public/robots.txt")?;
60
+ Ok(HttpResponse::Ok()
61
+ .content_type("text/plain; charset=ascii")
62
+ .body(page_content))
63
+ }
64
+
65
+ #[get("/about")]
66
+ pub async fn about(
67
+ hbs: web::Data<Handlebars<'_>>,
68
+ ) -> Result<HttpResponse, Box<dyn std::error::Error>> {
69
+ let page_content: String = hbs.render("about", &"")?;
70
+ Ok(HttpResponse::Ok().body(page_content))
71
+ }
72
+
73
+ #[get("/settings")]
74
+ pub async fn settings(
75
+ hbs: web::Data<Handlebars<'_>>,
76
+ ) -> Result<HttpResponse, Box<dyn std::error::Error>> {
77
+ let page_content: String = hbs.render("settings", &"")?;
78
+ Ok(HttpResponse::Ok().body(page_content))
79
+ }