├── images ├── basic_ui.png └── console.png ├── www ├── public │ ├── favicon.ico │ ├── manifest.json │ └── index.html ├── src │ ├── App.test.js │ ├── index.css │ ├── index.js │ ├── App.css │ ├── logo.svg │ ├── App.js │ └── serviceWorker.js ├── .gitignore ├── package.json └── README.md ├── .gitignore ├── Cargo.toml ├── server ├── tiny_ui.go └── simple.go ├── client.js ├── client.go ├── src └── main.rs ├── README.md └── Cargo.lock /images/basic_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drbh/binance-arbitrage-engine/HEAD/images/basic_ui.png -------------------------------------------------------------------------------- /images/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drbh/binance-arbitrage-engine/HEAD/images/console.png -------------------------------------------------------------------------------- /www/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/drbh/binance-arbitrage-engine/HEAD/www/public/favicon.ico -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | server/client.go 4 | server/home.html 5 | server/hub.go 6 | server/main.go 7 | server/server 8 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "binance-arbitrage-engine" 3 | version = "0.1.0" 4 | authors = ["David Holtz "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | binance = "0.5.0" 9 | zmq = "0.9" -------------------------------------------------------------------------------- /server/tiny_ui.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/zserge/webview" 4 | 5 | func main() { 6 | // Open wikipedia in a 800x600 resizable window 7 | webview.Open("BAE", 8 | "http://localhost:3000", 600, 800, true) 9 | } 10 | -------------------------------------------------------------------------------- /www/src/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | it('renders without crashing', () => { 6 | const div = document.createElement('div'); 7 | ReactDOM.render(, div); 8 | ReactDOM.unmountComponentAtNode(div); 9 | }); 10 | -------------------------------------------------------------------------------- /client.js: -------------------------------------------------------------------------------- 1 | // subber.js 2 | var zmq = require('zeromq') 3 | , sock = zmq.socket('sub'); 4 | 5 | sock.connect('tcp://localhost:5555'); 6 | sock.subscribe(''); 7 | console.log('Subscriber connected to port 5555'); 8 | 9 | sock.on('message', function(topic, message) { 10 | console.log(topic.toString('utf8')) 11 | }); -------------------------------------------------------------------------------- /www/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /www/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /www/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /www/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import * as serviceWorker from './serviceWorker'; 6 | 7 | ReactDOM.render(, document.getElementById('root')); 8 | 9 | // If you want your app to work offline and load faster, you can change 10 | // unregister() to register() below. Note this comes with some pitfalls. 11 | // Learn more about service workers: https://bit.ly/CRA-PWA 12 | serviceWorker.unregister(); 13 | -------------------------------------------------------------------------------- /www/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | animation: App-logo-spin infinite 20s linear; 7 | height: 40vmin; 8 | pointer-events: none; 9 | } 10 | 11 | .App-header { 12 | background-color: #282c34; 13 | min-height: 100vh; 14 | display: flex; 15 | flex-direction: column; 16 | align-items: center; 17 | justify-content: center; 18 | font-size: calc(10px + 2vmin); 19 | color: white; 20 | } 21 | 22 | .App-link { 23 | color: #61dafb; 24 | } 25 | 26 | @keyframes App-logo-spin { 27 | from { 28 | transform: rotate(0deg); 29 | } 30 | to { 31 | transform: rotate(360deg); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /www/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "www", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "chart.js": "^2.8.0", 7 | "react": "^16.8.6", 8 | "react-chartkick": "^0.3.1", 9 | "react-dom": "^16.8.6", 10 | "react-scripts": "3.0.1", 11 | "react-websocket": "^2.0.1" 12 | }, 13 | "scripts": { 14 | "start": "react-scripts start", 15 | "build": "react-scripts build", 16 | "test": "react-scripts test", 17 | "eject": "react-scripts eject" 18 | }, 19 | "eslintConfig": { 20 | "extends": "react-app" 21 | }, 22 | "browserslist": { 23 | "production": [ 24 | ">0.2%", 25 | "not dead", 26 | "not op_mini all" 27 | ], 28 | "development": [ 29 | "last 1 chrome version", 30 | "last 1 firefox version", 31 | "last 1 safari version" 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /client.go: -------------------------------------------------------------------------------- 1 | // 2 | // Pubsub envelope subscriber. 3 | // 4 | 5 | package main 6 | 7 | import ( 8 | zmq "github.com/pebbe/zmq4" 9 | 10 | "fmt" 11 | "time" 12 | ) 13 | 14 | func main() { 15 | // Prepare our subscriber 16 | subscriber, err := zmq.NewSocket(zmq.SUB) 17 | 18 | if err != nil { 19 | fmt.Println("CON Error:", err) 20 | } 21 | 22 | defer subscriber.Close() 23 | 24 | // wait a second - incase the isse is connecting 25 | // to qickly after opening the socket (suggested on StackOverflow) 26 | time.Sleep(500 * time.Millisecond) 27 | 28 | // subscriber.Connect("tcp://*:5555") 29 | subscriber.Connect("tcp://localhost:5555") 30 | subscriber.SetSubscribe("") 31 | 32 | for { 33 | // Read envelope with address 34 | address, err := subscriber.Recv(0) 35 | 36 | if err != nil { 37 | fmt.Println("MSG Error:", err) 38 | 39 | } 40 | fmt.Println(address) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /www/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 22 | React App 23 | 24 | 25 | 26 |
27 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /server/simple.go: -------------------------------------------------------------------------------- 1 | // Copyright 2015 The Gorilla WebSocket Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style 3 | // license that can be found in the LICENSE file. 4 | 5 | // +build ignore 6 | 7 | package main 8 | 9 | import ( 10 | "flag" 11 | // "html/template" 12 | "log" 13 | "net/http" 14 | 15 | "time" 16 | 17 | zmq "github.com/pebbe/zmq4" 18 | 19 | "github.com/gorilla/websocket" 20 | ) 21 | 22 | var addr = flag.String("addr", "localhost:8888", "http service address") 23 | 24 | var upgrader = websocket.Upgrader{} // use default options 25 | 26 | // func doEvery(d time.Duration, f func(time.Time)) { 27 | // for x := range time.Tick(d) { 28 | // f(x) 29 | // } 30 | // } 31 | 32 | func echo(w http.ResponseWriter, r *http.Request) { 33 | 34 | // Prepare our subscriber 35 | subscriber, err := zmq.NewSocket(zmq.SUB) 36 | 37 | if err != nil { 38 | log.Println("CON Error:", err) 39 | } 40 | 41 | defer subscriber.Close() 42 | 43 | // wait a second - incase the isse is connecting 44 | // to qickly after opening the socket (suggested on StackOverflow) 45 | time.Sleep(500 * time.Millisecond) 46 | 47 | // subscriber.Connect("tcp://*:5555") 48 | subscriber.Connect("tcp://localhost:5555") 49 | subscriber.SetSubscribe("") 50 | 51 | upgrader.CheckOrigin = func(r *http.Request) bool { return true } 52 | 53 | c, err := upgrader.Upgrade(w, r, nil) 54 | 55 | if err != nil { 56 | log.Print("upgrade:", err) 57 | return 58 | } 59 | 60 | defer c.Close() 61 | 62 | for { 63 | mt, message, err := c.ReadMessage() 64 | log.Println(mt) 65 | if err != nil { 66 | log.Println("read:", err) 67 | break 68 | } 69 | log.Printf("recv: %s", message) 70 | // err = c.WriteMessage(mt, message) 71 | 72 | for { 73 | // Read envelope with address 74 | address, err := subscriber.Recv(0) 75 | 76 | if err != nil { 77 | log.Println("MSG Error:", err) 78 | break 79 | } 80 | log.Println("send") 81 | c.WriteMessage(mt, []byte(address)) 82 | } 83 | 84 | // if err != nil { 85 | // log.Println("write:", err) 86 | // break 87 | // } 88 | } 89 | } 90 | 91 | func main() { 92 | flag.Parse() 93 | log.SetFlags(0) 94 | http.HandleFunc("/echo", echo) 95 | log.Fatal(http.ListenAndServe(*addr, nil)) 96 | } 97 | -------------------------------------------------------------------------------- /www/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /www/README.md: -------------------------------------------------------------------------------- 1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 2 | 3 | ## Available Scripts 4 | 5 | In the project directory, you can run: 6 | 7 | ### `npm start` 8 | 9 | Runs the app in the development mode.
10 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 11 | 12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console. 14 | 15 | ### `npm test` 16 | 17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 19 | 20 | ### `npm run build` 21 | 22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance. 24 | 25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed! 27 | 28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 29 | 30 | ### `npm run eject` 31 | 32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!** 33 | 34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 35 | 36 | Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. 37 | 38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. 39 | 40 | ## Learn More 41 | 42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 43 | 44 | To learn React, check out the [React documentation](https://reactjs.org/). 45 | 46 | ### Code Splitting 47 | 48 | This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting 49 | 50 | ### Analyzing the Bundle Size 51 | 52 | This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size 53 | 54 | ### Making a Progressive Web App 55 | 56 | This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app 57 | 58 | ### Advanced Configuration 59 | 60 | This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration 61 | 62 | ### Deployment 63 | 64 | This section has moved here: https://facebook.github.io/create-react-app/docs/deployment 65 | 66 | ### `npm run build` fails to minify 67 | 68 | This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify 69 | -------------------------------------------------------------------------------- /www/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // import logo from './logo.svg'; 3 | import './App.css'; 4 | import { LineChart } from 'react-chartkick' 5 | import 'chart.js' 6 | import Websocket from 'react-websocket'; 7 | 8 | // JavaScript for drawing on canvas 9 | // applying colors + three triangles 10 | 11 | 12 | 13 | class App extends React.Component { 14 | constructor(){ 15 | super() 16 | 17 | this.state = { 18 | variable_btcusdt: 0, 19 | variable_ethusdt: 0, 20 | variable_ethbtc: 0, 21 | variable_final: 0, 22 | historical: [], 23 | line: [] 24 | } 25 | this.handleData = this.handleData.bind(this) 26 | this.draw = this.draw.bind(this) 27 | } 28 | 29 | handleData(data) { 30 | 31 | var pricing = JSON.parse(data) 32 | console.log(pricing) 33 | 34 | // this.refWebSocket.send("yo") 35 | // let vdat = JSON.parse(data) 36 | // console.log(vdat) 37 | var old_history = this.state.historical.slice(-99) 38 | var old_line = this.state.line 39 | var mydate = new Date() 40 | // old_history[mydate] = pricing.remaining_btc 41 | old_history.push([mydate, pricing.remaining_btc-1]) 42 | old_line = [[old_history[0][0], 0], [mydate, 0]] 43 | console.log(old_line) 44 | 45 | this.setState({ 46 | variable_btcusdt: pricing.btcusdt, 47 | variable_ethusdt: pricing.ethusdt, 48 | variable_ethbtc: pricing.ethbtc, 49 | variable_final: pricing.remaining_btc, 50 | historical: old_history, 51 | line: old_line 52 | 53 | }); 54 | 55 | this.draw() 56 | } 57 | 58 | draw() { 59 | // canvas with id="myCanvas" 60 | var canvas = document.getElementById('myCanvas'); 61 | if (canvas.getContext) { 62 | var ctx = canvas.getContext('2d'); 63 | 64 | ctx.clearRect(0, 0, canvas.width, canvas.height); 65 | 66 | 67 | ctx.beginPath(); // note usage below 68 | ctx.fillStyle = "#777"; 69 | 70 | var x = 100 71 | var y = 100 72 | ctx.moveTo(x+0, y+200); // start at top left corner of canvas 73 | ctx.lineTo(x+100,y+0); // go 200px to right (x), straight line from 0 to 0 74 | ctx.lineTo(x+200,y+200); // go to horizontal 100 (x) and vertical 200 (y) 75 | ctx.fill(); // connect and fil 76 | 77 | ctx.font = '24px sans-serif'; 78 | 79 | ctx.fillText('BTC',x+0-60, y+200); 80 | ctx.fillText('USD',x+100-25,y+0-15); 81 | ctx.fillText('ETH',x+200+15,y+200); 82 | 83 | ctx.font = '18px sans-serif'; 84 | ctx.fillText('$ '+this.state.variable_btcusdt,80, 200); 85 | ctx.fillText('$ '+this.state.variable_ethusdt,270, 200); 86 | ctx.fillText('Ƀ '+this.state.variable_ethbtc,170, 330); 87 | 88 | ctx.font = '24px sans-serif'; 89 | //ctx.fillStyle = "#000"; 90 | ctx.fillStyle = "#F9A520"; 91 | ctx.fillText(this.state.variable_final,158, 230); 92 | 93 | } 94 | } 95 | 96 | componentDidMount(){ 97 | this.draw() 98 | } 99 | 100 | render(){ 101 | return ( 102 |
103 |
104 | 105 | 106 | 107 | 108 | 109 | 117 | 118 | { 120 | this.refWebSocket.sendMessage("feed me data!") 121 | }} 122 | onMessage={this.handleData} 123 | ref={Websocket => { 124 | this.refWebSocket = Websocket; 125 | }} 126 | /> 127 | 128 |
129 |
130 | ); 131 | } 132 | } 133 | 134 | export default App; 135 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | extern crate binance; 2 | 3 | // use binance::api::*; 4 | // use binance::userstream::*; 5 | use binance::websockets::*; 6 | 7 | fn main() { 8 | let context = zmq::Context::new(); 9 | let publisher = context.socket(zmq::PUB).unwrap(); 10 | publisher 11 | .bind("tcp://127.0.0.1:5555") 12 | .expect("failed binding publisher"); 13 | 14 | let agg_trade: String = format!("!ticker@arr"); 15 | 16 | let mut btcusdt: f32 = "0".parse().unwrap(); 17 | let mut ethusdt: f32 = "0".parse().unwrap(); 18 | let mut ethbtc: f32 = "0".parse().unwrap(); 19 | 20 | let mut web_socket: WebSockets = WebSockets::new(|event: WebsocketEvent| match event { 21 | WebsocketEvent::DayTicker(ticker_events) => { 22 | for tick_event in ticker_events { 23 | if tick_event.symbol == "BTCUSDT" { 24 | btcusdt = tick_event.average_price.parse().unwrap(); 25 | } 26 | if tick_event.symbol == "ETHUSDT" { 27 | ethusdt = tick_event.average_price.parse().unwrap(); 28 | } 29 | if tick_event.symbol == "ETHBTC" { 30 | // println!( 31 | // "{} {} Symbol: {}, price: {}, qty: {} avg: {}", 32 | // tick_event.event_type, 33 | // tick_event.event_time, 34 | // tick_event.symbol, 35 | // tick_event.best_bid, 36 | // tick_event.best_bid_qty, 37 | // tick_event.average_price 38 | // ); 39 | ethbtc = tick_event.average_price.parse().unwrap(); 40 | } 41 | } 42 | 43 | // General: 0.1% trading fee 44 | 45 | let default_fee_percentage = 0.001; 46 | 47 | let a = btcusdt; // one btc to usd 48 | let b = ethusdt; // on eth to usd 49 | let c = ethbtc; // on eth to btc 50 | 51 | let start_amt = 1.0; 52 | // btcs to usdt 53 | let convert_usd = start_amt * a; 54 | 55 | let usd_fee = convert_usd * default_fee_percentage; 56 | 57 | let remaining_usd = convert_usd - usd_fee; 58 | // usdt to eths 59 | let convert_eth = remaining_usd / b; 60 | 61 | let eth_fee = convert_eth * default_fee_percentage; 62 | 63 | let remaining_eth = convert_eth - eth_fee; 64 | // eths to btc 65 | let convert_btc = remaining_eth * c; 66 | 67 | let btc_fee = convert_btc * default_fee_percentage; 68 | 69 | let remaining_btc = convert_btc - btc_fee; 70 | 71 | let s = format!( 72 | "{{ 73 | \"btcusdt\": {} , 74 | \"ethusdt\": {} , 75 | \"ethbtc\": {} , 76 | 77 | \"start_amt\": {} , 78 | \"convert_usd\": {} , 79 | \"usd_fee\": {} , 80 | \"remaining_usd\": {} , 81 | \"convert_eth\": {} , 82 | \"eth_fee\": {} , 83 | \"remaining_eth\": {} , 84 | \"convert_btc\": {} , 85 | \"btc_fee\": {} , 86 | \"remaining_btc\": {} 87 | 88 | }}", 89 | btcusdt, 90 | ethusdt, 91 | ethbtc, 92 | start_amt, 93 | convert_usd, 94 | usd_fee, 95 | remaining_usd, 96 | convert_eth, 97 | eth_fee, 98 | remaining_eth, 99 | convert_btc, 100 | btc_fee, 101 | remaining_btc 102 | ); 103 | 104 | let _execution = format!( 105 | "[ 106 | {{ 107 | \"ticker\": \"BTCUSDT\", 108 | \"amount\": 1, 109 | \"price\": {}, 110 | \"action\": \"SELL\" 111 | }}, 112 | {{ 113 | \"ticker\": \"ETHUSDT\", 114 | \"amount\": {}, 115 | \"price\": {}, 116 | \"action\": \"BUY\" 117 | }}, 118 | {{ 119 | \"ticker\": \"ETHBTC\", 120 | \"amount\": {}, 121 | \"price\": {}, 122 | \"action\": \"SELL\" 123 | }},]", 124 | btcusdt, remaining_usd, ethusdt, remaining_eth, ethbtc, 125 | ); 126 | 127 | // println!("{:?}", s); 128 | publisher 129 | .send(&s, 0) 130 | // .send(&s, 0) 131 | .expect("failed sending first envelope"); 132 | 133 | if remaining_btc > 1.01 { 134 | publisher 135 | .send(&_execution, 0) 136 | // .send(&s, 0) 137 | .expect("failed sending first envelope"); 138 | } 139 | } 140 | 141 | _ => return, 142 | }); 143 | 144 | web_socket.connect(&agg_trade).unwrap(); // check error 145 | web_socket.event_loop(); 146 | } 147 | -------------------------------------------------------------------------------- /www/src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.1/8 is considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl) 104 | .then(response => { 105 | // Ensure service worker exists, and that we really are getting a JS file. 106 | const contentType = response.headers.get('content-type'); 107 | if ( 108 | response.status === 404 || 109 | (contentType != null && contentType.indexOf('javascript') === -1) 110 | ) { 111 | // No service worker found. Probably a different app. Reload the page. 112 | navigator.serviceWorker.ready.then(registration => { 113 | registration.unregister().then(() => { 114 | window.location.reload(); 115 | }); 116 | }); 117 | } else { 118 | // Service worker found. Proceed as normal. 119 | registerValidSW(swUrl, config); 120 | } 121 | }) 122 | .catch(() => { 123 | console.log( 124 | 'No internet connection found. App is running in offline mode.' 125 | ); 126 | }); 127 | } 128 | 129 | export function unregister() { 130 | if ('serviceWorker' in navigator) { 131 | navigator.serviceWorker.ready.then(registration => { 132 | registration.unregister(); 133 | }); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 😻 binance-arbitrage-engine 2 | 3 | Welcome to 😻 BAE 4 | 5 | Dedicated to my BAE (image pending) ❤️ 6 | 7 | 8 | Screenshot of a beta beta beta UI 9 | ![simple UI](images/basic_ui.png) 10 | 11 | # What is this? 12 | 13 | 😻 BAE, is a simple - `safe` - way to check for single exchange arbitrage potentials on Binance. Has simple event based bindings for Python, Node and Golang using zero mq. 14 | 15 | What is safe? what is zmq? Don't worry the point is you don't really have to worry about those things. 16 | 17 | ✅ The goal is to provide **consistent connection** to the exchange and fast calculations on the current pricing data. We use the lightweight Rust websocket implementation `tungstenite` (contained in the Binance library) to achieve a steady price stream. 18 | 19 | ✅ Next we want to **calculate the arbitrage potential** - quickly and with fees included. This ends up being simple arithmetic and we can read the logic easily. Heres the actual code. 20 | ```rust 21 | let default_fee_percentage = 0.001; 22 | let a = btcusdt; // one btc to usd // verbose for readability 23 | let b = ethusdt; // on eth to usd 24 | let c = ethbtc; // on eth to btc 25 | let start_amt = 1.0; 26 | // btcs to usdt 27 | let convert_usd = start_amt * a; 28 | let usd_fee = convert_usd * default_fee_percentage; 29 | let remaining_usd = convert_usd - usd_fee; 30 | // usdt to eths 31 | let convert_eth = remaining_usd / b; 32 | let eth_fee = convert_eth * default_fee_percentage; 33 | let remaining_eth = convert_eth - eth_fee; 34 | // eths to btc 35 | let convert_btc = remaining_eth * c; 36 | let btc_fee = convert_btc * default_fee_percentage; 37 | let remaining_btc = convert_btc - btc_fee; 38 | ``` 39 | 40 | ✅ Lastly we want to **encapuslate our price listener** from our (not included) business logic. For instance, we might want to build a Python or Node bot around this stream. We'll want to use the real time pricing data from the Rust client - but write our execution logic in a language that is faster to prototype. We achieve this by running the main code as a seperate program that prints the current data in `JSON` to a ZMQ stream. ZQM has clients in practically every language and its simple to add a listener to the stream. [Go Example](client.go) [Node Example](client.js) 41 | 42 | # Running BAE 43 | Non optmized (dev mode): 44 | ```bash 45 | cargo run 46 | ``` 47 | 48 | Optimized (building will take a few minutes): 49 | ```bash 50 | cargo build --release 51 | # - - OUTPUT - - 52 | # Compiling binance-arbitrage-engine v0.1.0 (/Users/drbh2/Desktop/binance-arbitrage-engine) 53 | # Finished release [optimized] target(s) in 4m 31s 54 | # (base) drbh2s-MBP:binance-arbitrage-engine drbh2$ ./target/release/binance-arbitrage-engine 55 | ./target/release/binance-arbitrage-engine 56 | ``` 57 | 58 | for (GO): 59 | ```bash 60 | go run client.go 61 | ``` 62 | 63 | for (NODE): 64 | ```bash 65 | node client.js 66 | ``` 67 | 68 | ### Running the super beta UI 69 | 70 | This is an early stage UI that will update in real time. A Go websocket server connects to the price watcher channel and sends a message to the UI's websocket every update. It also sends the total value after trading - so you can see if its a good time to arbitrage or not. 71 | 72 | build the development React webapp 73 | ``` 74 | cd www 75 | yarn 76 | yarn start 77 | ``` 78 | 79 | start the websocket server 80 | ``` 81 | cd server 82 | go run simple.go 83 | ``` 84 | 85 | open app in standalone window! 86 | ``` 87 | go run tiny_ui.go 88 | ``` 89 | 90 | Note: The websocket server doesn't correctly stop sending data after the websocket connection is closed, so you may have to restart your server often to not hinder performance. 91 | 92 | 93 | # Data this program provides 94 | 95 | ![screenshot](images/console.png) 96 | 97 | #### Market Activity Stream 98 | ```JSON 99 | { 100 | "btcusdt": 7855.3535, 101 | "ethusdt": 240.30733, 102 | "ethbtc": 0.03067585, 103 | 104 | "start_amt": 1, 105 | "convert_usd": 7855.3535, 106 | "usd_fee": 7.855354, 107 | "remaining_usd": 7847.498, 108 | "convert_eth": 32.65609, 109 | "eth_fee": 0.032656092, 110 | "remaining_eth": 32.623432, 111 | "convert_btc": 1.0007515, 112 | "btc_fee": 0.0010007515, 113 | "remaining_btc": 0.99975073 114 | } 115 | ``` 116 | 117 | The second kind of message - either on the same stream or a second one. Can be triggered if the final amount after the 3 trades results in a net gain of more then 1%. This value can be adusted in [src/main.rs](src/main.rs). Basicly if the `remaining_btc` is above 1.01 the execution message is triggered with the expected values needed to execute the arbitrage (not tested). 118 | 119 | #### Execution Engine Stream 120 | ```JSON 121 | [ 122 | { 123 | "ticker": "BTCUSDT", 124 | "amount": 1, 125 | "price": 7855.3535, 126 | "action": "SELL" 127 | }, 128 | { 129 | "ticker": "ETHUSDT", 130 | "amount": 7847.498, 131 | "price": 240.30733, 132 | "action": "BUY" 133 | }, 134 | { 135 | "ticker": "ETHBTC", 136 | "amount": 32.623432, 137 | "price": 0.03067585, 138 | "action": "SELL" 139 | },] 140 | ``` 141 | 142 | Note: the above example would result in a net negative investment (this example was not extracted at a good time to arbitrage and is only an example of what the output would look like) 143 | 144 | # What I know about fees 145 | Fee are forsure `0.1% or 0.001` this is provide via Binance docs. But there are many ways to lower these fees - most notably by using BNB. This should be an option in the code - but is not at the moment. 146 | 147 | 148 | A way to calculate - this website has it explained pretty well 149 | 150 | "Binance charges a flat 0.1% fee for executing trades on their exchange, regardless of whether you're buying or selling and using limit or market orders for transactions. The flat fee is applied automatically once a buy or sell order is fulfilled, and is deducted from the end cryptocurrency. 151 | 152 | For example, If you bought 1,000 TRX using ETH as the base currency, the 0.1% fee of 1 TRX will be applied and automatically deducted from your order, netting you 999 TRX. Conversely, if you sold all your XLM holdings for exactly 1 BTC, the 0.1% fee of 0.001 BTC will be applied and net you .999 BTC. 153 | 154 | To show it in dollar terms, if you bought 10,000 TRX using BTC as the base currency with the going rate of $0.10 per TRX and $10,000 per BTC, you would pay 0.1 BTC ($1,000). Binance will then apply the 0.1% fee in TRX, which would come out to 10 TRX ($1.00), and net you 9,990 TRX ($999). 155 | 156 | To turn the tables around, if you exchanged 10,000 TRX for BTC at the same going rate as above, you'd get 0.1 BTC ($1,000). The 0.1% fee would then be applied in BTC, which would come out to 0.0001 BTC ($1.00), netting you 0.0999 BTC ($999). In essence, Binance's flat 0.1% fee means that you'll get charged 1 coin per 1,000, 10 per 10,000, 100 per 100,000, and so on, regardless of which currency you buy or sell." [link](https://smartphones.gadgethacks.com/how-to/binance-101-fees-fine-print-you-need-know-before-trading-bitcoins-other-cryptocurrencies-0182067/) 157 | 158 | 159 | #### Known Bugs! 160 | 161 | 🐞 Unknown crash due to intermittent Binance message on websocket and execution fails on parsing as a `f64` 162 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adler32" 5 | version = "1.0.3" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | 8 | [[package]] 9 | name = "aho-corasick" 10 | version = "0.7.3" 11 | source = "registry+https://github.com/rust-lang/crates.io-index" 12 | dependencies = [ 13 | "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 14 | ] 15 | 16 | [[package]] 17 | name = "arrayvec" 18 | version = "0.4.10" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | dependencies = [ 21 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "autocfg" 26 | version = "0.1.4" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | 29 | [[package]] 30 | name = "backtrace" 31 | version = "0.3.30" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | dependencies = [ 34 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 35 | "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)", 36 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 38 | "rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", 39 | ] 40 | 41 | [[package]] 42 | name = "backtrace-sys" 43 | version = "0.1.28" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | dependencies = [ 46 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 48 | ] 49 | 50 | [[package]] 51 | name = "base64" 52 | version = "0.10.1" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | dependencies = [ 55 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 56 | ] 57 | 58 | [[package]] 59 | name = "binance" 60 | version = "0.5.0" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | dependencies = [ 63 | "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "reqwest 0.9.18 (registry+https://github.com/rust-lang/crates.io-index)", 66 | "ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", 70 | "tungstenite 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 72 | ] 73 | 74 | [[package]] 75 | name = "binance-arbitrage-engine" 76 | version = "0.1.0" 77 | dependencies = [ 78 | "binance 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 79 | "zmq 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 80 | ] 81 | 82 | [[package]] 83 | name = "bitflags" 84 | version = "1.1.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | 87 | [[package]] 88 | name = "block-buffer" 89 | version = "0.7.3" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | dependencies = [ 92 | "block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 93 | "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 94 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 95 | "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 96 | ] 97 | 98 | [[package]] 99 | name = "block-padding" 100 | version = "0.1.4" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | dependencies = [ 103 | "byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 104 | ] 105 | 106 | [[package]] 107 | name = "build_const" 108 | version = "0.2.1" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | 111 | [[package]] 112 | name = "byte-tools" 113 | version = "0.3.1" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | 116 | [[package]] 117 | name = "byteorder" 118 | version = "1.3.2" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | 121 | [[package]] 122 | name = "bytes" 123 | version = "0.4.12" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | dependencies = [ 126 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 127 | "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 128 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 129 | ] 130 | 131 | [[package]] 132 | name = "cc" 133 | version = "1.0.37" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | 136 | [[package]] 137 | name = "cfg-if" 138 | version = "0.1.9" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | 141 | [[package]] 142 | name = "cloudabi" 143 | version = "0.0.3" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | dependencies = [ 146 | "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 147 | ] 148 | 149 | [[package]] 150 | name = "cookie" 151 | version = "0.12.0" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | dependencies = [ 154 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 156 | ] 157 | 158 | [[package]] 159 | name = "cookie_store" 160 | version = "0.7.0" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | dependencies = [ 163 | "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 165 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 166 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 167 | "publicsuffix 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", 170 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 171 | "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 172 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 173 | ] 174 | 175 | [[package]] 176 | name = "core-foundation" 177 | version = "0.6.4" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | dependencies = [ 180 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 182 | ] 183 | 184 | [[package]] 185 | name = "core-foundation-sys" 186 | version = "0.6.2" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | 189 | [[package]] 190 | name = "crc" 191 | version = "1.8.1" 192 | source = "registry+https://github.com/rust-lang/crates.io-index" 193 | dependencies = [ 194 | "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 195 | ] 196 | 197 | [[package]] 198 | name = "crc32fast" 199 | version = "1.2.0" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | dependencies = [ 202 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 203 | ] 204 | 205 | [[package]] 206 | name = "crossbeam-deque" 207 | version = "0.7.1" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | dependencies = [ 210 | "crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 211 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 212 | ] 213 | 214 | [[package]] 215 | name = "crossbeam-epoch" 216 | version = "0.7.1" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | dependencies = [ 219 | "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 220 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 221 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 222 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 223 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 224 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 225 | ] 226 | 227 | [[package]] 228 | name = "crossbeam-queue" 229 | version = "0.1.2" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | dependencies = [ 232 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 233 | ] 234 | 235 | [[package]] 236 | name = "crossbeam-utils" 237 | version = "0.6.5" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | dependencies = [ 240 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 241 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 242 | ] 243 | 244 | [[package]] 245 | name = "digest" 246 | version = "0.8.0" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | dependencies = [ 249 | "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 250 | ] 251 | 252 | [[package]] 253 | name = "dtoa" 254 | version = "0.4.4" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | 257 | [[package]] 258 | name = "either" 259 | version = "1.5.2" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | 262 | [[package]] 263 | name = "encoding_rs" 264 | version = "0.8.17" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | dependencies = [ 267 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 268 | ] 269 | 270 | [[package]] 271 | name = "error-chain" 272 | version = "0.10.0" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | 275 | [[package]] 276 | name = "error-chain" 277 | version = "0.12.1" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | dependencies = [ 280 | "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", 281 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 282 | ] 283 | 284 | [[package]] 285 | name = "failure" 286 | version = "0.1.5" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | dependencies = [ 289 | "backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)", 290 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 291 | ] 292 | 293 | [[package]] 294 | name = "failure_derive" 295 | version = "0.1.5" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | dependencies = [ 298 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 299 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 300 | "syn 0.15.35 (registry+https://github.com/rust-lang/crates.io-index)", 301 | "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", 302 | ] 303 | 304 | [[package]] 305 | name = "fake-simd" 306 | version = "0.1.2" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | 309 | [[package]] 310 | name = "flate2" 311 | version = "1.0.7" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | dependencies = [ 314 | "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 316 | "miniz_oxide_c_api 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 317 | ] 318 | 319 | [[package]] 320 | name = "fnv" 321 | version = "1.0.6" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | 324 | [[package]] 325 | name = "foreign-types" 326 | version = "0.3.2" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | dependencies = [ 329 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 330 | ] 331 | 332 | [[package]] 333 | name = "foreign-types-shared" 334 | version = "0.1.1" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | 337 | [[package]] 338 | name = "fuchsia-cprng" 339 | version = "0.1.1" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | 342 | [[package]] 343 | name = "fuchsia-zircon" 344 | version = "0.3.3" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | dependencies = [ 347 | "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 348 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 349 | ] 350 | 351 | [[package]] 352 | name = "fuchsia-zircon-sys" 353 | version = "0.3.3" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | 356 | [[package]] 357 | name = "futures" 358 | version = "0.1.27" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | 361 | [[package]] 362 | name = "futures-cpupool" 363 | version = "0.1.8" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | dependencies = [ 366 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 367 | "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 368 | ] 369 | 370 | [[package]] 371 | name = "generic-array" 372 | version = "0.12.0" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | dependencies = [ 375 | "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 376 | ] 377 | 378 | [[package]] 379 | name = "h2" 380 | version = "0.1.23" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | dependencies = [ 383 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 384 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 385 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 386 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 387 | "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 388 | "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 389 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 391 | "string 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 392 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 393 | ] 394 | 395 | [[package]] 396 | name = "hex" 397 | version = "0.3.2" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | 400 | [[package]] 401 | name = "http" 402 | version = "0.1.17" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | dependencies = [ 405 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 406 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 407 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 408 | ] 409 | 410 | [[package]] 411 | name = "http-body" 412 | version = "0.1.0" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | dependencies = [ 415 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 416 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 417 | "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 418 | "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 419 | ] 420 | 421 | [[package]] 422 | name = "httparse" 423 | version = "1.3.3" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | 426 | [[package]] 427 | name = "hyper" 428 | version = "0.12.29" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | dependencies = [ 431 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 432 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 433 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 434 | "h2 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", 435 | "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 436 | "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 437 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 438 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 439 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 440 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 441 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 442 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 443 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 444 | "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 445 | "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 446 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 447 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 448 | "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 449 | "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 450 | "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 451 | "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 452 | "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 453 | ] 454 | 455 | [[package]] 456 | name = "hyper-tls" 457 | version = "0.3.2" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | dependencies = [ 460 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 461 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 462 | "hyper 0.12.29 (registry+https://github.com/rust-lang/crates.io-index)", 463 | "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 464 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 465 | ] 466 | 467 | [[package]] 468 | name = "idna" 469 | version = "0.1.5" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | dependencies = [ 472 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 475 | ] 476 | 477 | [[package]] 478 | name = "indexmap" 479 | version = "1.0.2" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | 482 | [[package]] 483 | name = "input_buffer" 484 | version = "0.2.0" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | dependencies = [ 487 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 488 | ] 489 | 490 | [[package]] 491 | name = "iovec" 492 | version = "0.1.2" 493 | source = "registry+https://github.com/rust-lang/crates.io-index" 494 | dependencies = [ 495 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 496 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 497 | ] 498 | 499 | [[package]] 500 | name = "itoa" 501 | version = "0.4.4" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | 504 | [[package]] 505 | name = "kernel32-sys" 506 | version = "0.2.2" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | dependencies = [ 509 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 510 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 511 | ] 512 | 513 | [[package]] 514 | name = "lazy_static" 515 | version = "1.3.0" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | 518 | [[package]] 519 | name = "libc" 520 | version = "0.2.58" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | 523 | [[package]] 524 | name = "lock_api" 525 | version = "0.1.5" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | dependencies = [ 528 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 529 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 530 | ] 531 | 532 | [[package]] 533 | name = "log" 534 | version = "0.4.6" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | dependencies = [ 537 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 538 | ] 539 | 540 | [[package]] 541 | name = "matches" 542 | version = "0.1.8" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | 545 | [[package]] 546 | name = "memchr" 547 | version = "2.2.0" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | 550 | [[package]] 551 | name = "memoffset" 552 | version = "0.2.1" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | 555 | [[package]] 556 | name = "metadeps" 557 | version = "1.1.2" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | dependencies = [ 560 | "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 561 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 562 | "toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 563 | ] 564 | 565 | [[package]] 566 | name = "mime" 567 | version = "0.3.13" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | dependencies = [ 570 | "unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 571 | ] 572 | 573 | [[package]] 574 | name = "mime_guess" 575 | version = "2.0.0-alpha.6" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | dependencies = [ 578 | "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 581 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 582 | ] 583 | 584 | [[package]] 585 | name = "miniz_oxide" 586 | version = "0.2.1" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | dependencies = [ 589 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 590 | ] 591 | 592 | [[package]] 593 | name = "miniz_oxide_c_api" 594 | version = "0.2.1" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | dependencies = [ 597 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 598 | "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 599 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 600 | "miniz_oxide 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 601 | ] 602 | 603 | [[package]] 604 | name = "mio" 605 | version = "0.6.19" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | dependencies = [ 608 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 609 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 610 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 611 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 612 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 613 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 614 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 615 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 616 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 617 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 618 | ] 619 | 620 | [[package]] 621 | name = "miow" 622 | version = "0.2.1" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | dependencies = [ 625 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 626 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 627 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 628 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 629 | ] 630 | 631 | [[package]] 632 | name = "native-tls" 633 | version = "0.2.3" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | dependencies = [ 636 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 637 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 638 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 639 | "openssl 0.10.23 (registry+https://github.com/rust-lang/crates.io-index)", 640 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 641 | "openssl-sys 0.9.47 (registry+https://github.com/rust-lang/crates.io-index)", 642 | "schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", 643 | "security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 644 | "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 645 | "tempfile 3.0.8 (registry+https://github.com/rust-lang/crates.io-index)", 646 | ] 647 | 648 | [[package]] 649 | name = "net2" 650 | version = "0.2.33" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | dependencies = [ 653 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 654 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 655 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 656 | ] 657 | 658 | [[package]] 659 | name = "nodrop" 660 | version = "0.1.13" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | 663 | [[package]] 664 | name = "num_cpus" 665 | version = "1.10.0" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | dependencies = [ 668 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 669 | ] 670 | 671 | [[package]] 672 | name = "opaque-debug" 673 | version = "0.2.2" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | 676 | [[package]] 677 | name = "openssl" 678 | version = "0.10.23" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | dependencies = [ 681 | "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 682 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 683 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 684 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 685 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 686 | "openssl-sys 0.9.47 (registry+https://github.com/rust-lang/crates.io-index)", 687 | ] 688 | 689 | [[package]] 690 | name = "openssl-probe" 691 | version = "0.1.2" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | 694 | [[package]] 695 | name = "openssl-sys" 696 | version = "0.9.47" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | dependencies = [ 699 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 700 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 702 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 703 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 704 | ] 705 | 706 | [[package]] 707 | name = "owning_ref" 708 | version = "0.4.0" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | dependencies = [ 711 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 712 | ] 713 | 714 | [[package]] 715 | name = "parking_lot" 716 | version = "0.7.1" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | dependencies = [ 719 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 720 | "parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 721 | ] 722 | 723 | [[package]] 724 | name = "parking_lot_core" 725 | version = "0.4.0" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | dependencies = [ 728 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 729 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 730 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 731 | "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 732 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 733 | ] 734 | 735 | [[package]] 736 | name = "percent-encoding" 737 | version = "1.0.1" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | 740 | [[package]] 741 | name = "phf" 742 | version = "0.7.24" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | dependencies = [ 745 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 746 | ] 747 | 748 | [[package]] 749 | name = "phf_codegen" 750 | version = "0.7.24" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | dependencies = [ 753 | "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 754 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 755 | ] 756 | 757 | [[package]] 758 | name = "phf_generator" 759 | version = "0.7.24" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | dependencies = [ 762 | "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)", 763 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 764 | ] 765 | 766 | [[package]] 767 | name = "phf_shared" 768 | version = "0.7.24" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | dependencies = [ 771 | "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 772 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 773 | ] 774 | 775 | [[package]] 776 | name = "pkg-config" 777 | version = "0.3.14" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | 780 | [[package]] 781 | name = "proc-macro2" 782 | version = "0.4.30" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | dependencies = [ 785 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 786 | ] 787 | 788 | [[package]] 789 | name = "publicsuffix" 790 | version = "1.5.2" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | dependencies = [ 793 | "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", 794 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 795 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 796 | "regex 1.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 797 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 798 | ] 799 | 800 | [[package]] 801 | name = "quote" 802 | version = "0.6.12" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | dependencies = [ 805 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 806 | ] 807 | 808 | [[package]] 809 | name = "rand" 810 | version = "0.5.6" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | dependencies = [ 813 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 814 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 815 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 816 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 817 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 818 | ] 819 | 820 | [[package]] 821 | name = "rand" 822 | version = "0.6.5" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | dependencies = [ 825 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 826 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 827 | "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 828 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 829 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 830 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 831 | "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 832 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 833 | "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 834 | "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 835 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 836 | ] 837 | 838 | [[package]] 839 | name = "rand_chacha" 840 | version = "0.1.1" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | dependencies = [ 843 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 844 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 845 | ] 846 | 847 | [[package]] 848 | name = "rand_core" 849 | version = "0.3.1" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | dependencies = [ 852 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 853 | ] 854 | 855 | [[package]] 856 | name = "rand_core" 857 | version = "0.4.0" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | 860 | [[package]] 861 | name = "rand_hc" 862 | version = "0.1.0" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | dependencies = [ 865 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 866 | ] 867 | 868 | [[package]] 869 | name = "rand_isaac" 870 | version = "0.1.1" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | dependencies = [ 873 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 874 | ] 875 | 876 | [[package]] 877 | name = "rand_jitter" 878 | version = "0.1.4" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | dependencies = [ 881 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 882 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 883 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 884 | ] 885 | 886 | [[package]] 887 | name = "rand_os" 888 | version = "0.1.3" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | dependencies = [ 891 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 892 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 893 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 894 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 895 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 896 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 897 | ] 898 | 899 | [[package]] 900 | name = "rand_pcg" 901 | version = "0.1.2" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | dependencies = [ 904 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 905 | "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 906 | ] 907 | 908 | [[package]] 909 | name = "rand_xorshift" 910 | version = "0.1.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | dependencies = [ 913 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 914 | ] 915 | 916 | [[package]] 917 | name = "rdrand" 918 | version = "0.4.0" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | dependencies = [ 921 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 922 | ] 923 | 924 | [[package]] 925 | name = "redox_syscall" 926 | version = "0.1.54" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | 929 | [[package]] 930 | name = "regex" 931 | version = "1.1.7" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | dependencies = [ 934 | "aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 935 | "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 936 | "regex-syntax 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 937 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 938 | "utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 939 | ] 940 | 941 | [[package]] 942 | name = "regex-syntax" 943 | version = "0.6.7" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | dependencies = [ 946 | "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 947 | ] 948 | 949 | [[package]] 950 | name = "remove_dir_all" 951 | version = "0.5.1" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | dependencies = [ 954 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 955 | ] 956 | 957 | [[package]] 958 | name = "reqwest" 959 | version = "0.9.18" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | dependencies = [ 962 | "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 963 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 964 | "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 965 | "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 966 | "encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)", 967 | "flate2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 968 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 969 | "http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 970 | "hyper 0.12.29 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 972 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 973 | "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", 974 | "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", 975 | "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 976 | "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 977 | "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", 978 | "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 979 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 980 | "tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 981 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 982 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 983 | "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 984 | "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 985 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 986 | "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 987 | ] 988 | 989 | [[package]] 990 | name = "ring" 991 | version = "0.14.6" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | dependencies = [ 994 | "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", 995 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 997 | "spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 998 | "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 999 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "rustc-demangle" 1004 | version = "0.1.15" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | 1007 | [[package]] 1008 | name = "rustc_version" 1009 | version = "0.2.3" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | dependencies = [ 1012 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "ryu" 1017 | version = "0.2.8" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | 1020 | [[package]] 1021 | name = "schannel" 1022 | version = "0.1.15" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | dependencies = [ 1025 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1026 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1027 | ] 1028 | 1029 | [[package]] 1030 | name = "scopeguard" 1031 | version = "0.3.3" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | 1034 | [[package]] 1035 | name = "security-framework" 1036 | version = "0.3.1" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | dependencies = [ 1039 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1040 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1041 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1042 | "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "security-framework-sys" 1047 | version = "0.3.1" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | dependencies = [ 1050 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "semver" 1055 | version = "0.9.0" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | dependencies = [ 1058 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1059 | ] 1060 | 1061 | [[package]] 1062 | name = "semver-parser" 1063 | version = "0.7.0" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | 1066 | [[package]] 1067 | name = "serde" 1068 | version = "1.0.92" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | dependencies = [ 1071 | "serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "serde_derive" 1076 | version = "1.0.92" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | dependencies = [ 1079 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1080 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1081 | "syn 0.15.35 (registry+https://github.com/rust-lang/crates.io-index)", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "serde_json" 1086 | version = "1.0.39" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | dependencies = [ 1089 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1090 | "ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "serde_urlencoded" 1096 | version = "0.5.5" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | dependencies = [ 1099 | "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", 1102 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "sha-1" 1107 | version = "0.8.1" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | dependencies = [ 1110 | "block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | "digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1112 | "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1113 | "opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "siphasher" 1118 | version = "0.2.3" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | 1121 | [[package]] 1122 | name = "slab" 1123 | version = "0.4.2" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | 1126 | [[package]] 1127 | name = "smallvec" 1128 | version = "0.6.9" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | 1131 | [[package]] 1132 | name = "spin" 1133 | version = "0.5.0" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | 1136 | [[package]] 1137 | name = "stable_deref_trait" 1138 | version = "1.1.1" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | 1141 | [[package]] 1142 | name = "string" 1143 | version = "0.2.0" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | dependencies = [ 1146 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1147 | ] 1148 | 1149 | [[package]] 1150 | name = "syn" 1151 | version = "0.15.35" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | dependencies = [ 1154 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1155 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1156 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "synstructure" 1161 | version = "0.10.2" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | dependencies = [ 1164 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 1165 | "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1166 | "syn 0.15.35 (registry+https://github.com/rust-lang/crates.io-index)", 1167 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1168 | ] 1169 | 1170 | [[package]] 1171 | name = "tempfile" 1172 | version = "3.0.8" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | dependencies = [ 1175 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1176 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1178 | "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", 1179 | "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1180 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1181 | ] 1182 | 1183 | [[package]] 1184 | name = "thread_local" 1185 | version = "0.3.6" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | dependencies = [ 1188 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "time" 1193 | version = "0.1.42" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | dependencies = [ 1196 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1197 | "redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)", 1198 | "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "tokio" 1203 | version = "0.1.21" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | dependencies = [ 1206 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1207 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1208 | "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 1209 | "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1210 | "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1211 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1212 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 1213 | "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1214 | "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "tokio-buf" 1222 | version = "0.1.1" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | dependencies = [ 1225 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1226 | "either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1227 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "tokio-current-thread" 1232 | version = "0.1.6" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | dependencies = [ 1235 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1236 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1237 | ] 1238 | 1239 | [[package]] 1240 | name = "tokio-executor" 1241 | version = "0.1.7" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | dependencies = [ 1244 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1245 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "tokio-io" 1250 | version = "0.1.12" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | dependencies = [ 1253 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1254 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1255 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "tokio-reactor" 1260 | version = "0.1.9" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | dependencies = [ 1263 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1264 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1265 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1266 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1267 | "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 1268 | "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | "tokio-sync 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1274 | ] 1275 | 1276 | [[package]] 1277 | name = "tokio-sync" 1278 | version = "0.1.6" 1279 | source = "registry+https://github.com/rust-lang/crates.io-index" 1280 | dependencies = [ 1281 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 1282 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "tokio-tcp" 1287 | version = "0.1.3" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | dependencies = [ 1290 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1291 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1292 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1293 | "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 1294 | "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 1295 | "tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1296 | ] 1297 | 1298 | [[package]] 1299 | name = "tokio-threadpool" 1300 | version = "0.1.14" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | dependencies = [ 1303 | "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1304 | "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1305 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1306 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1307 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1308 | "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1309 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1310 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1311 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1312 | ] 1313 | 1314 | [[package]] 1315 | name = "tokio-timer" 1316 | version = "0.2.11" 1317 | source = "registry+https://github.com/rust-lang/crates.io-index" 1318 | dependencies = [ 1319 | "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1320 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1321 | "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1322 | "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "tokio-trace-core" 1327 | version = "0.2.0" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | dependencies = [ 1330 | "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1331 | ] 1332 | 1333 | [[package]] 1334 | name = "toml" 1335 | version = "0.2.1" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | 1338 | [[package]] 1339 | name = "try-lock" 1340 | version = "0.2.2" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | 1343 | [[package]] 1344 | name = "try_from" 1345 | version = "0.3.2" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | dependencies = [ 1348 | "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1349 | ] 1350 | 1351 | [[package]] 1352 | name = "tungstenite" 1353 | version = "0.6.1" 1354 | source = "registry+https://github.com/rust-lang/crates.io-index" 1355 | dependencies = [ 1356 | "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 1357 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1358 | "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", 1359 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1360 | "input_buffer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1361 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1362 | "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1366 | "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 1367 | ] 1368 | 1369 | [[package]] 1370 | name = "typenum" 1371 | version = "1.10.0" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | 1374 | [[package]] 1375 | name = "ucd-util" 1376 | version = "0.1.3" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | 1379 | [[package]] 1380 | name = "unicase" 1381 | version = "1.4.2" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | dependencies = [ 1384 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "unicase" 1389 | version = "2.4.0" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | dependencies = [ 1392 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "unicode-bidi" 1397 | version = "0.3.4" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | dependencies = [ 1400 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "unicode-normalization" 1405 | version = "0.1.8" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | dependencies = [ 1408 | "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "unicode-xid" 1413 | version = "0.1.0" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | 1416 | [[package]] 1417 | name = "untrusted" 1418 | version = "0.6.2" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | 1421 | [[package]] 1422 | name = "url" 1423 | version = "1.7.2" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | dependencies = [ 1426 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1427 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1428 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "utf-8" 1433 | version = "0.7.5" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | 1436 | [[package]] 1437 | name = "utf8-ranges" 1438 | version = "1.0.3" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | 1441 | [[package]] 1442 | name = "uuid" 1443 | version = "0.7.4" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | dependencies = [ 1446 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "vcpkg" 1451 | version = "0.2.6" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | 1454 | [[package]] 1455 | name = "version_check" 1456 | version = "0.1.5" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | 1459 | [[package]] 1460 | name = "want" 1461 | version = "0.0.6" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | dependencies = [ 1464 | "futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "winapi" 1471 | version = "0.2.8" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | 1474 | [[package]] 1475 | name = "winapi" 1476 | version = "0.3.7" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | dependencies = [ 1479 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1480 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1481 | ] 1482 | 1483 | [[package]] 1484 | name = "winapi-build" 1485 | version = "0.1.1" 1486 | source = "registry+https://github.com/rust-lang/crates.io-index" 1487 | 1488 | [[package]] 1489 | name = "winapi-i686-pc-windows-gnu" 1490 | version = "0.4.0" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | 1493 | [[package]] 1494 | name = "winapi-x86_64-pc-windows-gnu" 1495 | version = "0.4.0" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | 1498 | [[package]] 1499 | name = "ws2_32-sys" 1500 | version = "0.2.1" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | dependencies = [ 1503 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1504 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1505 | ] 1506 | 1507 | [[package]] 1508 | name = "zmq" 1509 | version = "0.9.1" 1510 | source = "registry+https://github.com/rust-lang/crates.io-index" 1511 | dependencies = [ 1512 | "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1513 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1515 | "zmq-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "zmq-sys" 1520 | version = "0.9.1" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | dependencies = [ 1523 | "libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1524 | "metadeps 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1525 | ] 1526 | 1527 | [metadata] 1528 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" 1529 | "checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" 1530 | "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" 1531 | "checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" 1532 | "checksum backtrace 0.3.30 (registry+https://github.com/rust-lang/crates.io-index)" = "ada4c783bb7e7443c14e0480f429ae2cc99da95065aeab7ee1b81ada0419404f" 1533 | "checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" 1534 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 1535 | "checksum binance 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cfd2f2d05588e09caf49afc3aa33e143a8d641f88d163471e8970f0d2fb050d2" 1536 | "checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" 1537 | "checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" 1538 | "checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" 1539 | "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" 1540 | "checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" 1541 | "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" 1542 | "checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" 1543 | "checksum cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)" = "39f75544d7bbaf57560d2168f28fd649ff9c76153874db88bdbdfd839b1a7e7d" 1544 | "checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" 1545 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1546 | "checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" 1547 | "checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" 1548 | "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 1549 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1550 | "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" 1551 | "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" 1552 | "checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" 1553 | "checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" 1554 | "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" 1555 | "checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" 1556 | "checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" 1557 | "checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" 1558 | "checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b" 1559 | "checksum encoding_rs 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)" = "4155785c79f2f6701f185eb2e6b4caf0555ec03477cb4c70db67b465311620ed" 1560 | "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" 1561 | "checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" 1562 | "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" 1563 | "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" 1564 | "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" 1565 | "checksum flate2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f87e68aa82b2de08a6e037f1385455759df6e445a8df5e005b4297191dbf18aa" 1566 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1567 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1568 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1569 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1570 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1571 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1572 | "checksum futures 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)" = "a2037ec1c6c1c4f79557762eab1f7eae1f64f6cb418ace90fae88f0942b60139" 1573 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1574 | "checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" 1575 | "checksum h2 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "1e42e3daed5a7e17b12a0c23b5b2fbff23a925a570938ebee4baca1a9a1a2240" 1576 | "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" 1577 | "checksum http 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "eed324f0f0daf6ec10c474f150505af2c143f251722bf9dbd1261bd1f2ee2c1a" 1578 | "checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" 1579 | "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" 1580 | "checksum hyper 0.12.29 (registry+https://github.com/rust-lang/crates.io-index)" = "e2cd6adf83b3347d36e271f030621a8cf95fd1fd0760546b9fc5a24a0f1447c7" 1581 | "checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" 1582 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1583 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" 1584 | "checksum input_buffer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8e1b822cc844905551931d6f81608ed5f50a79c1078a4e2b4d42dbc7c1eedfbf" 1585 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1586 | "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" 1587 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1588 | "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" 1589 | "checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319" 1590 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1591 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1592 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1593 | "checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" 1594 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1595 | "checksum metadeps 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b122901b3a675fac8cecf68dcb2f0d3036193bc861d1ac0e1c337f7d5254c2" 1596 | "checksum mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "3e27ca21f40a310bd06d9031785f4801710d566c184a6e15bad4f1d9b65f9425" 1597 | "checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed" 1598 | "checksum miniz_oxide 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c468f2369f07d651a5d0bb2c9079f8488a66d5466efe42d0c5c6466edcb7f71e" 1599 | "checksum miniz_oxide_c_api 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b7fe927a42e3807ef71defb191dc87d4e24479b221e67015fe38ae2b7b447bab" 1600 | "checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" 1601 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1602 | "checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" 1603 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1604 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1605 | "checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" 1606 | "checksum opaque-debug 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "93f5bb2e8e8dec81642920ccff6b61f1eb94fa3020c5a325c9851ff604152409" 1607 | "checksum openssl 0.10.23 (registry+https://github.com/rust-lang/crates.io-index)" = "97c140cbb82f3b3468193dd14c1b88def39f341f68257f8a7fe8ed9ed3f628a5" 1608 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1609 | "checksum openssl-sys 0.9.47 (registry+https://github.com/rust-lang/crates.io-index)" = "75bdd6dbbb4958d38e47a1d2348847ad1eb4dc205dc5d37473ae504391865acc" 1610 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1611 | "checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" 1612 | "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" 1613 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1614 | "checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" 1615 | "checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" 1616 | "checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" 1617 | "checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" 1618 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" 1619 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1620 | "checksum publicsuffix 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5afecba86dcf1e4fd610246f89899d1924fe12e1e89f555eb7c7f710f3c5ad1d" 1621 | "checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db" 1622 | "checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" 1623 | "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 1624 | "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1625 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1626 | "checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" 1627 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1628 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1629 | "checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 1630 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1631 | "checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 1632 | "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1633 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1634 | "checksum redox_syscall 0.1.54 (registry+https://github.com/rust-lang/crates.io-index)" = "12229c14a0f65c4f1cb046a3b52047cdd9da1f4b30f8a39c5063c8bae515e252" 1635 | "checksum regex 1.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0b2f0808e7d7e4fb1cb07feb6ff2f4bc827938f24f8c2e6a3beb7370af544bdd" 1636 | "checksum regex-syntax 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d76410686f9e3a17f06128962e0ecc5755870bb890c34820c7af7f1db2e1d48" 1637 | "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" 1638 | "checksum reqwest 0.9.18 (registry+https://github.com/rust-lang/crates.io-index)" = "00eb63f212df0e358b427f0f40aa13aaea010b470be642ad422bcbca2feff2e4" 1639 | "checksum ring 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)" = "426bc186e3e95cac1e4a4be125a4aca7e84c2d616ffc02244eef36e2a60a093c" 1640 | "checksum rustc-demangle 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a7f4dccf6f4891ebcc0c39f9b6eb1a83b9bf5d747cb439ec6fba4f3b977038af" 1641 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1642 | "checksum ryu 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b96a9549dc8d48f2c283938303c4b5a77aa29bfbc5b54b084fb1630408899a8f" 1643 | "checksum schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f6abf258d99c3c1c5c2131d99d064e94b7b3dd5f416483057f308fea253339" 1644 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1645 | "checksum security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eee63d0f4a9ec776eeb30e220f0bc1e092c3ad744b2a379e3993070364d3adc2" 1646 | "checksum security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9636f8989cbf61385ae4824b98c1aaa54c994d7d8b41f11c601ed799f0549a56" 1647 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1648 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1649 | "checksum serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "32746bf0f26eab52f06af0d0aa1984f641341d06d8d673c693871da2d188c9be" 1650 | "checksum serde_derive 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)" = "46a3223d0c9ba936b61c0d2e3e559e3217dbfb8d65d06d26e8b3c25de38bae3e" 1651 | "checksum serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)" = "5a23aa71d4a4d43fdbfaac00eff68ba8a06a51759a89ac3304323e800c4dd40d" 1652 | "checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" 1653 | "checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" 1654 | "checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" 1655 | "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 1656 | "checksum smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c4488ae950c49d403731982257768f48fada354a5203fe81f9bb6f43ca9002be" 1657 | "checksum spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44363f6f51401c34e7be73db0db371c04705d35efbe9f7d6082e03a921a32c55" 1658 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1659 | "checksum string 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0bbfb8937e38e34c3444ff00afb28b0811d9554f15c5ad64d12b0308d1d1995" 1660 | "checksum syn 0.15.35 (registry+https://github.com/rust-lang/crates.io-index)" = "641e117d55514d6d918490e47102f7e08d096fdde360247e4a10f7a91a8478d3" 1661 | "checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" 1662 | "checksum tempfile 3.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7dc4738f2e68ed2855de5ac9cdbe05c9216773ecde4739b2f095002ab03a13ef" 1663 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1664 | "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" 1665 | "checksum tokio 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ec2ffcf4bcfc641413fa0f1427bf8f91dfc78f56a6559cbf50e04837ae442a87" 1666 | "checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" 1667 | "checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" 1668 | "checksum tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "83ea44c6c0773cc034771693711c35c677b4b5a4b21b9e7071704c54de7d555e" 1669 | "checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" 1670 | "checksum tokio-reactor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6af16bfac7e112bea8b0442542161bfc41cbfa4466b580bdda7d18cb88b911ce" 1671 | "checksum tokio-sync 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2162248ff317e2bc713b261f242b69dbb838b85248ed20bb21df56d60ea4cae7" 1672 | "checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" 1673 | "checksum tokio-threadpool 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72558af20be886ea124595ea0f806dd5703b8958e4705429dd58b3d8231f72f2" 1674 | "checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e" 1675 | "checksum tokio-trace-core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9c8a256d6956f7cb5e2bdfe8b1e8022f1a09206c6c2b1ba00f3b746b260c613" 1676 | "checksum toml 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "736b60249cb25337bc196faa43ee12c705e426f3d55c214d73a4e7be06f92cb4" 1677 | "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" 1678 | "checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" 1679 | "checksum tungstenite 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e9573852f935883137b7f0824832493ce7418bf290c8cf164b7aafc9b0a99aa0" 1680 | "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" 1681 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" 1682 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 1683 | "checksum unicase 2.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a84e5511b2a947f3ae965dcb29b13b7b1691b6e7332cf5dbc1744138d5acb7f6" 1684 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1685 | "checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426" 1686 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1687 | "checksum untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" 1688 | "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1689 | "checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" 1690 | "checksum utf8-ranges 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9d50aa7650df78abf942826607c62468ce18d9019673d4a2ebe1865dbb96ffde" 1691 | "checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" 1692 | "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" 1693 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1694 | "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" 1695 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1696 | "checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770" 1697 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1698 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1699 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1700 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1701 | "checksum zmq 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1bcd76da382c5297efdaac2afa2525bdcdcf2898a7eb8f2b6ddddf2b8be6bfcb" 1702 | "checksum zmq-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efcfb0bbd805a8a88f1625e601ea445e33dab4fa7a58c4a19b00b225700bea25" 1703 | --------------------------------------------------------------------------------