riak-client 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.document +5 -5
  3. data/Gemfile +17 -17
  4. data/Guardfile +20 -20
  5. data/LICENSE.md +16 -16
  6. data/README.markdown +1 -1
  7. data/RELEASE_NOTES.md +9 -0
  8. data/lib/riak/client/beefcake/crdt/counter_loader.rb +18 -18
  9. data/lib/riak/client/beefcake/crdt/map_loader.rb +64 -64
  10. data/lib/riak/client/beefcake/footer +4 -4
  11. data/lib/riak/client/beefcake/header +6 -6
  12. data/lib/riak/client/beefcake/messages.rb +0 -16
  13. data/lib/riak/client/decaying.rb +36 -36
  14. data/lib/riak/client/feature_detection.rb +120 -120
  15. data/lib/riak/client/instrumentation.rb +19 -19
  16. data/lib/riak/client/node.rb +49 -49
  17. data/lib/riak/client/search.rb +27 -27
  18. data/lib/riak/conflict.rb +13 -13
  19. data/lib/riak/core_ext.rb +7 -7
  20. data/lib/riak/core_ext/blank.rb +53 -53
  21. data/lib/riak/core_ext/extract_options.rb +7 -7
  22. data/lib/riak/core_ext/json.rb +15 -15
  23. data/lib/riak/core_ext/slice.rb +18 -18
  24. data/lib/riak/core_ext/stringify_keys.rb +10 -10
  25. data/lib/riak/core_ext/symbolize_keys.rb +10 -10
  26. data/lib/riak/core_ext/to_param.rb +31 -31
  27. data/lib/riak/crdt.rb +21 -21
  28. data/lib/riak/crdt/operation.rb +19 -19
  29. data/lib/riak/encoding.rb +6 -6
  30. data/lib/riak/errors/backend_creation.rb +9 -9
  31. data/lib/riak/errors/connection_error.rb +50 -50
  32. data/lib/riak/errors/protobuffs_error.rb +11 -11
  33. data/lib/riak/i18n.rb +7 -7
  34. data/lib/riak/instrumentation.rb +6 -6
  35. data/lib/riak/json.rb +52 -52
  36. data/lib/riak/list_buckets.rb +28 -28
  37. data/lib/riak/locale/fr.yml +51 -51
  38. data/lib/riak/map_reduce/results.rb +49 -49
  39. data/lib/riak/map_reduce_error.rb +7 -7
  40. data/lib/riak/multiget.rb +122 -122
  41. data/lib/riak/stamp.rb +77 -77
  42. data/lib/riak/util/tcp_socket_extensions.rb +58 -58
  43. data/lib/riak/version.rb +1 -1
  44. data/spec/failover/failover.rb +59 -59
  45. data/spec/fixtures/bitcask.txt +25 -25
  46. data/spec/fixtures/multipart-basic-conflict.txt +15 -15
  47. data/spec/fixtures/multipart-blank.txt +7 -7
  48. data/spec/fixtures/multipart-mapreduce.txt +10 -10
  49. data/spec/fixtures/multipart-with-body.txt +16 -16
  50. data/spec/fixtures/multipart-with-marked-tombstones.txt +17 -17
  51. data/spec/fixtures/multipart-with-unmarked-tombstone.txt +16 -16
  52. data/spec/fixtures/server.cert.crt +15 -15
  53. data/spec/fixtures/server.cert.key +15 -15
  54. data/spec/fixtures/test.pem +1 -1
  55. data/spec/integration/riak/threading_spec.rb +150 -150
  56. data/spec/integration/yokozuna/index_spec.rb +61 -61
  57. data/spec/integration/yokozuna/schema_spec.rb +49 -49
  58. data/spec/riak/core_ext/to_param_spec.rb +15 -15
  59. data/spec/riak/crdt/inner_counter_spec.rb +21 -21
  60. data/spec/riak/crdt/inner_set_spec.rb +33 -33
  61. data/spec/riak/crdt/set_spec.rb +61 -61
  62. data/spec/riak/escape_spec.rb +72 -72
  63. data/spec/riak/feature_detection_spec.rb +77 -77
  64. data/spec/riak/index_collection_spec.rb +53 -53
  65. data/spec/riak/instrumentation_spec.rb +124 -124
  66. data/spec/riak/link_spec.rb +85 -85
  67. data/spec/riak/list_buckets_spec.rb +41 -41
  68. data/spec/riak/node_spec.rb +26 -26
  69. data/spec/riak/stamp_spec.rb +54 -54
  70. data/spec/support/certs/README.md +12 -12
  71. data/spec/support/certs/ca.crt +21 -21
  72. data/spec/support/certs/client.crl +13 -13
  73. data/spec/support/certs/client.crt +94 -94
  74. data/spec/support/certs/client.csr +18 -18
  75. data/spec/support/certs/client.key +27 -27
  76. data/spec/support/certs/empty_ca.crt +21 -21
  77. data/spec/support/certs/server.crl +13 -13
  78. data/spec/support/certs/server.crt +94 -94
  79. data/spec/support/certs/server.key +27 -27
  80. data/spec/support/integration_setup.rb +10 -10
  81. data/spec/support/test_client.yml.example +9 -9
  82. metadata +3 -3
@@ -1,85 +1,85 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::Link do
4
- describe "parsing a link header" do
5
- it "creates Link objects from the data" do
6
- result = Riak::Link.parse('</riak/foo/bar>; rel="tag", </riak/foo>; rel="up"')
7
- expect(result).to be_kind_of(Array)
8
- expect(result).to be_all {|i| Riak::Link === i }
9
- end
10
-
11
- it "sets the bucket, key, url and rel parameters properly" do
12
- result = Riak::Link.parse('</riak/foo/bar>; riaktag="tag", </riak/foo>; rel="up"')
13
- expect(result[0].url).to eq("/riak/foo/bar")
14
- expect(result[0].bucket).to eq("foo")
15
- expect(result[0].key).to eq("bar")
16
- expect(result[0].rel).to eq("tag")
17
- expect(result[1].url).to eq("/riak/foo")
18
- expect(result[1].bucket).to eq("foo")
19
- expect(result[1].key).to eq(nil)
20
- expect(result[1].rel).to eq("up")
21
- end
22
-
23
- it "keeps the url intact if it does not point to a bucket or bucket/key" do
24
- result = Riak::Link.parse('</mapred>; rel="riak_kv_wm_mapred"')
25
- expect(result[0].url).to eq("/mapred")
26
- expect(result[0].bucket).to be_nil
27
- expect(result[0].key).to be_nil
28
- end
29
-
30
- it "parses the Riak 1.0 URL scheme" do
31
- result = Riak::Link.parse('</buckets/b/keys/k>; riaktag="tag"').first
32
- expect(result.bucket).to eq('b')
33
- expect(result.key).to eq('k')
34
- expect(result.tag).to eq('tag')
35
- end
36
- end
37
-
38
- context "converting to a string" do
39
- it "to a string appropriate for use in the Link header" do
40
- expect(Riak::Link.new("/riak/foo", "up").to_s).to eq('</riak/foo>; riaktag="up"')
41
- expect(Riak::Link.new("/riak/foo/bar", "next").to_s).to eq('</riak/foo/bar>; riaktag="next"')
42
- expect(Riak::Link.new("/riak", "riak_kv_wm_raw").to_s).to eq('</riak>; riaktag="riak_kv_wm_raw"')
43
- end
44
-
45
- it "converts to a string using the new URL scheme" do
46
- expect(Riak::Link.new("bucket", "key", "tag").to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
47
- expect(Riak::Link.parse('</riak/bucket/key>; riaktag="tag"').first.to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
48
- end
49
- end
50
-
51
- it "converts to a walk spec when pointing to an object" do
52
- expect(Riak::Link.new("/riak/foo/bar", "next").to_walk_spec.to_s).to eq("foo,next,_")
53
- expect { Riak::Link.new("/riak/foo", "up").to_walk_spec }.to raise_error
54
- end
55
-
56
- it "is equivalent to a link with the same url and rel" do
57
- one = Riak::Link.new("/riak/foo/bar", "next")
58
- two = Riak::Link.new("/riak/foo/bar", "next")
59
- expect(one).to eq(two)
60
- expect([one]).to include(two)
61
- expect([two]).to include(one)
62
- end
63
-
64
- it "unescapes the bucket name" do
65
- expect(Riak::Link.new("/riak/bucket%20spaces/key", "foo").bucket).to eq("bucket spaces")
66
- end
67
-
68
- it "unescapes the key name" do
69
- expect(Riak::Link.new("/riak/bucket/key%2Fname", "foo").key).to eq("key/name")
70
- end
71
-
72
- it "doesn't rely on the prefix to equal /riak/ when extracting the bucket and key" do
73
- link = Riak::Link.new("/raw/bucket/key", "foo")
74
- expect(link.bucket).to eq("bucket")
75
- expect(link.key).to eq("key")
76
- end
77
-
78
- it "constructs from bucket, key and tag" do
79
- link = Riak::Link.new("bucket", "key", "tag")
80
- expect(link.bucket).to eq("bucket")
81
- expect(link.key).to eq("key")
82
- expect(link.tag).to eq("tag")
83
- expect(link.url).to eq("/riak/bucket/key")
84
- end
85
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::Link do
4
+ describe "parsing a link header" do
5
+ it "creates Link objects from the data" do
6
+ result = Riak::Link.parse('</riak/foo/bar>; rel="tag", </riak/foo>; rel="up"')
7
+ expect(result).to be_kind_of(Array)
8
+ expect(result).to be_all {|i| Riak::Link === i }
9
+ end
10
+
11
+ it "sets the bucket, key, url and rel parameters properly" do
12
+ result = Riak::Link.parse('</riak/foo/bar>; riaktag="tag", </riak/foo>; rel="up"')
13
+ expect(result[0].url).to eq("/riak/foo/bar")
14
+ expect(result[0].bucket).to eq("foo")
15
+ expect(result[0].key).to eq("bar")
16
+ expect(result[0].rel).to eq("tag")
17
+ expect(result[1].url).to eq("/riak/foo")
18
+ expect(result[1].bucket).to eq("foo")
19
+ expect(result[1].key).to eq(nil)
20
+ expect(result[1].rel).to eq("up")
21
+ end
22
+
23
+ it "keeps the url intact if it does not point to a bucket or bucket/key" do
24
+ result = Riak::Link.parse('</mapred>; rel="riak_kv_wm_mapred"')
25
+ expect(result[0].url).to eq("/mapred")
26
+ expect(result[0].bucket).to be_nil
27
+ expect(result[0].key).to be_nil
28
+ end
29
+
30
+ it "parses the Riak 1.0 URL scheme" do
31
+ result = Riak::Link.parse('</buckets/b/keys/k>; riaktag="tag"').first
32
+ expect(result.bucket).to eq('b')
33
+ expect(result.key).to eq('k')
34
+ expect(result.tag).to eq('tag')
35
+ end
36
+ end
37
+
38
+ context "converting to a string" do
39
+ it "to a string appropriate for use in the Link header" do
40
+ expect(Riak::Link.new("/riak/foo", "up").to_s).to eq('</riak/foo>; riaktag="up"')
41
+ expect(Riak::Link.new("/riak/foo/bar", "next").to_s).to eq('</riak/foo/bar>; riaktag="next"')
42
+ expect(Riak::Link.new("/riak", "riak_kv_wm_raw").to_s).to eq('</riak>; riaktag="riak_kv_wm_raw"')
43
+ end
44
+
45
+ it "converts to a string using the new URL scheme" do
46
+ expect(Riak::Link.new("bucket", "key", "tag").to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
47
+ expect(Riak::Link.parse('</riak/bucket/key>; riaktag="tag"').first.to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
48
+ end
49
+ end
50
+
51
+ it "converts to a walk spec when pointing to an object" do
52
+ expect(Riak::Link.new("/riak/foo/bar", "next").to_walk_spec.to_s).to eq("foo,next,_")
53
+ expect { Riak::Link.new("/riak/foo", "up").to_walk_spec }.to raise_error
54
+ end
55
+
56
+ it "is equivalent to a link with the same url and rel" do
57
+ one = Riak::Link.new("/riak/foo/bar", "next")
58
+ two = Riak::Link.new("/riak/foo/bar", "next")
59
+ expect(one).to eq(two)
60
+ expect([one]).to include(two)
61
+ expect([two]).to include(one)
62
+ end
63
+
64
+ it "unescapes the bucket name" do
65
+ expect(Riak::Link.new("/riak/bucket%20spaces/key", "foo").bucket).to eq("bucket spaces")
66
+ end
67
+
68
+ it "unescapes the key name" do
69
+ expect(Riak::Link.new("/riak/bucket/key%2Fname", "foo").key).to eq("key/name")
70
+ end
71
+
72
+ it "doesn't rely on the prefix to equal /riak/ when extracting the bucket and key" do
73
+ link = Riak::Link.new("/raw/bucket/key", "foo")
74
+ expect(link.bucket).to eq("bucket")
75
+ expect(link.key).to eq("key")
76
+ end
77
+
78
+ it "constructs from bucket, key and tag" do
79
+ link = Riak::Link.new("bucket", "key", "tag")
80
+ expect(link.bucket).to eq("bucket")
81
+ expect(link.key).to eq("key")
82
+ expect(link.tag).to eq("tag")
83
+ expect(link.url).to eq("/riak/bucket/key")
84
+ end
85
+ end
@@ -1,41 +1,41 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::ListBuckets do
4
- before :each do
5
- @client = Riak::Client.new
6
- @backend = double 'backend'
7
- @fake_pool = double 'connection pool'
8
- allow(@fake_pool).to receive(:take).and_yield(@backend)
9
-
10
- @expect_list = expect(@backend).to receive(:list_buckets)
11
-
12
- @client.instance_variable_set :@protobuffs_pool, @fake_pool
13
- end
14
-
15
- describe "non-streaming" do
16
- it 'calls the backend without a block' do
17
- @expect_list.with({}).and_return(%w{a b c d})
18
-
19
- @client.list_buckets
20
- end
21
- end
22
-
23
- describe "streaming" do
24
- it 'calls the backend with a block' do
25
- @expect_list.
26
- and_yield(%w{abc abd abe}).
27
- and_yield(%w{bbb ccc ddd})
28
-
29
- @yielded = []
30
-
31
- @client.list_buckets do |bucket|
32
- @yielded << bucket
33
- end
34
-
35
- @yielded.each do |b|
36
- expect(b).to be_a Riak::Bucket
37
- end
38
- expect(@yielded.map(&:name)).to eq(%w{abc abd abe bbb ccc ddd})
39
- end
40
- end
41
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::ListBuckets do
4
+ before :each do
5
+ @client = Riak::Client.new
6
+ @backend = double 'backend'
7
+ @fake_pool = double 'connection pool'
8
+ allow(@fake_pool).to receive(:take).and_yield(@backend)
9
+
10
+ @expect_list = expect(@backend).to receive(:list_buckets)
11
+
12
+ @client.instance_variable_set :@protobuffs_pool, @fake_pool
13
+ end
14
+
15
+ describe "non-streaming" do
16
+ it 'calls the backend without a block' do
17
+ @expect_list.with({}).and_return(%w{a b c d})
18
+
19
+ @client.list_buckets
20
+ end
21
+ end
22
+
23
+ describe "streaming" do
24
+ it 'calls the backend with a block' do
25
+ @expect_list.
26
+ and_yield(%w{abc abd abe}).
27
+ and_yield(%w{bbb ccc ddd})
28
+
29
+ @yielded = []
30
+
31
+ @client.list_buckets do |bucket|
32
+ @yielded << bucket
33
+ end
34
+
35
+ @yielded.each do |b|
36
+ expect(b).to be_a Riak::Bucket
37
+ end
38
+ expect(@yielded.map(&:name)).to eq(%w{abc abd abe bbb ccc ddd})
39
+ end
40
+ end
41
+ end
@@ -1,26 +1,26 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::Client::Node do
4
- before :each do
5
- @client = Riak::Client.new
6
- @node = Riak::Client::Node.new @client
7
- end
8
-
9
- describe 'when initializing' do
10
- it 'defaults to the local interface on port 8087' do
11
- node = Riak::Client::Node.new @client
12
- expect(node.host).to eq('127.0.0.1')
13
- expect(node.pb_port).to eq(8087)
14
- end
15
-
16
- it 'accepts a host' do
17
- node = Riak::Client::Node.new(@client, :host => 'riak.basho.com')
18
- expect(node.host).to eq("riak.basho.com")
19
- end
20
-
21
- it 'accepts a Protobuffs port' do
22
- node = Riak::Client::Node.new @client, :pb_port => 9000
23
- expect(node.pb_port).to eq(9000)
24
- end
25
- end
26
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::Client::Node do
4
+ before :each do
5
+ @client = Riak::Client.new
6
+ @node = Riak::Client::Node.new @client
7
+ end
8
+
9
+ describe 'when initializing' do
10
+ it 'defaults to the local interface on port 8087' do
11
+ node = Riak::Client::Node.new @client
12
+ expect(node.host).to eq('127.0.0.1')
13
+ expect(node.pb_port).to eq(8087)
14
+ end
15
+
16
+ it 'accepts a host' do
17
+ node = Riak::Client::Node.new(@client, :host => 'riak.basho.com')
18
+ expect(node.host).to eq("riak.basho.com")
19
+ end
20
+
21
+ it 'accepts a Protobuffs port' do
22
+ node = Riak::Client::Node.new @client, :pb_port => 9000
23
+ expect(node.pb_port).to eq(9000)
24
+ end
25
+ end
26
+ end
@@ -1,54 +1,54 @@
1
- require 'spec_helper'
2
- require 'riak/stamp'
3
-
4
- describe Riak::Stamp, test_client: true do
5
- subject { described_class.new test_client }
6
- it "generates always increasing integer identifiers" do
7
- 1000.times do
8
- one = subject.next
9
- two = subject.next
10
- expect([one, two]).to be_all {|i| Integer === i }
11
- expect(two).to be > one
12
- end
13
- end
14
-
15
- it "delays until the next millisecond when the sequence overflows" do
16
- old = subject.instance_variable_get(:@timestamp) + 0
17
- subject.instance_variable_set(:@sequence, described_class::SEQUENCE_MASK)
18
- count = 0
19
- # Simulate the time_gen method returning the same thing multiple times
20
- allow(subject).to receive(:time_gen) do
21
- count += 1
22
- if count < 10
23
- old
24
- else
25
- old + 1
26
- end
27
- end
28
- expect((subject.next >> described_class::TIMESTAMP_SHIFT) & described_class::TIMESTAMP_MASK).to eq(old + 1)
29
- end
30
-
31
- it "raises an exception when the system clock moves backwards" do
32
- old = subject.instance_variable_get(:@timestamp)
33
- expect(subject).to receive(:time_gen).and_return(old - 10)
34
- expect {
35
- subject.next
36
- }.to raise_error(Riak::BackwardsClockError)
37
- end
38
-
39
- # The client/worker ID should be used for disambiguation, not for
40
- # primary ordering. This breaks from the Snowflake model where the
41
- # worker ID is in more significant bits.
42
- it "uses the client ID as the bottom component of the identifier" do
43
- expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
44
- end
45
-
46
- context "using a non-integer client ID" do
47
- subject { described_class.new(Riak::Client.new(:client_id => "ripple")) }
48
- let(:hash) { "ripple".hash }
49
-
50
- it "uses the hash of the client ID as the bottom component of the identifier" do
51
- expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
52
- end
53
- end
54
- end
1
+ require 'spec_helper'
2
+ require 'riak/stamp'
3
+
4
+ describe Riak::Stamp, test_client: true do
5
+ subject { described_class.new test_client }
6
+ it "generates always increasing integer identifiers" do
7
+ 1000.times do
8
+ one = subject.next
9
+ two = subject.next
10
+ expect([one, two]).to be_all {|i| Integer === i }
11
+ expect(two).to be > one
12
+ end
13
+ end
14
+
15
+ it "delays until the next millisecond when the sequence overflows" do
16
+ old = subject.instance_variable_get(:@timestamp) + 0
17
+ subject.instance_variable_set(:@sequence, described_class::SEQUENCE_MASK)
18
+ count = 0
19
+ # Simulate the time_gen method returning the same thing multiple times
20
+ allow(subject).to receive(:time_gen) do
21
+ count += 1
22
+ if count < 10
23
+ old
24
+ else
25
+ old + 1
26
+ end
27
+ end
28
+ expect((subject.next >> described_class::TIMESTAMP_SHIFT) & described_class::TIMESTAMP_MASK).to eq(old + 1)
29
+ end
30
+
31
+ it "raises an exception when the system clock moves backwards" do
32
+ old = subject.instance_variable_get(:@timestamp)
33
+ expect(subject).to receive(:time_gen).and_return(old - 10)
34
+ expect {
35
+ subject.next
36
+ }.to raise_error(Riak::BackwardsClockError)
37
+ end
38
+
39
+ # The client/worker ID should be used for disambiguation, not for
40
+ # primary ordering. This breaks from the Snowflake model where the
41
+ # worker ID is in more significant bits.
42
+ it "uses the client ID as the bottom component of the identifier" do
43
+ expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
44
+ end
45
+
46
+ context "using a non-integer client ID" do
47
+ subject { described_class.new(Riak::Client.new(:client_id => "ripple")) }
48
+ let(:hash) { "ripple".hash }
49
+
50
+ it "uses the hash of the client ID as the bottom component of the identifier" do
51
+ expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
52
+ end
53
+ end
54
+ end
@@ -1,13 +1,13 @@
1
- **DO NOT USE THESE IN PRODUCTION**
2
-
3
- This directory has certificates and a key for testing Riak authentication.
4
-
5
- * server.key - a private key for a Riak server
6
- * server.crt - the certificate for server.key
7
- * ca.crt - a certificate for the CA that issued server.crt
8
- * empty_ca.crt - a certificate for a CA that has and cannot ever issue a
9
- certificate (I deleted its private key)
10
-
11
- **DO NOT USE THESE IN PRODUCTION**
12
-
1
+ **DO NOT USE THESE IN PRODUCTION**
2
+
3
+ This directory has certificates and a key for testing Riak authentication.
4
+
5
+ * server.key - a private key for a Riak server
6
+ * server.crt - the certificate for server.key
7
+ * ca.crt - a certificate for the CA that issued server.crt
8
+ * empty_ca.crt - a certificate for a CA that has and cannot ever issue a
9
+ certificate (I deleted its private key)
10
+
11
+ **DO NOT USE THESE IN PRODUCTION**
12
+
13
13
  These were generated using https://github.com/basho-labs/riak-ruby-ca .
@@ -1,21 +1,21 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDjDCCAnQCCQDCaCbuH5N1HjANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
- VVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1pYW1pMQ4wDAYDVQQKDAVC
4
- YXNobzEZMBcGA1UECwwQUmlhayBSdWJ5IENsaWVudDELMAkGA1UEAwwCQ0ExHjAc
5
- BgkqhkiG9w0BCQEWD2JyeWNlQGJhc2hvLmNvbTAeFw0xNDA5MTgyMjU4MDJaFw0y
6
- NDA5MTUyMjU4MDJaMIGHMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRmxvcmlkYTEO
7
- MAwGA1UEBwwFTWlhbWkxDjAMBgNVBAoMBUJhc2hvMRkwFwYDVQQLDBBSaWFrIFJ1
8
- YnkgQ2xpZW50MQswCQYDVQQDDAJDQTEeMBwGCSqGSIb3DQEJARYPYnJ5Y2VAYmFz
9
- aG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLREjyW0bsMQ
10
- 2xZuZfXrTqndZdtmJrUaUdwLcTYXo/BLJq8mw/UoKBajzDJS1OsVutOT3l1mQZNk
11
- pE15lJbPo301RtkGOeYlTx6ptawutrvlMlACnWtYyuL9U8qqnMJAsdBEjTU3Xxao
12
- /vJTECBVaKtL9D5vEu2fOn4ZWvSuYG14ZXhltBPgon95SrJX+erXgHs0IH6l1ftW
13
- xZL9Uw/Tj/s8XEMK8n6FB+CYuj33fZMjswvdXABzhEAW8bCupJT42V/S9Zj4B0Z8
14
- iv6wgurc1yuU6yl0VDGZ6Ee++7ter3GZZrV4YC5A8UjW0+8sADUYKiZNYWTO6S+N
15
- Pu/sLRdykwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBzcs/VIHHeyUWlS+Rx/s/m
16
- m54RK332r2+8Mywtwdz57kA6rsbYBrrlKVmEzjtgCIcpF/3hhEChYcSA4w0Aa+zd
17
- Zd6eNtUyicPFfm/8GycaLM3Ptj3duq4jHha2IzhomfACm8pkBj8IU8Y5q/YBV+3L
18
- hJxderphbz6lqrH6USkt/aaFzu+1onYlxzGZDyiFPOxUbRPXN12y3XCeFSfuHBej
19
- ifFRSHGR8HU++g4VYnOi/1YXSDFh7yRvA2qBlz+kYprBS2GggXIrfCgT+FnMALlg
20
- 6TrfsWQiI3pyGKUsNjdaQckdLMWr8jvutb7vPZ1WdMdgKxbE0Swo1HBbkCAe5JjG
21
- -----END CERTIFICATE-----
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDjDCCAnQCCQDCaCbuH5N1HjANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
+ VVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1pYW1pMQ4wDAYDVQQKDAVC
4
+ YXNobzEZMBcGA1UECwwQUmlhayBSdWJ5IENsaWVudDELMAkGA1UEAwwCQ0ExHjAc
5
+ BgkqhkiG9w0BCQEWD2JyeWNlQGJhc2hvLmNvbTAeFw0xNDA5MTgyMjU4MDJaFw0y
6
+ NDA5MTUyMjU4MDJaMIGHMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRmxvcmlkYTEO
7
+ MAwGA1UEBwwFTWlhbWkxDjAMBgNVBAoMBUJhc2hvMRkwFwYDVQQLDBBSaWFrIFJ1
8
+ YnkgQ2xpZW50MQswCQYDVQQDDAJDQTEeMBwGCSqGSIb3DQEJARYPYnJ5Y2VAYmFz
9
+ aG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLREjyW0bsMQ
10
+ 2xZuZfXrTqndZdtmJrUaUdwLcTYXo/BLJq8mw/UoKBajzDJS1OsVutOT3l1mQZNk
11
+ pE15lJbPo301RtkGOeYlTx6ptawutrvlMlACnWtYyuL9U8qqnMJAsdBEjTU3Xxao
12
+ /vJTECBVaKtL9D5vEu2fOn4ZWvSuYG14ZXhltBPgon95SrJX+erXgHs0IH6l1ftW
13
+ xZL9Uw/Tj/s8XEMK8n6FB+CYuj33fZMjswvdXABzhEAW8bCupJT42V/S9Zj4B0Z8
14
+ iv6wgurc1yuU6yl0VDGZ6Ee++7ter3GZZrV4YC5A8UjW0+8sADUYKiZNYWTO6S+N
15
+ Pu/sLRdykwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBzcs/VIHHeyUWlS+Rx/s/m
16
+ m54RK332r2+8Mywtwdz57kA6rsbYBrrlKVmEzjtgCIcpF/3hhEChYcSA4w0Aa+zd
17
+ Zd6eNtUyicPFfm/8GycaLM3Ptj3duq4jHha2IzhomfACm8pkBj8IU8Y5q/YBV+3L
18
+ hJxderphbz6lqrH6USkt/aaFzu+1onYlxzGZDyiFPOxUbRPXN12y3XCeFSfuHBej
19
+ ifFRSHGR8HU++g4VYnOi/1YXSDFh7yRvA2qBlz+kYprBS2GggXIrfCgT+FnMALlg
20
+ 6TrfsWQiI3pyGKUsNjdaQckdLMWr8jvutb7vPZ1WdMdgKxbE0Swo1HBbkCAe5JjG
21
+ -----END CERTIFICATE-----