chef 12.4.0-universal-mingw32 → 12.4.1-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/api_client.rb +31 -129
  3. data/lib/chef/api_client_v1.rb +325 -0
  4. data/lib/chef/chef_class.rb +15 -7
  5. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +2 -2
  6. data/lib/chef/dsl/resources.rb +6 -4
  7. data/lib/chef/exceptions.rb +2 -2
  8. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +2 -1
  9. data/lib/chef/knife/bootstrap/templates/chef-full.erb +4 -4
  10. data/lib/chef/knife/client_bulk_delete.rb +2 -2
  11. data/lib/chef/knife/client_create.rb +4 -4
  12. data/lib/chef/knife/client_delete.rb +3 -3
  13. data/lib/chef/knife/client_edit.rb +10 -2
  14. data/lib/chef/knife/client_list.rb +2 -2
  15. data/lib/chef/knife/client_reregister.rb +2 -2
  16. data/lib/chef/knife/client_show.rb +2 -2
  17. data/lib/chef/knife/osc_user_create.rb +3 -3
  18. data/lib/chef/knife/osc_user_delete.rb +2 -2
  19. data/lib/chef/knife/osc_user_edit.rb +3 -3
  20. data/lib/chef/knife/osc_user_list.rb +2 -2
  21. data/lib/chef/knife/osc_user_reregister.rb +2 -2
  22. data/lib/chef/knife/osc_user_show.rb +2 -2
  23. data/lib/chef/knife/user_create.rb +3 -3
  24. data/lib/chef/knife/user_delete.rb +4 -4
  25. data/lib/chef/knife/user_edit.rb +3 -3
  26. data/lib/chef/knife/user_list.rb +2 -2
  27. data/lib/chef/knife/user_reregister.rb +2 -2
  28. data/lib/chef/knife/user_show.rb +2 -2
  29. data/lib/chef/node_map.rb +14 -18
  30. data/lib/chef/platform/handler_map.rb +45 -0
  31. data/lib/chef/platform/priority_map.rb +19 -32
  32. data/lib/chef/platform/provider_handler_map.rb +29 -0
  33. data/lib/chef/platform/provider_mapping.rb +3 -2
  34. data/lib/chef/platform/resource_handler_map.rb +29 -0
  35. data/lib/chef/platform/resource_priority_map.rb +0 -6
  36. data/lib/chef/provider.rb +1 -1
  37. data/lib/chef/provider/dsc_resource.rb +2 -2
  38. data/lib/chef/provider/dsc_script.rb +1 -1
  39. data/lib/chef/provider/mount/aix.rb +1 -1
  40. data/lib/chef/provider/package.rb +0 -31
  41. data/lib/chef/provider/package/aix.rb +1 -0
  42. data/lib/chef/provider/package/apt.rb +1 -0
  43. data/lib/chef/provider/package/homebrew.rb +1 -0
  44. data/lib/chef/provider/package/ips.rb +1 -0
  45. data/lib/chef/provider/package/macports.rb +1 -0
  46. data/lib/chef/provider/package/openbsd.rb +1 -0
  47. data/lib/chef/provider/package/pacman.rb +1 -0
  48. data/lib/chef/provider/package/paludis.rb +1 -0
  49. data/lib/chef/provider/package/portage.rb +2 -0
  50. data/lib/chef/provider/package/smartos.rb +1 -0
  51. data/lib/chef/provider/package/solaris.rb +2 -0
  52. data/lib/chef/provider/package/yum.rb +1 -0
  53. data/lib/chef/provider/package/zypper.rb +1 -0
  54. data/lib/chef/provider/service.rb +4 -22
  55. data/lib/chef/provider/service/debian.rb +2 -0
  56. data/lib/chef/provider/service/insserv.rb +2 -0
  57. data/lib/chef/provider/service/invokercd.rb +2 -0
  58. data/lib/chef/provider/service/openbsd.rb +1 -1
  59. data/lib/chef/provider/service/redhat.rb +2 -0
  60. data/lib/chef/provider/service/upstart.rb +3 -0
  61. data/lib/chef/provider_resolver.rb +59 -53
  62. data/lib/chef/resource.rb +22 -73
  63. data/lib/chef/resource/dsc_script.rb +1 -1
  64. data/lib/chef/resource/ips_package.rb +1 -0
  65. data/lib/chef/resource/mount.rb +8 -0
  66. data/lib/chef/resource/openbsd_package.rb +0 -11
  67. data/lib/chef/resource/solaris_package.rb +1 -4
  68. data/lib/chef/resource_resolver.rb +54 -26
  69. data/lib/chef/run_list/versioned_recipe_list.rb +6 -5
  70. data/lib/chef/user.rb +52 -188
  71. data/lib/chef/user_v1.rb +335 -0
  72. data/lib/chef/version.rb +1 -1
  73. data/spec/data/trusted_certs/opscode.pem +53 -56
  74. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +1 -1
  75. data/spec/functional/resource/package_spec.rb +0 -2
  76. data/spec/integration/recipes/recipe_dsl_spec.rb +661 -126
  77. data/spec/spec_helper.rb +19 -13
  78. data/spec/support/shared/unit/api_versioning.rb +2 -2
  79. data/spec/unit/api_client_spec.rb +22 -201
  80. data/spec/unit/api_client_v1_spec.rb +457 -0
  81. data/spec/unit/knife/client_bulk_delete_spec.rb +4 -4
  82. data/spec/unit/knife/client_create_spec.rb +1 -1
  83. data/spec/unit/knife/client_delete_spec.rb +3 -3
  84. data/spec/unit/knife/client_edit_spec.rb +14 -1
  85. data/spec/unit/knife/client_list_spec.rb +1 -1
  86. data/spec/unit/knife/client_reregister_spec.rb +2 -2
  87. data/spec/unit/knife/client_show_spec.rb +2 -2
  88. data/spec/unit/knife/osc_user_create_spec.rb +5 -5
  89. data/spec/unit/knife/osc_user_delete_spec.rb +1 -1
  90. data/spec/unit/knife/osc_user_edit_spec.rb +1 -1
  91. data/spec/unit/knife/osc_user_list_spec.rb +1 -1
  92. data/spec/unit/knife/osc_user_reregister_spec.rb +1 -1
  93. data/spec/unit/knife/osc_user_show_spec.rb +1 -1
  94. data/spec/unit/knife/user_create_spec.rb +1 -1
  95. data/spec/unit/knife/user_delete_spec.rb +2 -2
  96. data/spec/unit/knife/user_edit_spec.rb +2 -2
  97. data/spec/unit/knife/user_list_spec.rb +1 -1
  98. data/spec/unit/knife/user_reregister_spec.rb +1 -1
  99. data/spec/unit/knife/user_show_spec.rb +2 -2
  100. data/spec/unit/lwrp_spec.rb +146 -134
  101. data/spec/unit/node_map_spec.rb +12 -0
  102. data/spec/unit/platform_spec.rb +1 -1
  103. data/spec/unit/provider/deploy_spec.rb +1 -1
  104. data/spec/unit/provider/dsc_resource_spec.rb +3 -3
  105. data/spec/unit/provider/dsc_script_spec.rb +2 -2
  106. data/spec/unit/provider_resolver_spec.rb +170 -135
  107. data/spec/unit/recipe_spec.rb +3 -3
  108. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  109. data/spec/unit/resource/cron_spec.rb +1 -1
  110. data/spec/unit/resource/directory_spec.rb +1 -1
  111. data/spec/unit/resource/dsc_resource_spec.rb +1 -1
  112. data/spec/unit/resource/dsc_script_spec.rb +2 -2
  113. data/spec/unit/resource/env_spec.rb +1 -1
  114. data/spec/unit/resource/erl_call_spec.rb +1 -1
  115. data/spec/unit/resource/file_spec.rb +1 -1
  116. data/spec/unit/resource/group_spec.rb +1 -1
  117. data/spec/unit/resource/link_spec.rb +1 -1
  118. data/spec/unit/resource/mdadm_spec.rb +1 -1
  119. data/spec/unit/resource/mount_spec.rb +1 -1
  120. data/spec/unit/resource/ohai_spec.rb +1 -1
  121. data/spec/unit/resource/registry_key_spec.rb +1 -1
  122. data/spec/unit/resource/route_spec.rb +1 -1
  123. data/spec/unit/resource/ruby_block_spec.rb +3 -3
  124. data/spec/unit/resource/user_spec.rb +1 -1
  125. data/spec/unit/resource/windows_service_spec.rb +1 -1
  126. data/spec/unit/resource_resolver_spec.rb +8 -4
  127. data/spec/unit/resource_spec.rb +89 -3
  128. data/spec/unit/run_list/versioned_recipe_list_spec.rb +115 -48
  129. data/spec/unit/user_spec.rb +97 -405
  130. data/spec/unit/user_v1_spec.rb +584 -0
  131. metadata +11 -6
  132. data/lib/chef/osc_user.rb +0 -194
  133. data/spec/unit/osc_user_spec.rb +0 -276
@@ -0,0 +1,335 @@
1
+ #
2
+ # Author:: Steven Danna (steve@opscode.com)
3
+ # Copyright:: Copyright 2012 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ require 'chef/config'
19
+ require 'chef/mixin/params_validate'
20
+ require 'chef/mixin/from_file'
21
+ require 'chef/mash'
22
+ require 'chef/json_compat'
23
+ require 'chef/search/query'
24
+ require 'chef/mixin/api_version_request_handling'
25
+ require 'chef/exceptions'
26
+ require 'chef/server_api'
27
+
28
+ # OSC 11 BACKWARDS COMPATIBILITY NOTE (remove after OSC 11 support ends)
29
+ #
30
+ # In general, Chef::UserV1 is no longer expected to support Open Source Chef 11 Server requests.
31
+ # The object that handles those requests remain in the Chef::User namespace.
32
+ # This code will be moved to the Chef::User namespace as of Chef 13.
33
+ #
34
+ # Exception: self.list is backwards compatible with OSC 11
35
+ class Chef
36
+ class UserV1
37
+
38
+ include Chef::Mixin::FromFile
39
+ include Chef::Mixin::ParamsValidate
40
+ include Chef::Mixin::ApiVersionRequestHandling
41
+
42
+ SUPPORTED_API_VERSIONS = [0,1]
43
+
44
+ def initialize
45
+ @username = nil
46
+ @display_name = nil
47
+ @first_name = nil
48
+ @middle_name = nil
49
+ @last_name = nil
50
+ @email = nil
51
+ @password = nil
52
+ @public_key = nil
53
+ @private_key = nil
54
+ @create_key = nil
55
+ @password = nil
56
+ end
57
+
58
+ def chef_root_rest_v0
59
+ @chef_root_rest_v0 ||= Chef::ServerAPI.new(Chef::Config[:chef_server_root], {:api_version => "0"})
60
+ end
61
+
62
+ def chef_root_rest_v1
63
+ @chef_root_rest_v1 ||= Chef::ServerAPI.new(Chef::Config[:chef_server_root], {:api_version => "1"})
64
+ end
65
+
66
+ def username(arg=nil)
67
+ set_or_return(:username, arg,
68
+ :regex => /^[a-z0-9\-_]+$/)
69
+ end
70
+
71
+ def display_name(arg=nil)
72
+ set_or_return(:display_name,
73
+ arg, :kind_of => String)
74
+ end
75
+
76
+ def first_name(arg=nil)
77
+ set_or_return(:first_name,
78
+ arg, :kind_of => String)
79
+ end
80
+
81
+ def middle_name(arg=nil)
82
+ set_or_return(:middle_name,
83
+ arg, :kind_of => String)
84
+ end
85
+
86
+ def last_name(arg=nil)
87
+ set_or_return(:last_name,
88
+ arg, :kind_of => String)
89
+ end
90
+
91
+ def email(arg=nil)
92
+ set_or_return(:email,
93
+ arg, :kind_of => String)
94
+ end
95
+
96
+ def password(arg=nil)
97
+ set_or_return(:password,
98
+ arg, :kind_of => String)
99
+ end
100
+
101
+ def create_key(arg=nil)
102
+ set_or_return(:create_key, arg,
103
+ :kind_of => [TrueClass, FalseClass])
104
+ end
105
+
106
+ def public_key(arg=nil)
107
+ set_or_return(:public_key,
108
+ arg, :kind_of => String)
109
+ end
110
+
111
+ def private_key(arg=nil)
112
+ set_or_return(:private_key,
113
+ arg, :kind_of => String)
114
+ end
115
+
116
+ def password(arg=nil)
117
+ set_or_return(:password,
118
+ arg, :kind_of => String)
119
+ end
120
+
121
+ def to_hash
122
+ result = {
123
+ "username" => @username
124
+ }
125
+ result["display_name"] = @display_name unless @display_name.nil?
126
+ result["first_name"] = @first_name unless @first_name.nil?
127
+ result["middle_name"] = @middle_name unless @middle_name.nil?
128
+ result["last_name"] = @last_name unless @last_name.nil?
129
+ result["email"] = @email unless @email.nil?
130
+ result["password"] = @password unless @password.nil?
131
+ result["public_key"] = @public_key unless @public_key.nil?
132
+ result["private_key"] = @private_key unless @private_key.nil?
133
+ result["create_key"] = @create_key unless @create_key.nil?
134
+ result
135
+ end
136
+
137
+ def to_json(*a)
138
+ Chef::JSONCompat.to_json(to_hash, *a)
139
+ end
140
+
141
+ def destroy
142
+ # will default to the current API version (Chef::Authenticator::DEFAULT_SERVER_API_VERSION)
143
+ Chef::REST.new(Chef::Config[:chef_server_url]).delete("users/#{@username}")
144
+ end
145
+
146
+ def create
147
+ # try v1, fail back to v0 if v1 not supported
148
+ begin
149
+ payload = {
150
+ :username => @username,
151
+ :display_name => @display_name,
152
+ :first_name => @first_name,
153
+ :last_name => @last_name,
154
+ :email => @email,
155
+ :password => @password
156
+ }
157
+ payload[:public_key] = @public_key unless @public_key.nil?
158
+ payload[:create_key] = @create_key unless @create_key.nil?
159
+ payload[:middle_name] = @middle_name unless @middle_name.nil?
160
+ raise Chef::Exceptions::InvalidUserAttribute, "You cannot set both public_key and create_key for create." if !@create_key.nil? && !@public_key.nil?
161
+ new_user = chef_root_rest_v1.post("users", payload)
162
+
163
+ # get the private_key out of the chef_key hash if it exists
164
+ if new_user['chef_key']
165
+ if new_user['chef_key']['private_key']
166
+ new_user['private_key'] = new_user['chef_key']['private_key']
167
+ end
168
+ new_user['public_key'] = new_user['chef_key']['public_key']
169
+ new_user.delete('chef_key')
170
+ end
171
+ rescue Net::HTTPServerException => e
172
+ # rescue API V0 if 406 and the server supports V0
173
+ supported_versions = server_client_api_version_intersection(e, SUPPORTED_API_VERSIONS)
174
+ raise e unless supported_versions && supported_versions.include?(0)
175
+ payload = {
176
+ :username => @username,
177
+ :display_name => @display_name,
178
+ :first_name => @first_name,
179
+ :last_name => @last_name,
180
+ :email => @email,
181
+ :password => @password
182
+ }
183
+ payload[:middle_name] = @middle_name unless @middle_name.nil?
184
+ payload[:public_key] = @public_key unless @public_key.nil?
185
+ # under API V0, the server will create a key pair if public_key isn't passed
186
+ new_user = chef_root_rest_v0.post("users", payload)
187
+ end
188
+
189
+ Chef::UserV1.from_hash(self.to_hash.merge(new_user))
190
+ end
191
+
192
+ def update(new_key=false)
193
+ begin
194
+ payload = {:username => username}
195
+ payload[:display_name] = display_name unless display_name.nil?
196
+ payload[:first_name] = first_name unless first_name.nil?
197
+ payload[:middle_name] = middle_name unless middle_name.nil?
198
+ payload[:last_name] = last_name unless last_name.nil?
199
+ payload[:email] = email unless email.nil?
200
+ payload[:password] = password unless password.nil?
201
+
202
+ # API V1 will fail if these key fields are defined, and try V0 below if relevant 400 is returned
203
+ payload[:public_key] = public_key unless public_key.nil?
204
+ payload[:private_key] = new_key if new_key
205
+
206
+ updated_user = chef_root_rest_v1.put("users/#{username}", payload)
207
+ rescue Net::HTTPServerException => e
208
+ if e.response.code == "400"
209
+ # if a 400 is returned but the error message matches the error related to private / public key fields, try V0
210
+ # else, raise the 400
211
+ error = Chef::JSONCompat.from_json(e.response.body)["error"].first
212
+ error_match = /Since Server API v1, all keys must be updated via the keys endpoint/.match(error)
213
+ if error_match.nil?
214
+ raise e
215
+ end
216
+ else # for other types of errors, test for API versioning errors right away
217
+ supported_versions = server_client_api_version_intersection(e, SUPPORTED_API_VERSIONS)
218
+ raise e unless supported_versions && supported_versions.include?(0)
219
+ end
220
+ updated_user = chef_root_rest_v0.put("users/#{username}", payload)
221
+ end
222
+ Chef::UserV1.from_hash(self.to_hash.merge(updated_user))
223
+ end
224
+
225
+ def save(new_key=false)
226
+ begin
227
+ create
228
+ rescue Net::HTTPServerException => e
229
+ if e.response.code == "409"
230
+ update(new_key)
231
+ else
232
+ raise e
233
+ end
234
+ end
235
+ end
236
+
237
+ # Note: remove after API v0 no longer supported by client (and knife command).
238
+ def reregister
239
+ begin
240
+ payload = self.to_hash.merge({"private_key" => true})
241
+ reregistered_self = chef_root_rest_v0.put("users/#{username}", payload)
242
+ private_key(reregistered_self["private_key"])
243
+ # only V0 supported for reregister
244
+ rescue Net::HTTPServerException => e
245
+ # if there was a 406 related to versioning, give error explaining that
246
+ # only API version 0 is supported for reregister command
247
+ if e.response.code == "406" && e.response["x-ops-server-api-version"]
248
+ version_header = Chef::JSONCompat.from_json(e.response["x-ops-server-api-version"])
249
+ min_version = version_header["min_version"]
250
+ max_version = version_header["max_version"]
251
+ error_msg = reregister_only_v0_supported_error_msg(max_version, min_version)
252
+ raise Chef::Exceptions::OnlyApiVersion0SupportedForAction.new(error_msg)
253
+ else
254
+ raise e
255
+ end
256
+ end
257
+ self
258
+ end
259
+
260
+ def to_s
261
+ "user[#{@username}]"
262
+ end
263
+
264
+ # Class Methods
265
+
266
+ def self.from_hash(user_hash)
267
+ user = Chef::UserV1.new
268
+ user.username user_hash['username']
269
+ user.display_name user_hash['display_name'] if user_hash.key?('display_name')
270
+ user.first_name user_hash['first_name'] if user_hash.key?('first_name')
271
+ user.middle_name user_hash['middle_name'] if user_hash.key?('middle_name')
272
+ user.last_name user_hash['last_name'] if user_hash.key?('last_name')
273
+ user.email user_hash['email'] if user_hash.key?('email')
274
+ user.password user_hash['password'] if user_hash.key?('password')
275
+ user.public_key user_hash['public_key'] if user_hash.key?('public_key')
276
+ user.private_key user_hash['private_key'] if user_hash.key?('private_key')
277
+ user.create_key user_hash['create_key'] if user_hash.key?('create_key')
278
+ user
279
+ end
280
+
281
+ def self.from_json(json)
282
+ Chef::UserV1.from_hash(Chef::JSONCompat.from_json(json))
283
+ end
284
+
285
+ class << self
286
+ alias_method :json_create, :from_json
287
+ end
288
+
289
+ def self.list(inflate=false)
290
+ response = Chef::REST.new(Chef::Config[:chef_server_url]).get('users')
291
+ users = if response.is_a?(Array)
292
+ # EC 11 / CS 12 V0, V1
293
+ # GET /organizations/<org>/users
294
+ transform_list_response(response)
295
+ else
296
+ # OSC 11
297
+ # GET /users
298
+ # EC 11 / CS 12 V0, V1
299
+ # GET /users
300
+ response # OSC
301
+ end
302
+
303
+ if inflate
304
+ users.inject({}) do |user_map, (name, _url)|
305
+ user_map[name] = Chef::UserV1.load(name)
306
+ user_map
307
+ end
308
+ else
309
+ users
310
+ end
311
+ end
312
+
313
+ def self.load(username)
314
+ # will default to the current API version (Chef::Authenticator::DEFAULT_SERVER_API_VERSION)
315
+ response = Chef::REST.new(Chef::Config[:chef_server_url]).get("users/#{username}")
316
+ Chef::UserV1.from_hash(response)
317
+ end
318
+
319
+ # Gross. Transforms an API response in the form of:
320
+ # [ { "user" => { "username" => USERNAME }}, ...]
321
+ # into the form
322
+ # { "USERNAME" => "URI" }
323
+ def self.transform_list_response(response)
324
+ new_response = Hash.new
325
+ response.each do |u|
326
+ name = u['user']['username']
327
+ new_response[name] = Chef::Config[:chef_server_url] + "/users/#{name}"
328
+ end
329
+ new_response
330
+ end
331
+
332
+ private_class_method :transform_list_response
333
+
334
+ end
335
+ end
data/lib/chef/version.rb CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  class Chef
23
23
  CHEF_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__)))
24
- VERSION = '12.4.0'
24
+ VERSION = '12.4.1'
25
25
  end
26
26
 
27
27
  #
@@ -1,60 +1,57 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIFrDCCBJSgAwIBAgIQB1O/fCb6cEytJ4BP3HTbCTANBgkqhkiG9w0BAQUFADBI
3
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMSIwIAYDVQQDExlE
4
- aWdpQ2VydCBTZWN1cmUgU2VydmVyIENBMB4XDTE0MDYxMDAwMDAwMFoXDTE1MDcw
5
- MTEyMDAwMFowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
6
- BgNVBAcTB1NlYXR0bGUxGzAZBgNVBAoTEkNoZWYgU29mdHdhcmUsIEluYzEWMBQG
7
- A1UEAwwNKi5vcHNjb2RlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
8
- ggEBAMm+rf2RcPGBlZoM+hI4BxlaHbdRg1GZJ/T46UWFOBnZFVP++TX/pyjDsvns
9
- xymcQywtoN/26+UIys6oWX1um9ikEokvf67LdsUeemQGFHFky8X1Ka2hVtKnxBhi
10
- XZfvyHDR4IyFWU9AwmhnqySzxqCtynUu8Gktx7JVfqbRFMZ186pDcSw8LoaqjTVG
11
- SzO7eNH2sM3doMueAHj7ITc2wUzmfa0Pdh+K8UoCn/HopU5LzycziJVPYvUkLT2m
12
- YCV7VWRc+kObZseHhZAbyaDk3RgPQ/eRMhytAgbruBHWDqNesNw+ZA70w856Oj2Y
13
- geO7JF+5V6WvkywrF8vydaoM2l8CAwEAAaOCAm8wggJrMB8GA1UdIwQYMBaAFJBx
14
- 2zfrc8jv3NUeErY0uitaoKaSMB0GA1UdDgQWBBQK5zjZwbcmcMNLnI2h1ioAldEV
15
- ujCBygYDVR0RBIHCMIG/gg0qLm9wc2NvZGUuY29tghBjb3JwLm9wc2NvZGUuY29t
16
- ghIqLmNvcnAub3BzY29kZS5jb22CDyoubGVhcm5jaGVmLmNvbYISKi5jb3JwLmdl
17
- dGNoZWYuY29tgg0qLmdldGNoZWYuY29tggwqLm9wc2NvZGUudXOCC2dldGNoZWYu
18
- Y29tggtvcHNjb2RlLmNvbYIRYXBpLmJlcmtzaGVsZi5jb22CDWxlYXJuY2hlZi5j
19
- b22CCm9wc2NvZGUudXMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
20
- BwMBBggrBgEFBQcDAjBhBgNVHR8EWjBYMCqgKKAmhiRodHRwOi8vY3JsMy5kaWdp
21
- Y2VydC5jb20vc3NjYS1nNi5jcmwwKqAooCaGJGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0
22
- LmNvbS9zc2NhLWc2LmNybDBCBgNVHSAEOzA5MDcGCWCGSAGG/WwBATAqMCgGCCsG
23
- AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMHgGCCsGAQUFBwEB
24
- BGwwajAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGCCsG
25
- AQUFBzAChjZodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRTZWN1
26
- cmVTZXJ2ZXJDQS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOCAQEA
27
- kgBpJ2t+St7SmWfeNU9EWAhy0NuUnRIi1jnqXdapfPmS6V/M0i2wP/p+crMty78e
28
- +3ieuF5s0GJBLs85Hikcl3SlrrbIBJxozov1TY6zeOi6+TCsdXer6t6iQKz36zno
29
- +k+T6lnMCyo9+pk1PhcAWyfo1Fz4xVOBVec/71VovFkkGD2//KB+sbDs+yh21N9M
30
- ReO7duj16rQSctfO9R2h65djBNlgz6hXY2nlw8/x3uFfZobXOxDrTcH6Z8HIslkE
31
- MiTXGix6zdqJaFRCWi+prnAztWs+jEy+v95VSEHPj3xpwZ9WjsxQN0kFA2EX61v/
32
- kGunmyhehGjblQRt7bpyiA==
33
- -----END CERTIFICATE-----
34
- -----BEGIN CERTIFICATE-----
35
- MIIEjzCCA3egAwIBAgIQBp4dt3/PHfupevXlyaJANzANBgkqhkiG9w0BAQUFADBh
2
+ MIIElDCCA3ygAwIBAgIQAf2j627KdciIQ4tyS8+8kTANBgkqhkiG9w0BAQsFADBh
36
3
  MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
37
4
  d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
38
- QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaMEgxCzAJBgNVBAYTAlVT
39
- MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxIjAgBgNVBAMTGURpZ2lDZXJ0IFNlY3Vy
40
- ZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7V+Qh
41
- qdWbYDd+jqFhf4HiGsJ1ZNmRUAvkNkQkbjDSm3on+sJqrmpwCTi5IArIZRBKiKwx
42
- 8tyS8mOhXYBjWYCSIxzm73ZKUDXJ2HE4ue3w5kKu0zgmeTD5IpTG26Y/QXiQ2N5c
43
- fml9+JAVOtChoL76srIZodgr0c6/a91Jq6OS/rWryME+7gEA2KlEuEJziMNh9atK
44
- gygK0tRJ+mqxzd9XLJTl4sqDX7e6YlwvaKXwwLn9K9HpH9gaYhW9/z2m98vv5ttl
45
- LyU47PvmIGZYljQZ0hXOIdMkzNkUb9j+Vcfnb7YPGoxJvinyulqagSY3JG/XSBJs
46
- Lln1nBi72fZo4t9FAgMBAAGjggFaMIIBVjASBgNVHRMBAf8ECDAGAQH/AgEAMA4G
47
- A1UdDwEB/wQEAwIBhjA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6
48
- Ly9vY3NwLmRpZ2ljZXJ0LmNvbTB7BgNVHR8EdDByMDegNaAzhjFodHRwOi8vY3Js
49
- My5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3JsMDegNaAzhjFo
50
- dHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9iYWxSb290Q0EuY3Js
51
- MD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5k
52
- aWdpY2VydC5jb20vQ1BTMB0GA1UdDgQWBBSQcds363PI79zVHhK2NLorWqCmkjAf
53
- BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTANBgkqhkiG9w0BAQUFAAOC
54
- AQEAMM7RlVEArgYLoQ4CwBestn+PIPZAdXQczHixpE/q9NDEnaLegQcmH0CIUfAf
55
- z7dMQJnQ9DxxmHOIlywZ126Ej6QfnFog41FcsMWemWpPyGn3EP9OrRnZyVizM64M
56
- 2ZYpnnGycGOjtpkWQh1l8/egHn3F1GUUsmKE1GxcCAzYbJMrtHZZitF//wPYwl24
57
- LyLWOPD2nGt9RuuZdPfrSg6ppgTre87wXGuYMVqYQOtpxAX0IKjKCDplbDgV9Vws
58
- slXkLGtB8L5cRspKKaBIXiDSRf8F3jSvcEuBOeLKB1d8tjHcISnivpcOd5AUUUDh
59
- v+PMGxmcJcqnBrJT3yOyzxIZow==
5
+ QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaME0xCzAJBgNVBAYTAlVT
6
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIg
7
+ U2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
8
+ ANyuWJBNwcQwFZA1W248ghX1LFy949v/cUP6ZCWA1O4Yok3wZtAKc24RmDYXZK83
9
+ nf36QYSvx6+M/hpzTc8zl5CilodTgyu5pnVILR1WN3vaMTIa16yrBvSqXUu3R0bd
10
+ KpPDkC55gIDvEwRqFDu1m5K+wgdlTvza/P96rtxcflUxDOg5B6TXvi/TC2rSsd9f
11
+ /ld0Uzs1gN2ujkSYs58O09rg1/RrKatEp0tYhG2SS4HD2nOLEpdIkARFdRrdNzGX
12
+ kujNVA075ME/OV4uuPNcfhCOhkEAjUVmR7ChZc6gqikJTvOX6+guqw9ypzAO+sf0
13
+ /RR3w6RbKFfCs/mC/bdFWJsCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8C
14
+ AQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
15
+ aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6
16
+ Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwN6A1
17
+ oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RD
18
+ QS5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
19
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFA+AYRyCMWHVLyjnjUY4tCzh
20
+ xtniMB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA0GCSqGSIb3DQEB
21
+ CwUAA4IBAQAjPt9L0jFCpbZ+QlwaRMxp0Wi0XUvgBCFsS+JtzLHgl4+mUwnNqipl
22
+ 5TlPHoOlblyYoiQm5vuh7ZPHLgLGTUq/sELfeNqzqPlt/yGFUzZgTHbO7Djc1lGA
23
+ 8MXW5dRNJ2Srm8c+cftIl7gzbckTB+6WohsYFfZcTEDts8Ls/3HB40f/1LkAtDdC
24
+ 2iDJ6m6K7hQGrn2iWZiIqBtvLfTyyRRfJs8sjX7tN8Cp1Tm5gr8ZDOo0rwAhaPit
25
+ c+LJMto4JQtV05od8GiG7S5BNO98pVAdvzr508EIDObtHopYJeS4d60tbvVS3bR0
26
+ j6tJLp07kzQoH3jOlOrHvdPJbRzeXDLz
27
+ -----END CERTIFICATE-----
28
+ -----BEGIN CERTIFICATE-----
29
+ MIIFDTCCA/WgAwIBAgIQBZ8R1sZP2Lbc8x554UUQ2DANBgkqhkiG9w0BAQsFADBN
30
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
31
+ aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTEwMDAwMDAwWhcN
32
+ MTcxMTE0MTIwMDAwWjBlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
33
+ bjEQMA4GA1UEBxMHU2VhdHRsZTEbMBkGA1UEChMSQ2hlZiBTb2Z0d2FyZSwgSW5j
34
+ MRIwEAYDVQQDDAkqLmNoZWYuaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
35
+ AoIBAQC3xCIczkV10O5jTDpbd4YlPLC6kfnVoOkno2N/OOlcLQu3ulj/Lj1j4r6e
36
+ 2XthJLcFgTO+y+1/IKnnpLKDfkx1YngWEBXEBP+MrrpDUKKs053s45/bI9QBPISA
37
+ tXgnYxMH9Glo6FWWd13TUq++OKGw1p1wazH64XK4MAf5y/lkmWXIWumNuO35ZqtB
38
+ ME3wJISwVHzHB2CQjlDklt+Mb0APEiIFIZflgu9JNBYzLdvUtxiz15FUZQI7SsYL
39
+ TfXOD1KBNMWqN8snG2e5gRAzB2D161DFvAZt8OiYUe+3QurNlTYVzeHv1ok6UqgM
40
+ ZcLzg8m801rRip0D7FCGvMCU/ktdAgMBAAGjggHPMIIByzAfBgNVHSMEGDAWgBQP
41
+ gGEcgjFh1S8o541GOLQs4cbZ4jAdBgNVHQ4EFgQUwldjw4Pb4HV+wxGZ7MSSRh+d
42
+ pm4wHQYDVR0RBBYwFIIJKi5jaGVmLmlvggdjaGVmLmlvMA4GA1UdDwEB/wQEAwIF
43
+ oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwawYDVR0fBGQwYjAvoC2g
44
+ K4YpaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NzY2Etc2hhMi1nMy5jcmwwL6At
45
+ oCuGKWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zc2NhLXNoYTItZzMuY3JsMEIG
46
+ A1UdIAQ7MDkwNwYJYIZIAYb9bAEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3
47
+ LmRpZ2ljZXJ0LmNvbS9DUFMwfAYIKwYBBQUHAQEEcDBuMCQGCCsGAQUFBzABhhho
48
+ dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYWNl
49
+ cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJTZWN1cmVTZXJ2ZXJDQS5jcnQw
50
+ DAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAvcTWenNuvvrhX2omm8LQ
51
+ zWOuu8jqpoflACwD4lOSZ4TgOe4pQGCjXq8aRBD5k+goqQrPVf9lHnelUHFQac0Q
52
+ 5WT4YUmisUbF0S4uY5OGQymM52MvUWG4ODL4gaWhFvN+HAXrDPP/9iitsjV0QOnl
53
+ CDq7Q4/XYRYW3opu5nLLbfW6v4QvF5yzZagEACGs7Vt32p6l391UcU8f6wiB3uMD
54
+ eioCvjpv/+2YOUNlDPCM3uBubjUhHOwO817wBxXkzdk1OSRe4jzcw/uX6wL7birt
55
+ fbaSkpilvVX529pSzB2Lvi9xWOoGMM578dpQ0h3PwhmmvKhhCWP+pI05k3oSkYCP
56
+ ng==
60
57
  -----END CERTIFICATE-----