currency-rate 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -0
  3. data/VERSION +1 -1
  4. data/currency-rate.gemspec +22 -3
  5. data/lib/adapter.rb +17 -9
  6. data/lib/btc_adapter.rb +4 -6
  7. data/lib/btc_adapters/average_rate_adapter.rb +4 -3
  8. data/lib/btc_adapters/bitfinex_adapter.rb +30 -0
  9. data/lib/btc_adapters/bitpay_adapter.rb +10 -3
  10. data/lib/btc_adapters/bitstamp_adapter.rb +24 -5
  11. data/lib/btc_adapters/btcchina_adapter.rb +13 -0
  12. data/lib/btc_adapters/btce_adapter.rb +26 -5
  13. data/lib/btc_adapters/coinbase_adapter.rb +2 -2
  14. data/lib/btc_adapters/huobi_adapter.rb +30 -0
  15. data/lib/btc_adapters/kraken_adapter.rb +14 -5
  16. data/lib/btc_adapters/localbitcoins_adapter.rb +10 -3
  17. data/lib/btc_adapters/okcoin_adapter.rb +24 -5
  18. data/lib/currency_rate.rb +11 -10
  19. data/lib/fiat_adapter.rb +4 -18
  20. data/lib/fiat_adapters/fixer_adapter.rb +20 -5
  21. data/lib/fiat_adapters/yahoo_adapter.rb +28 -6
  22. data/spec/currency_rate_spec.rb +10 -6
  23. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/average_rate_adapter.yml +423 -0
  24. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitfinex_adapter.yml +125 -0
  25. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitpay_adapter_yml.yml +272 -0
  26. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/bitstamp_adapter.yml +153 -0
  27. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btcchina_adapter.yml +83 -0
  28. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/btce_adapter.yml +223 -0
  29. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/coinbase_adapter.yml +76 -0
  30. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/huobi_adapter.yml +83 -0
  31. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/kraken_adapter.yml +83 -0
  32. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/localbitcoins_adapter.yml +128 -0
  33. data/spec/fixtures/vcr/exchange_rate_adapters/btc_adapters/okcoin_adapter.yml +207 -0
  34. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/fixer_adapter.yml +81 -0
  35. data/spec/fixtures/vcr/exchange_rate_adapters/fiat_adapters/yahoo_adapter.yml +50 -0
  36. data/spec/lib/btc_adapter_spec.rb +16 -28
  37. data/spec/lib/btc_adapters/average_rate_adapter_spec.rb +4 -4
  38. data/spec/lib/btc_adapters/bitfinex_adapter_spec.rb +38 -0
  39. data/spec/lib/btc_adapters/bitpay_adapter_spec.rb +8 -3
  40. data/spec/lib/btc_adapters/bitstamp_adapter_spec.rb +8 -3
  41. data/spec/lib/btc_adapters/btcchina_adapter_spec.rb +36 -0
  42. data/spec/lib/btc_adapters/btce_adapter_spec.rb +10 -3
  43. data/spec/lib/btc_adapters/coinbase_adapter_spec.rb +5 -3
  44. data/spec/lib/btc_adapters/huobi_adapter_spec.rb +38 -0
  45. data/spec/lib/btc_adapters/kraken_adapter_spec.rb +6 -3
  46. data/spec/lib/btc_adapters/localbitcoins_adapter_spec.rb +4 -3
  47. data/spec/lib/btc_adapters/okcoin_adapter_spec.rb +11 -3
  48. data/spec/lib/fiat_adapters/fixer_adapter_spec.rb +5 -2
  49. data/spec/lib/fiat_adapters/yahoo_adapter_spec.rb +5 -2
  50. metadata +21 -2
@@ -1,13 +1,32 @@
1
1
  module CurrencyRate
2
2
  class OkcoinAdapter < BtcAdapter
3
3
 
4
- FETCH_URL = 'https://www.okcoin.com/api/ticker.do?ok=1'
4
+ FETCH_URL = {
5
+ 'ltc_usd' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=ltc_usd',
6
+ 'btc_usd' => 'https://www.okcoin.com/api/v1/ticker.do?symbol=btc_usd',
7
+ 'ltc_cny' => 'https://www.okcoin.cn/api/ticker.do?symbol=ltc_cny',
8
+ 'btc_cny' => 'https://www.okcoin.cn/api/ticker.do?symbol=btc_cny'
9
+ }
5
10
 
6
- def rate_for(currency_code)
11
+ def rate_for(from,to)
7
12
  super
8
- raise CurrencyNotSupported if currency_code != 'USD'
9
- rate = get_rate_value_from_hash(@rates, 'ticker', 'last')
10
- rate_to_f(rate)
13
+ rate = rate_to_f(currency_pair_rate(to,from))
14
+ invert_rate(from,to,rate)
15
+ end
16
+
17
+ def currency_pair_rate(currency1, currency2)
18
+ rate = @rates["#{currency1.downcase}_#{currency2.downcase}"] || @rates["#{currency2.downcase}_#{currency1.downcase}"]
19
+ raise CurrencyNotSupported unless rate
20
+ rate['ticker']['last']
21
+ end
22
+
23
+ # Because OKCoin has LTC
24
+ def invert_rate(from,to,rate)
25
+ if ['BTC', 'LTC'].include?(to)
26
+ 1/rate.to_f
27
+ else
28
+ rate
29
+ end
11
30
  end
12
31
 
13
32
  end
data/lib/currency_rate.rb CHANGED
@@ -12,11 +12,8 @@ Dir["#{File.expand_path File.dirname(__FILE__)}/**/*.rb"].each { |f| require f }
12
12
 
13
13
  module CurrencyRate
14
14
 
15
- def self.get(adapter_name, currency)
16
- adapter_class(adapter_name).rate_for(currency)
17
- end
15
+ def self.get(adapter_name, from, to, anchor_currency: nil)
18
16
 
19
- def self.convert(adapter_name, amount:, from:, to:, anchor_currency: nil)
20
17
  a = adapter_class(adapter_name)
21
18
 
22
19
  # Setting default values for anchor currency depending on
@@ -26,16 +23,20 @@ module CurrencyRate
26
23
  else
27
24
  'USD' if anchor_currency.nil?
28
25
  end
29
-
26
+
30
27
  # None of the currencies is anchor currency?
31
28
  # No problem, convert the amount given into the anchor currency first.
32
- unless [to, from].include?(anchor_currency)
33
- amount = convert(adapter_name, amount: amount, from: from, to: anchor_currency)
34
- from = anchor_currency
29
+ if [to, from].include?(anchor_currency)
30
+ a.rate_for(from, to)
31
+ else
32
+ rate_from = get(adapter_name, anchor_currency, from)
33
+ rate_to = get(adapter_name, anchor_currency, to )
34
+ rate_to.to_f/rate_from.to_f
35
35
  end
36
+ end
36
37
 
37
- rate = get(a, (from == anchor_currency) ? to : from)
38
- result = from == anchor_currency ? amount.to_f*rate : amount.to_f/rate
38
+ def self.convert(adapter_name, amount:, from:, to:, anchor_currency: nil)
39
+ result = amount*get(adapter_name, from, to, anchor_currency: nil)
39
40
  to == 'BTC' ? result : result.round(2)
40
41
  end
41
42
 
data/lib/fiat_adapter.rb CHANGED
@@ -2,27 +2,13 @@ module CurrencyRate
2
2
 
3
3
  class FiatAdapter < Adapter
4
4
 
5
- CROSS_RATE_CURRENCY = 'USD'
6
- SUPPORTED_CURRENCIES = %w(
7
- AUD BGN BRL CAD CHF CNY CZK DKK GBP HKD HRK HUF IDR ILS INR JPY
8
- KRW MXN MYR NOK NZD PHP PLN RON RUB SEK SGD THB TRY USD ZAR EUR
9
- )
10
- DECIMAL_PRECISION = 2
11
-
12
- # Set half-even rounding mode
13
- # http://apidock.com/ruby/BigDecimal/mode/class
14
5
  BigDecimal.mode BigDecimal::ROUND_MODE, :banker
6
+ DECIMAL_PRECISION = 2
15
7
 
16
- def rate_for(currency_code)
17
- return 1 if currency_code == CROSS_RATE_CURRENCY
18
- raise CurrencyNotSupported unless SUPPORTED_CURRENCIES.include?(currency_code)
8
+ def rate_for(from,to)
19
9
  super
20
- # call 'super' in descendant classes and return real rate
21
- end
22
-
23
- def convert_from_currency(amount_in_currency, currency: CROSS_RATE_CURRENCY)
24
- return amount_in_currency if currency == CROSS_RATE_CURRENCY
25
- amount_in_currency.to_f / rate_for(currency)
10
+ rate = currency_pair_rate(to,from)
11
+ invert_rate(from,to,rate)
26
12
  end
27
13
 
28
14
  end
@@ -1,11 +1,26 @@
1
1
  module CurrencyRate
2
2
  class FixerAdapter < FiatAdapter
3
- FETCH_URL = "http://api.fixer.io/latest?base=#{CROSS_RATE_CURRENCY}"
4
3
 
5
- def rate_for(currency_code)
6
- super
7
- rate = get_rate_value_from_hash(@rates, 'rates', currency_code)
8
- rate_to_f(rate)
4
+ FETCH_URL = {
5
+ "eur" => "http://api.fixer.io/latest?base=eur",
6
+ "usd" => "http://api.fixer.io/latest?base=usd"
7
+ }
8
+
9
+ def currency_pair_rate(currency1, currency2)
10
+ rates = @rates[currency1.downcase] || @rates[currency2.downcase]
11
+ raise CurrencyNotSupported unless rates
12
+ rate = rates["rates"][currency1] || rates["rates"][currency2]
13
+ raise CurrencyNotSupported unless rate
14
+ rate.round(DECIMAL_PRECISION)
15
+ end
16
+
17
+ def invert_rate(from,to,rate)
18
+ if (to == 'USD' || to == 'EUR')
19
+ (1/rate.to_f).round(DECIMAL_PRECISION)
20
+ else
21
+ rate
22
+ end
9
23
  end
24
+
10
25
  end
11
26
  end
@@ -1,22 +1,44 @@
1
1
  require 'uri'
2
2
 
3
3
  module CurrencyRate
4
+
4
5
  class YahooAdapter < FiatAdapter
6
+
7
+ SUPPORTED_CURRENCIES = %w(
8
+ AUD BGN BRL CAD CHF CNY CZK DKK GBP HKD HRK HUF IDR ILS INR JPY
9
+ KRW MXN MYR NOK NZD PHP PLN RON RUB SEK SGD THB TRY USD ZAR EUR
10
+ )
11
+
12
+ CROSS_RATE_CURRENCY = 'USD'
13
+
5
14
  # Example URL (follow to un-shorten): http://goo.gl/62Aedt
6
15
  FETCH_URL = "http://query.yahooapis.com/v1/public/yql?" + URI.encode_www_form(
7
16
  format: 'json',
8
17
  env: "store://datatables.org/alltableswithkeys",
9
18
  q: "SELECT * FROM yahoo.finance.xchange WHERE pair IN" +
10
19
  # The following line is building array string in SQL: '("USDJPY", "USDRUB", ...)'
11
- "(#{SUPPORTED_CURRENCIES.map{|x| '"' + CROSS_RATE_CURRENCY.upcase + x.upcase + '"'}.join(',')})"
20
+ "(#{SUPPORTED_CURRENCIES.map{|x| '"' + CROSS_RATE_CURRENCY + x.upcase + '"'}.join(',')})"
12
21
  )
13
22
 
14
- def rate_for(currency_code)
15
- super
23
+ def invert_rate(from,to,rate)
24
+ if to == 'USD'
25
+ (1/rate.to_f).round(DECIMAL_PRECISION)
26
+ else
27
+ rate
28
+ end
29
+ end
30
+
31
+ def currency_pair_rate(currency1, currency2)
16
32
  rates = @rates.deep_get('query', 'results', 'rate')
17
- rate = rates && rates.find{|x| x['id'] == CROSS_RATE_CURRENCY + currency_code.upcase}
18
- rate = rate && rate['Rate']
19
- rate_to_f(rate)
33
+ rate = if CROSS_RATE_CURRENCY == currency1.upcase
34
+ rates.find { |x| x['id'] == "#{CROSS_RATE_CURRENCY}#{currency2.upcase}" }
35
+ else
36
+ rates.find { |x| x['id'] == "#{CROSS_RATE_CURRENCY}#{currency1.upcase}" }
37
+ end
38
+ raise CurrencyNotSupported unless rate
39
+ rate = rate['Rate'].to_f
40
+ rate.round(DECIMAL_PRECISION)
20
41
  end
42
+
21
43
  end
22
44
  end
@@ -3,20 +3,24 @@ require 'spec_helper'
3
3
  describe CurrencyRate do
4
4
 
5
5
  before :each do
6
- allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('USD').and_return(550)
7
- allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('RUB').and_return(33100)
8
- allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('RUB').and_return(65)
6
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('BTC', 'USD').and_return(550)
7
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('USD', 'BTC').and_return(1.to_f/550.to_f)
8
+ allow(CurrencyRate::BitstampAdapter.instance).to receive('rate_for').with('BTC', 'RUB').and_return(33100)
9
+ allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('USD', 'RUB').and_return(60)
10
+ allow(CurrencyRate::YahooAdapter.instance).to receive('rate_for').with('RUB', 'USD').and_return(1.to_f/60.to_f)
9
11
  end
10
12
 
11
13
  it "fetches currency rate from a specified exchange" do
12
- expect(CurrencyRate.get('Bitstamp', 'USD')).to eq(550)
14
+ expect(CurrencyRate.get('Bitstamp', 'BTC', 'USD')).to eq(550)
15
+ expect(CurrencyRate.get('Bitstamp', 'USD', 'BTC')).to eq(1.to_f/550.to_f)
16
+ expect(CurrencyRate.get('Bitstamp', 'USD', 'RUB').round(2)).to eq(60.18)
13
17
  end
14
18
 
15
19
  it "converts one currency into another" do
16
20
  expect(CurrencyRate.convert('Bitstamp', amount: 5, from: 'BTC', to: 'USD')).to eq(2750)
17
21
  expect(CurrencyRate.convert('Bitstamp', amount: 2750, from: 'USD', to: 'BTC')).to eq(5)
18
- expect(CurrencyRate.convert('Yahoo', amount: 300, from: 'USD', to: 'RUB')).to eq(19500)
19
- expect(CurrencyRate.convert('Yahoo', amount: 19500, from: 'RUB', to: 'USD')).to eq(300)
22
+ expect(CurrencyRate.convert('Yahoo', amount: 300, from: 'USD', to: 'RUB')).to eq(18000)
23
+ expect(CurrencyRate.convert('Yahoo', amount: 19500, from: 'RUB', to: 'USD')).to eq(325)
20
24
  end
21
25
 
22
26
  it "converts non-anchor currencies" do
@@ -0,0 +1,423 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.bitstamp.net/api/v2/ticker/btcusd/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Etag:
22
+ - '"6294c-c6-5358c763fe1e1"'
23
+ Last-Modified:
24
+ - Sat, 18 Jun 2016 12:17:59 GMT
25
+ Content-Type:
26
+ - application/json
27
+ Content-Length:
28
+ - '142'
29
+ Connection:
30
+ - keep-alive
31
+ Cache-Control:
32
+ - max-age=10, public
33
+ Expires:
34
+ - Sat, 18 Jun 2016 12:18:22 GMT
35
+ Date:
36
+ - Sat, 18 Jun 2016 12:18:12 GMT
37
+ Set-Cookie:
38
+ - incap_ses_220_99025=wQfzfpFG+Eq6yG7FOqINAwQ8ZVcAAAAA2IIq95EXi1XBrD3laKUZ+A==;
39
+ path=/; Domain=.bitstamp.net
40
+ - visid_incap_99025=wweiKoT2RWWFdobKK3cf4wQ8ZVcAAAAAQUIPAAAAAADnH3BD8BCXGU0F8hWrQTXg;
41
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
42
+ X-Iinfo:
43
+ - 9-56714738-0 0CNN RT(1466252292066 592) q(0 -1 -1 -1) r(0 -1)
44
+ X-Cdn:
45
+ - Incapsula
46
+ body:
47
+ encoding: ASCII-8BIT
48
+ string: '{"high": "757.96000", "last": "751.97000", "timestamp": "1466252278",
49
+ "bid": "751.47000", "vwap": "745.36091", "volume": "6901.58275229", "low":
50
+ "723.02000", "ask": "751.97000", "open": "745.00000"}'
51
+ http_version:
52
+ recorded_at: Sat, 18 Jun 2016 12:18:13 GMT
53
+ - request:
54
+ method: get
55
+ uri: https://www.bitstamp.net/api/v2/ticker/btceur/
56
+ body:
57
+ encoding: US-ASCII
58
+ string: ''
59
+ headers:
60
+ Accept-Encoding:
61
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
62
+ Accept:
63
+ - "*/*"
64
+ User-Agent:
65
+ - Ruby
66
+ response:
67
+ status:
68
+ code: 200
69
+ message: OK
70
+ headers:
71
+ Etag:
72
+ - '"62428-c6-5358c76731722"'
73
+ Last-Modified:
74
+ - Sat, 18 Jun 2016 12:18:02 GMT
75
+ Content-Type:
76
+ - application/json
77
+ Content-Length:
78
+ - '144'
79
+ Connection:
80
+ - keep-alive
81
+ Cache-Control:
82
+ - max-age=10, public
83
+ Expires:
84
+ - Sat, 18 Jun 2016 12:18:24 GMT
85
+ Date:
86
+ - Sat, 18 Jun 2016 12:18:14 GMT
87
+ Set-Cookie:
88
+ - incap_ses_220_99025=X4gkKY1GaAzZzG7FOqINAwY8ZVcAAAAA7sir6DswX0eW+RHQAZ3P2w==;
89
+ path=/; Domain=.bitstamp.net
90
+ - visid_incap_99025=1xi3KqDBRaC9elEeju7YyQY8ZVcAAAAAQUIPAAAAAAD5Hd7wQZNNpNjBCz4yMhvE;
91
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
92
+ X-Iinfo:
93
+ - 9-56715209-0 0CNN RT(1466252293557 573) q(0 -1 -1 -1) r(0 -1)
94
+ X-Cdn:
95
+ - Incapsula
96
+ body:
97
+ encoding: ASCII-8BIT
98
+ string: '{"high": "679.08000", "last": "674.50000", "timestamp": "1466252282",
99
+ "bid": "670.67000", "vwap": "668.63961", "volume": "1356.06136004", "low":
100
+ "659.34000", "ask": "674.50000", "open": "672.15000"}'
101
+ http_version:
102
+ recorded_at: Sat, 18 Jun 2016 12:18:15 GMT
103
+ - request:
104
+ method: get
105
+ uri: https://www.bitstamp.net/api/v2/ticker/eurusd/
106
+ body:
107
+ encoding: US-ASCII
108
+ string: ''
109
+ headers:
110
+ Accept-Encoding:
111
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
112
+ Accept:
113
+ - "*/*"
114
+ User-Agent:
115
+ - Ruby
116
+ response:
117
+ status:
118
+ code: 200
119
+ message: OK
120
+ headers:
121
+ Etag:
122
+ - '"62a85-b6-5358c76799efe"'
123
+ Last-Modified:
124
+ - Sat, 18 Jun 2016 12:18:02 GMT
125
+ Content-Type:
126
+ - application/json
127
+ Content-Length:
128
+ - '135'
129
+ Connection:
130
+ - keep-alive
131
+ Cache-Control:
132
+ - max-age=10, public
133
+ Expires:
134
+ - Sat, 18 Jun 2016 12:18:25 GMT
135
+ Date:
136
+ - Sat, 18 Jun 2016 12:18:15 GMT
137
+ Set-Cookie:
138
+ - incap_ses_220_99025=wERdE34q4y7x0G7FOqINAwc8ZVcAAAAAPxSkhEAtIJ28pp8s9oRuiQ==;
139
+ path=/; Domain=.bitstamp.net
140
+ - visid_incap_99025=3suN8VjZRqKmkj5hkjOFVwc8ZVcAAAAAQUIPAAAAAAD6yyMULIf23R9y57+RIwUr;
141
+ expires=Sun, 18 Jun 2017 07:26:36 GMT; path=/; Domain=.bitstamp.net
142
+ X-Iinfo:
143
+ - 9-56715632-0 0CNN RT(1466252295021 664) q(0 -1 -1 -1) r(0 -1)
144
+ X-Cdn:
145
+ - Incapsula
146
+ body:
147
+ encoding: ASCII-8BIT
148
+ string: '{"high": "1.12350", "last": "1.11002", "timestamp": "1466252282", "bid":
149
+ "1.11003", "vwap": "1.11349", "volume": "55451.55469", "low": "1.09500", "ask":
150
+ "1.12496", "open": "1.11002"}'
151
+ http_version:
152
+ recorded_at: Sat, 18 Jun 2016 12:18:16 GMT
153
+ - request:
154
+ method: get
155
+ uri: https://bitpay.com/api/rates
156
+ body:
157
+ encoding: US-ASCII
158
+ string: ''
159
+ headers:
160
+ Accept-Encoding:
161
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
162
+ Accept:
163
+ - "*/*"
164
+ User-Agent:
165
+ - Ruby
166
+ response:
167
+ status:
168
+ code: 200
169
+ message: OK
170
+ headers:
171
+ Date:
172
+ - Sat, 18 Jun 2016 13:51:33 GMT
173
+ Content-Type:
174
+ - application/json
175
+ Transfer-Encoding:
176
+ - chunked
177
+ Connection:
178
+ - keep-alive
179
+ Set-Cookie:
180
+ - __cfduid=dfebcb13e4bfa0f072ba22bf6c1c908ec1466257893; expires=Sun, 18-Jun-17
181
+ 13:51:33 GMT; path=/; domain=.bitpay.com; HttpOnly
182
+ Strict-Transport-Security:
183
+ - max-age=31536000
184
+ X-Download-Options:
185
+ - noopen
186
+ X-Content-Type-Options:
187
+ - nosniff
188
+ Access-Control-Allow-Origin:
189
+ - "*"
190
+ Cache-Control:
191
+ - public, max-age=1800
192
+ Expires:
193
+ - Sat, 18 Jun 2016 14:21:33 GMT
194
+ Cf-Cache-Status:
195
+ - HIT
196
+ Vary:
197
+ - Accept-Encoding
198
+ Server:
199
+ - cloudflare-nginx
200
+ Cf-Ray:
201
+ - 2b4f37794bd91141-SIN
202
+ body:
203
+ encoding: ASCII-8BIT
204
+ string: !binary |-
205
+ W3siY29kZSI6IkJUQyIsIm5hbWUiOiJCaXRjb2luIiwicmF0ZSI6MX0seyJj
206
+ b2RlIjoiVVNEIiwibmFtZSI6IlVTIERvbGxhciIsInJhdGUiOjc0OC4wMn0s
207
+ eyJjb2RlIjoiRVVSIiwibmFtZSI6IkV1cm96b25lIEV1cm8iLCJyYXRlIjo2
208
+ NjMuMzU5MDk2fSx7ImNvZGUiOiJHQlAiLCJuYW1lIjoiUG91bmQgU3Rlcmxp
209
+ bmciLCJyYXRlIjo1MjAuOTQ1MDY1fSx7ImNvZGUiOiJKUFkiLCJuYW1lIjoi
210
+ SmFwYW5lc2UgWWVuIiwicmF0ZSI6Nzc5NDguMDIyNTE2fSx7ImNvZGUiOiJD
211
+ QUQiLCJuYW1lIjoiQ2FuYWRpYW4gRG9sbGFyIiwicmF0ZSI6OTY0Ljc5ODQ0
212
+ fSx7ImNvZGUiOiJBVUQiLCJuYW1lIjoiQXVzdHJhbGlhbiBEb2xsYXIiLCJy
213
+ YXRlIjoxMDExLjU4NjM0M30seyJjb2RlIjoiQ05ZIiwibmFtZSI6IkNoaW5l
214
+ c2UgWXVhbiIsInJhdGUiOjQ5MjUuNTExMjMxfSx7ImNvZGUiOiJDSEYiLCJu
215
+ YW1lIjoiU3dpc3MgRnJhbmMiLCJyYXRlIjo3MTguODM2NzQ4fSx7ImNvZGUi
216
+ OiJTRUsiLCJuYW1lIjoiU3dlZGlzaCBLcm9uYSIsInJhdGUiOjYyMzEuNTYy
217
+ Mzc5fSx7ImNvZGUiOiJOWkQiLCJuYW1lIjoiTmV3IFplYWxhbmQgRG9sbGFy
218
+ IiwicmF0ZSI6MTA2MC40OTU2MzF9LHsiY29kZSI6IktSVyIsIm5hbWUiOiJT
219
+ b3V0aCBLb3JlYW4gV29uIiwicmF0ZSI6ODc2NTI0Ljg2MDE3MX0seyJjb2Rl
220
+ IjoiQUVEIiwibmFtZSI6IlVBRSBEaXJoYW0iLCJyYXRlIjoyNzQ3LjUzNzMw
221
+ Mn0seyJjb2RlIjoiQUZOIiwibmFtZSI6IkFmZ2hhbiBBZmdoYW5pIiwicmF0
222
+ ZSI6NTE5NjQuOTUwMTQ4fSx7ImNvZGUiOiJBTEwiLCJuYW1lIjoiQWxiYW5p
223
+ YW4gTGVrIiwicmF0ZSI6OTE2OTMuNjM4MDM2fSx7ImNvZGUiOiJBTUQiLCJu
224
+ YW1lIjoiQXJtZW5pYW4gRHJhbSIsInJhdGUiOjM1NzMxNC4xOTA2MDh9LHsi
225
+ Y29kZSI6IkFORyIsIm5hbWUiOiJOZXRoZXJsYW5kcyBBbnRpbGxlYW4gR3Vp
226
+ bGRlciIsInJhdGUiOjEzMzguMDc2ODc3fSx7ImNvZGUiOiJBT0EiLCJuYW1l
227
+ IjoiQW5nb2xhbiBLd2FuemEiLCJyYXRlIjoxMjQwMTYuMzUzNDQ1fSx7ImNv
228
+ ZGUiOiJBUlMiLCJuYW1lIjoiQXJnZW50aW5lIFBlc28iLCJyYXRlIjoxMDcx
229
+ NC4xMTQ4NjZ9LHsiY29kZSI6IkFXRyIsIm5hbWUiOiJBcnViYW4gRmxvcmlu
230
+ IiwicmF0ZSI6MTM0MS40NDg5NTF9LHsiY29kZSI6IkFaTiIsIm5hbWUiOiJB
231
+ emVyYmFpamFuaSBNYW5hdCIsInJhdGUiOjExMzkuMTQwOTU4fSx7ImNvZGUi
232
+ OiJCQU0iLCJuYW1lIjoiQm9zbmlhLUhlcnplZ292aW5hIENvbnZlcnRpYmxl
233
+ IE1hcmsiLCJyYXRlIjoxMjk3LjgzNzg4OX0seyJjb2RlIjoiQkJEIiwibmFt
234
+ ZSI6IkJhcmJhZGlhbiBEb2xsYXIiLCJyYXRlIjoxNDk2LjA0fSx7ImNvZGUi
235
+ OiJCRFQiLCJuYW1lIjoiQmFuZ2xhZGVzaGkgVGFrYSIsInJhdGUiOjU4Njk5
236
+ LjE3ODIyN30seyJjb2RlIjoiQkdOIiwibmFtZSI6IkJ1bGdhcmlhbiBMZXYi
237
+ LCJyYXRlIjoxMjk3Ljc3MjgxMX0seyJjb2RlIjoiQkhEIiwibmFtZSI6IkJh
238
+ aHJhaW5pIERpbmFyIiwicmF0ZSI6MjgxLjk4MDM1MX0seyJjb2RlIjoiQklG
239
+ IiwibmFtZSI6IkJ1cnVuZGlhbiBGcmFuYyIsInJhdGUiOjExNzU4MDMuMDQz
240
+ MTQ3fSx7ImNvZGUiOiJCTUQiLCJuYW1lIjoiQmVybXVkYW4gRG9sbGFyIiwi
241
+ cmF0ZSI6NzQ4LjAyfSx7ImNvZGUiOiJCTkQiLCJuYW1lIjoiQnJ1bmVpIERv
242
+ bGxhciIsInJhdGUiOjEwMDguOTI3ODh9LHsiY29kZSI6IkJPQiIsIm5hbWUi
243
+ OiJCb2xpdmlhbiBCb2xpdmlhbm8iLCJyYXRlIjo1MTUyLjUxMDYxNn0seyJj
244
+ b2RlIjoiQlJMIiwibmFtZSI6IkJyYXppbGlhbiBSZWFsIiwicmF0ZSI6MjU2
245
+ MS4xNjgxMTl9LHsiY29kZSI6IkJTRCIsIm5hbWUiOiJCYWhhbWlhbiBEb2xs
246
+ YXIiLCJyYXRlIjo3NDguMDJ9LHsiY29kZSI6IkJUTiIsIm5hbWUiOiJCaHV0
247
+ YW5lc2UgTmd1bHRydW0iLCJyYXRlIjo1MDIwMS4xOTIyOTR9LHsiY29kZSI6
248
+ IkJXUCIsIm5hbWUiOiJCb3Rzd2FuYW4gUHVsYSIsInJhdGUiOjgyMjEuNjI4
249
+ NDQ4fSx7ImNvZGUiOiJCWVIiLCJuYW1lIjoiQmVsYXJ1c2lhbiBSdWJsZSIs
250
+ InJhdGUiOjE0OTI2NDk1Ljk5MzV9LHsiY29kZSI6IkJaRCIsIm5hbWUiOiJC
251
+ ZWxpemUgRG9sbGFyIiwicmF0ZSI6MTQ5Ny4wNDA4NTF9LHsiY29kZSI6IkNE
252
+ RiIsIm5hbWUiOiJDb25nb2xlc2UgRnJhbmMiLCJyYXRlIjo3MDUzOTUuMjAy
253
+ MzN9LHsiY29kZSI6IkNMRiIsIm5hbWUiOiJDaGlsZWFuIFVuaXQgb2YgQWNj
254
+ b3VudCAoVUYpIiwicmF0ZSI6MTguNDAyNzg4fSx7ImNvZGUiOiJDTFAiLCJu
255
+ YW1lIjoiQ2hpbGVhbiBQZXNvIiwicmF0ZSI6NTEyNTg1LjE5NjExMn0seyJj
256
+ b2RlIjoiQ09QIiwibmFtZSI6IkNvbG9tYmlhbiBQZXNvIiwicmF0ZSI6MjI0
257
+ NzE4MS43Mjk4MTh9LHsiY29kZSI6IkNSQyIsIm5hbWUiOiJDb3N0YSBSaWNh
258
+ biBDb2zDs24iLCJyYXRlIjo0MDYxMTUuODQzNDY2fSx7ImNvZGUiOiJDVVAi
259
+ LCJuYW1lIjoiQ3ViYW4gUGVzbyIsInJhdGUiOjE4NDk3LjMyNTA1Mn0seyJj
260
+ b2RlIjoiQ1ZFIiwibmFtZSI6IkNhcGUgVmVyZGVhbiBFc2N1ZG8iLCJyYXRl
261
+ Ijo3Mzc2NS41NTYyMDR9LHsiY29kZSI6IkNaSyIsIm5hbWUiOiJDemVjaCBL
262
+ b3J1bmEiLCJyYXRlIjoxNzk2MC4wNjQ5MjN9LHsiY29kZSI6IkRKRiIsIm5h
263
+ bWUiOiJEamlib3V0aWFuIEZyYW5jIiwicmF0ZSI6MTMzMDA2LjY1MDk4NH0s
264
+ eyJjb2RlIjoiREtLIiwibmFtZSI6IkRhbmlzaCBLcm9uZSIsInJhdGUiOjQ5
265
+ MzQuMTkyMDAzfSx7ImNvZGUiOiJET1AiLCJuYW1lIjoiRG9taW5pY2FuIFBl
266
+ c28iLCJyYXRlIjozNDM1Ny43MTgwMzF9LHsiY29kZSI6IkRaRCIsIm5hbWUi
267
+ OiJBbGdlcmlhbiBEaW5hciIsInJhdGUiOjgyMjk4LjI4MzE3OH0seyJjb2Rl
268
+ IjoiRUVLIiwibmFtZSI6IkVzdG9uaWFuIEtyb29uIiwicmF0ZSI6MTAzODcu
269
+ MDA1NzJ9LHsiY29kZSI6IkVHUCIsIm5hbWUiOiJFZ3lwdGlhbiBQb3VuZCIs
270
+ InJhdGUiOjY2NDEuMzU5OX0seyJjb2RlIjoiRVRCIiwibmFtZSI6IkV0aGlv
271
+ cGlhbiBCaXJyIiwicmF0ZSI6MTYzMTcuODAxOTczfSx7ImNvZGUiOiJGSkQi
272
+ LCJuYW1lIjoiRmlqaWFuIERvbGxhciIsInJhdGUiOjE1NTYuMDE4NDg4fSx7
273
+ ImNvZGUiOiJGS1AiLCJuYW1lIjoiRmFsa2xhbmQgSXNsYW5kcyBQb3VuZCIs
274
+ InJhdGUiOjUyMC45NDUwNjV9LHsiY29kZSI6IkdFTCIsIm5hbWUiOiJHZW9y
275
+ Z2lhbiBMYXJpIiwicmF0ZSI6MTYzMC4xNDUwMjZ9LHsiY29kZSI6IkdIUyIs
276
+ Im5hbWUiOiJHaGFuYWlhbiBDZWRpIiwicmF0ZSI6MjkzMy44ODcwMzZ9LHsi
277
+ Y29kZSI6IkdJUCIsIm5hbWUiOiJHaWJyYWx0YXIgUG91bmQiLCJyYXRlIjo1
278
+ MjAuOTQ1MDY1fSx7ImNvZGUiOiJHTUQiLCJuYW1lIjoiR2FtYmlhbiBEYWxh
279
+ c2kiLCJyYXRlIjozMTgyOS44OTY2NDR9LHsiY29kZSI6IkdORiIsIm5hbWUi
280
+ OiJHdWluZWFuIEZyYW5jIiwicmF0ZSI6NTQ4Njg2MS40MTY5MDZ9LHsiY29k
281
+ ZSI6IkdUUSIsIm5hbWUiOiJHdWF0ZW1hbGFuIFF1ZXR6YWwiLCJyYXRlIjo1
282
+ NzE0LjU3NTA4OH0seyJjb2RlIjoiR1lEIiwibmFtZSI6Ikd1eWFuYWVzZSBE
283
+ b2xsYXIiLCJyYXRlIjoxNTM2NDIuMDQ3NTg2fSx7ImNvZGUiOiJIS0QiLCJu
284
+ YW1lIjoiSG9uZyBLb25nIERvbGxhciIsInJhdGUiOjU4MDUuMjEyNjcxfSx7
285
+ ImNvZGUiOiJITkwiLCJuYW1lIjoiSG9uZHVyYW4gTGVtcGlyYSIsInJhdGUi
286
+ OjE2OTg4LjAwNTQ1M30seyJjb2RlIjoiSFJLIiwibmFtZSI6IkNyb2F0aWFu
287
+ IEt1bmEiLCJyYXRlIjo0OTkwLjg5NDkxMX0seyJjb2RlIjoiSFRHIiwibmFt
288
+ ZSI6IkhhaXRpYW4gR291cmRlIiwicmF0ZSI6NDcwNzUuMjczNTY0fSx7ImNv
289
+ ZGUiOiJIVUYiLCJuYW1lIjoiSHVuZ2FyaWFuIEZvcmludCIsInJhdGUiOjIw
290
+ ODQ4MS41NTMzMn0seyJjb2RlIjoiSURSIiwibmFtZSI6IkluZG9uZXNpYW4g
291
+ UnVwaWFoIiwicmF0ZSI6OTk4MDM2OS41ODA3NTF9LHsiY29kZSI6IklMUyIs
292
+ Im5hbWUiOiJJc3JhZWxpIFNoZWtlbCIsInJhdGUiOjI4OTMuMjM1MTQxfSx7
293
+ ImNvZGUiOiJJTlIiLCJuYW1lIjoiSW5kaWFuIFJ1cGVlIiwicmF0ZSI6NTAx
294
+ OTIuNzU1Mzc2fSx7ImNvZGUiOiJJUUQiLCJuYW1lIjoiSXJhcWkgRGluYXIi
295
+ LCJyYXRlIjo4NzE2NDIuNTg1MjQ0fSx7ImNvZGUiOiJJUlIiLCJuYW1lIjoi
296
+ SXJhbmlhbiBSaWFsIiwicmF0ZSI6MjI2ODg5NDIuNjR9LHsiY29kZSI6IklT
297
+ SyIsIm5hbWUiOiJJY2VsYW5kaWMgS3LDs25hIiwicmF0ZSI6OTIxODguMjI4
298
+ ODZ9LHsiY29kZSI6IkpFUCIsIm5hbWUiOiJKZXJzZXkgUG91bmQiLCJyYXRl
299
+ Ijo1MjAuOTQ1MDY1fSx7ImNvZGUiOiJKTUQiLCJuYW1lIjoiSmFtYWljYW4g
300
+ RG9sbGFyIiwicmF0ZSI6OTM4NTAuNDcxNDI0fSx7ImNvZGUiOiJKT0QiLCJu
301
+ YW1lIjoiSm9yZGFuaWFuIERpbmFyIiwicmF0ZSI6NTI5LjY5OTg5MX0seyJj
302
+ b2RlIjoiS0VTIiwibmFtZSI6IktlbnlhbiBTaGlsbGluZyIsInJhdGUiOjc1
303
+ NjcxLjE5OTI0fSx7ImNvZGUiOiJLR1MiLCJuYW1lIjoiS3lyZ3lzdGFuaSBT
304
+ b20iLCJyYXRlIjo1MDcxNi4xNjY2NjN9LHsiY29kZSI6IktIUiIsIm5hbWUi
305
+ OiJDYW1ib2RpYW4gUmllbCIsInJhdGUiOjMwNTgwNDQuMTYyNDAxfSx7ImNv
306
+ ZGUiOiJLTUYiLCJuYW1lIjoiQ29tb3JpYW4gRnJhbmMiLCJyYXRlIjozMjQ2
307
+ NDAuNjY2NTM2fSx7ImNvZGUiOiJLUFciLCJuYW1lIjoiTm9ydGggS29yZWFu
308
+ IFdvbiIsInJhdGUiOjY3MzE1MC42NzgyfSx7ImNvZGUiOiJLV0QiLCJuYW1l
309
+ IjoiS3V3YWl0aSBEaW5hciIsInJhdGUiOjIyNS40OTEzNzd9LHsiY29kZSI6
310
+ IktZRCIsIm5hbWUiOiJDYXltYW4gSXNsYW5kcyBEb2xsYXIiLCJyYXRlIjo2
311
+ MTYuMjYyMjYxfSx7ImNvZGUiOiJLWlQiLCJuYW1lIjoiS2F6YWtoc3Rhbmkg
312
+ VGVuZ2UiLCJyYXRlIjoyNTMzMzAuOTU1NzM4fSx7ImNvZGUiOiJMQUsiLCJu
313
+ YW1lIjoiTGFvdGlhbiBLaXAiLCJyYXRlIjo2MDU2NDAzLjg0NDkwNn0seyJj
314
+ b2RlIjoiTEJQIiwibmFtZSI6IkxlYmFuZXNlIFBvdW5kIiwicmF0ZSI6MTEy
315
+ OTM4NS41MTc3ODJ9LHsiY29kZSI6IkxLUiIsIm5hbWUiOiJTcmkgTGFua2Fu
316
+ IFJ1cGVlIiwicmF0ZSI6MTA4NDQ1LjM5NjMzMn0seyJjb2RlIjoiTFJEIiwi
317
+ bmFtZSI6IkxpYmVyaWFuIERvbGxhciIsInJhdGUiOjY3Njg5LjA0MDQxOX0s
318
+ eyJjb2RlIjoiTFNMIiwibmFtZSI6Ikxlc290aG8gTG90aSIsInJhdGUiOjEx
319
+ MzU0LjUxNzIyOX0seyJjb2RlIjoiTFRMIiwibmFtZSI6IkxpdGh1YW5pYW4g
320
+ TGl0YXMiLCJyYXRlIjoyMjY3Ljc5OTkxMX0seyJjb2RlIjoiTFZMIiwibmFt
321
+ ZSI6IkxhdHZpYW4gTGF0cyIsInJhdGUiOjQ2NS43NjUxMjV9LHsiY29kZSI6
322
+ IkxZRCIsIm5hbWUiOiJMaWJ5YW4gRGluYXIiLCJyYXRlIjoxMDE5LjQzMDgy
323
+ OX0seyJjb2RlIjoiTUFEIiwibmFtZSI6Ik1vcm9jY2FuIERpcmhhbSIsInJh
324
+ dGUiOjcyNTQuMTk4NDczfSx7ImNvZGUiOiJNREwiLCJuYW1lIjoiTW9sZG92
325
+ YW4gTGV1IiwicmF0ZSI6MTQ3NzcuOTI4MDAxfSx7ImNvZGUiOiJNR0EiLCJu
326
+ YW1lIjoiTWFsYWdhc3kgQXJpYXJ5IiwicmF0ZSI6MjQ0NDU5Ny45MTYwMzN9
327
+ LHsiY29kZSI6Ik1LRCIsIm5hbWUiOiJNYWNlZG9uaWFuIERlbmFyIiwicmF0
328
+ ZSI6NDA4NDQuMzMwNTQ1fSx7ImNvZGUiOiJNTUsiLCJuYW1lIjoiTXlhbm1h
329
+ IEt5YXQiLCJyYXRlIjo4ODU5NDMuNjQwNzcxfSx7ImNvZGUiOiJNTlQiLCJu
330
+ YW1lIjoiTW9uZ29saWFuIFR1Z3JpayIsInJhdGUiOjE0NjI1NjYuMTA1fSx7
331
+ ImNvZGUiOiJNT1AiLCJuYW1lIjoiTWFjYW5lc2UgUGF0YWNhIiwicmF0ZSI6
332
+ NTk3Ni43NTE2MX0seyJjb2RlIjoiTVJPIiwibmFtZSI6Ik1hdXJpdGFuaWFu
333
+ IE91Z3VpeWEiLCJyYXRlIjoyNjU5MzEuNTc5Mjg4fSx7ImNvZGUiOiJNVVIi
334
+ LCJuYW1lIjoiTWF1cml0aWFuIFJ1cGVlIiwicmF0ZSI6MjY1MzkuNTcyMzE5
335
+ fSx7ImNvZGUiOiJNVlIiLCJuYW1lIjoiTWFsZGl2aWFuIFJ1Zml5YWEiLCJy
336
+ YXRlIjoxMTQ2Ny4xNDY2fSx7ImNvZGUiOiJNV0siLCJuYW1lIjoiTWFsYXdp
337
+ YW4gS3dhY2hhIiwicmF0ZSI6NTI3NzMzLjUzMDE1M30seyJjb2RlIjoiTVhO
338
+ IiwibmFtZSI6Ik1leGljYW4gUGVzbyIsInJhdGUiOjE0MDk3LjEzMjU1OX0s
339
+ eyJjb2RlIjoiTVlSIiwibmFtZSI6Ik1hbGF5c2lhbiBSaW5nZ2l0IiwicmF0
340
+ ZSI6MzA2MC40NTU3Nn0seyJjb2RlIjoiTVpOIiwibmFtZSI6Ik1vemFtYmlj
341
+ YW4gTWV0aWNhbCIsInJhdGUiOjQ1NjQ5Ljc5MTI5OH0seyJjb2RlIjoiTkFE
342
+ IiwibmFtZSI6Ik5hbWliaWFuIERvbGxhciIsInJhdGUiOjExMzUxLjY3NDc1
343
+ M30seyJjb2RlIjoiTkdOIiwibmFtZSI6Ik5pZ2VyaWFuIE5haXJhIiwicmF0
344
+ ZSI6MTQ4ODUyLjMxNDcwMn0seyJjb2RlIjoiTklPIiwibmFtZSI6Ik5pY2Fy
345
+ YWd1YW4gQ8OzcmRvYmEiLCJyYXRlIjoyMTM2Ni4yNzEyMzV9LHsiY29kZSI6
346
+ Ik5PSyIsIm5hbWUiOiJOb3J3ZWdpYW4gS3JvbmUiLCJyYXRlIjo2MjU0LjY0
347
+ NzAyNH0seyJjb2RlIjoiTlBSIiwibmFtZSI6Ik5lcGFsZXNlIFJ1cGVlIiwi
348
+ cmF0ZSI6ODAyODAuNzk3Njg4fSx7ImNvZGUiOiJPTVIiLCJuYW1lIjoiT21h
349
+ bmkgUmlhbCIsInJhdGUiOjI4OC4wNTUwMjJ9LHsiY29kZSI6IlBBQiIsIm5h
350
+ bWUiOiJQYW5hbWFuaWFuIEJhbGJvYSIsInJhdGUiOjc0OC4wMn0seyJjb2Rl
351
+ IjoiUEVOIiwibmFtZSI6IlBlcnV2aWFuIE51ZXZvIFNvbCIsInJhdGUiOjI0
352
+ NzkuMTgzNjMxfSx7ImNvZGUiOiJQR0siLCJuYW1lIjoiUGFwdWEgTmV3IEd1
353
+ aW5lYW4gS2luYSIsInJhdGUiOjIzNjMuMTI2MDg0fSx7ImNvZGUiOiJQSFAi
354
+ LCJuYW1lIjoiUGhpbGlwcGluZSBQZXNvIiwicmF0ZSI6MzQ3MzUuNjYyNjE2
355
+ fSx7ImNvZGUiOiJQS1IiLCJuYW1lIjoiUGFraXN0YW5pIFJ1cGVlIiwicmF0
356
+ ZSI6NzgzMDAuODY0Mjk4fSx7ImNvZGUiOiJQTE4iLCJuYW1lIjoiUG9saXNo
357
+ IFpsb3R5IiwicmF0ZSI6MjkzMC42NDM2MjF9LHsiY29kZSI6IlBZRyIsIm5h
358
+ bWUiOiJQYXJhZ3VheWFuIEd1YXJhbmkiLCJyYXRlIjo0MjMyODQwLjcyMTQ0
359
+ OX0seyJjb2RlIjoiUUFSIiwibmFtZSI6IlFhdGFyaSBSaWFsIiwicmF0ZSI6
360
+ MjcyMi45OTg1MDZ9LHsiY29kZSI6IlJPTiIsIm5hbWUiOiJSb21hbmlhbiBM
361
+ ZXUiLCJyYXRlIjozMDEyLjQzOTYwOH0seyJjb2RlIjoiUlNEIiwibmFtZSI6
362
+ IlNlcmJpYW4gRGluYXIiLCJyYXRlIjo4MTgwMC4xNDU5OTF9LHsiY29kZSI6
363
+ IlJVQiIsIm5hbWUiOiJSdXNzaWFuIFJ1YmxlIiwicmF0ZSI6NDg0OTcuODk5
364
+ ODg5fSx7ImNvZGUiOiJSV0YiLCJuYW1lIjoiUndhbmRhbiBGcmFuYyIsInJh
365
+ dGUiOjU2NDc4OC43NjAxNTJ9LHsiY29kZSI6IlNBUiIsIm5hbWUiOiJTYXVk
366
+ aSBSaXlhbCIsInJhdGUiOjI4MDUuMzY4MjI0fSx7ImNvZGUiOiJTQkQiLCJu
367
+ YW1lIjoiU29sb21vbiBJc2xhbmRzIERvbGxhciIsInJhdGUiOjU4MzQuNjUz
368
+ MjQzfSx7ImNvZGUiOiJTQ1IiLCJuYW1lIjoiU2V5Y2hlbGxvaXMgUnVwZWUi
369
+ LCJyYXRlIjo5ODI0Ljg4MzY1fSx7ImNvZGUiOiJTREciLCJuYW1lIjoiU3Vk
370
+ YW5lc2UgUG91bmQiLCJyYXRlIjo0NTQ5LjUwMTc3M30seyJjb2RlIjoiU0dE
371
+ IiwibmFtZSI6IlNpbmdhcG9yZSBEb2xsYXIiLCJyYXRlIjoxMDA5LjMyNTgy
372
+ N30seyJjb2RlIjoiU0hQIiwibmFtZSI6IlNhaW50IEhlbGVuYSBQb3VuZCIs
373
+ InJhdGUiOjUyMC45NDUwNjV9LHsiY29kZSI6IlNMTCIsIm5hbWUiOiJTaWVy
374
+ cmEgTGVvbmVhbiBMZW9uZSIsInJhdGUiOjI5NTA5MzguOX0seyJjb2RlIjoi
375
+ U09TIiwibmFtZSI6IlNvbWFsaSBTaGlsbGluZyIsInJhdGUiOjQzODE0MS4y
376
+ MTY0Mzd9LHsiY29kZSI6IlNSRCIsIm5hbWUiOiJTdXJpbmFtZXNlIERvbGxh
377
+ ciIsInJhdGUiOjUyMzIuNzczOTF9LHsiY29kZSI6IlNURCIsIm5hbWUiOiJT
378
+ w6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUgRG9icmEiLCJyYXRlIjoxNjI4MjYx
379
+ OC44NTI1fSx7ImNvZGUiOiJTVkMiLCJuYW1lIjoiU2FsdmFkb3JhbiBDb2zD
380
+ s24iLCJyYXRlIjo2NTM4Ljk3NjE1OH0seyJjb2RlIjoiU1lQIiwibmFtZSI6
381
+ IlN5cmlhbiBQb3VuZCIsInJhdGUiOjE2Mzc5My4xODk4ODR9LHsiY29kZSI6
382
+ IlNaTCIsIm5hbWUiOiJTd2F6aSBMaWxhbmdlbmkiLCJyYXRlIjoxMTM1OS44
383
+ MzU2NTF9LHsiY29kZSI6IlRIQiIsIm5hbWUiOiJUaGFpIEJhaHQiLCJyYXRl
384
+ IjoyNjM2OC42MjUwNjV9LHsiY29kZSI6IlRKUyIsIm5hbWUiOiJUYWppa2lz
385
+ dGFuaSBTb21vbmkiLCJyYXRlIjo1ODg1Ljc5NTM3fSx7ImNvZGUiOiJUTVQi
386
+ LCJuYW1lIjoiVHVya21lbmlzdGFuaSBNYW5hdCIsInJhdGUiOjI2MjEuNzk3
387
+ Mzg0fSx7ImNvZGUiOiJUTkQiLCJuYW1lIjoiVHVuaXNpYW4gRGluYXIiLCJy
388
+ YXRlIjoxNjE1LjE2OTY2NX0seyJjb2RlIjoiVE9QIiwibmFtZSI6IlRvbmdh
389
+ biBQYcq7YW5nYSIsInJhdGUiOjE2NzYuNTM0OTgyfSx7ImNvZGUiOiJUUlki
390
+ LCJuYW1lIjoiVHVya2lzaCBMaXJhIiwicmF0ZSI6MjE4OS45Mjk1MzN9LHsi
391
+ Y29kZSI6IlRURCIsIm5hbWUiOiJUcmluaWRhZCBhbmQgVG9iYWdvIERvbGxh
392
+ ciIsInJhdGUiOjQ5NjIuMDQ2NzcyfSx7ImNvZGUiOiJUV0QiLCJuYW1lIjoi
393
+ TmV3IFRhaXdhbiBEb2xsYXIiLCJyYXRlIjoyNDIxMy4zMDI2Nzd9LHsiY29k
394
+ ZSI6IlRaUyIsIm5hbWUiOiJUYW56YW5pYW4gU2hpbGxpbmciLCJyYXRlIjox
395
+ NjM4MzY1Ljc0MDcxNX0seyJjb2RlIjoiVUFIIiwibmFtZSI6IlVrcmFpbmlh
396
+ biBIcnl2bmlhIiwicmF0ZSI6MTg2MDguOTc5NzUzfSx7ImNvZGUiOiJVR1gi
397
+ LCJuYW1lIjoiVWdhbmRhbiBTaGlsbGluZyIsInJhdGUiOjI1MDQ2OTMuODMw
398
+ ODY1fSx7ImNvZGUiOiJVWVUiLCJuYW1lIjoiVXJ1Z3VheWFuIFBlc28iLCJy
399
+ YXRlIjoyMjg4Ny43MzY0MzV9LHsiY29kZSI6IlVaUyIsIm5hbWUiOiJVemJl
400
+ a2lzdGFuIFNvbSIsInJhdGUiOjIyMDMyODkuMTY2MTZ9LHsiY29kZSI6IlZF
401
+ RiIsIm5hbWUiOiJWZW5lenVlbGFuIEJvbMOtdmFyIEZ1ZXJ0ZSIsInJhdGUi
402
+ Ojc0NTkuOTk0NDg0fSx7ImNvZGUiOiJWTkQiLCJuYW1lIjoiVmlldG5hbWVz
403
+ ZSBEb25nIiwicmF0ZSI6MTY2ODI2NTMuNzE1MjQ5fSx7ImNvZGUiOiJWVVYi
404
+ LCJuYW1lIjoiVmFudWF0dSBWYXR1IiwicmF0ZSI6ODM3NjMuMjgwMzQ4fSx7
405
+ ImNvZGUiOiJXU1QiLCJuYW1lIjoiU2Ftb2FuIFRhbGEiLCJyYXRlIjoxODk1
406
+ Ljc1NDk1OX0seyJjb2RlIjoiWEFGIiwibmFtZSI6IkNGQSBGcmFuYyBCRUFD
407
+ IiwicmF0ZSI6NDM2NDkzLjg0MTUxOH0seyJjb2RlIjoiWEFHIiwibmFtZSI6
408
+ IlNpbHZlciAodHJveSBvdW5jZSkiLCJyYXRlIjo0Mi44MTcwMzl9LHsiY29k
409
+ ZSI6IlhBVSIsIm5hbWUiOiJHb2xkICh0cm95IG91bmNlKSIsInJhdGUiOjAu
410
+ NTc1OTc1fSx7ImNvZGUiOiJYQ0QiLCJuYW1lIjoiRWFzdCBDYXJpYmJlYW4g
411
+ RG9sbGFyIiwicmF0ZSI6MjAyMS45MTMwMn0seyJjb2RlIjoiWE9GIiwibmFt
412
+ ZSI6IkNGQSBGcmFuYyBCQ0VBTyIsInJhdGUiOjQzODYwNC4xNTU1NDJ9LHsi
413
+ Y29kZSI6IlhQRiIsIm5hbWUiOiJDRlAgRnJhbmMiLCJyYXRlIjo3OTMyNC41
414
+ NzUyOTd9LHsiY29kZSI6IllFUiIsIm5hbWUiOiJZZW1lbmkgUmlhbCIsInJh
415
+ dGUiOjE4NjkyOC43MDI3MDh9LHsiY29kZSI6IlpBUiIsIm5hbWUiOiJTb3V0
416
+ aCBBZnJpY2FuIFJhbmQiLCJyYXRlIjoxMTM0Mi41MTE1MDh9LHsiY29kZSI6
417
+ IlpNVyIsIm5hbWUiOiJaYW1iaWFuIEt3YWNoYSIsInJhdGUiOjgxNzIuNjE0
418
+ NDM3fSx7ImNvZGUiOiJaV0wiLCJuYW1lIjoiWmltYmFid2VhbiBEb2xsYXIi
419
+ LCJyYXRlIjoyNDExNTIuMTA4NTAxfV0=
420
+ http_version:
421
+ recorded_at: Sat, 18 Jun 2016 13:51:33 GMT
422
+ recorded_with: VCR 3.0.3
423
+