W3 Total Cache - Version 0.9.2.4

Version Description

  • Added support for Microsoft SQL Server
  • Added API support for MediaTemple ProCDN (EdgeCast)
  • Added set_time_limit to self test
  • Fixed LiteSpeed web server support
  • Fixed native hostname 301 redirect
  • Fixed redundant object origin push export
  • Fixed WSOD (white screen of death) caused by minify in some hosting configurations
  • Fixed text encoding in feeds
  • Fixed incorrect mime-type in feeds (which caused feedburner anomalies)
  • Fixed array to string notices
  • Fixed expires header support for AWS
  • Fixed minification of font-family
  • Fixed object cache write issue in WP Admin
  • Improved (reduced) memory utilization by up to 70%
  • Improved disk enhanced page caching performance
  • Improved object caching performance
  • Improved activation reliability
  • Improved reliability of minify auto mode
  • Improved security (added nonces, no directory indexing, prevent direct file access)
  • Improved compatibility with network based file systems
Download this release

Release Info

Developer fredericktownes
Plugin Icon 128x128 W3 Total Cache
Version 0.9.2.4
Comparing to
See all releases

Code changes from version 0.9.2.3 to 0.9.2.4

Files changed (115) hide show
  1. db/mssql.php +0 -1255
  2. inc/.htaccess +3 -0
  3. inc/define.php +93 -974
  4. inc/email/index.html +0 -0
  5. inc/email/minify_error_notification.php +7 -0
  6. inc/email/{support_request.phtml → support_request.php} +1 -0
  7. inc/{error.phtml → error.php} +2 -1
  8. inc/functions/activation.php +78 -0
  9. inc/{compat.php → functions/compat.php} +19 -0
  10. inc/functions/extract.php +60 -0
  11. inc/functions/file.php +177 -0
  12. inc/functions/http.php +81 -0
  13. inc/functions/mime.php +74 -0
  14. inc/{plugin.php → functions/plugin.php} +9 -29
  15. inc/functions/rule.php +239 -0
  16. inc/functions/url.php +103 -0
  17. inc/index.html +0 -0
  18. inc/js/widget.js +0 -11
  19. inc/lightbox/{cdn_s3_bucket_location.phtml → cdn_s3_bucket_location.php} +2 -1
  20. inc/lightbox/index.html +0 -0
  21. inc/lightbox/{minify_recommendations.phtml → minify_recommendations.php} +3 -2
  22. inc/lightbox/{self_test.phtml → self_test.php} +18 -0
  23. inc/lightbox/{support_us.phtml → support_us.php} +5 -3
  24. inc/mime/all.php +1 -0
  25. inc/mime/cssjs.php +2 -1
  26. inc/mime/index.html +0 -0
  27. inc/mime/other.php +15 -11
  28. inc/options/{about.phtml → about.php} +9 -8
  29. inc/options/{browsercache.phtml → browsercache.php} +25 -20
  30. inc/options/{cdn.phtml → cdn.php} +25 -31
  31. inc/options/cdn/{azure.phtml → azure.php} +4 -3
  32. inc/options/cdn/{cf.phtml → cf.php} +4 -3
  33. inc/options/cdn/{cf2.phtml → cf2.php} +4 -3
  34. inc/options/cdn/common/{cnames.phtml → cnames.php} +13 -12
  35. inc/options/cdn/common/index.html +0 -0
  36. inc/options/cdn/{cotendo.phtml → cotendo.php} +3 -2
  37. inc/options/cdn/edgecast.php +36 -0
  38. inc/options/cdn/{ftp.phtml → ftp.php} +4 -3
  39. inc/options/cdn/index.html +0 -0
  40. inc/options/cdn/{mirror.phtml → mirror.php} +3 -2
  41. inc/options/cdn/{netdna.phtml → netdna.php} +3 -2
  42. inc/options/cdn/{rscf.phtml → rscf.php} +4 -3
  43. inc/options/cdn/{s3.phtml → s3.php} +4 -3
  44. inc/options/common/{footer.phtml → footer.php} +0 -0
  45. inc/options/common/{header.phtml → header.php} +4 -2
  46. inc/options/common/{help.phtml → help.php} +2 -1
  47. inc/options/common/index.html +0 -0
  48. inc/options/{dbcache.phtml → dbcache.php} +12 -9
  49. inc/options/{faq.phtml → faq.php} +3 -2
  50. inc/options/faq.xml +2 -2
  51. inc/options/{general.phtml → general.php} +165 -143
  52. inc/options/index.html +0 -0
  53. inc/options/{install.phtml → install.php} +39 -38
  54. inc/options/{minify.phtml → minify.php} +26 -20
  55. inc/options/minify/{ccjs.phtml → ccjs.php} +1 -0
  56. inc/options/minify/{ccjs2.phtml → ccjs2.php} +6 -1
  57. inc/options/minify/{css.phtml → css.php} +1 -0
  58. inc/options/minify/{csstidy.phtml → csstidy.php} +5 -0
  59. inc/options/minify/{csstidy2.phtml → csstidy2.php} +5 -0
  60. inc/options/minify/{html.phtml → html.php} +1 -0
  61. inc/options/minify/{htmltidy.phtml → htmltidy.php} +1 -0
  62. inc/options/minify/{htmltidy2.phtml → htmltidy2.php} +1 -0
  63. inc/options/minify/index.html +0 -0
  64. inc/options/minify/{js.phtml → js.php} +1 -0
  65. inc/options/minify/{yuicss2.phtml → yuicss2.php} +2 -1
  66. inc/options/minify/{yuijs.phtml → yuijs.php} +1 -0
  67. inc/options/minify/{yuijs2.phtml → yuijs2.php} +2 -1
  68. inc/options/{mobile.phtml → mobile.php} +5 -3
  69. inc/options/{objectcache.phtml → objectcache.php} +11 -32
  70. inc/options/{pgcache.phtml → pgcache.php} +36 -17
  71. inc/options/{referrer.phtml → referrer.php} +5 -3
  72. inc/options/support.php +21 -0
  73. inc/options/support.phtml +0 -38
  74. inc/options/support/form.php +29 -0
  75. inc/options/support/{bug_report.phtml → form/bug_report.php} +1 -0
  76. inc/options/support/{phone_support.phtml → form/email_support.php} +5 -4
  77. inc/options/support/form/index.html +0 -0
  78. inc/options/support/{linux_config.phtml → form/linux_config.php} +1 -0
  79. inc/options/support/{new_feature.phtml → form/new_feature.php} +1 -0
  80. inc/options/support/{email_support.phtml → form/phone_support.php} +5 -4
  81. inc/options/support/{plugin_config.phtml → form/plugin_config.php} +1 -0
  82. inc/options/support/{theme_config.phtml → form/theme_config.php} +1 -0
  83. inc/options/support/index.html +0 -0
  84. inc/options/support/payment.php +25 -0
  85. inc/options/support/select.php +22 -0
  86. inc/options/support_payment.phtml +0 -35
  87. inc/options/support_select.phtml +0 -34
  88. inc/popup/{cdn_export_file.phtml → cdn_export_file.php} +6 -3
  89. inc/popup/{cdn_export_library.phtml → cdn_export_library.php} +4 -2
  90. inc/popup/{cdn_import_library.phtml → cdn_import_library.php} +7 -6
  91. inc/popup/{cdn_purge.phtml → cdn_purge.php} +5 -4
  92. inc/popup/{cdn_queue.phtml → cdn_queue.php} +9 -8
  93. inc/popup/{cdn_rename_domain.phtml → cdn_rename_domain.php} +6 -4
  94. inc/popup/common/{footer.phtml → footer.php} +0 -0
  95. inc/popup/common/{header.phtml → header.php} +8 -6
  96. inc/popup/common/index.html +0 -0
  97. inc/popup/index.html +0 -0
  98. inc/popup/{pagespeed_results.phtml → pagespeed_results.php} +4 -2
  99. inc/widget/index.html +0 -0
  100. inc/widget/latest.php +7 -0
  101. inc/widget/{latest.phtml → latest_ajax.php} +2 -1
  102. inc/widget/{latest_control.phtml → latest_control.php} +1 -0
  103. inc/widget/{pagespeed.phtml → pagespeed.php} +5 -2
  104. inc/widget/{pagespeed_control.phtml → pagespeed_control.php} +1 -0
  105. index.html +0 -0
  106. ini/.htaccess +3 -0
  107. ini/index.html +0 -0
  108. lib/.htaccess +3 -0
  109. lib/CF/cacert.pem +3113 -3113
  110. lib/CF/cloudfiles.php +2149 -2147
  111. lib/CF/cloudfiles_exceptions.php +41 -41
  112. lib/CF/cloudfiles_http.php +1347 -1347
  113. lib/CF/index.html +0 -0
  114. lib/CSSTidy/class.csstidy.php +999 -999
  115. lib/CSSTidy/class.csstidy_optimise.php +784 -808
db/mssql.php DELETED
@@ -1,1255 +0,0 @@
1
- <?php
2
-
3
- /*
4
-
5
- http://code.google.com/p/wordpress-mssql/
6
-
7
- Contributors: Aizu Ikmal Ahmad & Iwani Khalid
8
- Requires at least: 2.3.0
9
- Tested up to: 2.7.1
10
- Development Status: Alpha
11
- Database Abstraction Class: ezSQL by Justin Vincent (http://php.justinvincent.com)
12
-
13
- How to install MS-SQL support for Wordpress
14
-
15
- 1. Download Wordpress ( http://wordpress.org/wordpress-2.7.1-IIS-RC1.zip )
16
- 2. Then, upload it on your webhosting that supports MSSQL and IIS like how you would usually do it
17
- 3. Download our Magic Plugin at ( http://code.google.com/p/wordpress-mssql/ )
18
- 4. Then upload that db.php to your wp-contents folder
19
- 5. Edit the MSSQL database setting in db.php file according to your MSSQL settings 6. You're done :D
20
-
21
- At this moment, this workaround works for these functions, to where we have debugged and tested
22
-
23
- * Basic submit, edit, manage posts and pages
24
- * Comments system
25
- * Dynamic sidebar
26
- * Changing themes
27
- * Installing plugins
28
- * Long text retrieval
29
-
30
- What we didn't have time to debug
31
-
32
- * Pagination
33
- * Categories > Posts retrieval
34
- * Dates / Time of posts
35
- * Others which we look forward to debug later :D
36
-
37
- */
38
-
39
- // ==================================================================
40
- // Author: Justin Vincent (justin@visunet.ie)
41
- // Web: http://php.justinvincent.com
42
- // Name: ezSQL
43
- // Desc: Class to make it very easy to deal with MS SQL database connections.
44
- //
45
- // N.B. ezSQL was converted for use with MS SQL
46
- // by Tom De Bruyne (tom@challenge.be).
47
- //
48
- // !! IMPORTANT !!
49
- //
50
- // Please send me a mail telling me what you think of ezSQL
51
- // and what your using it for!! Cheers. [ justin@visunet.ie ]
52
- //
53
- // ==================================================================
54
- // User Settings -- CHANGE HERE
55
-
56
- ini_set ('mssql.textlimit','2147483647');
57
- ini_set ('mssql.textsize','2147483647');
58
-
59
- define("EZSQL_DB_USER", "tretinoin_wpuser"); // <-- MS SQL Server db user
60
- define("EZSQL_DB_PASSWORD", "83h93hdi."); // <-- MS SQL Server db password
61
- define("EZSQL_DB_NAME", "tretinoin_wordpress"); // <-- MS SQL Server db pname
62
- define("EZSQL_DB_HOST", "lamp2win"); // <-- MS SQL Server server host
63
-
64
- // ==================================================================
65
- // ezSQL Constants
66
- define("EZSQL_VERSION","1.26");
67
- define("OBJECT","OBJECT",true);
68
- define("ARRAY_A","ARRAY_A",true);
69
- define("ARRAY_N","ARRAY_N",true);
70
-
71
- // ==================================================================
72
- // The Main Class
73
-
74
- class W3_Db_Driver {
75
-
76
- var $debug_called;
77
- var $vardump_called;
78
- var $show_errors = false;
79
- var $num_queries = 0;
80
- var $debug_all = false;
81
- var $last_query;
82
- var $col_info;
83
-
84
- var $suppress_errors = false;
85
- var $last_error = '';
86
- var $queries;
87
- var $prefix = '';
88
- var $ready = false;
89
- var $posts;
90
- var $users;
91
- var $categories;
92
- var $post2cat;
93
- var $comments;
94
- var $links;
95
- var $options;
96
- var $postmeta;
97
- var $usermeta;
98
- var $terms;
99
- var $term_taxonomy;
100
- var $term_relationships;
101
- var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',
102
- 'postmeta', 'terms', 'term_taxonomy', 'term_relationships');
103
-
104
- var $charset;
105
- var $collate;
106
-
107
-
108
-
109
-
110
- // ==================================================================
111
- // DB Constructor - connects to the server and selects a database
112
-
113
-
114
-
115
- function W3_Db_Driver($dbuser, $dbpassword, $dbname, $dbhost)
116
- {
117
-
118
- $this->dbh = mssql_connect($dbhost, $dbuser, $dbpassword);
119
-
120
- if ( ! $this->dbh ) {
121
- $this->print_error("<ol><b>Error establishing a database connection!</b><li>Are you sure you have the correct user/password?<li>Are you sure that you have typed the correct hostname?<li>Are you sure that the database server is running?</ol>");
122
- }
123
-
124
- $this->select($dbname);
125
-
126
- }
127
-
128
- // ==================================================================
129
- // Select a DB (if another one needs to be selected)
130
-
131
- function select($db)
132
- {
133
- mssql_select_db ($db);
134
- }
135
-
136
-
137
- // ==================================================================
138
- // Basic Query - see docs for more detail
139
-
140
- function query($query)
141
- {
142
-
143
- $query = trim($query);
144
- $query = str_replace('`',"'",$query);
145
-
146
- $query = str_replace('\012',"\n",$query);
147
- $query = str_replace('\015',"\r",$query);
148
-
149
- //$query = str_replace("\n",'',$query);
150
- //$query = str_replace("\r",'',$query);
151
-
152
- //$query = $this->escape($query);
153
- //$query = str_replace('"','\"',$query);
154
- //$query = str_replace("'","\'",$query);
155
-
156
-
157
- if(substr($query,0,7) == 'SELECT '){
158
-
159
- dbug($query,'SELECT : ORIGINAL QUERY ::::::: ','orange');
160
-
161
- $query_arr = explode('LIMIT',$query);
162
- if($query_arr[0] AND $query_arr[1]){
163
-
164
- $query_one = str_replace('SELECT ','',$query_arr[0]);
165
-
166
- $top_arr = explode(' ',$query_arr[1]);
167
-
168
- if($top_arr[1] && $top_arr[2]){
169
- $query = 'SELECT TOP '.$top_arr[2].' '.$query_one;
170
- }else{
171
- $query = 'SELECT TOP '.$top_arr[1].' '.$query_one;
172
- }
173
-
174
-
175
-
176
- /*
177
-
178
- // TO BE DEVELOP
179
-
180
- //LIMIT 1, 3
181
-
182
- SELECT * FROM (
183
- SELECT TOP 3 * FROM
184
- (SELECT TOP (1+3) * FROM wp_posts WHERE 1=1 AND post_type = 'post' AND (post_status = 'publish' OR post_status = 'private') ORDER BY post_date DESC)
185
- AS table1 ORDER BY post_date ASC
186
- ) AS table2 ORDER BY post_date DESC
187
-
188
- */
189
-
190
- //pre($query_arr);
191
- //exit();
192
-
193
-
194
- }
195
-
196
-
197
- if(substr($query,0,23) == "SELECT TOP 1 comment_ID"){
198
- $query = str_replace(' = ',' = ',$query);
199
- }
200
-
201
-
202
- /* DUMP DIRTY SWEPT TEST */
203
- $query = str_replace('wp_posts.','',$query);
204
-
205
-
206
- /*
207
- hacks for query;
208
- - SELECT * FROM wp_posts WHERE (post_type = 'page' AND post_status = 'publish') ORDER BY menu_order, post_title ASC
209
- - SELECT * FROM wp_posts WHERE 1=1 AND post_type = 'page' AND (post_status = 'publish' OR post_status = 'future' OR post_status = 'draft' OR post_status = 'pending' OR post_status = 'private') ORDER BY menu_order,post_title asc
210
- notes;
211
- somehow Wordpress developer create this 'post_title' date-type as 'text' in database. the post_title should be varchar since the amount of character in title is generally less then 255 char.
212
- and in ms-sql, text cannot be sorted. so this is a big mistake. haihhh...
213
- */
214
- $pattern = '/post_title asc/is';
215
- $replacement = 'cast(post_title as varchar(500)) ASC';
216
- $query = preg_replace($pattern, $replacement, $query);
217
-
218
-
219
-
220
-
221
- /*
222
- hacks for query;
223
- - SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM wp_posts WHERE post_type = 'post' ORDER BY post_date DESC
224
- notes;
225
- this is one another hacks for SELECT DISTINCT call.
226
- The above query tries to sort by the column post_date. Because the keyword DISTINCT is also specified, column post_date must appear in the SELECT list
227
- expected return;
228
- - SELECT DISTINCT post_date, YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM wp_posts WHERE post_type = 'post' ORDER BY post_date DESC
229
- */
230
- if(substr($query,0,15) == "SELECT DISTINCT"){
231
- $string = $query;
232
- $pattern = '/SELECT DISTINCT (.*)? ORDER BY (.*)? (asc|desc)/i';
233
- $replacement = 'cast(post_title as varchar(500)) ASC';
234
- preg_match_all($pattern, $string, $result);
235
- $order_by_col = $result[2][0];
236
- $col_calls = $result[1][0];
237
- $order_by_prop = $result[3][0];
238
- $query = 'SELECT DISTINCT '.$order_by_col.', '.$col_calls.' ORDER BY '.$order_by_col.' '.$order_by_prop;
239
- }
240
-
241
-
242
-
243
-
244
- /*
245
- hacks for query;
246
- - SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_user_level' AND meta_value != '0'
247
- notes;
248
- replace != into NOT <col_name> LIKE
249
- expected return;
250
- - SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_user_level' AND NOT meta_value LIKE '0'
251
- */
252
- $pattern = "/ (?:[a-z][a-z0-9_]*)? \!\= /is";
253
- preg_match_all($pattern, $query, $result);
254
- $result_arr = $result[0];
255
- $query = str_replace('!=','',$query);
256
- foreach($result_arr as $result_item){
257
- $result_item = str_replace('!=','',$result_item);
258
- $result_item = trim($result_item);
259
- $query = str_replace($result_item,' NOT '.$result_item.' LIKE ',$query);
260
- }
261
-
262
-
263
-
264
- /*
265
- hacks for;
266
- - SQL have 'GROUP BY'
267
- - SELECT DISTINCT post_date, YEAR(post_date) AS year, MONTH(post_date) AS month, count(ID) as posts FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish
268
- GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC
269
- */
270
- if (preg_match("/GROUP BY/i", $query)) {
271
- $pattern = '/SELECT (.*) GROUP BY (.*)? ORDER BY (.*)/i';
272
- preg_match($pattern, $string, $output);
273
-
274
- $query0 = 'SELECT '.$output[1].' ORDER BY '.$output[3];
275
- }
276
-
277
-
278
- $query = str_replace('SQL_CALC_FOUND_ROWS',' ',$query);
279
- if (preg_match("/SELECT FOUND_ROWS()/i", $query)) {
280
- $last_query = $this->last_query;
281
- $last_query_one_arr = explode('TOP',$last_query);
282
- $last_query_two = trim($last_query_one_arr[1]);
283
- $last_query_three_arr = explode(' ',$last_query_two);
284
- $last_query_four = str_replace($last_query_three_arr[0],'',$last_query_two);
285
- $query = 'SELECT '.$last_query_four;
286
- }
287
-
288
- dbug($query,'SELECT : MODDED QUERY :::::::: ','orange');
289
-
290
- }elseif(substr($query,0,7) == 'INSERT '){
291
-
292
- dbug($query,'INSERT : ORIGINAL QUERY ::::::::: ','purple');
293
-
294
- $pattern = '/INSERT INTO (.*)?\((.*)\).*?VALUES.*?\((.*)\)/is';
295
- preg_match_all($pattern, $query, $output);
296
- $insert_table = trim($output[1][0]);
297
- $insert_cols = trim($output[2][0]);
298
- $insert_values = trim($output[3][0]);
299
-
300
- /* STRIP QUOTE FROM COLS NAME */
301
- $insert_cols = str_replace("'",'',$insert_cols);
302
-
303
- $query = $this->prepare($query);
304
-
305
- /* PROCESS THE $insert_values. NEED TO REPLACE THE INNER QUOTES */
306
- preg_match_all("/([0-9]+|\'(.*?)\'[ ]*?),/is", $insert_values.',', $output);
307
-
308
- $insert_values_arr = array(); //PREPARE THE NEW FRESH VALUES
309
- foreach($output[0] as $insert_values_item){
310
- if(substr(trim($insert_values_item),0,1) == "'"){
311
- $insert_values_item = substr($insert_values_item,1); // TAKE OUT THE FIRST 1 CHAR, WHICH IS QUOTE
312
- }
313
- $insert_values_item = trim($insert_values_item); // TRIM THE WHITESPACE
314
- if(substr(trim($insert_values_item),-1) == ","){
315
- $insert_values_item = substr($insert_values_item,0,-1); // TAKE OUT THE LAST 1 CHAR, WHICH IS COMMA
316
- }
317
- if(substr(trim($insert_values_item),-1) == "'"){
318
- $insert_values_item = substr($insert_values_item,0,-1); // TAKE OUT THE LAST 1 CHAR, WHICH IS QUOTE
319
- }
320
- $insert_values_item = str_replace("'","''",$insert_values_item); // NOW WE PUT THE EXTRA QUOTE ON IT
321
- $insert_values_item = trim($insert_values_item); // TRIM THE WHITESPACE
322
- $insert_values_item = "'".$insert_values_item."'"; // WRAP THE VALUES WITH OUR SINGLE-QUOTE
323
- $insert_values_arr[] = $insert_values_item;
324
- }
325
-
326
- $insert_values = implode(',',$insert_values_arr);
327
-
328
-
329
- /* CONSTRUCT NEW INSERT CALL */
330
- $query = 'INSERT INTO '.$insert_table.' ('.$insert_cols.') VALUES ('.$insert_values.');';
331
-
332
-
333
- dbug($query,'INSERT : MODDED QUERY :::::::::: ','purple');
334
-
335
- }elseif(substr($query,0,7) == 'UPDATE '){
336
-
337
-
338
- dbug($query,'UPDATE : ORIGINAL QUERY ::::::::: ','blue');
339
-
340
-
341
- $pattern = '/UPDATE ([A-Za-z0-9_-]+) SET (.*)? WHERE (.*)?/is';
342
- preg_match_all($pattern, $query, $output);
343
- $update_table = trim($output[1][0]);
344
- $update_values = trim($output[2][0]);
345
- $update_where = trim($output[3][0]);
346
-
347
- preg_match_all("/(.*?)[ *]?=[ *]?(\'(.*?)\'|[0-9]+),/is", $update_values.',', $output_vals);
348
-
349
- $update_vals_colname = $output_vals[1];
350
- $update_vals_values = $output_vals[2];
351
-
352
-
353
- $update_vals_colname_mod = array();
354
- foreach($update_vals_colname as $update_vals_colname_item){
355
- $update_vals_colname_item = str_replace("'",'',$update_vals_colname_item); // GREEDY REPLACE ALL QUOTES. NO QUOTES ALLOWED IN COL NAME
356
- $update_vals_colname_item = trim($update_vals_colname_item); // TRIM THE WHITESPACE
357
- $update_vals_colname_mod[] = $update_vals_colname_item;
358
- }
359
-
360
- $update_vals_values_mod = array();
361
- foreach($update_vals_values as $update_vals_values_item){
362
- if(substr(trim($update_vals_values_item),0,1) == "'"){
363
- $update_vals_values_item = substr($update_vals_values_item,1); // TAKE OUT THE FIRST 1 CHAR, WHICH IS QUOTE
364
- }
365
- if(substr(trim($update_vals_values_item),-1) == "'"){
366
- $update_vals_values_item = substr($update_vals_values_item,0,-1); // TAKE OUT THE LAST 1 CHAR, WHICH IS QUOTE
367
- }
368
- $update_vals_values_item = trim($update_vals_values_item); // TRIM THE WHITESPACE
369
- $update_vals_values_item = str_replace("'","''",$update_vals_values_item); // ADD ADDITIONAL QUOTE TO ESCAPE IT IN MSSQL
370
- $update_vals_values_mod[] = $update_vals_values_item;
371
- }
372
-
373
- $update_values_modded = array_combine($update_vals_colname_mod,$update_vals_values_mod);
374
-
375
- $update_values = '';
376
- $update_values_prepare_arr = '';
377
- $update_values_item = '';
378
- foreach($update_values_modded as $update_values_item_colname => $update_values_item_value){
379
- $update_values_prepare_arr[] = $update_values_item_colname." = '".$update_values_item_value."'";
380
- }
381
-
382
-
383
- $update_values = implode(',',$update_values_prepare_arr);
384
-
385
-
386
-
387
-
388
-
389
- /* CONSTRUCT NEW UPDATE CALL */
390
- $query = 'UPDATE '.$update_table.' SET '.$update_values.' WHERE '.$update_where.';';
391
-
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
- dbug($query,'UPDATE : MODDED QUERY :::::::::: ','blue');
402
-
403
- }elseif(substr($query,0,7) == 'DELETE '){
404
-
405
-
406
-
407
- dbug($query,'DELETE','orange');
408
-
409
- }elseif(substr($query,0,7) == 'CREATE '){
410
-
411
- $query_two = str_replace('auto_increment','IDENTITY(1,1)',$query);
412
- $query_two = str_replace('tinytext','text',$query_two);
413
- $query_two = str_replace('longtext','text',$query_two);
414
- $query_two = str_replace('mediumtext','text',$query_two);
415
- $query_two = str_replace('unsigned ','',$query_two);
416
- $query_three = preg_replace('/bigint\(\d+\)/i','int',$query_two);
417
- $query_three = preg_replace('/int\(\d+\)/i','int',$query_three);
418
- $query_four_arr = explode('PRIMARY KEY',$query_three);
419
- $query_five = $query_four_arr[0].' ';
420
- $query_six = $query_four_arr[1];
421
- $query_seven_arr = explode('),',$query_six);
422
- $query_eight_arr = explode('(',$query);
423
- $query_nine = trim($query_eight_arr[0]);
424
- $query_ten = str_replace($query_nine,'',$query_five);
425
- $table_name = trim(str_replace('CREATE TABLE','',$query_nine));
426
-
427
-
428
- $create_table_header = "
429
- IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[tretinoin_wpuser].[".$table_name."]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
430
- DROP TABLE [tretinoin_wpuser].[".$table_name."]
431
- GO
432
- CREATE TABLE [tretinoin_wpuser].[".$table_name."]";
433
-
434
- $create_table_header_simple = "CREATE TABLE [tretinoin_wpuser].[".$table_name."]
435
-
436
- ";
437
-
438
- $query = $create_table_header_simple . $query_ten . ' PRIMARY KEY ' . $query_seven_arr[0] .'))';
439
-
440
- dbug($query,'CREATE','purple');
441
-
442
- }elseif(substr($query,0,5) == 'SHOW '){
443
-
444
- $query = str_replace('SHOW TABLES;','',$query);
445
-
446
- dbug($query,'SHOW','yellow');
447
-
448
- }else{
449
-
450
-
451
- dbug($query);
452
-
453
- }
454
-
455
-
456
-
457
- // For reg expressions
458
- $query = trim($query);
459
-
460
- // Flush cached values..
461
- $this->flush();
462
-
463
- // Log how the function was called
464
- $this->func_call = "\$db->query(\"$query\")";
465
-
466
- // Keep track of the last query for debug..
467
- $this->last_query = $query;
468
-
469
- // Perform the query via std mssql_query function..
470
-
471
-
472
- if(substr($query,0,7) == 'SELECT '){
473
- $this->result_check = @mssql_query($query, $this->dbh);
474
- }elseif(substr($query,0,7) == 'INSERT '){
475
-
476
- }elseif(substr($query,0,7) == 'UPDATE '){
477
- $this->result_check = @mssql_query($query, $this->dbh);
478
- }elseif(substr($query,0,7) == 'DELETE '){
479
-
480
- }elseif(substr($query,0,7) == 'CREATE '){
481
-
482
- }elseif(substr($query,0,5) == 'SHOW '){
483
-
484
- }
485
-
486
-
487
-
488
-
489
- // Unfortunately, PHP fuctions for MS SQL currently don't offer a decent way
490
- // to retrieve errors from MS SQL
491
- // Make sure not to run a query between the actual query and this one !
492
-
493
- $get_errorcode = "SELECT @@ERROR as errorcode";
494
- $error_res = @mssql_query($get_errorcode, $this->dbh);
495
- $errorcode = @mssql_result($error_res, 0, "errorcode");
496
-
497
- // ERROR LIST
498
- // 402 : The data types text and varchar are incompatible in the equal to operator.
499
- // 306 : The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.
500
-
501
-
502
- if ($errorcode == '402') {
503
- $query_two = str_replace(' = ',' LIKE ',$query);
504
-
505
-
506
- /* NEED MORE IMPROVEMENT HERE */
507
-
508
-
509
-
510
- }else{
511
- $query_two = $query;
512
- }
513
- dbug($query,$errorcode,'green');
514
-
515
-
516
- $this->result = @mssql_query($query_two, $this->dbh);
517
- $this->num_queries++;
518
-
519
-
520
- // If there was an insert, delete or update see how many rows were affected
521
- // (Also, If there there was an insert take note of the last OID
522
- $query_type = array("insert","delete","update","replace");
523
-
524
- // loop through the above array
525
- foreach ( $query_type as $word )
526
- {
527
- // This is true if the query starts with insert, delete or update
528
- if ( preg_match("/^$word\s+/i",$query) )
529
- {
530
- $this->rows_affected = @mssql_rows_affected ($this->dbh);
531
-
532
- // This gets the insert ID
533
- if ( $word == "insert" || $word == "replace" )
534
- {
535
- $get_last_ident = "SELECT @@IDENTITY as id";
536
- $last_res = @mssql_query($get_last_ident, $this->dbh);
537
- $this->insert_id = @mssql_result($last_res, 0, "id");
538
-
539
- // If insert id then return it - true evaluation
540
- return $this->insert_id;
541
- }
542
-
543
- // Set to false if there was no insert id
544
- $this->result = false;
545
- }
546
- }
547
-
548
-
549
- if ($errorcode <> 0) {
550
- // there is an error
551
- $this->print_error();
552
- }
553
- else
554
- {
555
-
556
- // =======================================================
557
- // Take note of column info
558
-
559
- $i=0;
560
- while ($i < @mssql_num_fields($this->result))
561
- {
562
- $this->col_info[$i]->name = @mssql_field_name($this->result,$i);
563
- $this->col_info[$i]->type = @mssql_field_type($this->result,$i);
564
- $this->col_info[$i]->size = @mssql_field_length($this->result,$i);
565
- $i++;
566
- }
567
-
568
- // =======================================================
569
- // Store Query Results
570
-
571
- $i=0;
572
- while ( $row_arr = @mssql_fetch_array($this->result) )
573
- {
574
-
575
- $row = array_to_object($row_arr);
576
- $this->last_result[$i] = $row;
577
-
578
- // Store relults as an objects within main array
579
-
580
-
581
- $i++;
582
- }
583
-
584
- if($i == 0){
585
- $this->last_result = array();
586
- }
587
-
588
- //pre($this->last_result);
589
-
590
- // Log number of rows the query returned
591
- $this->num_rows = $i;
592
-
593
- //}
594
-
595
- @mssql_free_result($this->result);
596
-
597
- // If this was a select..
598
- if ( preg_match("/^(select|show|desc)\s+/i",$query) )
599
- {
600
-
601
- // If debug ALL queries
602
- $this->debug_all ? $this->debug() : null ;
603
-
604
- // If there were results then return true for $db->query
605
- if ( $i )
606
- {
607
- return true;
608
- }
609
- else
610
- {
611
- return false;
612
- }
613
- }
614
- else
615
- {
616
- // If debug ALL queries
617
- $this->debug_all ? $this->debug() : null ;
618
-
619
- // Update insert etc. was good..
620
- return true;
621
- }
622
-
623
- }
624
- }
625
-
626
-
627
-
628
-
629
- // ====================================================================
630
- // Format a string correctly for safe insert under all PHP conditions
631
-
632
- function escape($str)
633
- {
634
-
635
- // This deals with quote escaping
636
- //$str = str_replace("'","''",$str);
637
- //$str = str_replace("\'","'",$str);
638
-
639
- //$str = mysql_real_escape_string($str);
640
-
641
- //$str = str_replace("'", "''", $str);
642
- //$str = addslashes($str);
643
-
644
- //dbug($str,'ESCAPE RUN TWICE','red');
645
-
646
- // These values need to be escaped for ms sql
647
- $escape = array ( "\n"=>"\\\\012","\r"=>"\\\\015");
648
-
649
- // Firstly unescape
650
- /*
651
- foreach ( $escape as $match => $replace )
652
- {
653
- $str = str_replace($match,$replace,$str);
654
- }
655
- */
656
- return $str;
657
-
658
- }
659
-
660
- // ==================================================================
661
- // Print SQL/DB error.
662
-
663
- function print_error($str = "")
664
- {
665
- // All erros go to the global error array $EZSQL_ERROR..
666
- global $EZSQL_ERROR;
667
-
668
- // if no special error, take last mssql error
669
- if ( !$str ) $str = mssql_get_last_message();
670
-
671
- // Log this error to the global array..
672
- $EZSQL_ERROR[] = array
673
- (
674
- "query" => $this->last_query,
675
- "error_str" => $str
676
- );
677
-
678
- // Is error output turned on or not..
679
- if ( $this->show_errors )
680
- {
681
- // If there is an error then take note of it
682
- /*
683
- print "<blockquote><font face=arial size=2 color=ff0000>";
684
- print "<b>SQL/DB Error --</b> ";
685
- print "[<font color=000000>".$this->last_query."</font>]";
686
- print "[<font color=000077>$str</font>]";
687
- print "</font></blockquote>";
688
- */
689
-
690
- dbug($this->last_query.'<br />'.$str,'ERROR','red');
691
- return false;
692
- }
693
- else
694
- {
695
- return false;
696
- }
697
-
698
-
699
-
700
-
701
-
702
- }
703
-
704
- // ==================================================================
705
- // Turn error handling on or off..
706
-
707
- function show_errors()
708
- {
709
- $this->show_errors = true;
710
- }
711
-
712
- function hide_errors()
713
- {
714
- $this->show_errors = false;
715
- }
716
-
717
- // ==================================================================
718
- // Kill cached query results
719
-
720
- function flush()
721
- {
722
-
723
- // Get rid of these
724
- $this->last_result = null;
725
- $this->col_info = null;
726
- $this->last_query = null;
727
-
728
- }
729
-
730
-
731
-
732
- // ==================================================================
733
- // Get one variable from the DB - see docs for more detail
734
-
735
- function get_var($query=null,$x=0,$y=0)
736
- {
737
-
738
- // Log how the function was called
739
- $this->func_call = "\$db->get_var(\"$query\",$x,$y)";
740
-
741
- // If there is a query then perform it if not then use cached results..
742
- if ( $query )
743
- {
744
- $this->query($query);
745
- }
746
-
747
- // Extract var out of cached results based x,y vals
748
- if ( $this->last_result[$y] )
749
- {
750
- $values = array_values(get_object_vars($this->last_result[$y]));
751
- }
752
-
753
- // If there is a value return it else return null
754
- return (isset($values[$x]) && $values[$x]!=='')?$values[$x]:null;
755
- }
756
-
757
- // ==================================================================
758
- // Get one row from the DB - see docs for more detail
759
-
760
- function get_row($query=null,$output=OBJECT,$y=0)
761
- {
762
-
763
- // Log how the function was called
764
- $this->func_call = "\$db->get_row(\"$query\",$output,$y)";
765
-
766
- // If there is a query then perform it if not then use cached results..
767
- if ( $query )
768
- {
769
- $this->query($query);
770
- }
771
-
772
- // If the output is an object then return object using the row offset..
773
- if ( $output == OBJECT )
774
- {
775
- return $this->last_result[$y]?$this->last_result[$y]:null;
776
- }
777
- // If the output is an associative array then return row as such..
778
- elseif ( $output == ARRAY_A )
779
- {
780
- return $this->last_result[$y]?get_object_vars($this->last_result[$y]):null;
781
- }
782
- // If the output is an numerical array then return row as such..
783
- elseif ( $output == ARRAY_N )
784
- {
785
- return $this->last_result[$y]?array_values(get_object_vars($this->last_result[$y])):null;
786
- }
787
- // If invalid output type was specified..
788
- else
789
- {
790
- $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
791
- }
792
-
793
- }
794
-
795
- // ==================================================================
796
- // Function to get 1 column from the cached result set based in X index
797
- // se docs for usage and info
798
-
799
- function get_col($query=null,$x=0)
800
- {
801
-
802
- // If there is a query then perform it if not then use cached results..
803
- if ( $query )
804
- {
805
- $this->query($query);
806
- }
807
-
808
- // Extract the column values
809
- for ( $i=0; $i < count($this->last_result); $i++ )
810
- {
811
- $new_array[$i] = $this->get_var(null,$x,$i);
812
- }
813
-
814
- if($i == 0){
815
- $new_array = array();
816
- }
817
-
818
- return $new_array;
819
- }
820
-
821
- // ==================================================================
822
- // Return the the query as a result set - see docs for more details
823
-
824
- function get_results($query=null, $output = OBJECT)
825
- {
826
-
827
- // Log how the function was called
828
- $this->func_call = "\$db->get_results(\"$query\", $output)";
829
-
830
- // If there is a query then perform it if not then use cached results..
831
- if ( $query )
832
- {
833
- $this->query($query);
834
- }
835
-
836
- // Send back array of objects. Each row is an object
837
- if ( $output == OBJECT )
838
- {
839
-
840
- $out = get_object_vars($this->last_result);
841
-
842
- return $this->last_result;
843
- }
844
- elseif ( $output == ARRAY_A || $output == ARRAY_N )
845
- {
846
- if ( $this->last_result )
847
- {
848
- $i=0;
849
- foreach( $this->last_result as $row )
850
- {
851
-
852
- $new_array[$i] = get_object_vars($row);
853
-
854
- if ( $output == ARRAY_N )
855
- {
856
- $new_array[$i] = array_values($new_array[$i]);
857
- }
858
-
859
- $i++;
860
- }
861
-
862
- return $new_array;
863
- }
864
- else
865
- {
866
- return null;
867
- }
868
- }
869
- }
870
-
871
-
872
- // ==================================================================
873
- // Function to get column meta data info pertaining to the last query
874
- // see docs for more info and usage
875
-
876
- function get_col_info($info_type="name",$col_offset=-1)
877
- {
878
-
879
- if ( $this->col_info )
880
- {
881
- if ( $col_offset == -1 )
882
- {
883
- $i=0;
884
- foreach($this->col_info as $col )
885
- {
886
- $new_array[$i] = $col->{$info_type};
887
- $i++;
888
- }
889
- return $new_array;
890
- }
891
- else
892
- {
893
- return $this->col_info[$col_offset]->{$info_type};
894
- }
895
-
896
- }
897
-
898
- }
899
-
900
-
901
- // ==================================================================
902
- // Dumps the contents of any input variable to screen in a nicely
903
- // formatted and easy to understand way - any type: Object, Var or Array
904
-
905
- function vardump($mixed='')
906
- {
907
-
908
- echo "<p><table><tr><td bgcolor=ffffff><blockquote><font color=000090>";
909
- echo "<pre><font face=arial>";
910
-
911
- if ( ! $this->vardump_called )
912
- {
913
- echo "<font color=800080><b>ezSQL</b> (v".EZSQL_VERSION.") <b>Variable Dump..</b></font>\n\n";
914
- }
915
-
916
- $var_type = gettype ($mixed);
917
- print_r(($mixed?$mixed:"<font color=red>No Value / False</font>"));
918
- echo "\n\n<b>Type:</b> " . ucfirst($var_type) . "\n";
919
- echo "<b>Last Query</b> [$this->num_queries]<b>:</b> ".($this->last_query?$this->last_query:"NULL")."\n";
920
- echo "<b>Last Function Call:</b> " . ($this->func_call?$this->func_call:"None")."\n";
921
- echo "<b>Last Rows Returned:</b> ".count($this->last_result)."\n";
922
- echo "</font></pre></font></blockquote></td></tr></table>".$this->donation();
923
- echo "\n<hr size=1 noshade color=dddddd>";
924
-
925
- $this->vardump_called = true;
926
-
927
- }
928
-
929
- // Alias for the above function
930
- function dumpvar($mixed)
931
- {
932
- $this->vardump($mixed);
933
- }
934
-
935
- // ==================================================================
936
- // Displays the last query string that was sent to the database & a
937
- // table listing results (if there were any).
938
- // (abstracted into a seperate file to save server overhead).
939
-
940
- function debug()
941
- {
942
-
943
- echo "<blockquote>";
944
-
945
- // Only show ezSQL credits once..
946
- if ( ! $this->debug_called )
947
- {
948
- echo "<font color=800080 face=arial size=2><b>ezSQL</b> (v".EZSQL_VERSION.") <b>Debug..</b></font><p>\n";
949
- }
950
- echo "<font face=arial size=2 color=000099><b>Query</b> [$this->num_queries] <b>--</b> ";
951
- echo "[<font color=000000><b>$this->last_query</b></font>]</font><p>";
952
-
953
- echo "<font face=arial size=2 color=000099><b>Query Result..</b></font>";
954
- echo "<blockquote>";
955
-
956
- if ( $this->col_info )
957
- {
958
-
959
- // =====================================================
960
- // Results top rows
961
-
962
- echo "<table cellpadding=5 cellspacing=1 bgcolor=555555>";
963
- echo "<tr bgcolor=eeeeee><td nowrap valign=bottom><font color=555599 face=arial size=2><b>(row)</b></font></td>";
964
-
965
-
966
- for ( $i=0; $i < count($this->col_info); $i++ )
967
- {
968
- echo "<td nowrap align=left valign=top><font size=1 color=555599 face=arial>{$this->col_info[$i]->type} {$this->col_info[$i]->max_length}</font><br><span style='font-family: arial; font-size: 10pt; font-weight: bold;'>{$this->col_info[$i]->name}</span></td>";
969
- }
970
-
971
- echo "</tr>";
972
-
973
- // ======================================================
974
- // print main results
975
-
976
- if ( $this->last_result )
977
- {
978
-
979
- $i=0;
980
- foreach ( $this->get_results(null,ARRAY_N) as $one_row )
981
- {
982
- $i++;
983
- echo "<tr bgcolor=ffffff><td bgcolor=eeeeee nowrap align=middle><font size=2 color=555599 face=arial>$i</font></td>";
984
-
985
- foreach ( $one_row as $item )
986
- {
987
- echo "<td nowrap><font face=arial size=2>$item</font></td>";
988
- }
989
-
990
- echo "</tr>";
991
- }
992
-
993
- } // if last result
994
- else
995
- {
996
- echo "<tr bgcolor=ffffff><td colspan=".(count($this->col_info)+1)."><font face=arial size=2>No Results</font></td></tr>";
997
- }
998
-
999
- echo "</table>";
1000
-
1001
- } // if col_info
1002
- else
1003
- {
1004
- echo "<font face=arial size=2>No Results</font>";
1005
- }
1006
-
1007
- echo "</blockquote></blockquote>".$this->donation()."<hr noshade color=dddddd size=1>";
1008
-
1009
-
1010
- $this->debug_called = true;
1011
- }
1012
-
1013
- // =======================================================
1014
- // Naughty little function to ask for some remuniration!
1015
-
1016
- function donation()
1017
- {
1018
- return "<font size=1 face=arial color=000000>If ezSQL has helped <a href=\"https://www.paypal.com/xclick/business=justin%40justinvincent.com&item_name=ezSQL&no_note=1&tax=0\" style=\"color: 0000CC;\">make a donation!?</a> &nbsp;&nbsp;[ go on! you know you want to! ]</font>";
1019
- }
1020
-
1021
-
1022
-
1023
-
1024
- /**
1025
- * Sets the table prefix for the WordPress .
1026
- *
1027
- * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to
1028
- * override the WordPress users and usersmeta tables.
1029
- *
1030
- * @since 2.5.0
1031
- *
1032
- * @param string $prefix Alphanumeric name for the new prefix.
1033
- * @return string Old prefix
1034
- */
1035
- function set_prefix($prefix) {
1036
-
1037
- if ( preg_match('|[^a-z0-9_]|i', $prefix) )
1038
- return new WP_Error('invalid_db_prefix', /*WP_I18N_DB_BAD_PREFIX*/'Invalid database prefix'/*/WP_I18N_DB_BAD_PREFIX*/);
1039
-
1040
- $old_prefix = $this->prefix;
1041
- $this->prefix = $prefix;
1042
-
1043
- foreach ( (array) $this->tables as $table )
1044
- $this->$table = $this->prefix . $table;
1045
-
1046
- if ( defined('CUSTOM_USER_TABLE') )
1047
- $this->users = CUSTOM_USER_TABLE;
1048
-
1049
- if ( defined('CUSTOM_USER_META_TABLE') )
1050
- $this->usermeta = CUSTOM_USER_META_TABLE;
1051
-
1052
- return $old_prefix;
1053
- }
1054
-
1055
-
1056
- /**
1057
- * Whether to suppress database errors.
1058
- *
1059
- * @param unknown_type $suppress
1060
- * @return unknown
1061
- */
1062
- function suppress_errors( $suppress = true ) {
1063
- $errors = $this->suppress_errors;
1064
- $this->suppress_errors = $suppress;
1065
- return $errors;
1066
- }
1067
-
1068
-
1069
- /**
1070
- * Escapes content by reference for insertion into the database, for security
1071
- *
1072
- * @since 2.3.0
1073
- *
1074
- * @param string $s
1075
- */
1076
- function escape_by_ref(&$s) {
1077
- $s = $this->escape($s);
1078
- }
1079
-
1080
- /**
1081
- * Generic function to determine if a database supports a particular feature
1082
- * @param string $db_cap the feature
1083
- * @param false|string|resource $dbh_or_table the databaese (the current database, the database housing the specified table, or the database of the mysql resource)
1084
- * @return bool
1085
- */
1086
- function has_cap( $db_cap ) {
1087
-
1088
-
1089
- return false;
1090
- }
1091
-
1092
- /**
1093
- * Insert an array of data into a table.
1094
- *
1095
- * @since 2.5.0
1096
- *
1097
- * @param string $table WARNING: not sanitized!
1098
- * @param array $data Should not already be SQL-escaped
1099
- * @return mixed Results of $this->query()
1100
- */
1101
- function insert($table, $data) {
1102
- $data = add_magic_quotes($data);
1103
- $fields = array_keys($data);
1104
- return $this->query("INSERT INTO $table (`" . implode('`,`',$fields) . "`) VALUES ('".implode("','",$data)."')");
1105
- }
1106
-
1107
- /**
1108
- * Prepares a SQL query for safe use, using sprintf() syntax.
1109
- *
1110
- * @link http://php.net/sprintf See for syntax to use for query string.
1111
- * @since 2.3.0
1112
- *
1113
- * @param null|string $args If string, first parameter must be query statement
1114
- * @param mixed $args,... If additional parameters, they will be set inserted into the query.
1115
- * @return null|string Sanitized query string
1116
- */
1117
- function prepare($args=null) {
1118
- if ( is_null( $args ) )
1119
- return;
1120
- $args = func_get_args();
1121
- $query = array_shift($args);
1122
- $query = str_replace("'%s'", '%s', $query); // in case someone mistakenly already singlequoted it
1123
- $query = str_replace('"%s"', '%s', $query); // doublequote unquoting
1124
- $query = str_replace('%s', "'%s'", $query); // quote the strings
1125
- array_walk($args, array(&$this, 'escape_by_ref'));
1126
- return @vsprintf($query, $args);
1127
- }
1128
-
1129
-
1130
-
1131
- /**
1132
- * Update a row in the table with an array of data.
1133
- *
1134
- * @since 2.5.0
1135
- *
1136
- * @param string $table WARNING: not sanitized!
1137
- * @param array $data Should not already be SQL-escaped
1138
- * @param array $where A named array of WHERE column => value relationships. Multiple member pairs will be joined with ANDs. WARNING: the column names are not currently sanitized!
1139
- * @return mixed Results of $this->query()
1140
- */
1141
- function update($table, $data, $where){
1142
- $data = add_magic_quotes($data);
1143
- $bits = $wheres = array();
1144
- foreach ( (array) array_keys($data) as $k )
1145
- $bits[] = "`$k` = '$data[$k]'";
1146
-
1147
- if ( is_array( $where ) )
1148
- foreach ( $where as $c => $v ){
1149
- $v = str_replace("'","'",$v);
1150
- //$wheres[] = "$c = '" . $this->escape( $v ) . "'";
1151
- $wheres[] = "$c = '" . $v . "'";
1152
- }
1153
- else
1154
- return false;
1155
-
1156
- return $this->query( "UPDATE $table SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ) );
1157
- }
1158
-
1159
- /**
1160
- * Whether or not MySQL database is minimal required version.
1161
- *
1162
- * @since 2.5.0
1163
- * @uses $wp_version
1164
- *
1165
- * @return WP_Error
1166
- */
1167
- function check_database_version()
1168
- {
1169
- global $wp_version;
1170
- // Make sure the server has MySQL 4.0
1171
- /*
1172
- if ( version_compare($this->db_version(), '4.0.0', '<') )
1173
- return new WP_Error('database_version',sprintf(__('<strong>ERROR</strong>: WordPress %s requires MySQL 4.0.0 or higher'), $wp_version));
1174
-
1175
- */
1176
-
1177
- }
1178
-
1179
-
1180
-
1181
-
1182
-
1183
-
1184
-
1185
-
1186
-
1187
-
1188
-
1189
-
1190
-
1191
-
1192
-
1193
-
1194
-
1195
-
1196
-
1197
-
1198
-
1199
- }
1200
-
1201
- // automatically create a new $db object
1202
-
1203
- //$wpdb = new db(EZSQL_DB_USER, EZSQL_DB_PASSWORD, EZSQL_DB_NAME, EZSQL_DB_HOST);
1204
-
1205
-
1206
-
1207
-
1208
- function array_to_object($array = array()) {
1209
- if (!empty($array)) {
1210
- $data = false;
1211
-
1212
- foreach ($array as $akey => $aval) {
1213
- if(!is_numeric($akey)){
1214
- $data -> {$akey} = trim($aval);
1215
- }
1216
- }
1217
-
1218
- return $data;
1219
- }
1220
-
1221
- return false;
1222
- }
1223
-
1224
- function pre($sting_to_pre = '',$ob=false){
1225
-
1226
- if($sting_to_pre){
1227
-
1228
- if($ob){
1229
-
1230
- ob_start();
1231
- echo '<pre>';
1232
- print_r($sting_to_pre);
1233
- echo '</pre>';
1234
- $the_return = ob_get_contents();
1235
- ob_end_clean();
1236
- return $the_return;
1237
-
1238
- }else{
1239
- echo '<pre>';
1240
- print_r($sting_to_pre);
1241
- echo '</pre>';
1242
- }
1243
-
1244
- }
1245
- }
1246
-
1247
- function dbug($val,$prepend='',$prepend_color='red'){
1248
-
1249
- /*
1250
- $fp = fopen('E:\wwwusr\vhosts\tretinoin.dev.lamp2win.com\httpdocs\debug\log.txt', 'a');
1251
- fwrite($fp, '<span style="color:'.$prepend_color.';"><b>'.$prepend.'</b></span> '.$val."\n");
1252
- fclose($fp);
1253
- */
1254
- }
1255
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/.htaccess ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ Options -Indexes
2
+ Order deny,allow
3
+ Deny from all
inc/define.php CHANGED
@@ -1,6 +1,11 @@
1
  <?php
2
 
3
- define('W3TC_VERSION', '0.9.2.3');
 
 
 
 
 
4
  define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
5
  define('W3TC_EMAIL', 'w3tc@w3-edge.com');
6
  define('W3TC_PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr');
@@ -16,6 +21,7 @@ define('W3TC_WIN', (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'));
16
 
17
  defined('W3TC_DIR') || define('W3TC_DIR', realpath(dirname(__FILE__) . '/..'));
18
  define('W3TC_FILE', 'w3-total-cache/w3-total-cache.php');
 
19
  define('W3TC_LIB_DIR', W3TC_DIR . '/lib');
20
  define('W3TC_LIB_W3_DIR', W3TC_LIB_DIR . '/W3');
21
  define('W3TC_LIB_MINIFY_DIR', W3TC_LIB_DIR . '/Minify');
@@ -24,7 +30,6 @@ define('W3TC_LIB_CSSTIDY_DIR', W3TC_LIB_DIR . '/CSSTidy');
24
  define('W3TC_LIB_MICROSOFT_DIR', W3TC_LIB_DIR . '/Microsoft');
25
  define('W3TC_LIB_NUSOAP_DIR', W3TC_LIB_DIR . '/Nusoap');
26
  define('W3TC_PLUGINS_DIR', W3TC_DIR . '/plugins');
27
- define('W3TC_DB_DIR', W3TC_DIR . '/db');
28
  define('W3TC_INSTALL_DIR', W3TC_DIR . '/wp-content');
29
  define('W3TC_INSTALL_MINIFY_DIR', W3TC_INSTALL_DIR . '/w3tc/min');
30
 
@@ -86,87 +91,12 @@ define('W3TC_ADDIN_FILE_ADVANCED_CACHE', WP_CONTENT_DIR . '/advanced-cache.php')
86
  define('W3TC_ADDIN_FILE_DB', WP_CONTENT_DIR . '/db.php');
87
  define('W3TC_ADDIN_FILE_OBJECT_CACHE', WP_CONTENT_DIR . '/object-cache.php');
88
 
89
- require_once W3TC_DIR . '/inc/compat.php';
90
- require_once W3TC_DIR . '/inc/plugin.php';
91
 
92
  @ini_set('pcre.backtrack_limit', 4194304);
93
  @ini_set('pcre.recursion_limit', 4194304);
94
 
95
- /**
96
- * Deactivate plugin after activation error
97
- *
98
- * @return void
99
- */
100
- function w3_activation_cleanup() {
101
- $active_plugins = (array) get_option('active_plugins');
102
- $active_plugins_network = (array) get_site_option('active_sitewide_plugins');
103
-
104
- // workaround for WPMU deactivation bug
105
- remove_action('deactivate_' . W3TC_FILE, 'deactivate_sitewide_plugin');
106
-
107
- do_action('deactivate_plugin', W3TC_FILE);
108
-
109
- $key = array_search(W3TC_FILE, $active_plugins);
110
-
111
- if ($key !== false) {
112
- array_splice($active_plugins, $key, 1);
113
- }
114
-
115
- unset($active_plugins_network[W3TC_FILE]);
116
-
117
- do_action('deactivate_' . W3TC_FILE);
118
- do_action('deactivated_plugin', W3TC_FILE);
119
-
120
- update_option('active_plugins', $active_plugins);
121
- update_site_option('active_sitewide_plugins', $active_plugins_network);
122
- }
123
-
124
- /**
125
- * W3 activate error
126
- *
127
- * @param string $error
128
- * @return void
129
- */
130
- function w3_activate_error($error) {
131
- w3_activation_cleanup();
132
-
133
- include W3TC_DIR . '/inc/error.phtml';
134
- exit();
135
- }
136
-
137
- /**
138
- * W3 writable error
139
- *
140
- * @param string $path
141
- * @return string
142
- */
143
- function w3_writable_error($path) {
144
- $activate_url = wp_nonce_url('plugins.php?action=activate&plugin=' . W3TC_FILE, 'activate-plugin_' . W3TC_FILE);
145
- $reactivate_button = sprintf('<input type="button" value="re-activate plugin" onclick="top.location.href = \'%s\'" />', addslashes($activate_url));
146
-
147
- if (w3_check_open_basedir($path)) {
148
- $error = sprintf('<strong>%s</strong> could not be created, please run following command:<br /><strong style="color: #f00;">chmod 777 %s</strong><br />then %s.', $path, (file_exists($path) ? $path : dirname($path)), $reactivate_button);
149
- } else {
150
- $error = sprintf('<strong>%s</strong> could not be created, <strong>open_basedir</strong> restriction in effect, please check your php.ini settings:<br /><strong style="color: #f00;">open_basedir = "%s"</strong><br />then %s.', $path, ini_get('open_basedir'), $reactivate_button);
151
- }
152
-
153
- w3_activate_error($error);
154
- }
155
-
156
- /**
157
- * W3 Network activation error
158
- *
159
- * @return void
160
- */
161
- function w3_network_activate_error() {
162
- w3_activation_cleanup();
163
- wp_redirect(plugins_url('inc/network_activation.php', W3TC_FILE));
164
-
165
- echo '<p><strong>W3 Total Cache Error:</strong> plugin cannot be activated network-wide.</p>';
166
- echo '<p><a href="javascript:history.back(-1);">Back</a>';
167
- exit();
168
- }
169
-
170
  /**
171
  * Returns current microtime
172
  *
@@ -178,87 +108,6 @@ function w3_microtime() {
178
  return ((double) $usec + (double) $sec);
179
  }
180
 
181
- /**
182
- * Recursive creates directory
183
- *
184
- * @param string $path
185
- * @param integer $mask
186
- * @param string $curr_path
187
- * @return boolean
188
- */
189
- function w3_mkdir($path, $mask = 0777, $curr_path = '') {
190
- $path = w3_realpath($path);
191
- $path = trim($path, '/');
192
- $dirs = explode('/', $path);
193
-
194
- foreach ($dirs as $dir) {
195
- if ($dir == '') {
196
- return false;
197
- }
198
-
199
- $curr_path .= ($curr_path == '' ? '' : '/') . $dir;
200
-
201
- if (!@is_dir($curr_path)) {
202
- if (!@mkdir($curr_path, $mask)) {
203
- return false;
204
- }
205
- }
206
- }
207
-
208
- return true;
209
- }
210
-
211
- /**
212
- * Recursive remove dir
213
- *
214
- * @param string $path
215
- * @param array $exclude
216
- * @param bool $remove
217
- * @return void
218
- */
219
- function w3_rmdir($path, $exclude = array(), $remove = true) {
220
- $dir = @opendir($path);
221
-
222
- if ($dir) {
223
- while (($entry = @readdir($dir)) !== false) {
224
- if ($entry == '.' || $entry == '..') {
225
- continue;
226
- }
227
-
228
- foreach ($exclude as $mask) {
229
- if (fnmatch($mask, basename($entry))) {
230
- continue 2;
231
- }
232
- }
233
-
234
- $full_path = $path . DIRECTORY_SEPARATOR . $entry;
235
-
236
- if (@is_dir($full_path)) {
237
- w3_rmdir($full_path, $exclude);
238
- } else {
239
- @unlink($full_path);
240
- }
241
- }
242
-
243
- @closedir($dir);
244
-
245
- if ($remove) {
246
- @rmdir($path);
247
- }
248
- }
249
- }
250
-
251
- /**
252
- * Recursive empty dir
253
- *
254
- * @param string $path
255
- * @param array $exclude
256
- * @return void
257
- */
258
- function w3_emptydir($path, $exclude = array()) {
259
- w3_rmdir($path, $exclude, false);
260
- }
261
-
262
  /**
263
  * Check if content is HTML or XML
264
  *
@@ -274,7 +123,7 @@ function w3_is_xml($content) {
274
  $content = preg_replace('~<!--.*?-->~s', '', $content);
275
  }
276
 
277
- $content = ltrim($content);
278
 
279
  return (stripos($content, '<?xml') === 0 || stripos($content, '<html') === 0 || stripos($content, '<!DOCTYPE') === 0);
280
  }
@@ -352,21 +201,6 @@ function w3_is_https() {
352
  return false;
353
  }
354
 
355
- /**
356
- * Check if WP permalink directives exists
357
- *
358
- * @return boolean
359
- */
360
- function w3_is_permalink_rules() {
361
- if (w3_is_apache() && !w3_is_network()) {
362
- $path = w3_get_home_root() . '/.htaccess';
363
-
364
- return (($data = @file_get_contents($path)) && strstr($data, W3TC_MARKER_BEGIN_WORDPRESS) !== false);
365
- }
366
-
367
- return true;
368
- }
369
-
370
  /**
371
  * Check if there was database error
372
  *
@@ -396,57 +230,40 @@ function w3_is_preview_mode() {
396
  }
397
 
398
  /**
399
- * Check if file is write-able
400
  *
401
- * @param string $file
402
  * @return boolean
403
  */
404
- function w3_is_writable($file) {
405
- $exists = file_exists($file);
406
-
407
- $fp = @fopen($file, 'a');
408
-
409
- if ($fp) {
410
- fclose($fp);
411
-
412
- if (!$exists) {
413
- @unlink($file);
414
- }
415
-
416
- return true;
417
- }
418
-
419
- return false;
420
  }
421
 
422
  /**
423
- * Cehck if dir is write-able
424
  *
425
- * @param string $dir
426
- * @return boolean
427
  */
428
- function w3_is_writable_dir($dir) {
429
- $file = $dir . '/' . uniqid(mt_rand()) . '.tmp';
430
-
431
- return w3_is_writable($file);
432
  }
433
 
434
  /**
435
- * Returns true if server is Apache
436
  *
437
  * @return boolean
438
  */
439
- function w3_is_apache() {
440
- return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'apache') !== false);
441
  }
442
 
443
  /**
444
- * Returns true if server is nginx
445
  *
 
446
  * @return boolean
447
  */
448
- function w3_is_nginx() {
449
- return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false);
450
  }
451
 
452
  /**
@@ -456,7 +273,7 @@ function w3_is_nginx() {
456
  * @return bool
457
  */
458
  function w3_is_cdn_mirror($engine) {
459
- return in_array($engine, array('mirror', 'netdna', 'cotendo', 'cf2'));
460
  }
461
 
462
  /**
@@ -862,6 +679,22 @@ function w3_get_site_path() {
862
  return $site_path;
863
  }
864
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
865
  /**
866
  * Returns home path
867
  *
@@ -952,126 +785,6 @@ function w3_get_host_id() {
952
  return $host_id;
953
  }
954
 
955
- /**
956
- * Returns nginx rules path
957
- *
958
- * @return string
959
- */
960
- function w3_get_nginx_rules_path() {
961
- require_once W3TC_LIB_W3_DIR . '/Config.php';
962
- $config =& W3_Config::instance();
963
-
964
- $path = $config->get_string('config.path');
965
-
966
- if (!$path) {
967
- $path = w3_get_document_root() . '/nginx.conf';
968
- }
969
-
970
- return $path;
971
- }
972
-
973
- /**
974
- * Returns path of pagecache core rules file
975
- *
976
- * @return string
977
- */
978
- function w3_get_pgcache_rules_core_path() {
979
- switch (true) {
980
- case w3_is_apache():
981
- return w3_get_home_root() . '/.htaccess';
982
-
983
- case w3_is_nginx():
984
- return w3_get_nginx_rules_path();
985
- }
986
-
987
- return false;
988
- }
989
-
990
- /**
991
- * Returns path of pgcache cache rules file
992
- *
993
- * @return string
994
- */
995
- function w3_get_pgcache_rules_cache_path() {
996
- switch (true) {
997
- case w3_is_apache():
998
- return W3TC_CACHE_FILE_PGCACHE_DIR . '/.htaccess';
999
-
1000
- case w3_is_nginx():
1001
- return w3_get_nginx_rules_path();
1002
- }
1003
-
1004
- return false;
1005
- }
1006
-
1007
- /**
1008
- * Returns path of browsercache cache rules file
1009
- *
1010
- * @return string
1011
- */
1012
- function w3_get_browsercache_rules_cache_path() {
1013
- switch (true) {
1014
- case w3_is_apache():
1015
- return w3_get_home_root() . '/.htaccess';
1016
-
1017
- case w3_is_nginx():
1018
- return w3_get_nginx_rules_path();
1019
- }
1020
-
1021
- return false;
1022
- }
1023
-
1024
- /**
1025
- * Returns path of browsercache no404wp rules file
1026
- *
1027
- * @return string
1028
- */
1029
- function w3_get_browsercache_rules_no404wp_path() {
1030
- switch (true) {
1031
- case w3_is_apache():
1032
- return w3_get_home_root() . '/.htaccess';
1033
-
1034
- case w3_is_nginx():
1035
- return w3_get_nginx_rules_path();
1036
- }
1037
-
1038
- return false;
1039
- }
1040
-
1041
- /**
1042
- * Returns path of minify rules file
1043
- *
1044
- * @return string
1045
- */
1046
- function w3_get_minify_rules_core_path() {
1047
- switch (true) {
1048
- case w3_is_apache():
1049
- return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess';
1050
-
1051
- case w3_is_nginx():
1052
- return w3_get_nginx_rules_path();
1053
- }
1054
-
1055
- return false;
1056
- }
1057
-
1058
- /**
1059
- * Returns path of minify rules file
1060
- *
1061
- * @return string
1062
- */
1063
- function w3_get_minify_rules_cache_path() {
1064
- switch (true) {
1065
- case w3_is_apache():
1066
- return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess';
1067
-
1068
- case w3_is_nginx():
1069
- return w3_get_nginx_rules_path();
1070
- }
1071
-
1072
- return false;
1073
- }
1074
-
1075
  /**
1076
  * Returns WP config file path
1077
  *
@@ -1119,53 +832,13 @@ function w3_get_theme_key_legacy($theme_root, $template, $stylesheet) {
1119
  return substr(md5($theme_root . $template . $stylesheet), 0, 6);
1120
  }
1121
 
1122
- /**
1123
- * Returns path of minify rules file
1124
- *
1125
- * @return string
1126
- */
1127
- function w3_get_cdn_rules_path() {
1128
- switch (true) {
1129
- case w3_is_apache():
1130
- return '.htaccess';
1131
-
1132
- case w3_is_nginx():
1133
- return 'nginx.conf';
1134
- }
1135
-
1136
- return false;
1137
- }
1138
-
1139
  /**
1140
  * Returns true if we can check rules
1141
  *
1142
  * @return bool
1143
  */
1144
  function w3_can_check_rules() {
1145
- return (w3_is_apache() || w3_is_nginx());
1146
- }
1147
-
1148
- /**
1149
- * Returns true if we can modify rules
1150
- *
1151
- * @param string $path
1152
- * @return boolean
1153
- */
1154
- function w3_can_modify_rules($path) {
1155
- if (w3_is_network()) {
1156
- if (w3_is_apache()) {
1157
- switch ($path) {
1158
- case w3_get_pgcache_rules_cache_path():
1159
- case w3_get_minify_rules_core_path():
1160
- case w3_get_minify_rules_cache_path():
1161
- return true;
1162
- }
1163
- }
1164
-
1165
- return false;
1166
- }
1167
-
1168
- return true;
1169
  }
1170
 
1171
  /**
@@ -1175,7 +848,7 @@ function w3_can_modify_rules($path) {
1175
  * @return bool
1176
  */
1177
  function w3_can_cdn_purge($engine) {
1178
- return in_array($engine, array('ftp', 's3', 'cf', 'cf2', 'rscf', 'azure', 'netdna', 'cotendo'));
1179
  }
1180
 
1181
  /**
@@ -1338,393 +1011,32 @@ function w3_realpath($path) {
1338
  }
1339
 
1340
  /**
1341
- * Returns dirname of path
1342
- *
1343
- * @param string $path
1344
  * @return string
1345
  */
1346
- function w3_dirname($path) {
1347
- $dirname = dirname($path);
1348
-
1349
- if ($dirname == '.' || $dirname == '/' || $dirname == '\\') {
1350
- $dirname = '';
1351
- }
1352
-
1353
- return $dirname;
1354
  }
1355
 
1356
  /**
1357
- * Returns open basedirs
1358
  *
1359
- * @return array
 
 
1360
  */
1361
- function w3_get_open_basedirs() {
1362
- $open_basedir_ini = ini_get('open_basedir');
1363
- $open_basedirs = (W3TC_WIN ? preg_split('~[;,]~', $open_basedir_ini) : explode(':', $open_basedir_ini));
1364
- $result = array();
1365
 
1366
- foreach ($open_basedirs as $open_basedir) {
1367
- $open_basedir = trim($open_basedir);
1368
- if ($open_basedir != '') {
1369
- $result[] = w3_realpath($open_basedir);
1370
- }
1371
- }
1372
 
1373
- return $result;
 
1374
  }
1375
 
1376
  /**
1377
- * Checks if path is restricted by open_basedir
1378
- *
1379
- * @param string $path
1380
- * @return boolean
1381
- */
1382
- function w3_check_open_basedir($path) {
1383
- $path = w3_realpath($path);
1384
- $open_basedirs = w3_get_open_basedirs();
1385
-
1386
- if (!count($open_basedirs)) {
1387
- return true;
1388
- }
1389
-
1390
- foreach ($open_basedirs as $open_basedir) {
1391
- if (strstr($path, $open_basedir) !== false) {
1392
- return true;
1393
- }
1394
- }
1395
-
1396
- return false;
1397
- }
1398
-
1399
- /**
1400
- * Request URL
1401
- *
1402
- * @param string $method
1403
- * @param string $url
1404
- * @param string $data
1405
- * @param string $auth
1406
- * @param boolean $check_status
1407
- * @return string
1408
- */
1409
- function w3_http_request($method, $url, $data = '', $auth = '', $check_status = true) {
1410
- $status = 0;
1411
- $method = strtoupper($method);
1412
-
1413
- if (function_exists('curl_init')) {
1414
- $ch = curl_init();
1415
-
1416
- curl_setopt($ch, CURLOPT_URL, $url);
1417
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
1418
- curl_setopt($ch, CURLOPT_USERAGENT, W3TC_POWERED_BY);
1419
- @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
1420
- curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
1421
- curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
1422
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
1423
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);
1424
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
1425
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
1426
-
1427
- switch ($method) {
1428
- case 'POST':
1429
- curl_setopt($ch, CURLOPT_POST, true);
1430
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
1431
- break;
1432
-
1433
- case 'PURGE':
1434
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PURGE');
1435
- break;
1436
- }
1437
-
1438
- if ($auth) {
1439
- curl_setopt($ch, CURLOPT_USERPWD, $auth);
1440
- }
1441
-
1442
- $contents = curl_exec($ch);
1443
-
1444
- $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
1445
-
1446
- curl_close($ch);
1447
- } else {
1448
- $parse_url = @parse_url($url);
1449
-
1450
- if ($parse_url && isset($parse_url['host'])) {
1451
- $host = $parse_url['host'];
1452
- $port = (isset($parse_url['port']) ? (int) $parse_url['port'] : 80);
1453
- $path = (!empty($parse_url['path']) ? $parse_url['path'] : '/');
1454
- $query = (isset($parse_url['query']) ? $parse_url['query'] : '');
1455
- $request_uri = $path . ($query != '' ? '?' . $query : '');
1456
-
1457
- $request_headers_array = array(
1458
- sprintf('%s %s HTTP/1.0', $method, $request_uri),
1459
- sprintf('Host: %s', $host),
1460
- sprintf('User-Agent: %s', W3TC_POWERED_BY),
1461
- 'Connection: close'
1462
- );
1463
-
1464
- if (!empty($data)) {
1465
- $request_headers_array[] = sprintf('Content-Length: %d', strlen($data));
1466
- }
1467
-
1468
- if (!empty($auth)) {
1469
- $request_headers_array[] = sprintf('Authorization: Basic %s', base64_encode($auth));
1470
- }
1471
-
1472
- $request_headers = implode("\r\n", $request_headers_array);
1473
- $request = $request_headers . "\r\n\r\n" . $data;
1474
- $errno = null;
1475
- $errstr = null;
1476
-
1477
- $fp = @fsockopen($host, $port, $errno, $errstr, 10);
1478
-
1479
- if (!$fp) {
1480
- return false;
1481
- }
1482
-
1483
- @stream_set_timeout($fp, 60);
1484
-
1485
- $response = '';
1486
- @fputs($fp, $request);
1487
-
1488
- while (!@feof($fp)) {
1489
- $response .= @fgets($fp, 4096);
1490
- }
1491
-
1492
- @fclose($fp);
1493
-
1494
- list ($response_headers, $contents) = explode("\r\n\r\n", $response, 2);
1495
-
1496
- $matches = null;
1497
-
1498
- if (preg_match('~^HTTP/1.[01] (\d+)~', $response_headers, $matches)) {
1499
- $status = (int) $matches[1];
1500
- }
1501
- }
1502
- }
1503
-
1504
- if (!$check_status || $status == 200) {
1505
- return $contents;
1506
- }
1507
-
1508
- return false;
1509
- }
1510
-
1511
- /**
1512
- * Download url via GET
1513
- *
1514
- * @param string $url
1515
- * @param string $auth
1516
- * $param boolean $check_status
1517
- * @param bool $check_status
1518
- * @return string
1519
- */
1520
- function w3_http_get($url, $auth = '', $check_status = true) {
1521
- return w3_http_request('GET', $url, null, $auth, $check_status);
1522
- }
1523
-
1524
- /**
1525
- * Send POST request to URL
1526
- *
1527
- * @param string $url
1528
- * @param string $data
1529
- * @param string $auth
1530
- * @param boolean $check_status
1531
- * @return string
1532
- */
1533
- function w3_http_post($url, $data = '', $auth = '', $check_status = true) {
1534
- return w3_http_request('POST', $url, $data, $auth, $check_status);
1535
- }
1536
-
1537
- /**
1538
- * Send PURGE request to Varnish server
1539
- *
1540
- * @param string $url
1541
- * @param string $auth
1542
- * $param boolean $check_status
1543
- * @param bool $check_status
1544
- * @return string
1545
- */
1546
- function w3_http_purge($url, $auth = '', $check_status = true) {
1547
- return w3_http_request('PURGE', $url, null, $auth, $check_status);
1548
- }
1549
-
1550
- /**
1551
- * Returns GMT date
1552
- * @param integer $time
1553
- * @return string
1554
- */
1555
- function w3_http_date($time) {
1556
- return gmdate('D, d M Y H:i:s \G\M\T', $time);
1557
- }
1558
-
1559
- /**
1560
- * Downloads data to a file
1561
- *
1562
- * @param string $url
1563
- * @param string $file
1564
- * @return boolean
1565
- */
1566
- function w3_download($url, $file) {
1567
- if (strpos($url, '//') === 0) {
1568
- $url = (w3_is_https() ? 'https:' : 'http:') . $url;
1569
- }
1570
-
1571
- $data = w3_http_get($url);
1572
-
1573
- if ($data !== false) {
1574
- return @file_put_contents($file, $data);
1575
- }
1576
-
1577
- return false;
1578
- }
1579
-
1580
- /**
1581
- * Returns upload info
1582
- *
1583
- * @return array
1584
- */
1585
- function w3_upload_info() {
1586
- static $upload_info = null;
1587
-
1588
- if ($upload_info === null) {
1589
- $upload_info = @wp_upload_dir();
1590
-
1591
- if (empty($upload_info['error'])) {
1592
- $parse_url = @parse_url($upload_info['baseurl']);
1593
-
1594
- if ($parse_url) {
1595
- $baseurlpath = (!empty($parse_url['path']) ? trim($parse_url['path'], '/') : '');
1596
- } else {
1597
- $baseurlpath = 'wp-content/uploads';
1598
- }
1599
-
1600
- $upload_info['baseurlpath'] = '/' . $baseurlpath . '/';
1601
- } else {
1602
- $upload_info = false;
1603
- }
1604
- }
1605
-
1606
- return $upload_info;
1607
- }
1608
-
1609
- /**
1610
- * Formats URL
1611
- *
1612
- * @param string $url
1613
- * @param array $params
1614
- * @param boolean $skip_empty
1615
- * @param string $separator
1616
- * @return string
1617
- */
1618
- function w3_url_format($url = '', $params = array(), $skip_empty = false, $separator = '&') {
1619
- if ($url != '') {
1620
- $parse_url = @parse_url($url);
1621
- $url = '';
1622
-
1623
- if (!empty($parse_url['scheme'])) {
1624
- $url .= $parse_url['scheme'] . '://';
1625
-
1626
- if (!empty($parse_url['user'])) {
1627
- $url .= $parse_url['user'];
1628
-
1629
- if (!empty($parse_url['pass'])) {
1630
- $url .= ':' . $parse_url['pass'];
1631
- }
1632
- }
1633
-
1634
- if (!empty($parse_url['host'])) {
1635
- $url .= $parse_url['host'];
1636
- }
1637
-
1638
- if (!empty($parse_url['port']) && $parse_url['port'] != 80) {
1639
- $url .= ':' . (int) $parse_url['port'];
1640
- }
1641
- }
1642
-
1643
- if (!empty($parse_url['path'])) {
1644
- $url .= $parse_url['path'];
1645
- }
1646
-
1647
- if (!empty($parse_url['query'])) {
1648
- $old_params = array();
1649
- parse_str($parse_url['query'], $old_params);
1650
-
1651
- $params = array_merge($old_params, $params);
1652
- }
1653
-
1654
- $query = w3_url_query($params);
1655
-
1656
- if ($query != '') {
1657
- $url .= '?' . $query;
1658
- }
1659
-
1660
- if (!empty($parse_url['fragment'])) {
1661
- $url .= '#' . $parse_url['fragment'];
1662
- }
1663
- } else {
1664
- $query = w3_url_query($params, $skip_empty, $separator);
1665
-
1666
- if ($query != '') {
1667
- $url = '?' . $query;
1668
- }
1669
- }
1670
-
1671
- return $url;
1672
- }
1673
-
1674
- /**
1675
- * Formats query string
1676
- *
1677
- * @param array $params
1678
- * @param boolean $skip_empty
1679
- * @param string $separator
1680
- * @return string
1681
- */
1682
- function w3_url_query($params = array(), $skip_empty = false, $separator = '&') {
1683
- $str = '';
1684
- static $stack = array();
1685
-
1686
- foreach ((array) $params as $key => $value) {
1687
- if ($skip_empty === true && empty($value)) {
1688
- continue;
1689
- }
1690
-
1691
- array_push($stack, $key);
1692
-
1693
- if (is_array($value)) {
1694
- if (count($value)) {
1695
- $str .= ($str != '' ? '&' : '') . w3_url_query($value, $skip_empty, $key);
1696
- }
1697
- } else {
1698
- $name = '';
1699
- foreach ($stack as $key) {
1700
- $name .= ($name != '' ? '[' . $key . ']' : $key);
1701
- }
1702
- $str .= ($str != '' ? $separator : '') . $name . '=' . rawurlencode($value);
1703
- }
1704
-
1705
- array_pop($stack);
1706
- }
1707
-
1708
- return $str;
1709
- }
1710
-
1711
-
1712
- /**
1713
- * Redirects to URL
1714
- *
1715
- * @param string $url
1716
- * @param array $params
1717
- * @return string
1718
- */
1719
- function w3_redirect($url = '', $params = array()) {
1720
- $url = w3_url_format($url, $params);
1721
-
1722
- @header('Location: ' . $url);
1723
- exit();
1724
- }
1725
-
1726
- /**
1727
- * Returns caching engine name
1728
  *
1729
  * @param $engine
1730
  * @return string
@@ -1752,23 +1064,11 @@ function w3_get_engine_name($engine) {
1752
  break;
1753
 
1754
  case 'file':
1755
- $engine_name = 'disk';
1756
  break;
1757
 
1758
  case 'file_generic':
1759
- $engine_name = 'disk (enhanced)';
1760
- break;
1761
-
1762
- case 'mirror':
1763
- $engine_name = 'mirror';
1764
- break;
1765
-
1766
- case 'netdna':
1767
- $engine_name = 'netdna / maxcdn';
1768
- break;
1769
-
1770
- case 'cotendo':
1771
- $engine_name = 'cotendo';
1772
  break;
1773
 
1774
  case 'ftp':
@@ -1795,6 +1095,22 @@ function w3_get_engine_name($engine) {
1795
  $engine_name = 'microsoft azure storage';
1796
  break;
1797
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1798
  default:
1799
  $engine_name = 'n/a';
1800
  break;
@@ -1835,79 +1151,6 @@ function w3_to_boolean($value) {
1835
  return (boolean) $value;
1836
  }
1837
 
1838
- /**
1839
- * Returns file mime type
1840
- *
1841
- * @param string $file
1842
- * @return string
1843
- */
1844
- function w3_get_mime_type($file) {
1845
- static $cache = array();
1846
-
1847
- if (!isset($cache[$file])) {
1848
- $mime_type = false;
1849
-
1850
- /**
1851
- * Try to detect by extension (fast)
1852
- */
1853
- $mime_types = include W3TC_DIR . '/inc/mime/all.php';
1854
-
1855
- foreach ($mime_types as $extension => $type) {
1856
- if (preg_match('~\.(' . $extension . ')$~i', $file)) {
1857
- $mime_type = $type;
1858
- break;
1859
- }
1860
- }
1861
-
1862
- /**
1863
- * Try to detect using file info function
1864
- */
1865
- if (!$mime_type && function_exists('finfo_open')) {
1866
- $finfo = @finfo_open(FILEINFO_MIME);
1867
-
1868
- if (!$finfo) {
1869
- $finfo = @finfo_open(FILEINFO_MIME);
1870
- }
1871
-
1872
- if ($finfo) {
1873
- $mime_type = @finfo_file($finfo, $file);
1874
-
1875
- if ($mime_type) {
1876
- $extra_mime_type_info = strpos($mime_type, "; ");
1877
-
1878
- if ($extra_mime_type_info) {
1879
- $mime_type = substr($mime_type, 0, $extra_mime_type_info);
1880
- }
1881
-
1882
- if ($mime_type == 'application/octet-stream') {
1883
- $mime_type = false;
1884
- }
1885
- }
1886
-
1887
- @finfo_close($finfo);
1888
- }
1889
- }
1890
-
1891
- /**
1892
- * Try to detect using mime type function
1893
- */
1894
- if (!$mime_type && function_exists('mime_content_type')) {
1895
- $mime_type = @mime_content_type($file);
1896
- }
1897
-
1898
- /**
1899
- * If detection failed use default mime type
1900
- */
1901
- if (!$mime_type) {
1902
- $mime_type = 'application/octet-stream';
1903
- }
1904
-
1905
- $cache[$file] = $mime_type;
1906
- }
1907
-
1908
- return $cache[$file];
1909
- }
1910
-
1911
  /**
1912
  * Quotes regular expression string
1913
  *
@@ -1949,161 +1192,37 @@ function w3_stripslashes($var) {
1949
  return $var;
1950
  }
1951
 
1952
- if (!function_exists('file_put_contents')) {
1953
- if (!defined('FILE_APPEND')) {
1954
- define('FILE_APPEND', 8);
1955
- }
1956
-
1957
- /**
1958
- * Puts contents to the file
1959
- *
1960
- * @param string $filename
1961
- * @param string $data
1962
- * @param integer $flags
1963
- * @return boolean
1964
- */
1965
- function file_put_contents($filename, $data, $flags = 0) {
1966
- $fp = fopen($filename, ($flags & FILE_APPEND ? 'a' : 'w'));
1967
-
1968
- if ($fp) {
1969
- fputs($fp, $data);
1970
- fclose($fp);
1971
-
1972
- return true;
1973
- }
1974
-
1975
- return false;
1976
- }
1977
- }
1978
-
1979
  /**
1980
- * Trim rules
1981
- *
1982
- * @param string $rules
1983
- * @return string
1984
- */
1985
- function w3_trim_rules($rules) {
1986
- $rules = trim($rules);
1987
-
1988
- if ($rules != '') {
1989
- $rules .= "\n";
1990
- }
1991
-
1992
- return $rules;
1993
- }
1994
-
1995
- /**
1996
- * Cleanup rewrite rules
1997
- *
1998
- * @param string $rules
1999
- * @return string
2000
- */
2001
- function w3_clean_rules($rules) {
2002
- $rules = preg_replace('~[\r\n]+~', "\n", $rules);
2003
- $rules = preg_replace('~^\s+~m', '', $rules);
2004
- $rules = w3_trim_rules($rules);
2005
-
2006
- return $rules;
2007
- }
2008
-
2009
- /**
2010
- * Erases text from start to end
2011
- *
2012
- * @param string $rules
2013
- * @param string $start
2014
- * @param string $end
2015
- * @return string
2016
- */
2017
- function w3_erase_rules($rules, $start, $end) {
2018
- $rules = preg_replace('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", '', $rules);
2019
- $rules = w3_trim_rules($rules);
2020
-
2021
- return $rules;
2022
- }
2023
-
2024
- /**
2025
- * Check if rules exist
2026
- *
2027
- * @param string $rules
2028
- * @param string $start
2029
- * @param string $end
2030
- * @return int
2031
- */
2032
- function w3_has_rules($rules, $start, $end) {
2033
- return preg_match('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", $rules);
2034
- }
2035
-
2036
- /**
2037
- * Extracts JS files from content
2038
  *
2039
- * @param string $content
2040
- * @return array
2041
  */
2042
- function w3_extract_js($content) {
2043
- $matches = null;
2044
- $files = array();
2045
-
2046
- $content = preg_replace('~<!--.*?-->~s', '', $content);
2047
-
2048
- if (preg_match_all('~<script\s+[^<>]*src=["\']?([^"\']+)["\']?[^<>]*>\s*</script>~is', $content, $matches)) {
2049
- $files = $matches[1];
2050
  }
2051
 
2052
- $files = array_values(array_unique($files));
2053
-
2054
- return $files;
2055
  }
2056
 
2057
  /**
2058
- * Extract CSS files from content
2059
  *
2060
- * @param string $content
2061
- * @return array
2062
  */
2063
- function w3_extract_css($content) {
2064
- $matches = null;
2065
- $files = array();
2066
-
2067
- $content = preg_replace('~<!--.*?-->~s', '', $content);
2068
-
2069
- if (preg_match_all('~<link\s+([^>]+)/?>(.*</link>)?~Uis', $content, $matches, PREG_SET_ORDER)) {
2070
- foreach ($matches as $match) {
2071
- $attrs = array();
2072
- $attr_matches = null;
2073
-
2074
- if (preg_match_all('~(\w+)=["\']([^"\']*)["\']~', $match[1], $attr_matches, PREG_SET_ORDER)) {
2075
- foreach ($attr_matches as $attr_match) {
2076
- $attrs[$attr_match[1]] = trim($attr_match[2]);
2077
- }
2078
- }
2079
 
2080
- if (isset($attrs['href']) && isset($attrs['rel']) && stristr($attrs['rel'], 'stylesheet') !== false && (!isset($attrs['media']) || stristr($attrs['media'], 'print') === false)) {
2081
- $files[] = $attrs['href'];
2082
- }
2083
- }
2084
  }
2085
 
2086
- if (preg_match_all('~@import\s+(url\s*)?\(?["\']?\s*([^"\'\)\s]+)\s*["\']?\)?[^;]*;?~is', $content, $matches)) {
2087
- $files = array_merge($files, $matches[2]);
2088
- }
2089
-
2090
- $files = array_values(array_unique($files));
2091
-
2092
- return $files;
2093
- }
2094
-
2095
- /**
2096
- * Escapes HTML comment
2097
- *
2098
- * @param string $comment
2099
- * @return mixed
2100
- */
2101
- function w3_escape_comment($comment) {
2102
- while (strstr($comment, '--') !== false) {
2103
- $comment = str_replace('--', '- -', $comment);
2104
- }
2105
-
2106
- return $comment;
2107
  }
2108
 
2109
  /**
1
  <?php
2
 
3
+ if (!defined('ABSPATH')) {
4
+ die();
5
+ }
6
+
7
+ define('W3TC', true);
8
+ define('W3TC_VERSION', '0.9.2.4');
9
  define('W3TC_POWERED_BY', 'W3 Total Cache/' . W3TC_VERSION);
10
  define('W3TC_EMAIL', 'w3tc@w3-edge.com');
11
  define('W3TC_PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr');
21
 
22
  defined('W3TC_DIR') || define('W3TC_DIR', realpath(dirname(__FILE__) . '/..'));
23
  define('W3TC_FILE', 'w3-total-cache/w3-total-cache.php');
24
+ define('W3TC_INC_DIR', W3TC_DIR . '/inc');
25
  define('W3TC_LIB_DIR', W3TC_DIR . '/lib');
26
  define('W3TC_LIB_W3_DIR', W3TC_LIB_DIR . '/W3');
27
  define('W3TC_LIB_MINIFY_DIR', W3TC_LIB_DIR . '/Minify');
30
  define('W3TC_LIB_MICROSOFT_DIR', W3TC_LIB_DIR . '/Microsoft');
31
  define('W3TC_LIB_NUSOAP_DIR', W3TC_LIB_DIR . '/Nusoap');
32
  define('W3TC_PLUGINS_DIR', W3TC_DIR . '/plugins');
 
33
  define('W3TC_INSTALL_DIR', W3TC_DIR . '/wp-content');
34
  define('W3TC_INSTALL_MINIFY_DIR', W3TC_INSTALL_DIR . '/w3tc/min');
35
 
91
  define('W3TC_ADDIN_FILE_DB', WP_CONTENT_DIR . '/db.php');
92
  define('W3TC_ADDIN_FILE_OBJECT_CACHE', WP_CONTENT_DIR . '/object-cache.php');
93
 
94
+ require_once W3TC_INC_DIR . '/functions/compat.php';
95
+ require_once W3TC_INC_DIR . '/functions/plugin.php';
96
 
97
  @ini_set('pcre.backtrack_limit', 4194304);
98
  @ini_set('pcre.recursion_limit', 4194304);
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  /**
101
  * Returns current microtime
102
  *
108
  return ((double) $usec + (double) $sec);
109
  }
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  /**
112
  * Check if content is HTML or XML
113
  *
123
  $content = preg_replace('~<!--.*?-->~s', '', $content);
124
  }
125
 
126
+ $content = ltrim($content, "\x00\x09\x0A\x0D\x20\xBB\xBF\xEF");
127
 
128
  return (stripos($content, '<?xml') === 0 || stripos($content, '<html') === 0 || stripos($content, '<!DOCTYPE') === 0);
129
  }
201
  return false;
202
  }
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  /**
205
  * Check if there was database error
206
  *
230
  }
231
 
232
  /**
233
+ * Returns true if server is Apache
234
  *
 
235
  * @return boolean
236
  */
237
+ function w3_is_apache() {
238
+ return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  }
240
 
241
  /**
242
+ * Check whether server is LiteSpeed
243
  *
244
+ * @return bool
 
245
  */
246
+ function w3_is_litespeed() {
247
+ return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false);
 
 
248
  }
249
 
250
  /**
251
+ * Returns true if server is nginx
252
  *
253
  * @return boolean
254
  */
255
+ function w3_is_nginx() {
256
+ return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false);
257
  }
258
 
259
  /**
260
+ * Check whether $engine is correct CDN engine
261
  *
262
+ * @param string $engine
263
  * @return boolean
264
  */
265
+ function w3_is_cdn_engine($engine) {
266
+ return in_array($engine, array('ftp', 's3', 'cf', 'cf2', 'rscf', 'azure', 'mirror', 'netdna', 'cotendo', 'edgecast'));
267
  }
268
 
269
  /**
273
  * @return bool
274
  */
275
  function w3_is_cdn_mirror($engine) {
276
+ return in_array($engine, array('mirror', 'netdna', 'cotendo', 'cf2', 'edgecast'));
277
  }
278
 
279
  /**
679
  return $site_path;
680
  }
681
 
682
+ /**
683
+ * Returns home domain
684
+ *
685
+ * @return string
686
+ */
687
+ function w3_get_home_domain() {
688
+ $home_url = w3_get_home_url();
689
+ $parse_url = @parse_url($home_url);
690
+
691
+ if ($parse_url && isset($parse_url['host'])) {
692
+ return $parse_url['host'];
693
+ }
694
+
695
+ return w3_get_host();
696
+ }
697
+
698
  /**
699
  * Returns home path
700
  *
785
  return $host_id;
786
  }
787
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
788
  /**
789
  * Returns WP config file path
790
  *
832
  return substr(md5($theme_root . $template . $stylesheet), 0, 6);
833
  }
834
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
835
  /**
836
  * Returns true if we can check rules
837
  *
838
  * @return bool
839
  */
840
  function w3_can_check_rules() {
841
+ return (w3_is_apache() || w3_is_litespeed() || w3_is_nginx());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
842
  }
843
 
844
  /**
848
  * @return bool
849
  */
850
  function w3_can_cdn_purge($engine) {
851
+ return in_array($engine, array('ftp', 's3', 'cf', 'cf2', 'rscf', 'azure', 'netdna', 'cotendo', 'edgecast'));
852
  }
853
 
854
  /**
1011
  }
1012
 
1013
  /**
1014
+ * Returns GMT date
1015
+ * @param integer $time
 
1016
  * @return string
1017
  */
1018
+ function w3_http_date($time) {
1019
+ return gmdate('D, d M Y H:i:s \G\M\T', $time);
 
 
 
 
 
 
1020
  }
1021
 
1022
  /**
1023
+ * Redirects to URL
1024
  *
1025
+ * @param string $url
1026
+ * @param array $params
1027
+ * @return string
1028
  */
1029
+ function w3_redirect($url = '', $params = array()) {
1030
+ require_once W3TC_INC_DIR . '/functions/url.php';
 
 
1031
 
1032
+ $url = w3_url_format($url, $params);
 
 
 
 
 
1033
 
1034
+ @header('Location: ' . $url);
1035
+ exit();
1036
  }
1037
 
1038
  /**
1039
+ * Returns caching engine name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1040
  *
1041
  * @param $engine
1042
  * @return string
1064
  break;
1065
 
1066
  case 'file':
1067
+ $engine_name = 'disk: basic';
1068
  break;
1069
 
1070
  case 'file_generic':
1071
+ $engine_name = 'disk: enhanced';
 
 
 
 
 
 
 
 
 
 
 
 
1072
  break;
1073
 
1074
  case 'ftp':
1095
  $engine_name = 'microsoft azure storage';
1096
  break;
1097
 
1098
+ case 'mirror':
1099
+ $engine_name = 'mirror';
1100
+ break;
1101
+
1102
+ case 'netdna':
1103
+ $engine_name = 'netdna / maxcdn';
1104
+ break;
1105
+
1106
+ case 'cotendo':
1107
+ $engine_name = 'cotendo';
1108
+ break;
1109
+
1110
+ case 'edgecast':
1111
+ $engine_name = 'media template procdn / edgecast';
1112
+ break;
1113
+
1114
  default:
1115
  $engine_name = 'n/a';
1116
  break;
1151
  return (boolean) $value;
1152
  }
1153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1154
  /**
1155
  * Quotes regular expression string
1156
  *
1192
  return $var;
1193
  }
1194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195
  /**
1196
+ * Escapes HTML comment
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1197
  *
1198
+ * @param string $comment
1199
+ * @return mixed
1200
  */
1201
+ function w3_escape_comment($comment) {
1202
+ while (strstr($comment, '--') !== false) {
1203
+ $comment = str_replace('--', '- -', $comment);
 
 
 
 
 
1204
  }
1205
 
1206
+ return $comment;
 
 
1207
  }
1208
 
1209
  /**
1210
+ * Returns instance of singleton class
1211
  *
1212
+ * @param string $class
1213
+ * @return object
1214
  */
1215
+ function &w3_instance($class) {
1216
+ static $instances = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1217
 
1218
+ if (!isset($instances[$class])) {
1219
+ require_once W3TC_LIB_W3_DIR . '/' .
1220
+ str_replace('_', '/', substr($class, 3)) . '.php';
1221
+ @$instances[$class] = & new $class();
1222
  }
1223
 
1224
+ $v = $instances[$class]; // Don't return reference
1225
+ return $v;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1226
  }
1227
 
1228
  /**
inc/email/index.html ADDED
File without changes
inc/email/minify_error_notification.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <html>
2
+ <head></head>
3
+ <body>
4
+ <p>Unfortunately an error occurred while creating the minify cache. Please check your settings to ensure your site is working as intended.</p>
5
+ <p>Thanks for using W3 Total Cache.</p>
6
+ </body>
7
+ </html>
inc/email/{support_request.phtml → support_request.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <html>
2
  <head></head>
3
  <body>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <html>
3
  <head></head>
4
  <body>
inc/{error.phtml → error.php} RENAMED
@@ -1,7 +1,8 @@
 
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
  <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
3
  <head>
4
- <link rel="stylesheet" type="text/css" href="<?php echo plugins_url('inc/css/error.css?ver=' . W3TC_VERSION, W3TC_FILE); ?>" />
5
  <title>Error</title>
6
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
7
  </head>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
  <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
4
  <head>
5
+ <link rel="stylesheet" type="text/css" href="<?php echo plugins_url('pub/css/error.css?ver=' . W3TC_VERSION, W3TC_FILE); ?>" />
6
  <title>Error</title>
7
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
8
  </head>
inc/functions/activation.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Deactivate plugin after activation error
5
+ *
6
+ * @return void
7
+ */
8
+ function w3_activation_cleanup() {
9
+ $active_plugins = (array) get_option('active_plugins');
10
+ $active_plugins_network = (array) get_site_option('active_sitewide_plugins');
11
+
12
+ // workaround for WPMU deactivation bug
13
+ remove_action('deactivate_' . W3TC_FILE, 'deactivate_sitewide_plugin');
14
+
15
+ do_action('deactivate_plugin', W3TC_FILE);
16
+
17
+ $key = array_search(W3TC_FILE, $active_plugins);
18
+
19
+ if ($key !== false) {
20
+ array_splice($active_plugins, $key, 1);
21
+ }
22
+
23
+ unset($active_plugins_network[W3TC_FILE]);
24
+
25
+ do_action('deactivate_' . W3TC_FILE);
26
+ do_action('deactivated_plugin', W3TC_FILE);
27
+
28
+ update_option('active_plugins', $active_plugins);
29
+ update_site_option('active_sitewide_plugins', $active_plugins_network);
30
+ }
31
+
32
+ /**
33
+ * W3 activate error
34
+ *
35
+ * @param string $error
36
+ * @return void
37
+ */
38
+ function w3_activate_error($error) {
39
+ w3_activation_cleanup();
40
+
41
+ include W3TC_INC_DIR . '/error.php';
42
+ exit();
43
+ }
44
+
45
+ /**
46
+ * W3 writable error
47
+ *
48
+ * @param string $path
49
+ * @return string
50
+ */
51
+ function w3_writable_error($path) {
52
+ $reactivate_url = wp_nonce_url('plugins.php?action=activate&plugin=' . W3TC_FILE, 'activate-plugin_' . W3TC_FILE);
53
+ $reactivate_button = sprintf('<input type="button" value="re-activate plugin" onclick="top.location.href = \'%s\'" />', addslashes($reactivate_url));
54
+
55
+ require_once W3TC_INC_DIR . '/functions/file.php';
56
+
57
+ if (w3_check_open_basedir($path)) {
58
+ $error = sprintf('<strong>%s</strong> could not be created, please run following command:<br /><strong style="color: #f00;">chmod 777 %s</strong><br />then %s.', $path, (file_exists($path) ? $path : dirname($path)), $reactivate_button);
59
+ } else {
60
+ $error = sprintf('<strong>%s</strong> could not be created, <strong>open_basedir</strong> restriction in effect, please check your php.ini settings:<br /><strong style="color: #f00;">open_basedir = "%s"</strong><br />then %s.', $path, ini_get('open_basedir'), $reactivate_button);
61
+ }
62
+
63
+ w3_activate_error($error);
64
+ }
65
+
66
+ /**
67
+ * W3 Network activation error
68
+ *
69
+ * @return void
70
+ */
71
+ function w3_network_activate_error() {
72
+ w3_activation_cleanup();
73
+ wp_redirect(plugins_url('pub/network_activation.php', W3TC_FILE));
74
+
75
+ echo '<p><strong>W3 Total Cache Error:</strong> plugin cannot be activated network-wide.</p>';
76
+ echo '<p><a href="javascript:history.back(-1);">Back</a>';
77
+ exit();
78
+ }
inc/{compat.php → functions/compat.php} RENAMED
@@ -1,5 +1,24 @@
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  if (!function_exists('json_encode')) {
4
  function json_encode($string) {
5
  global $json;
1
  <?php
2
 
3
+ if (!function_exists('file_put_contents')) {
4
+ if (!defined('FILE_APPEND')) {
5
+ define('FILE_APPEND', 8);
6
+ }
7
+
8
+ function file_put_contents($filename, $data, $flags = 0) {
9
+ $fp = fopen($filename, ($flags & FILE_APPEND ? 'a' : 'w'));
10
+
11
+ if ($fp) {
12
+ fputs($fp, $data);
13
+ fclose($fp);
14
+
15
+ return true;
16
+ }
17
+
18
+ return false;
19
+ }
20
+ }
21
+
22
  if (!function_exists('json_encode')) {
23
  function json_encode($string) {
24
  global $json;
inc/functions/extract.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Extracts JS files from content
5
+ *
6
+ * @param string $content
7
+ * @return array
8
+ */
9
+ function w3_extract_js($content) {
10
+ $matches = null;
11
+ $files = array();
12
+
13
+ $content = preg_replace('~<!--.*?-->~s', '', $content);
14
+
15
+ if (preg_match_all('~<script\s+[^<>]*src=["\']?([^"\']+)["\']?[^<>]*>\s*</script>~is', $content, $matches)) {
16
+ $files = $matches[1];
17
+ }
18
+
19
+ $files = array_values(array_unique($files));
20
+
21
+ return $files;
22
+ }
23
+
24
+ /**
25
+ * Extract CSS files from content
26
+ *
27
+ * @param string $content
28
+ * @return array
29
+ */
30
+ function w3_extract_css($content) {
31
+ $matches = null;
32
+ $files = array();
33
+
34
+ $content = preg_replace('~<!--.*?-->~s', '', $content);
35
+
36
+ if (preg_match_all('~<link\s+([^>]+)/?>(.*</link>)?~Uis', $content, $matches, PREG_SET_ORDER)) {
37
+ foreach ($matches as $match) {
38
+ $attrs = array();
39
+ $attr_matches = null;
40
+
41
+ if (preg_match_all('~(\w+)=["\']([^"\']*)["\']~', $match[1], $attr_matches, PREG_SET_ORDER)) {
42
+ foreach ($attr_matches as $attr_match) {
43
+ $attrs[$attr_match[1]] = trim($attr_match[2]);
44
+ }
45
+ }
46
+
47
+ if (isset($attrs['href']) && isset($attrs['rel']) && stristr($attrs['rel'], 'stylesheet') !== false && (!isset($attrs['media']) || stristr($attrs['media'], 'print') === false)) {
48
+ $files[] = $attrs['href'];
49
+ }
50
+ }
51
+ }
52
+
53
+ if (preg_match_all('~@import\s+(url\s*)?\(?["\']?\s*([^"\'\)\s]+)\s*["\']?\)?[^;]*;?~is', $content, $matches)) {
54
+ $files = array_merge($files, $matches[2]);
55
+ }
56
+
57
+ $files = array_values(array_unique($files));
58
+
59
+ return $files;
60
+ }
inc/functions/file.php ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Recursive creates directory
5
+ *
6
+ * @param string $path
7
+ * @param integer $mask
8
+ * @param string $curr_path
9
+ * @return boolean
10
+ */
11
+ function w3_mkdir($path, $mask = 0777, $curr_path = '') {
12
+ $path = w3_realpath($path);
13
+ $path = trim($path, '/');
14
+ $dirs = explode('/', $path);
15
+
16
+ foreach ($dirs as $dir) {
17
+ if ($dir == '') {
18
+ return false;
19
+ }
20
+
21
+ $curr_path .= ($curr_path == '' ? '' : '/') . $dir;
22
+
23
+ if (!@is_dir($curr_path)) {
24
+ if (!@mkdir($curr_path, $mask)) {
25
+ return false;
26
+ }
27
+ }
28
+ }
29
+
30
+ return true;
31
+ }
32
+
33
+ /**
34
+ * Recursive remove dir
35
+ *
36
+ * @param string $path
37
+ * @param array $exclude
38
+ * @param bool $remove
39
+ * @return void
40
+ */
41
+ function w3_rmdir($path, $exclude = array(), $remove = true) {
42
+ $dir = @opendir($path);
43
+
44
+ if ($dir) {
45
+ while (($entry = @readdir($dir)) !== false) {
46
+ if ($entry == '.' || $entry == '..') {
47
+ continue;
48
+ }
49
+
50
+ foreach ($exclude as $mask) {
51
+ if (fnmatch($mask, basename($entry))) {
52
+ continue 2;
53
+ }
54
+ }
55
+
56
+ $full_path = $path . DIRECTORY_SEPARATOR . $entry;
57
+
58
+ if (@is_dir($full_path)) {
59
+ w3_rmdir($full_path, $exclude);
60
+ } else {
61
+ @unlink($full_path);
62
+ }
63
+ }
64
+
65
+ @closedir($dir);
66
+
67
+ if ($remove) {
68
+ @rmdir($path);
69
+ }
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Recursive empty dir
75
+ *
76
+ * @param string $path
77
+ * @param array $exclude
78
+ * @return void
79
+ */
80
+ function w3_emptydir($path, $exclude = array()) {
81
+ w3_rmdir($path, $exclude, false);
82
+ }
83
+
84
+ /**
85
+ * Check if file is write-able
86
+ *
87
+ * @param string $file
88
+ * @return boolean
89
+ */
90
+ function w3_is_writable($file) {
91
+ $exists = file_exists($file);
92
+
93
+ $fp = @fopen($file, 'a');
94
+
95
+ if ($fp) {
96
+ fclose($fp);
97
+
98
+ if (!$exists) {
99
+ @unlink($file);
100
+ }
101
+
102
+ return true;
103
+ }
104
+
105
+ return false;
106
+ }
107
+
108
+ /**
109
+ * Cehck if dir is write-able
110
+ *
111
+ * @param string $dir
112
+ * @return boolean
113
+ */
114
+ function w3_is_writable_dir($dir) {
115
+ $file = $dir . '/' . uniqid(mt_rand()) . '.tmp';
116
+
117
+ return w3_is_writable($file);
118
+ }
119
+
120
+ /**
121
+ * Returns dirname of path
122
+ *
123
+ * @param string $path
124
+ * @return string
125
+ */
126
+ function w3_dirname($path) {
127
+ $dirname = dirname($path);
128
+
129
+ if ($dirname == '.' || $dirname == '/' || $dirname == '\\') {
130
+ $dirname = '';
131
+ }
132
+
133
+ return $dirname;
134
+ }
135
+
136
+ /**
137
+ * Returns open basedirs
138
+ *
139
+ * @return array
140
+ */
141
+ function w3_get_open_basedirs() {
142
+ $open_basedir_ini = ini_get('open_basedir');
143
+ $open_basedirs = (W3TC_WIN ? preg_split('~[;,]~', $open_basedir_ini) : explode(':', $open_basedir_ini));
144
+ $result = array();
145
+
146
+ foreach ($open_basedirs as $open_basedir) {
147
+ $open_basedir = trim($open_basedir);
148
+ if ($open_basedir != '') {
149
+ $result[] = w3_realpath($open_basedir);
150
+ }
151
+ }
152
+
153
+ return $result;
154
+ }
155
+
156
+ /**
157
+ * Checks if path is restricted by open_basedir
158
+ *
159
+ * @param string $path
160
+ * @return boolean
161
+ */
162
+ function w3_check_open_basedir($path) {
163
+ $path = w3_realpath($path);
164
+ $open_basedirs = w3_get_open_basedirs();
165
+
166
+ if (!count($open_basedirs)) {
167
+ return true;
168
+ }
169
+
170
+ foreach ($open_basedirs as $open_basedir) {
171
+ if (strstr($path, $open_basedir) !== false) {
172
+ return true;
173
+ }
174
+ }
175
+
176
+ return false;
177
+ }
inc/functions/http.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Sends HTTP request
5
+ *
6
+ * @param $url string
7
+ * @param $args array
8
+ * @return WP_Error|array
9
+ */
10
+ function w3_http_request($url, $args = array()) {
11
+ $args = array_merge(array(
12
+ 'user-agent' => W3TC_POWERED_BY
13
+ ), $args);
14
+
15
+ return wp_remote_request($url, $args);
16
+ }
17
+
18
+ /**
19
+ * Sends HTTP GET request
20
+ *
21
+ * @param string $url
22
+ * @param array $args
23
+ * @return array|WP_Error
24
+ */
25
+ function w3_http_get($url, $args = array()) {
26
+ $args = array_merge($args, array(
27
+ 'method' => 'GET'
28
+ ));
29
+
30
+ return w3_http_request($url, $args);
31
+ }
32
+
33
+ /**
34
+ * Downloads URL into a file
35
+ *
36
+ * @param string $url
37
+ * @param string $file
38
+ * @return boolean
39
+ */
40
+ function w3_download($url, $file) {
41
+ if (strpos($url, '//') === 0) {
42
+ $url = (w3_is_https() ? 'https:' : 'http:') . $url;
43
+ }
44
+
45
+ $response = w3_http_get($url);
46
+
47
+ if (!is_wp_error($response) && $response['response']['code'] == 200) {
48
+ return @file_put_contents($file, $response['body']);
49
+ }
50
+
51
+ return false;
52
+ }
53
+
54
+ /**
55
+ * Returns upload info
56
+ *
57
+ * @return array
58
+ */
59
+ function w3_upload_info() {
60
+ static $upload_info = null;
61
+
62
+ if ($upload_info === null) {
63
+ $upload_info = @wp_upload_dir();
64
+
65
+ if (empty($upload_info['error'])) {
66
+ $parse_url = @parse_url($upload_info['baseurl']);
67
+
68
+ if ($parse_url) {
69
+ $baseurlpath = (!empty($parse_url['path']) ? trim($parse_url['path'], '/') : '');
70
+ } else {
71
+ $baseurlpath = 'wp-content/uploads';
72
+ }
73
+
74
+ $upload_info['baseurlpath'] = '/' . $baseurlpath . '/';
75
+ } else {
76
+ $upload_info = false;
77
+ }
78
+ }
79
+
80
+ return $upload_info;
81
+ }
inc/functions/mime.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Returns file mime type
5
+ *
6
+ * @param string $file
7
+ * @return string
8
+ */
9
+ function w3_get_mime_type($file) {
10
+ static $cache = array();
11
+
12
+ if (!isset($cache[$file])) {
13
+ $mime_type = false;
14
+
15
+ /**
16
+ * Try to detect by extension (fast)
17
+ */
18
+ $mime_types = include W3TC_INC_DIR . '/mime/all.php';
19
+
20
+ foreach ($mime_types as $extension => $type) {
21
+ if (preg_match('~\.(' . $extension . ')$~i', $file)) {
22
+ $mime_type = $type;
23
+ break;
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Try to detect using file info function
29
+ */
30
+ if (!$mime_type && function_exists('finfo_open')) {
31
+ $finfo = @finfo_open(FILEINFO_MIME);
32
+
33
+ if (!$finfo) {
34
+ $finfo = @finfo_open(FILEINFO_MIME);
35
+ }
36
+
37
+ if ($finfo) {
38
+ $mime_type = @finfo_file($finfo, $file);
39
+
40
+ if ($mime_type) {
41
+ $extra_mime_type_info = strpos($mime_type, "; ");
42
+
43
+ if ($extra_mime_type_info) {
44
+ $mime_type = substr($mime_type, 0, $extra_mime_type_info);
45
+ }
46
+
47
+ if ($mime_type == 'application/octet-stream') {
48
+ $mime_type = false;
49
+ }
50
+ }
51
+
52
+ @finfo_close($finfo);
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Try to detect using mime type function
58
+ */
59
+ if (!$mime_type && function_exists('mime_content_type')) {
60
+ $mime_type = @mime_content_type($file);
61
+ }
62
+
63
+ /**
64
+ * If detection failed use default mime type
65
+ */
66
+ if (!$mime_type) {
67
+ $mime_type = 'application/octet-stream';
68
+ }
69
+
70
+ $cache[$file] = $mime_type;
71
+ }
72
+
73
+ return $cache[$file];
74
+ }
inc/{plugin.php → functions/plugin.php} RENAMED
@@ -40,10 +40,7 @@ function w3tc_do_action($action, $value = null) {
40
  * @return boolean
41
  */
42
  function w3tc_pgcache_flush() {
43
- require_once W3TC_LIB_W3_DIR . '/PgCache.php';
44
-
45
- $w3_pgcache = & W3_PgCache::instance();
46
-
47
  return $w3_pgcache->flush();
48
  }
49
 
@@ -54,9 +51,7 @@ function w3tc_pgcache_flush() {
54
  * @return boolean
55
  */
56
  function w3tc_pgcache_flush_post($post_id) {
57
- require_once W3TC_LIB_W3_DIR . '/PgCache.php';
58
-
59
- $w3_pgcache = & W3_PgCache::instance();
60
 
61
  return $w3_pgcache->flush_post($post_id);
62
  }
@@ -69,7 +64,7 @@ function w3tc_pgcache_flush_post($post_id) {
69
  function w3tc_dbcache_flush() {
70
  require_once W3TC_LIB_W3_DIR . '/Db.php';
71
 
72
- $w3_db = & W3_Db::instance();
73
 
74
  return $w3_db->flush_cache();
75
  }
@@ -80,9 +75,7 @@ function w3tc_dbcache_flush() {
80
  * @return boolean
81
  */
82
  function w3tc_minify_flush() {
83
- require_once W3TC_LIB_W3_DIR . '/Minify.php';
84
-
85
- $w3_minify = & W3_Minify::instance();
86
 
87
  return $w3_minify->flush();
88
  }
@@ -93,10 +86,7 @@ function w3tc_minify_flush() {
93
  * @return boolean
94
  */
95
  function w3tc_objectcache_flush() {
96
- require_once W3TC_LIB_W3_DIR . '/ObjectCache.php';
97
-
98
- $w3_objectcache = & W3_ObjectCache::instance();
99
-
100
  return $w3_objectcache->flush();
101
  }
102
 
@@ -107,9 +97,7 @@ function w3tc_objectcache_flush() {
107
  * @retun void
108
  */
109
  function w3tc_minify_script_group($location) {
110
- require_once W3TC_LIB_W3_DIR . '/Plugin/Minify.php';
111
-
112
- $w3_plugin_minify = & W3_Plugin_Minify::instance();
113
  $w3_plugin_minify->printed_scripts[] = $location;
114
 
115
  echo $w3_plugin_minify->get_script_group($location);
@@ -122,9 +110,7 @@ function w3tc_minify_script_group($location) {
122
  * @retun void
123
  */
124
  function w3tc_minify_style_group($location) {
125
- require_once W3TC_LIB_W3_DIR . '/Plugin/Minify.php';
126
-
127
- $w3_plugin_minify = & W3_Plugin_Minify::instance();
128
  $w3_plugin_minify->printed_styles[] = $location;
129
 
130
  echo $w3_plugin_minify->get_style_group($location);
@@ -138,10 +124,7 @@ function w3tc_minify_style_group($location) {
138
  * @return void
139
  */
140
  function w3tc_minify_script_custom($files, $blocking = true) {
141
- require_once W3TC_LIB_W3_DIR . '/Plugin/Minify.php';
142
-
143
- $w3_plugin_minify = & W3_Plugin_Minify::instance();
144
-
145
  echo $w3_plugin_minify->get_script_custom($files, $blocking);
146
  }
147
 
@@ -153,9 +136,6 @@ function w3tc_minify_script_custom($files, $blocking = true) {
153
  * @return void
154
  */
155
  function w3tc_minify_style_custom($files, $import = false) {
156
- require_once W3TC_LIB_W3_DIR . '/Plugin/Minify.php';
157
-
158
- $w3_plugin_minify = & W3_Plugin_Minify::instance();
159
-
160
  echo $w3_plugin_minify->get_style_custom($files, $import);
161
  }
40
  * @return boolean
41
  */
42
  function w3tc_pgcache_flush() {
43
+ $w3_pgcache = & w3_instance('W3_PgCacheFlush');
 
 
 
44
  return $w3_pgcache->flush();
45
  }
46
 
51
  * @return boolean
52
  */
53
  function w3tc_pgcache_flush_post($post_id) {
54
+ $w3_pgcache = & w3_instance('W3_PgCacheFlush');
 
 
55
 
56
  return $w3_pgcache->flush_post($post_id);
57
  }
64
  function w3tc_dbcache_flush() {
65
  require_once W3TC_LIB_W3_DIR . '/Db.php';
66
 
67
+ @$w3_db = & W3_Db::instance();
68
 
69
  return $w3_db->flush_cache();
70
  }
75
  * @return boolean
76
  */
77
  function w3tc_minify_flush() {
78
+ $w3_minify = & w3_instance('W3_Minify');
 
 
79
 
80
  return $w3_minify->flush();
81
  }
86
  * @return boolean
87
  */
88
  function w3tc_objectcache_flush() {
89
+ $w3_objectcache = & w3_instance('W3_ObjectCache');
 
 
 
90
  return $w3_objectcache->flush();
91
  }
92
 
97
  * @retun void
98
  */
99
  function w3tc_minify_script_group($location) {
100
+ $w3_plugin_minify = & w3_instance('W3_Plugin_Minify');
 
 
101
  $w3_plugin_minify->printed_scripts[] = $location;
102
 
103
  echo $w3_plugin_minify->get_script_group($location);
110
  * @retun void
111
  */
112
  function w3tc_minify_style_group($location) {
113
+ $w3_plugin_minify = & w3_instance('W3_Plugin_Minify');
 
 
114
  $w3_plugin_minify->printed_styles[] = $location;
115
 
116
  echo $w3_plugin_minify->get_style_group($location);
124
  * @return void
125
  */
126
  function w3tc_minify_script_custom($files, $blocking = true) {
127
+ $w3_plugin_minify = & w3_instance('W3_Plugin_Minify');
 
 
 
128
  echo $w3_plugin_minify->get_script_custom($files, $blocking);
129
  }
130
 
136
  * @return void
137
  */
138
  function w3tc_minify_style_custom($files, $import = false) {
139
+ $w3_plugin_minify = & w3_instance('W3_Plugin_Minify');
 
 
 
140
  echo $w3_plugin_minify->get_style_custom($files, $import);
141
  }
inc/functions/rule.php ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Check if WP permalink directives exists
5
+ *
6
+ * @return boolean
7
+ */
8
+ function w3_is_permalink_rules() {
9
+ if ((w3_is_apache() || w3_is_litespeed()) && !w3_is_network()) {
10
+ $path = w3_get_home_root() . '/.htaccess';
11
+
12
+ return (($data = @file_get_contents($path)) && strstr($data, W3TC_MARKER_BEGIN_WORDPRESS) !== false);
13
+ }
14
+
15
+ return true;
16
+ }
17
+
18
+ /**
19
+ * Returns nginx rules path
20
+ *
21
+ * @return string
22
+ */
23
+ function w3_get_nginx_rules_path() {
24
+ $config = & w3_instance('W3_Config');
25
+
26
+ $path = $config->get_string('config.path');
27
+
28
+ if (!$path) {
29
+ $path = w3_get_document_root() . '/nginx.conf';
30
+ }
31
+
32
+ return $path;
33
+ }
34
+
35
+ /**
36
+ * Returns path of pagecache core rules file
37
+ *
38
+ * @return string
39
+ */
40
+ function w3_get_pgcache_rules_core_path() {
41
+ switch (true) {
42
+ case w3_is_apache():
43
+ case w3_is_litespeed():
44
+ return w3_get_home_root() . '/.htaccess';
45
+
46
+ case w3_is_nginx():
47
+ return w3_get_nginx_rules_path();
48
+ }
49
+
50
+ return false;
51
+ }
52
+
53
+ /**
54
+ * Returns path of pgcache cache rules file
55
+ *
56
+ * @return string
57
+ */
58
+ function w3_get_pgcache_rules_cache_path() {
59
+ switch (true) {
60
+ case w3_is_apache():
61
+ case w3_is_litespeed():
62
+ return W3TC_CACHE_FILE_PGCACHE_DIR . '/.htaccess';
63
+
64
+ case w3_is_nginx():
65
+ return w3_get_nginx_rules_path();
66
+ }
67
+
68
+ return false;
69
+ }
70
+
71
+ /**
72
+ * Returns path of browsercache cache rules file
73
+ *
74
+ * @return string
75
+ */
76
+ function w3_get_browsercache_rules_cache_path() {
77
+ switch (true) {
78
+ case w3_is_apache():
79
+ case w3_is_litespeed():
80
+ return w3_get_home_root() . '/.htaccess';
81
+
82
+ case w3_is_nginx():
83
+ return w3_get_nginx_rules_path();
84
+ }
85
+
86
+ return false;
87
+ }
88
+
89
+ /**
90
+ * Returns path of browsercache no404wp rules file
91
+ *
92
+ * @return string
93
+ */
94
+ function w3_get_browsercache_rules_no404wp_path() {
95
+ switch (true) {
96
+ case w3_is_apache():
97
+ case w3_is_litespeed():
98
+ return w3_get_home_root() . '/.htaccess';
99
+
100
+ case w3_is_nginx():
101
+ return w3_get_nginx_rules_path();
102
+ }
103
+
104
+ return false;
105
+ }
106
+
107
+ /**
108
+ * Returns path of minify rules file
109
+ *
110
+ * @return string
111
+ */
112
+ function w3_get_minify_rules_core_path() {
113
+ switch (true) {
114
+ case w3_is_apache():
115
+ case w3_is_litespeed():
116
+ return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess';
117
+
118
+ case w3_is_nginx():
119
+ return w3_get_nginx_rules_path();
120
+ }
121
+
122
+ return false;
123
+ }
124
+
125
+ /**
126
+ * Returns path of minify rules file
127
+ *
128
+ * @return string
129
+ */
130
+ function w3_get_minify_rules_cache_path() {
131
+ switch (true) {
132
+ case w3_is_apache():
133
+ case w3_is_litespeed():
134
+ return W3TC_CACHE_FILE_MINIFY_DIR . '/.htaccess';
135
+
136
+ case w3_is_nginx():
137
+ return w3_get_nginx_rules_path();
138
+ }
139
+
140
+ return false;
141
+ }
142
+
143
+ /**
144
+ * Returns path of minify rules file
145
+ *
146
+ * @return string
147
+ */
148
+ function w3_get_cdn_rules_path() {
149
+ switch (true) {
150
+ case w3_is_apache():
151
+ case w3_is_litespeed():
152
+ return '.htaccess';
153
+
154
+ case w3_is_nginx():
155
+ return 'nginx.conf';
156
+ }
157
+
158
+ return false;
159
+ }
160
+
161
+ /**
162
+ * Returns true if we can modify rules
163
+ *
164
+ * @param string $path
165
+ * @return boolean
166
+ */
167
+ function w3_can_modify_rules($path) {
168
+ if (w3_is_network()) {
169
+ if (w3_is_apache() || w3_is_litespeed()) {
170
+ switch ($path) {
171
+ case w3_get_pgcache_rules_cache_path():
172
+ case w3_get_minify_rules_core_path():
173
+ case w3_get_minify_rules_cache_path():
174
+ return true;
175
+ }
176
+ }
177
+
178
+ return false;
179
+ }
180
+
181
+ return true;
182
+ }
183
+
184
+ /**
185
+ * Trim rules
186
+ *
187
+ * @param string $rules
188
+ * @return string
189
+ */
190
+ function w3_trim_rules($rules) {
191
+ $rules = trim($rules);
192
+
193
+ if ($rules != '') {
194
+ $rules .= "\n";
195
+ }
196
+
197
+ return $rules;
198
+ }
199
+
200
+ /**
201
+ * Cleanup rewrite rules
202
+ *
203
+ * @param string $rules
204
+ * @return string
205
+ */
206
+ function w3_clean_rules($rules) {
207
+ $rules = preg_replace('~[\r\n]+~', "\n", $rules);
208
+ $rules = preg_replace('~^\s+~m', '', $rules);
209
+ $rules = w3_trim_rules($rules);
210
+
211
+ return $rules;
212
+ }
213
+
214
+ /**
215
+ * Erases text from start to end
216
+ *
217
+ * @param string $rules
218
+ * @param string $start
219
+ * @param string $end
220
+ * @return string
221
+ */
222
+ function w3_erase_rules($rules, $start, $end) {
223
+ $rules = preg_replace('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", '', $rules);
224
+ $rules = w3_trim_rules($rules);
225
+
226
+ return $rules;
227
+ }
228
+
229
+ /**
230
+ * Check if rules exist
231
+ *
232
+ * @param string $rules
233
+ * @param string $start
234
+ * @param string $end
235
+ * @return int
236
+ */
237
+ function w3_has_rules($rules, $start, $end) {
238
+ return preg_match('~' . w3_preg_quote($start) . "\n.*?" . w3_preg_quote($end) . "\n*~s", $rules);
239
+ }
inc/functions/url.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Formats URL
5
+ *
6
+ * @param string $url
7
+ * @param array $params
8
+ * @param boolean $skip_empty
9
+ * @param string $separator
10
+ * @return string
11
+ */
12
+ function w3_url_format($url = '', $params = array(), $skip_empty = false, $separator = '&') {
13
+ if ($url != '') {
14
+ $parse_url = @parse_url($url);
15
+ $url = '';
16
+
17
+ if (!empty($parse_url['scheme'])) {
18
+ $url .= $parse_url['scheme'] . '://';
19
+
20
+ if (!empty($parse_url['user'])) {
21
+ $url .= $parse_url['user'];
22
+
23
+ if (!empty($parse_url['pass'])) {
24
+ $url .= ':' . $parse_url['pass'];
25
+ }
26
+ }
27
+
28
+ if (!empty($parse_url['host'])) {
29
+ $url .= $parse_url['host'];
30
+ }
31
+
32
+ if (!empty($parse_url['port']) && $parse_url['port'] != 80) {
33
+ $url .= ':' . (int) $parse_url['port'];
34
+ }
35
+ }
36
+
37
+ if (!empty($parse_url['path'])) {
38
+ $url .= $parse_url['path'];
39
+ }
40
+
41
+ if (!empty($parse_url['query'])) {
42
+ $old_params = array();
43
+ parse_str($parse_url['query'], $old_params);
44
+
45
+ $params = array_merge($old_params, $params);
46
+ }
47
+
48
+ $query = w3_url_query($params);
49
+
50
+ if ($query != '') {
51
+ $url .= '?' . $query;
52
+ }
53
+
54
+ if (!empty($parse_url['fragment'])) {
55
+ $url .= '#' . $parse_url['fragment'];
56
+ }
57
+ } else {
58
+ $query = w3_url_query($params, $skip_empty, $separator);
59
+
60
+ if ($query != '') {
61
+ $url = '?' . $query;
62
+ }
63
+ }
64
+
65
+ return $url;
66
+ }
67
+
68
+ /**
69
+ * Formats query string
70
+ *
71
+ * @param array $params
72
+ * @param boolean $skip_empty
73
+ * @param string $separator
74
+ * @return string
75
+ */
76
+ function w3_url_query($params = array(), $skip_empty = false, $separator = '&') {
77
+ $str = '';
78
+ static $stack = array();
79
+
80
+ foreach ((array) $params as $key => $value) {
81
+ if ($skip_empty === true && empty($value)) {
82
+ continue;
83
+ }
84
+
85
+ array_push($stack, $key);
86
+
87
+ if (is_array($value)) {
88
+ if (count($value)) {
89
+ $str .= ($str != '' ? '&' : '') . w3_url_query($value, $skip_empty, $key);
90
+ }
91
+ } else {
92
+ $name = '';
93
+ foreach ($stack as $key) {
94
+ $name .= ($name != '' ? '[' . $key . ']' : $key);
95
+ }
96
+ $str .= ($str != '' ? $separator : '') . $name . '=' . rawurlencode($value);
97
+ }
98
+
99
+ array_pop($stack);
100
+ }
101
+
102
+ return $str;
103
+ }
inc/index.html ADDED
File without changes
inc/js/widget.js DELETED
@@ -1,11 +0,0 @@
1
- jQuery(function() {
2
- jQuery('.w3tc-widget-ps-view-all').click(function() {
3
- window.open('admin.php?page=w3tc_general&w3tc_action=pagespeed_results', 'pagespeed_results', 'width=800,height=600,status=no,toolbar=no,menubar=no,scrollbars=yes');
4
-
5
- return false;
6
- });
7
-
8
- jQuery('.w3tc-widget-ps-refresh').click(function() {
9
- document.location.href = 'index.php?w3tc_widget_pagespeed_force=1';
10
- });
11
- });
 
 
 
 
 
 
 
 
 
 
 
inc/lightbox/{cdn_s3_bucket_location.phtml → cdn_s3_bucket_location.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <h3>Select bucket location</h3>
2
 
3
  <p>
@@ -10,7 +11,7 @@
10
  </label>
11
  </p>
12
  <p>
13
- <input id="cdn_create_container" class="button-primary cdn_<?php echo $type; ?>" type="button" value="Create bucket" />
14
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
15
  </p>
16
  <p style="text-align: center;">
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <h3>Select bucket location</h3>
3
 
4
  <p>
11
  </label>
12
  </p>
13
  <p>
14
+ <input id="cdn_create_container" class="button-primary {type: '<?php echo $type; ?>', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create bucket" />
15
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
16
  </p>
17
  <p style="text-align: center;">
inc/lightbox/index.html ADDED
File without changes
inc/lightbox/{minify_recommendations.phtml → minify_recommendations.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <h3>Minify Help Wizard</h3>
2
 
3
  <p>
@@ -26,7 +27,7 @@
26
  <th>Template:</th>
27
  <th colspan="2">Embed Location:</th>
28
  </tr>
29
- <tr<?php if (isset($checked_js[$js_group][$js_file])): ?> class="minify-files-exists"<?php endif; ?>>
30
  <td class="minify-files-add">
31
  <input type="checkbox" name="recom_js_useit" value="1"<?php checked(isset($checked_js[$js_group][$js_file]), true); ?> />
32
  </td>
@@ -86,7 +87,7 @@
86
  <th>File URI:</th>
87
  <th colspan="2">Template:</th>
88
  </tr>
89
- <tr<?php if (isset($checked_css[$css_group][$css_file])): ?> class="minify-files-exists"<?php endif; ?>>
90
  <td class="minify-files-add">
91
  <input type="checkbox" name="recom_css_useit" value="1"<?php checked(isset($checked_css[$css_group][$css_file]), true); ?> />
92
  </td>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <h3>Minify Help Wizard</h3>
3
 
4
  <p>
27
  <th>Template:</th>
28
  <th colspan="2">Embed Location:</th>
29
  </tr>
30
+ <tr>
31
  <td class="minify-files-add">
32
  <input type="checkbox" name="recom_js_useit" value="1"<?php checked(isset($checked_js[$js_group][$js_file]), true); ?> />
33
  </td>
87
  <th>File URI:</th>
88
  <th colspan="2">Template:</th>
89
  </tr>
90
+ <tr>
91
  <td class="minify-files-add">
92
  <input type="checkbox" name="recom_css_useit" value="1"<?php checked(isset($checked_css[$css_group][$css_file]), true); ?> />
93
  </td>
inc/lightbox/{self_test.phtml → self_test.php} RENAMED
@@ -1,3 +1,12 @@
 
 
 
 
 
 
 
 
 
1
  <h3>Compatibility Test</h3>
2
 
3
  <fieldset>
@@ -171,6 +180,15 @@
171
  <?php endif; ?>
172
  </li>
173
 
 
 
 
 
 
 
 
 
 
174
  <?php
175
  if (w3_is_apache()):
176
  $apache_modules = (function_exists('apache_get_modules') ? apache_get_modules() : false);
1
+ <?php
2
+
3
+ if (!defined('W3TC'))
4
+ die();
5
+
6
+ require_once W3TC_INC_DIR . '/functions/file.php';
7
+ require_once W3TC_INC_DIR . '/functions/rule.php';
8
+
9
+ ?>
10
  <h3>Compatibility Test</h3>
11
 
12
  <fieldset>
180
  <?php endif; ?>
181
  </li>
182
 
183
+ <li>
184
+ set_time_limit:
185
+ <?php if (function_exists('set_time_limit')): ?>
186
+ <code>Available</code>
187
+ <?php else: ?>
188
+ <code>Not available</code>
189
+ <?php endif; ?>
190
+ </li>
191
+
192
  <?php
193
  if (w3_is_apache()):
194
  $apache_modules = (function_exists('apache_get_modules') ? apache_get_modules() : false);
inc/lightbox/{support_us.phtml → support_us.php} RENAMED
@@ -1,8 +1,9 @@
 
1
  <h3>Support Us</h3>
2
 
3
  <p>We noticed you've been using W3 Total cache for at least 30 days, would you like to help us improve WordPress?</p>
4
 
5
- <form action="admin.php?page=<?php echo $this->_page; ?>&amp;save_support_us" method="post">
6
  <p>
7
  <label>
8
  Link to us:
@@ -13,13 +14,14 @@
13
  <?php endforeach; ?>
14
  </select>
15
  </label>, tell your friends with a <input type="button" class="button button-tweet" value="tweet" />
16
- (<input type="hidden" name="tweeted" value="0" /><label><input type="checkbox" name="tweeted" value="1"<?php checked($this->_config->get_boolean('common.tweeted', true)); ?> /> I've tweeted</label>)
17
  and give us a great <input type="button" class="button button-rating" value="rating" />.
18
  </p>
19
-
20
  <div style="text-align: center;">
21
  <h3>THANK YOU!</h3>
22
  <p>
 
23
  <input type="submit" class="button-primary" value="Save and close"> or
24
  <?php echo $this->button_hide_note('Don\'t show this message again', 'support_us'); ?>
25
  </p>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <h3>Support Us</h3>
3
 
4
  <p>We noticed you've been using W3 Total cache for at least 30 days, would you like to help us improve WordPress?</p>
5
 
6
+ <form action="admin.php?page=<?php echo $this->_page; ?>&amp;w3tc_save_support_us" method="post">
7
  <p>
8
  <label>
9
  Link to us:
14
  <?php endforeach; ?>
15
  </select>
16
  </label>, tell your friends with a <input type="button" class="button button-tweet" value="tweet" />
17
+ (<input type="hidden" name="tweeted" value="0" /><label><input type="checkbox" name="tweeted" value="1"<?php checked($this->_config->get_boolean('common.tweeted', true)); ?> /> I've tweeted</label>)
18
  and give us a great <input type="button" class="button button-rating" value="rating" />.
19
  </p>
20
+
21
  <div style="text-align: center;">
22
  <h3>THANK YOU!</h3>
23
  <p>
24
+ <?php echo $this->nonce_field('w3tc'); ?>
25
  <input type="submit" class="button-primary" value="Save and close"> or
26
  <?php echo $this->button_hide_note('Don\'t show this message again', 'support_us'); ?>
27
  </p>
inc/mime/all.php CHANGED
@@ -202,6 +202,7 @@ return array(
202
  'hpid' => 'application/vnd.hp-hpid',
203
  'hps' => 'application/vnd.hp-hps',
204
  'hqx' => 'application/mac-binhex40',
 
205
  'htke' => 'application/vnd.kenameaapp',
206
  'html|htm' => 'text/html',
207
  'hvd' => 'application/vnd.yamaha.hv-dic',
202
  'hpid' => 'application/vnd.hp-hpid',
203
  'hps' => 'application/vnd.hp-hps',
204
  'hqx' => 'application/mac-binhex40',
205
+ 'htc' => 'text/x-component',
206
  'htke' => 'application/vnd.kenameaapp',
207
  'html|htm' => 'text/html',
208
  'hvd' => 'application/vnd.yamaha.hv-dic',
inc/mime/cssjs.php CHANGED
@@ -5,5 +5,6 @@
5
  */
6
  return array(
7
  'css' => 'text/css',
8
- 'js' => 'application/x-javascript'
 
9
  );
5
  */
6
  return array(
7
  'css' => 'text/css',
8
+ 'js' => 'application/x-javascript',
9
+ 'htc' => 'text/x-component'
10
  );
inc/mime/index.html ADDED
File without changes
inc/mime/other.php CHANGED
@@ -10,7 +10,8 @@ return array(
10
  'class' => 'application/java',
11
  'divx' => 'video/divx',
12
  'doc|docx' => 'application/msword',
13
- 'exe' => 'application/x-msdownload',
 
14
  'gif' => 'image/gif',
15
  'gz|gzip' => 'application/x-gzip',
16
  'ico' => 'image/x-icon',
@@ -22,22 +23,25 @@ return array(
22
  'mp4|m4v' => 'video/mp4',
23
  'mpeg|mpg|mpe' => 'video/mpeg',
24
  'mpp' => 'application/vnd.ms-project',
25
- 'odb' => 'application/vnd.oasis.opendocument.database',
26
- 'odc' => 'application/vnd.oasis.opendocument.chart',
27
- 'odf' => 'application/vnd.oasis.opendocument.formula',
28
- 'odg' => 'application/vnd.oasis.opendocument.graphics',
29
- 'odp' => 'application/vnd.oasis.opendocument.presentation',
30
- 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
31
- 'odt' => 'application/vnd.oasis.opendocument.text',
 
32
  'ogg' => 'audio/ogg',
33
  'pdf' => 'application/pdf',
34
  'png' => 'image/png',
35
  'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
36
  'ra|ram' => 'audio/x-realaudio',
37
- 'swf' => 'application/x-shockwave-flash',
38
- 'tar' => 'application/x-tar',
 
39
  'tif|tiff' => 'image/tiff',
40
- 'wav' => 'audio/wav',
 
41
  'wma' => 'audio/wma',
42
  'wri' => 'application/vnd.ms-write',
43
  'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
10
  'class' => 'application/java',
11
  'divx' => 'video/divx',
12
  'doc|docx' => 'application/msword',
13
+ 'eot' => 'application/vnd.ms-fontobject',
14
+ 'exe' => 'application/x-msdownload',
15
  'gif' => 'image/gif',
16
  'gz|gzip' => 'application/x-gzip',
17
  'ico' => 'image/x-icon',
23
  'mp4|m4v' => 'video/mp4',
24
  'mpeg|mpg|mpe' => 'video/mpeg',
25
  'mpp' => 'application/vnd.ms-project',
26
+ 'otf' => 'application/x-font-otf',
27
+ 'odb' => 'application/vnd.oasis.opendocument.database',
28
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
29
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
30
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
31
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
32
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
33
+ 'odt' => 'application/vnd.oasis.opendocument.text',
34
  'ogg' => 'audio/ogg',
35
  'pdf' => 'application/pdf',
36
  'png' => 'image/png',
37
  'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
38
  'ra|ram' => 'audio/x-realaudio',
39
+ 'svg|svgz' => 'image/svg+xml',
40
+ 'swf' => 'application/x-shockwave-flash',
41
+ 'tar' => 'application/x-tar',
42
  'tif|tiff' => 'image/tiff',
43
+ 'ttf|ttc' => 'application/x-font-ttf',
44
+ 'wav' => 'audio/wav',
45
  'wma' => 'audio/wma',
46
  'wri' => 'application/vnd.ms-write',
47
  'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
inc/options/{about.phtml → about.php} RENAMED
@@ -1,8 +1,9 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <div id="about">
4
  <p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or opcode caching and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following features and benefits:</p>
5
-
6
  <ul>
7
  <li>Improved Google search engine ranking</li>
8
  <li>Increased visitor time on site</li>
@@ -23,13 +24,13 @@
23
  <li>JavaScript embedding group and location management</li>
24
  <li>Import post attachments directly into the Media Library (and <acronym title="Content Delivery Network">CDN</acronym>)</li>
25
  </ul>
26
-
27
  <p>Your users have less data to download, you can now serve more visitors at once without upgrading your hardware and you don't have to change how you do anything; just set it and forget it.</p>
28
-
29
  <h4>Who do I thank for all of this?</h4>
30
-
31
  <p>It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
32
-
33
  <ul>
34
  <li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
35
  <li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
@@ -44,8 +45,8 @@
44
  <li><a href="http://eaccelerator.net/" target="_blank">Bart Vanbraban</a></li>
45
  <li><a href="http://xcache.lighttpd.net/" target="_blank">mOo</a></li>
46
  </ul>
47
-
48
  <p>Please reach out to all of these people and support their projects if you're so inclined.</p>
49
  </div>
50
 
51
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <div id="about">
5
  <p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or opcode caching and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following features and benefits:</p>
6
+
7
  <ul>
8
  <li>Improved Google search engine ranking</li>
9
  <li>Increased visitor time on site</li>
24
  <li>JavaScript embedding group and location management</li>
25
  <li>Import post attachments directly into the Media Library (and <acronym title="Content Delivery Network">CDN</acronym>)</li>
26
  </ul>
27
+
28
  <p>Your users have less data to download, you can now serve more visitors at once without upgrading your hardware and you don't have to change how you do anything; just set it and forget it.</p>
29
+
30
  <h4>Who do I thank for all of this?</h4>
31
+
32
  <p>It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
33
+
34
  <ul>
35
  <li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
36
  <li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
45
  <li><a href="http://eaccelerator.net/" target="_blank">Bart Vanbraban</a></li>
46
  <li><a href="http://xcache.lighttpd.net/" target="_blank">mOo</a></li>
47
  </ul>
48
+
49
  <p>Please reach out to all of these people and support their projects if you're so inclined.</p>
50
  </div>
51
 
52
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{browsercache.phtml → browsercache.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <p>
4
  Browser caching is currently <span class="w3tc-<?php if ($browsercache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
@@ -63,13 +64,14 @@
63
  </table>
64
 
65
  <p class="submit">
66
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
67
  </p>
68
  <?php echo $this->postbox_footer(); ?>
69
-
70
- <?php echo $this->postbox_header('Cascading Style Sheets &amp; JavaScript'); ?>
71
- <p>Specify browser cache policy for cascading style sheets and JavaScript files.</p>
72
-
73
  <table class="form-table">
74
  <tr>
75
  <th colspan="2">
@@ -83,7 +85,7 @@
83
  <label for="browsercache_cssjs_lifetime">Expires header lifetime:</label>
84
  </th>
85
  <td>
86
- <input id="browsercache_cssjs_lifetime" type="text" name="browsercache.cssjs.lifetime" value="<?php echo $this->_config->get_integer('browsercache.cssjs.lifetime'); ?>" size="8" /> seconds
87
  </td>
88
  </tr>
89
  <tr>
@@ -95,7 +97,7 @@
95
  </tr>
96
  <tr>
97
  <th>
98
- <label for="browsercache_cssjs_cache_policy">Cache Control policy:</label>
99
  </th>
100
  <td>
101
  <select id="browsercache_cssjs_cache_policy" name="browsercache.cssjs.cache.policy">
@@ -139,13 +141,14 @@
139
  </table>
140
 
141
  <p class="submit">
142
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
143
  </p>
144
  <?php echo $this->postbox_footer(); ?>
145
-
146
- <?php echo $this->postbox_header('<acronym title="Hypertext Markup Language">HTML</acronym>'); ?>
147
  <p>Specify browser cache policy for posts, pages, feeds and text-based files.</p>
148
-
149
  <table class="form-table">
150
  <tr>
151
  <th colspan="2">
@@ -159,7 +162,7 @@
159
  <label for="browsercache_html_lifetime">Expires header lifetime:</label>
160
  </th>
161
  <td>
162
- <input id="browsercache_html_lifetime" type="text" name="browsercache.html.lifetime" value="<?php echo $this->_config->get_integer('browsercache.html.lifetime'); ?>" size="8" /> seconds
163
  </td>
164
  </tr>
165
  <tr>
@@ -171,7 +174,7 @@
171
  </tr>
172
  <tr>
173
  <th>
174
- <label for="browsercache_html_cache_policy">Cache Control policy:</label>
175
  </th>
176
  <td>
177
  <select id="browsercache_html_cache_policy" name="browsercache.html.cache.policy">
@@ -208,10 +211,11 @@
208
  </table>
209
 
210
  <p class="submit">
211
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
212
  </p>
213
  <?php echo $this->postbox_footer(); ?>
214
-
215
  <?php echo $this->postbox_header('Media &amp; Other Files'); ?>
216
  <table class="form-table">
217
  <tr>
@@ -226,7 +230,7 @@
226
  <label for="browsercache_other_lifetime">Expires header lifetime:</label>
227
  </th>
228
  <td>
229
- <input id="browsercache_other_lifetime" type="text" name="browsercache.other.lifetime" value="<?php echo $this->_config->get_integer('browsercache.other.lifetime'); ?>" size="8" /> seconds
230
  </td>
231
  </tr>
232
  <tr>
@@ -238,7 +242,7 @@
238
  </tr>
239
  <tr>
240
  <th>
241
- <label for="browsercache_other_cache_policy">Cache Control policy:</label>
242
  </th>
243
  <td>
244
  <select id="browsercache_other_cache_policy" name="browsercache.other.cache.policy">
@@ -282,10 +286,11 @@
282
  </table>
283
 
284
  <p class="submit">
285
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
286
  </p>
287
  <?php echo $this->postbox_footer(); ?>
288
  </div>
289
  </form>
290
 
291
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <p>
5
  Browser caching is currently <span class="w3tc-<?php if ($browsercache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
64
  </table>
65
 
66
  <p class="submit">
67
+ <?php echo $this->nonce_field('w3tc'); ?>
68
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
69
  </p>
70
  <?php echo $this->postbox_footer(); ?>
71
+
72
+ <?php echo $this->postbox_header('<acronym title="Cascading Style Sheet">CSS</acronym> &amp; <acronym title="JavaScript">JS</acronym>'); ?>
73
+ <p>Specify browser cache policy for Cascading Style Sheets and JavaScript files.</p>
74
+
75
  <table class="form-table">
76
  <tr>
77
  <th colspan="2">
85
  <label for="browsercache_cssjs_lifetime">Expires header lifetime:</label>
86
  </th>
87
  <td>
88
+ <input id="browsercache_cssjs_lifetime" type="text" name="browsercache.cssjs.lifetime" value="<?php echo $this->_config->get_integer('browsercache.cssjs.lifetime'); ?>" size="8" /> seconds
89
  </td>
90
  </tr>
91
  <tr>
97
  </tr>
98
  <tr>
99
  <th>
100
+ <label for="browsercache_cssjs_cache_policy">Cache Control policy:</label>
101
  </th>
102
  <td>
103
  <select id="browsercache_cssjs_cache_policy" name="browsercache.cssjs.cache.policy">
141
  </table>
142
 
143
  <p class="submit">
144
+ <?php echo $this->nonce_field('w3tc'); ?>
145
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
146
  </p>
147
  <?php echo $this->postbox_footer(); ?>
148
+
149
+ <?php echo $this->postbox_header('<acronym title="Hypertext Markup Language">HTML</acronym> &amp; <acronym title="Extensible Markup Language">XML</acronym>'); ?>
150
  <p>Specify browser cache policy for posts, pages, feeds and text-based files.</p>
151
+
152
  <table class="form-table">
153
  <tr>
154
  <th colspan="2">
162
  <label for="browsercache_html_lifetime">Expires header lifetime:</label>
163
  </th>
164
  <td>
165
+ <input id="browsercache_html_lifetime" type="text" name="browsercache.html.lifetime" value="<?php echo $this->_config->get_integer('browsercache.html.lifetime'); ?>" size="8" /> seconds
166
  </td>
167
  </tr>
168
  <tr>
174
  </tr>
175
  <tr>
176
  <th>
177
+ <label for="browsercache_html_cache_policy">Cache Control policy:</label>
178
  </th>
179
  <td>
180
  <select id="browsercache_html_cache_policy" name="browsercache.html.cache.policy">
211
  </table>
212
 
213
  <p class="submit">
214
+ <?php echo $this->nonce_field('w3tc'); ?>
215
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
216
  </p>
217
  <?php echo $this->postbox_footer(); ?>
218
+
219
  <?php echo $this->postbox_header('Media &amp; Other Files'); ?>
220
  <table class="form-table">
221
  <tr>
230
  <label for="browsercache_other_lifetime">Expires header lifetime:</label>
231
  </th>
232
  <td>
233
+ <input id="browsercache_other_lifetime" type="text" name="browsercache.other.lifetime" value="<?php echo $this->_config->get_integer('browsercache.other.lifetime'); ?>" size="8" /> seconds
234
  </td>
235
  </tr>
236
  <tr>
242
  </tr>
243
  <tr>
244
  <th>
245
+ <label for="browsercache_other_cache_policy">Cache Control policy:</label>
246
  </th>
247
  <td>
248
  <select id="browsercache_other_cache_policy" name="browsercache.other.cache.policy">
286
  </table>
287
 
288
  <p class="submit">
289
+ <?php echo $this->nonce_field('w3tc'); ?>
290
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
291
  </p>
292
  <?php echo $this->postbox_footer(); ?>
293
  </div>
294
  </form>
295
 
296
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{cdn.phtml → cdn.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <p>
4
  Content Delivery Network support via
@@ -8,21 +9,21 @@
8
 
9
  <?php if ($cdn_mirror): ?>
10
  <p>
11
- Maximize <acronym title="Content Delivery Network">CDN</acronym> usage by <input id="cdn_rename_domain" class="button" type="button" value="modify attachment URLs" /> or
12
- <input id="cdn_import_library" class="button" type="button" value="importing attachments into the Media Library" />.
13
  <?php if (w3_can_cdn_purge($cdn_engine)): ?>
14
- <input id="cdn_purge" class="button" type="button" value="Purge" /> objects from the CDN using this tool.
15
  <?php endif; ?>
16
  </p>
17
  <?php else: ?>
18
  <p>
19
  Prepare the <acronym title="Content Delivery Network">CDN</acronym> by:
20
- <input id="cdn_import_library" class="button" type="button" value="importing attachments into the Media Library" />.
21
- Check <input id="cdn_queue" class="button" type="button" value="unsuccessful file transfers" /> if some objects appear to be missing.
22
  <?php if (w3_can_cdn_purge($cdn_engine)): ?>
23
- <input id="cdn_purge" class="button" type="button" value="Purge" /> objects from the <acronym title="Content Delivery Network">CDN</acronym> if needed.
24
  <?php endif; ?>
25
- <input id="cdn_rename_domain" class="button" type="button" value="Modify attachment URLs" /> if the domain name of your site has ever changed.
26
  </p>
27
  <?php endif; ?>
28
 
@@ -38,7 +39,7 @@
38
  </th>
39
  <?php if (! $cdn_mirror): ?>
40
  <td>
41
- <input id="cdn_export_library" class="button" type="button" value="Upload attachments" />
42
  </td>
43
  <?php endif; ?>
44
  </tr>
@@ -50,7 +51,7 @@
50
  </th>
51
  <?php if (! $cdn_mirror): ?>
52
  <td>
53
- <input class="button cdn_export" type="button" name="includes" value="Upload includes files" />
54
  </td>
55
  <?php endif; ?>
56
  </tr>
@@ -62,7 +63,7 @@
62
  </th>
63
  <?php if (! $cdn_mirror): ?>
64
  <td>
65
- <input class="button cdn_export" type="button" name="theme" value="Upload theme files" />
66
  </td>
67
  <?php endif; ?>
68
  </tr>
@@ -74,7 +75,7 @@
74
  </th>
75
  <?php if (! $cdn_mirror): ?>
76
  <td>
77
- <input class="button cdn_export" type="button" name="minify" value="Upload minify files"<?php if (!$minify_enabled): ?> disabled="disabled"<?php endif; ?> />
78
  </td>
79
  <?php endif; ?>
80
  </tr>
@@ -86,7 +87,7 @@
86
  </th>
87
  <?php if (! $cdn_mirror): ?>
88
  <td>
89
- <input class="button cdn_export" type="button" name="custom" value="Upload custom files" />
90
  </td>
91
  <?php endif; ?>
92
  </tr>
@@ -109,31 +110,23 @@
109
  </table>
110
 
111
  <p class="submit">
112
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
113
  </p>
114
  <?php echo $this->postbox_footer(); ?>
115
 
116
  <?php echo $this->postbox_header('Configuration'); ?>
117
  <table class="form-table">
118
  <?php
119
- switch ($cdn_engine) {
120
- case 'mirror':
121
- case 'netdna':
122
- case 'cotendo':
123
- case 'ftp':
124
- case 's3':
125
- case 'cf':
126
- case 'cf2':
127
- case 'rscf':
128
- case 'azure':
129
- include W3TC_DIR . '/inc/options/cdn/' . $cdn_engine . '.phtml';
130
- break;
131
  }
132
  ?>
133
  </table>
134
 
135
  <p class="submit">
136
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
137
  </p>
138
  <?php echo $this->postbox_footer(); ?>
139
 
@@ -142,7 +135,7 @@
142
  <tr>
143
  <th colspan="2">
144
  <input type="hidden" name="cdn.reject.admins" value="0" />
145
- <label><input type="checkbox" name="cdn.reject.admins" value="1"<?php checked($this->_config->get_boolean('cdn.reject.admins'), true); ?> /> Don't replace URLs for logged in administrators</label><br />
146
  <span class="description">Authenticated administrators will use the origin server exclusively when this option is selected.</span>
147
  </th>
148
  </tr>
@@ -230,13 +223,14 @@
230
  <input type="hidden" name="set_cookie_domain_old" value="<?php echo (int) $set_cookie_domain; ?>" />
231
  <input type="hidden" name="set_cookie_domain_new" value="0" />
232
  <label><input type="checkbox" name="set_cookie_domain_new" value="1"<?php checked($set_cookie_domain, true); ?> /> Set cookie domain to &quot;<?php echo htmlspecialchars($cookie_domain); ?>&quot;</label>
233
- <br /><span class="description">If using subdomain for CDN functionality, this setting helps prevent new users from sending cookies in requests to the CDN subdomain.</span>
234
  </th>
235
  </tr>
236
  </table>
237
 
238
  <p class="submit">
239
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
240
  </p>
241
  <?php echo $this->postbox_footer(); ?>
242
 
@@ -254,4 +248,4 @@
254
  </div>
255
  </form>
256
 
257
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <p>
5
  Content Delivery Network support via
9
 
10
  <?php if ($cdn_mirror): ?>
11
  <p>
12
+ Maximize <acronym title="Content Delivery Network">CDN</acronym> usage by <input id="cdn_rename_domain" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="modify attachment URLs" /> or
13
+ <input id="cdn_import_library" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="importing attachments into the Media Library" />.
14
  <?php if (w3_can_cdn_purge($cdn_engine)): ?>
15
+ <input id="cdn_purge" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Purge" /> objects from the <acronym title="Content Delivery Network">CDN</acronym> using this tool.
16
  <?php endif; ?>
17
  </p>
18
  <?php else: ?>
19
  <p>
20
  Prepare the <acronym title="Content Delivery Network">CDN</acronym> by:
21
+ <input id="cdn_import_library" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="importing attachments into the Media Library" />.
22
+ Check <input id="cdn_queue" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="unsuccessful file transfers" /> if some objects appear to be missing.
23
  <?php if (w3_can_cdn_purge($cdn_engine)): ?>
24
+ <input id="cdn_purge" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Purge" /> objects from the <acronym title="Content Delivery Network">CDN</acronym> if needed.
25
  <?php endif; ?>
26
+ <input id="cdn_rename_domain" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Modify attachment URLs" /> if the domain name of your site has ever changed.
27
  </p>
28
  <?php endif; ?>
29
 
39
  </th>
40
  <?php if (! $cdn_mirror): ?>
41
  <td>
42
+ <input id="cdn_export_library" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Upload attachments" />
43
  </td>
44
  <?php endif; ?>
45
  </tr>
51
  </th>
52
  <?php if (! $cdn_mirror): ?>
53
  <td>
54
+ <input class="button cdn_export {type: 'includes', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Upload includes files" />
55
  </td>
56
  <?php endif; ?>
57
  </tr>
63
  </th>
64
  <?php if (! $cdn_mirror): ?>
65
  <td>
66
+ <input class="button cdn_export {type: 'theme', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Upload theme files" />
67
  </td>
68
  <?php endif; ?>
69
  </tr>
75
  </th>
76
  <?php if (! $cdn_mirror): ?>
77
  <td>
78
+ <input class="button cdn_export {type: 'minify', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Upload minify files"<?php if (!$minify_enabled): ?> disabled="disabled"<?php endif; ?> />
79
  </td>
80
  <?php endif; ?>
81
  </tr>
87
  </th>
88
  <?php if (! $cdn_mirror): ?>
89
  <td>
90
+ <input class="button cdn_export {type: 'custom', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Upload custom files" />
91
  </td>
92
  <?php endif; ?>
93
  </tr>
110
  </table>
111
 
112
  <p class="submit">
113
+ <?php echo $this->nonce_field('w3tc'); ?>
114
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
115
  </p>
116
  <?php echo $this->postbox_footer(); ?>
117
 
118
  <?php echo $this->postbox_header('Configuration'); ?>
119
  <table class="form-table">
120
  <?php
121
+ if (w3_is_cdn_engine($cdn_engine)) {
122
+ include W3TC_INC_DIR . '/options/cdn/' . $cdn_engine . '.php';
 
 
 
 
 
 
 
 
 
 
123
  }
124
  ?>
125
  </table>
126
 
127
  <p class="submit">
128
+ <?php echo $this->nonce_field('w3tc'); ?>
129
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
130
  </p>
131
  <?php echo $this->postbox_footer(); ?>
132
 
135
  <tr>
136
  <th colspan="2">
137
  <input type="hidden" name="cdn.reject.admins" value="0" />
138
+ <label><input type="checkbox" name="cdn.reject.admins" value="1"<?php checked($this->_config->get_boolean('cdn.reject.admins'), true); ?> /> Don't replace <acronym title="Uniform Resource Indicator">URL</acronym>s for logged in administrators</label><br />
139
  <span class="description">Authenticated administrators will use the origin server exclusively when this option is selected.</span>
140
  </th>
141
  </tr>
223
  <input type="hidden" name="set_cookie_domain_old" value="<?php echo (int) $set_cookie_domain; ?>" />
224
  <input type="hidden" name="set_cookie_domain_new" value="0" />
225
  <label><input type="checkbox" name="set_cookie_domain_new" value="1"<?php checked($set_cookie_domain, true); ?> /> Set cookie domain to &quot;<?php echo htmlspecialchars($cookie_domain); ?>&quot;</label>
226
+ <br /><span class="description">If using subdomain for <acronym title="Content Delivery Network">CDN</acronym> functionality, this setting helps prevent new users from sending cookies in requests to the <acronym title="Content Delivery Network">CDN</acronym> subdomain.</span>
227
  </th>
228
  </tr>
229
  </table>
230
 
231
  <p class="submit">
232
+ <?php echo $this->nonce_field('w3tc'); ?>
233
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
234
  </p>
235
  <?php echo $this->postbox_footer(); ?>
236
 
248
  </div>
249
  </form>
250
 
251
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/cdn/{azure.phtml → azure.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_azure_user">Account name:</label></th>
3
  <td>
@@ -14,7 +15,7 @@
14
  <th><label for="cdn_azure_container">Container:</label></th>
15
  <td>
16
  <input id="cdn_azure_container" type="text" name="cdn.azure.container" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.azure.container')); ?>" size="30" />
17
- <input id="cdn_create_container" class="button cdn_azure" type="button" value="Create container" />
18
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
19
  </td>
20
  </tr>
@@ -37,11 +38,11 @@
37
  <?php else: ?>
38
  &lt;account name&gt;.blob.core.windows.net
39
  <?php endif; ?> or CNAME:
40
- <?php $cnames = $this->_config->get_array('cdn.azure.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
41
  </td>
42
  </tr>
43
  <tr>
44
  <th colspan="2">
45
- <input id="cdn_test" class="button cdn_azure" type="button" value="Test Microsoft Azure Storage upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
46
  </th>
47
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_azure_user">Account name:</label></th>
4
  <td>
15
  <th><label for="cdn_azure_container">Container:</label></th>
16
  <td>
17
  <input id="cdn_azure_container" type="text" name="cdn.azure.container" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.azure.container')); ?>" size="30" />
18
+ <input id="cdn_create_container" class="button {type: 'azure', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create container" />
19
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
20
  </td>
21
  </tr>
38
  <?php else: ?>
39
  &lt;account name&gt;.blob.core.windows.net
40
  <?php endif; ?> or CNAME:
41
+ <?php $cnames = $this->_config->get_array('cdn.azure.cname'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
42
  </td>
43
  </tr>
44
  <tr>
45
  <th colspan="2">
46
+ <input id="cdn_test" class="button {type: 'azure', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test Microsoft Azure Storage upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
47
  </th>
48
  </tr>
inc/options/cdn/{cf.phtml → cf.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_cf_key">Access key ID:</label></th>
3
  <td>
@@ -14,7 +15,7 @@
14
  <th><label for="cdn_cf_bucket">Bucket:</label></th>
15
  <td>
16
  <input id="cdn_cf_bucket" type="text" name="cdn.cf.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.bucket')); ?>" size="30" />
17
- <input class="button button-cdn-cf-bucket-location cdn_cf" type="button" value="Create bucket &amp; distribution" />
18
  </td>
19
  </tr>
20
  <tr>
@@ -32,12 +33,12 @@
32
  <th><label for="cdn_cf_id">Replace site's hostname with:</label></th>
33
  <td>
34
  <input id="cdn_cf_id" type="text" name="cdn.cf.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.id')); ?>" size="18" style="text-align: right;" />.cloudfront.net or CNAME:
35
- <?php $cnames = $this->_config->get_array('cdn.cf.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
36
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
37
  </td>
38
  </tr>
39
  <tr>
40
  <th colspan="2">
41
- <input id="cdn_test" class="button cdn_cf" type="button" value="Test S3 upload &amp; CloudFront distribution" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
42
  </th>
43
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_cf_key">Access key ID:</label></th>
4
  <td>
15
  <th><label for="cdn_cf_bucket">Bucket:</label></th>
16
  <td>
17
  <input id="cdn_cf_bucket" type="text" name="cdn.cf.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.bucket')); ?>" size="30" />
18
+ <input class="button button-cdn-cf-bucket-location cdn_cf {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create bucket &amp; distribution" />
19
  </td>
20
  </tr>
21
  <tr>
33
  <th><label for="cdn_cf_id">Replace site's hostname with:</label></th>
34
  <td>
35
  <input id="cdn_cf_id" type="text" name="cdn.cf.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf.id')); ?>" size="18" style="text-align: right;" />.cloudfront.net or CNAME:
36
+ <?php $cnames = $this->_config->get_array('cdn.cf.cname'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
37
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
38
  </td>
39
  </tr>
40
  <tr>
41
  <th colspan="2">
42
+ <input id="cdn_test" class="button {type: 'cf', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test S3 upload &amp; CloudFront distribution" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
43
  </th>
44
  </tr>
inc/options/cdn/{cf2.phtml → cf2.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_cf2_key">Access key ID:</label></th>
3
  <td>
@@ -14,7 +15,7 @@
14
  <th>Origin:</th>
15
  <td>
16
  <?php echo w3_get_host(); ?>
17
- <input id="cdn_create_container" class="button cdn_cf2" type="button" value="Create distribution" />
18
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
19
  </td>
20
  </tr>
@@ -33,12 +34,12 @@
33
  <th><label for="cdn_cf2_id">Replace site's hostname with:</label></th>
34
  <td>
35
  <input id="cdn_cf2_id" type="text" name="cdn.cf2.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf2.id')); ?>" size="18" style="text-align: right;" />.cloudfront.net or CNAME:
36
- <?php $cnames = $this->_config->get_array('cdn.cf2.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
37
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
38
  </td>
39
  </tr>
40
  <tr>
41
  <th colspan="2">
42
- <input id="cdn_test" class="button cdn_cf2" type="button" value="Test CloudFront distribution" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
43
  </th>
44
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_cf2_key">Access key ID:</label></th>
4
  <td>
15
  <th>Origin:</th>
16
  <td>
17
  <?php echo w3_get_host(); ?>
18
+ <input id="cdn_create_container" class="button {type: 'cf2', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create distribution" />
19
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
20
  </td>
21
  </tr>
34
  <th><label for="cdn_cf2_id">Replace site's hostname with:</label></th>
35
  <td>
36
  <input id="cdn_cf2_id" type="text" name="cdn.cf2.id" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.cf2.id')); ?>" size="18" style="text-align: right;" />.cloudfront.net or CNAME:
37
+ <?php $cnames = $this->_config->get_array('cdn.cf2.cname'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
38
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CNAMEs.html" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
39
  </td>
40
  </tr>
41
  <tr>
42
  <th colspan="2">
43
+ <input id="cdn_test" class="button {type: 'cf2', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test CloudFront distribution" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
44
  </th>
45
  </tr>
inc/options/cdn/common/{cnames.phtml → cnames.php} RENAMED
@@ -1,5 +1,6 @@
 
1
  <ol id="cdn_cnames">
2
- <?php
3
  if (! count($cnames)) {
4
  $cnames = array('');
5
  }
@@ -8,33 +9,33 @@ $count = count($cnames);
8
 
9
  foreach ($cnames as $index => $cname):
10
  $label = '';
11
-
12
  if ($count > 1):
13
  switch ($index):
14
  case 0:
15
- $label = '(reserved for CSS)';
16
  break;
17
-
18
  case 1:
19
- $label = '(reserved for JS in <head>)';
20
  break;
21
-
22
  case 2:
23
- $label = '(reserved for JS after <body>)';
24
  break;
25
-
26
  case 3:
27
- $label = '(reserved for JS before </body>)';
28
  break;
29
-
30
  default:
31
  $label = '';
32
  break;
33
  endswitch;
34
- endif;
35
  ?>
36
  <li>
37
- <input type="text" name="cdn_cnames[]" value="<?php echo htmlspecialchars($cname); ?>" size="30" />
38
  <input class="button cdn_cname_delete" type="button" value="Delete"<?php if (!$index): ?> style="display: none;"<?php endif; ?> />
39
  <span><?php echo htmlspecialchars($label); ?></span>
40
  </li>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <ol id="cdn_cnames">
3
+ <?php
4
  if (! count($cnames)) {
5
  $cnames = array('');
6
  }
9
 
10
  foreach ($cnames as $index => $cname):
11
  $label = '';
12
+
13
  if ($count > 1):
14
  switch ($index):
15
  case 0:
16
+ $label = '(reserved for <acronym title="Cascading Style Sheet">CSS</acronym>)';
17
  break;
18
+
19
  case 1:
20
+ $label = '(reserved for <acronym title="JavaScript">JS</acronym> in <head>)';
21
  break;
22
+
23
  case 2:
24
+ $label = '(reserved for <acronym title="JavaScript">JS</acronym> after <body>)';
25
  break;
26
+
27
  case 3:
28
+ $label = '(reserved for <acronym title="JavaScript">JS</acronym> before </body>)';
29
  break;
30
+
31
  default:
32
  $label = '';
33
  break;
34
  endswitch;
35
+ endif;
36
  ?>
37
  <li>
38
+ <input type="text" name="cdn_cnames[]" value="<?php echo htmlspecialchars($cname); ?>" size="60" />
39
  <input class="button cdn_cname_delete" type="button" value="Delete"<?php if (!$index): ?> style="display: none;"<?php endif; ?> />
40
  <span><?php echo htmlspecialchars($label); ?></span>
41
  </li>
inc/options/cdn/common/index.html ADDED
File without changes
inc/options/cdn/{cotendo.phtml → cotendo.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_cotendo_username">Username:</label></th>
3
  <td>
@@ -30,12 +31,12 @@
30
  <tr>
31
  <th>Replace site's hostname with:</th>
32
  <td>
33
- <?php $cnames = $this->_config->get_array('cdn.cotendo.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
34
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
35
  </td>
36
  </tr>
37
  <tr>
38
  <th colspan="2">
39
- <input id="cdn_test" class="button cdn_cotendo" type="button" value="Test Cotendo" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
40
  </th>
41
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_cotendo_username">Username:</label></th>
4
  <td>
31
  <tr>
32
  <th>Replace site's hostname with:</th>
33
  <td>
34
+ <?php $cnames = $this->_config->get_array('cdn.cotendo.domain'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
35
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
36
  </td>
37
  </tr>
38
  <tr>
39
  <th colspan="2">
40
+ <input id="cdn_test" class="button {type: 'cotendo', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test Cotendo" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
41
  </th>
42
  </tr>
inc/options/cdn/edgecast.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <tr>
3
+ <th style="width: 300px;"><label for="cdn_edgecast_account">Account #:</label></th>
4
+ <td>
5
+ <input id="cdn_edgecast_account" class="w3tc-ignore-change" type="text" name="cdn.edgecast.account" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.edgecast.account')); ?>" size="60" />
6
+ </td>
7
+ </tr>
8
+ <tr>
9
+ <th><label for="cdn_edgecast_token">Token:</th>
10
+ <td>
11
+ <input id="cdn_edgecast_token" class="w3tc-ignore-change" type="password" name="cdn.edgecast.token" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.edgecast.token')); ?>" size="60" />
12
+ </td>
13
+ </tr>
14
+ <tr>
15
+ <th><label for="cdn_edgecast_ssl"><acronym title="Secure Sockets Layer">SSL</acronym> support:</label></th>
16
+ <td>
17
+ <select id="cdn_edgecast_ssl" name="cdn.edgecast.ssl">
18
+ <option value="auto"<?php selected($this->_config->get_string('cdn.edgecast.ssl'), 'auto'); ?>>Auto (determine connection type automatically)</option>
19
+ <option value="enabled"<?php selected($this->_config->get_string('cdn.edgecast.ssl'), 'enabled'); ?>>Enabled (always use SSL)</option>
20
+ <option value="disabled"<?php selected($this->_config->get_string('cdn.edgecast.ssl'), 'disabled'); ?>>Disabled (always use HTTP)</option>
21
+ </select>
22
+ <br /><span class="description">Some <acronym>CDN</acronym> providers may or may not support <acronym title="Secure Sockets Layer">SSL</acronym>, contact your vendor for more information.</span>
23
+ </td>
24
+ </tr>
25
+ <tr>
26
+ <th>Replace site's hostname with:</th>
27
+ <td>
28
+ <?php $cnames = $this->_config->get_array('cdn.edgecast.domain'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
29
+ <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
30
+ </td>
31
+ </tr>
32
+ <tr>
33
+ <th colspan="2">
34
+ <input id="cdn_test" class="button {type: 'edgecast', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test EdgeCast" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
35
+ </th>
36
+ </tr>
inc/options/cdn/{ftp.phtml → ftp.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th colspan="2">
3
  <input type="hidden" name="cdn.ftp.pasv" value="0" />
@@ -45,12 +46,12 @@
45
  <tr>
46
  <th>Replace site's hostname with:</th>
47
  <td>
48
- <?php $cnames = $this->_config->get_array('cdn.ftp.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
49
- <br /><span class="description">Enter the hostname or CNAME(s) of your FTP server configured above, these values will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
50
  </td>
51
  </tr>
52
  <tr>
53
  <th colspan="2">
54
- <input id="cdn_test" class="button cdn_ftp" type="button" value="Test FTP server" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
55
  </th>
56
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th colspan="2">
4
  <input type="hidden" name="cdn.ftp.pasv" value="0" />
46
  <tr>
47
  <th>Replace site's hostname with:</th>
48
  <td>
49
+ <?php $cnames = $this->_config->get_array('cdn.ftp.domain'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
50
+ <br /><span class="description">Enter the hostname or CNAME(s) of your <acronym title="File Transfer Protocol">FTP</acronym> server configured above, these values will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
51
  </td>
52
  </tr>
53
  <tr>
54
  <th colspan="2">
55
+ <input id="cdn_test" class="button {type: 'ftp', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test FTP server" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
56
  </th>
57
  </tr>
inc/options/cdn/index.html ADDED
File without changes
inc/options/cdn/{mirror.phtml → mirror.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th><label for="cdn_mirror_ssl"><acronym title="Secure Sockets Layer">SSL</acronym> support:</label></th>
3
  <td>
@@ -12,12 +13,12 @@
12
  <tr>
13
  <th>Replace site's hostname with:</th>
14
  <td>
15
- <?php $cnames = $this->_config->get_array('cdn.mirror.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
16
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
17
  </td>
18
  </tr>
19
  <tr>
20
  <th colspan="2">
21
- <input id="cdn_test" class="button cdn_mirror" type="button" value="Test Mirror" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
22
  </th>
23
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th><label for="cdn_mirror_ssl"><acronym title="Secure Sockets Layer">SSL</acronym> support:</label></th>
4
  <td>
13
  <tr>
14
  <th>Replace site's hostname with:</th>
15
  <td>
16
+ <?php $cnames = $this->_config->get_array('cdn.mirror.domain'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
17
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
18
  </td>
19
  </tr>
20
  <tr>
21
  <th colspan="2">
22
+ <input id="cdn_test" class="button {type: 'mirror', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test Mirror" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
23
  </th>
24
  </tr>
inc/options/cdn/{netdna.phtml → netdna.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_netdna_apiid"><acronym title="Application Programming Interface">API</acronym> ID:</label></th>
3
  <td>
@@ -24,12 +25,12 @@
24
  <tr>
25
  <th>Replace site's hostname with:</th>
26
  <td>
27
- <?php $cnames = $this->_config->get_array('cdn.netdna.domain'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
28
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
29
  </td>
30
  </tr>
31
  <tr>
32
  <th colspan="2">
33
- <input id="cdn_test" class="button cdn_netdna" type="button" value="Test NetDNA" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
34
  </th>
35
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_netdna_apiid"><acronym title="Application Programming Interface">API</acronym> ID:</label></th>
4
  <td>
25
  <tr>
26
  <th>Replace site's hostname with:</th>
27
  <td>
28
+ <?php $cnames = $this->_config->get_array('cdn.netdna.domain'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
29
  <br /><span class="description">Enter the hostname provided by your <acronym>CDN</acronym> provider, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
30
  </td>
31
  </tr>
32
  <tr>
33
  <th colspan="2">
34
+ <input id="cdn_test" class="button {type: 'netdna', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test NetDNA" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
35
  </th>
36
  </tr>
inc/options/cdn/{rscf.phtml → rscf.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_rscf_user">Username:</label></th>
3
  <td>
@@ -23,7 +24,7 @@
23
  <th><label for="cdn_rscf_container">Container:</label></th>
24
  <td>
25
  <input id="cdn_rscf_container" type="text" name="cdn.rscf.container" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.container')); ?>" size="30" />
26
- <input id="cdn_create_container" class="button cdn_rscf" type="button" value="Create container" />
27
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
28
  </td>
29
  </tr>
@@ -41,12 +42,12 @@
41
  <tr>
42
  <th>Replace site's hostname with:</th>
43
  <td>
44
- <?php $cnames = $this->_config->get_array('cdn.rscf.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
45
  <br /><span class="description">Enter the hostname provided by Rackspace Cloud Files, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
46
  </td>
47
  </tr>
48
  <tr>
49
  <th colspan="2">
50
- <input id="cdn_test" class="button cdn_rscf" type="button" value="Test Cloud Files upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
51
  </th>
52
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_rscf_user">Username:</label></th>
4
  <td>
24
  <th><label for="cdn_rscf_container">Container:</label></th>
25
  <td>
26
  <input id="cdn_rscf_container" type="text" name="cdn.rscf.container" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.rscf.container')); ?>" size="30" />
27
+ <input id="cdn_create_container" class="button {type: 'rscf', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create container" />
28
  <span id="cdn_create_container_status" class="w3tc-status w3tc-process"></span>
29
  </td>
30
  </tr>
42
  <tr>
43
  <th>Replace site's hostname with:</th>
44
  <td>
45
+ <?php $cnames = $this->_config->get_array('cdn.rscf.cname'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
46
  <br /><span class="description">Enter the hostname provided by Rackspace Cloud Files, this value will replace your site's hostname in the <acronym title="Hypertext Markup Language">HTML</acronym>.</span>
47
  </td>
48
  </tr>
49
  <tr>
50
  <th colspan="2">
51
+ <input id="cdn_test" class="button {type: 'rscf', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test Cloud Files upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
52
  </th>
53
  </tr>
inc/options/cdn/{s3.phtml → s3.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th style="width: 300px;"><label for="cdn_s3_key">Access key ID:</label></th>
3
  <td>
@@ -14,7 +15,7 @@
14
  <th><label for="cdn_s3_bucket">Bucket:</label></th>
15
  <td>
16
  <input id="cdn_s3_bucket" type="text" name="cdn.s3.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.s3.bucket')); ?>" size="30" />
17
- <input class="button button-cdn-s3-bucket-location cdn_s3" type="button" value="Create bucket" />
18
  </td>
19
  </tr>
20
  <tr>
@@ -36,12 +37,12 @@
36
  <?php else: ?>
37
  &lt;bucket&gt;.s3.amazonaws.com
38
  <?php endif; ?> or CNAME:
39
- <?php $cnames = $this->_config->get_array('cdn.s3.cname'); include W3TC_DIR . '/inc/options/cdn/common/cnames.phtml'; ?>
40
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonS3/latest/DeveloperGuide/VirtualHosting.html#VirtualHostingCustomURLs" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
41
  </td>
42
  </tr>
43
  <tr>
44
  <th colspan="2">
45
- <input id="cdn_test" class="button cdn_s3" type="button" value="Test S3 upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
46
  </th>
47
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th style="width: 300px;"><label for="cdn_s3_key">Access key ID:</label></th>
4
  <td>
15
  <th><label for="cdn_s3_bucket">Bucket:</label></th>
16
  <td>
17
  <input id="cdn_s3_bucket" type="text" name="cdn.s3.bucket" value="<?php echo htmlspecialchars($this->_config->get_string('cdn.s3.bucket')); ?>" size="30" />
18
+ <input class="button button-cdn-s3-bucket-location cdn_s3 {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Create bucket" />
19
  </td>
20
  </tr>
21
  <tr>
37
  <?php else: ?>
38
  &lt;bucket&gt;.s3.amazonaws.com
39
  <?php endif; ?> or CNAME:
40
+ <?php $cnames = $this->_config->get_array('cdn.s3.cname'); include W3TC_INC_DIR . '/options/cdn/common/cnames.php'; ?>
41
  <br /><span class="description">If you have already added a <a href="http://docs.amazonwebservices.com/AmazonS3/latest/DeveloperGuide/VirtualHosting.html#VirtualHostingCustomURLs" target="_blank">CNAME</a> to your <acronym title="Domain Name System">DNS</acronym> Zone, enter it here.</span>
42
  </td>
43
  </tr>
44
  <tr>
45
  <th colspan="2">
46
+ <input id="cdn_test" class="button {type: 's3', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test S3 upload" /> <span id="cdn_test_status" class="w3tc-status w3tc-process"></span>
47
  </th>
48
  </tr>
inc/options/common/{footer.phtml → footer.php} RENAMED
File without changes
inc/options/common/{header.phtml → header.php} RENAMED
@@ -1,7 +1,9 @@
 
 
1
  <?php if ($this->_support_reminder): ?>
2
  <script type="text/javascript">/*<![CDATA[*/
3
  jQuery(function($) {
4
- w3tc_lightbox_support_us();
5
  });
6
  /*]]>*/</script>
7
  <?php endif; ?>
@@ -36,7 +38,7 @@ jQuery(function($) {
36
  <a href="?page=w3tc_browsercache"<?php if ($this->_page == 'w3tc_browsercache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Browser Cache</a> |
37
  <a href="?page=w3tc_mobile"<?php if ($this->_page == 'w3tc_mobile'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>User Agent Groups</a> |
38
  <a href="?page=w3tc_referrer"<?php if ($this->_page == 'w3tc_referrer'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Referrer Groups</a> |
39
- <a href="?page=w3tc_cdn"<?php if ($this->_page == 'w3tc_cdn'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Content Delivery Network</a> |
40
  <a href="?page=w3tc_faq"<?php if ($this->_page == 'w3tc_faq'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Frequently Asked Questions">FAQ</acronym></a> |
41
  <a href="?page=w3tc_support"<?php if ($this->_page == 'w3tc_support'): ?> class="w3tc-options-menu-selected"<?php endif; ?> style="color: red;">Support</a> |
42
  <a href="?page=w3tc_install"<?php if ($this->_page == 'w3tc_install'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Install</a> |
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+
3
  <?php if ($this->_support_reminder): ?>
4
  <script type="text/javascript">/*<![CDATA[*/
5
  jQuery(function($) {
6
+ w3tc_lightbox_support_us('<?php echo wp_create_nonce('w3tc'); ?>');
7
  });
8
  /*]]>*/</script>
9
  <?php endif; ?>
38
  <a href="?page=w3tc_browsercache"<?php if ($this->_page == 'w3tc_browsercache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Browser Cache</a> |
39
  <a href="?page=w3tc_mobile"<?php if ($this->_page == 'w3tc_mobile'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>User Agent Groups</a> |
40
  <a href="?page=w3tc_referrer"<?php if ($this->_page == 'w3tc_referrer'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Referrer Groups</a> |
41
+ <a href="?page=w3tc_cdn"<?php if ($this->_page == 'w3tc_cdn'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Content Delivery Network">CDN</acronym></a> |
42
  <a href="?page=w3tc_faq"<?php if ($this->_page == 'w3tc_faq'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Frequently Asked Questions">FAQ</acronym></a> |
43
  <a href="?page=w3tc_support"<?php if ($this->_page == 'w3tc_support'): ?> class="w3tc-options-menu-selected"<?php endif; ?> style="color: red;">Support</a> |
44
  <a href="?page=w3tc_install"<?php if ($this->_page == 'w3tc_install'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Install</a> |
inc/options/common/{help.phtml → help.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <div id="w3tc-help">
2
  <p>Request professional <a href="admin.php?page=w3tc_support" style="color: red;"><strong>support</strong></a> or troubleshoot issues using the common questions below:</p>
3
 
@@ -10,6 +11,6 @@
10
  <?php endforeach; ?>
11
  </ul>
12
  <?php endforeach; ?>
13
-
14
  <div style="clear: left;"></div>
15
  </div>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <div id="w3tc-help">
3
  <p>Request professional <a href="admin.php?page=w3tc_support" style="color: red;"><strong>support</strong></a> or troubleshoot issues using the common questions below:</p>
4
 
11
  <?php endforeach; ?>
12
  </ul>
13
  <?php endforeach; ?>
14
+
15
  <div style="clear: left;"></div>
16
  </div>
inc/options/common/index.html ADDED
File without changes
inc/options/{dbcache.phtml → dbcache.php} RENAMED
@@ -1,16 +1,17 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
- <form action="admin.php">
4
  <p>
5
  Database caching via
6
  <strong><?php echo w3_get_engine_name($this->_config->get_string('dbcache.engine')); ?></strong>
7
  is currently <span class="w3tc-<?php if ($dbcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
8
  </p>
9
  <p>
10
- To rebuild the database cache use the
11
- <input type="submit" name="flush_dbcache" value="empty cache"<?php if (! $dbcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
12
  operation.
13
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
14
  </p>
15
  </form>
16
 
@@ -28,7 +29,8 @@
28
  </table>
29
 
30
  <p class="submit">
31
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
32
  </p>
33
  <?php echo $this->postbox_footer(); ?>
34
 
@@ -39,7 +41,7 @@
39
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
40
  <td>
41
  <input id="memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('dbcache.memcached.servers'))); ?>" size="100" />
42
- <input id="memcached_test" class="button" type="button" value="Test" />
43
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
44
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
45
  </td>
@@ -74,10 +76,11 @@
74
  </table>
75
 
76
  <p class="submit">
77
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
78
  </p>
79
  <?php echo $this->postbox_footer(); ?>
80
  </div>
81
  </form>
82
 
83
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
+ <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
5
  <p>
6
  Database caching via
7
  <strong><?php echo w3_get_engine_name($this->_config->get_string('dbcache.engine')); ?></strong>
8
  is currently <span class="w3tc-<?php if ($dbcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
9
  </p>
10
  <p>
11
+ To rebuild the database cache use the
12
+ <?php echo $this->nonce_field('w3tc'); ?>
13
+ <input type="submit" name="w3tc_flush_dbcache" value="empty cache"<?php if (! $dbcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
14
  operation.
 
15
  </p>
16
  </form>
17
 
29
  </table>
30
 
31
  <p class="submit">
32
+ <?php echo $this->nonce_field('w3tc'); ?>
33
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
34
  </p>
35
  <?php echo $this->postbox_footer(); ?>
36
 
41
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
42
  <td>
43
  <input id="memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('dbcache.memcached.servers'))); ?>" size="100" />
44
+ <input id="memcached_test" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test" />
45
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
46
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
47
  </td>
76
  </table>
77
 
78
  <p class="submit">
79
+ <?php echo $this->nonce_field('w3tc'); ?>
80
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
81
  </p>
82
  <?php echo $this->postbox_footer(); ?>
83
  </div>
84
  </form>
85
 
86
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{faq.phtml → faq.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <h4>Table of Contents</h4>
4
 
@@ -27,4 +28,4 @@
27
  <?php endforeach; ?>
28
  </div>
29
 
30
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <h4>Table of Contents</h4>
5
 
28
  <?php endforeach; ?>
29
  </div>
30
 
31
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/faq.xml CHANGED
@@ -546,7 +546,7 @@
546
  <li>define('DONOTCACHEDB', true);<br />Disables database caching for given page.</li>
547
  <li>define('DONOTMINIFY', true);<br />Disables minify for a given page.</li>
548
  <li>define('DONOTCDN', true);<br />Disables content delivery network for a given page.</li>
549
- <li>define('DONOTCACHCEOBJECT', true);<br />Disables object cache for a given page.</li>
550
  </ul>
551
  ]]></answer>
552
  </entry>
@@ -622,7 +622,7 @@
622
  <section name="Requirements">
623
  <entry>
624
  <question><![CDATA[ Which web servers do you support? ]]></question>
625
- <answer><![CDATA[ <p>We are aware of no incompatibilities with <a href="http://httpd.apache.org/" target="_blank">apache</a> 1.3+, <a href="http://www.iis.net/" target="_blank">IIS</a> 5+ or <a href="http://litespeedtech.com/products/webserver/overview/" target="_blank">litespeed</a> 4.0.2+. If there's a web server you feel we should be actively testing (e.g. <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a>), we're <a href="mailto:wordpressexperts@w3-edge.com">interested in hearing</a>.</p> ]]></answer>
626
  </entry>
627
  <entry>
628
  <question><![CDATA[ Do I need to enable mod_gzip, mod_rewrite or install any <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression software on my server? ]]></question>
546
  <li>define('DONOTCACHEDB', true);<br />Disables database caching for given page.</li>
547
  <li>define('DONOTMINIFY', true);<br />Disables minify for a given page.</li>
548
  <li>define('DONOTCDN', true);<br />Disables content delivery network for a given page.</li>
549
+ <li>define('DONOTCACHEOBJECT', true);<br />Disables object cache for a given page.</li>
550
  </ul>
551
  ]]></answer>
552
  </entry>
622
  <section name="Requirements">
623
  <entry>
624
  <question><![CDATA[ Which web servers do you support? ]]></question>
625
+ <answer><![CDATA[ <p>We are aware of no incompatibilities with <a href="http://httpd.apache.org/" target="_blank">apache</a> 1.3+, <a href="http://wiki.nginx.org/" target="_blank">nginx 0.7+</a>, , <a href="http://www.iis.net/" target="_blank">IIS</a> 5+ or <a href="http://litespeedtech.com/products/webserver/overview/" target="_blank">litespeed</a> 4.0.2+. If there's a web server you feel we should be actively testing (e.g. <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a>), we're <a href="mailto:wordpressexperts@w3-edge.com">interested in hearing</a>.</p> ]]></answer>
626
  </entry>
627
  <entry>
628
  <question><![CDATA[ Do I need to enable mod_gzip, mod_rewrite or install any <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression software on my server? ]]></question>
inc/options/{general.phtml → general.php} RENAMED
@@ -1,18 +1,19 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <p>
4
  The plugin is currently <span class="w3tc-<?php if ($enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>. If an option is disabled it means that either your current installation is not compatible or software installation is required.
5
  </p>
6
 
7
- <form action="admin.php">
8
  <p>
9
  Perform a
10
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
11
- <input type="button" class="button button-self-test" value="compatibility check" />,
12
- <input class="button" type="submit" name="flush_all" value="empty all caches"<?php if (! $can_empty_memcache && ! $can_empty_opcode && ! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> at once or
13
- <input class="button" type="submit" name="flush_memcached" value="empty only the memcached cache(s)"<?php if (! $can_empty_memcache): ?> disabled="disabled"<?php endif; ?> /> or
14
- <input class="button" type="submit" name="flush_opcode" value="empty only the opcode cache"<?php if (! $can_empty_opcode): ?> disabled="disabled"<?php endif; ?> /> or
15
- <input class="button" type="submit" name="flush_file" value="empty only the disk cache(s)"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />.
16
  </p>
17
  </form>
18
 
@@ -31,14 +32,15 @@
31
  <tr>
32
  <th>Preview Mode:</th>
33
  <td>
 
34
  <?php if ($preview): ?>
35
  <input type="hidden" name="preview" value="0" />
36
- <input type="submit" name="preview_save" class="button-primary" value="Disable" />
37
  <?php echo $this->button_link('Preview', w3_get_home_url() . '/?w3tc_preview=1', true); ?>
38
- <?php echo $this->button_link('Deploy', sprintf('admin.php?page=%s&preview_deploy', $this->_page)); ?>
39
  <?php else: ?>
40
  <input type="hidden" name="preview" value="1" />
41
- <input type="submit" name="preview_save" class="button-primary" value="Enable" />
42
  <?php endif; ?>
43
  <br /><span class="description">Use preview mode to test configuration scenarios prior to releasing them (deploy) on the actual site.</span>
44
  </td>
@@ -46,7 +48,8 @@
46
  </table>
47
 
48
  <p class="submit">
49
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
50
  </p>
51
  <?php echo $this->postbox_footer(); ?>
52
 
@@ -67,8 +70,8 @@
67
  <td>
68
  <select name="pgcache.engine">
69
  <optgroup label="Shared Server (disk enhanced is best):">
70
- <option value="file_generic"<?php selected($this->_config->get_string('pgcache.engine'), 'file_generic'); ?><?php if (! $check_rules): ?> disabled="disabled"<?php endif; ?>>Disk (enhanced)</option>
71
- <option value="file"<?php selected($this->_config->get_string('pgcache.engine'), 'file'); ?>>Disk (basic)</option>
72
  </optgroup>
73
  <optgroup label="Dedicated / Virtual Server:">
74
  <option value="apc"<?php selected($this->_config->get_string('pgcache.engine'), 'apc'); ?><?php if (! $check_apc): ?> disabled="disabled"<?php endif; ?>>Opcode: Alternative PHP Cache (APC)</option>
@@ -85,8 +88,9 @@
85
  </table>
86
 
87
  <p class="submit">
88
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
89
- <input type="submit" name="flush_pgcache" value="Empty cache"<?php if (! $pgcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
90
  </p>
91
  <?php echo $this->postbox_footer(); ?>
92
 
@@ -161,8 +165,9 @@
161
  </table>
162
 
163
  <p class="submit">
164
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
165
- <input type="submit" name="flush_minify" value="Empty cache"<?php if (! $minify_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
166
  </p>
167
  <?php echo $this->postbox_footer(); ?>
168
 
@@ -200,8 +205,9 @@
200
  </table>
201
 
202
  <p class="submit">
203
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
204
- <input type="submit" name="flush_dbcache" value="Empty cache"<?php if (! $dbcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
205
  </p>
206
  <?php echo $this->postbox_footer(); ?>
207
 
@@ -239,15 +245,102 @@
239
  </table>
240
 
241
  <p class="submit">
242
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
243
- <input type="submit" name="flush_objectcache" value="Empty cache"<?php if (! $objectcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  </p>
245
  <?php echo $this->postbox_footer(); ?>
246
 
247
  <?php echo $this->postbox_header('Network Performance &amp; Security powered by CloudFlare'); ?>
248
  <p>
249
  CloudFlare protects and accelerates websites. <a href="https://www.cloudflare.com/sign-up.html?affiliate=w3edge&amp;seed_domain=<?php echo w3_get_host(); ?>&amp;email=<?php echo htmlspecialchars($cloudflare_signup_email); ?>&amp;username=<?php echo htmlspecialchars($cloudflare_signup_user); ?>" target="_blank">Sign up now for free</a> to get started,
250
- or if you have an account simply log in to obtain your <acronym title="Application Programming Interface">API</acronym> key from the <a href="https://www.cloudflare.com/my-account.html">Account Page</a> to enter it below.
251
  Contact the CloudFlare <a href="http://www.cloudflare.com/help.html" target="_blank">support team</a> with any questions.
252
  </p>
253
 
@@ -305,90 +398,9 @@
305
  </table>
306
 
307
  <p class="submit">
308
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
309
- <input id="cloudflare_purge_cache" type="button" value="Purge cache"<?php if (! $cloudflare_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
310
- </p>
311
- <?php echo $this->postbox_footer(); ?>
312
-
313
- <?php echo $this->postbox_header('Varnish'); ?>
314
- <table class="form-table">
315
- <tr>
316
- <th colspan="2">
317
- <input type="hidden" name="varnish.enabled" value="0" />
318
- <label><input class="enabled" type="checkbox" name="varnish.enabled" value="1"<?php checked($varnish_enabled, true); ?> /> Enable varnish cache purging</label><br />
319
- </th>
320
- </tr>
321
- <tr>
322
- <th><label for="pgcache_varnish_servers">Varnish servers:</label></th>
323
- <td>
324
- <textarea id="pgcache_varnish_servers" name="varnish.servers" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('varnish.servers'))); ?></textarea><br />
325
- <span class="description">Specify the IP addresses of your varnish instances above. Your <acronym title="Varnish Configuration Language">VCL</acronym>'s <acronym title="Access Control List">ACL</acronym> must allow this request.</span>
326
- </td>
327
- </tr>
328
- </table>
329
-
330
- <p class="submit">
331
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
332
- </p>
333
- <?php echo $this->postbox_footer(); ?>
334
-
335
- <?php echo $this->postbox_header('Content Delivery Network'); ?>
336
- <p>Host static files with your content delivery network provider to reduce page load time.</p>
337
-
338
- <table class="form-table">
339
- <tr>
340
- <th><acronym title="Content Delivery Network">CDN</acronym>:</th>
341
- <td>
342
- <input type="hidden" name="cdn.enabled" value="0" />
343
- <label><input class="enabled" type="checkbox" name="cdn.enabled" value="1"<?php checked($cdn_enabled, true); ?> />&nbsp;<strong>Enable</strong></label>
344
- <br /><span class="description">Theme files, media library attachments, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> files etc will appear to load instantly for site visitors.</span>
345
- </td>
346
- </tr>
347
- <tr>
348
- <th><acronym title="Content Delivery Network">CDN</acronym> Type:</th>
349
- <td>
350
- <select name="cdn.engine">
351
- <optgroup label="Origin Pull (mirror is best):">
352
- <option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Mirror</option>
353
- <option value="netdna"<?php selected($this->_config->get_string('cdn.engine'), 'netdna'); ?>>NetDNA / MaxCDN</option>
354
- <option value="cotendo"<?php selected($this->_config->get_string('cdn.engine'), 'cotendo'); ?>>Cotendo</option>
355
- <option value="cf2"<?php selected($this->_config->get_string('cdn.engine'), 'cf2'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
356
- </optgroup>
357
- <optgroup label="Origin Push:">
358
- <option value="rscf"<?php selected($this->_config->get_string('cdn.engine'), 'rscf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Rackspace Cloud Files</option>
359
- <option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
360
- <option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option>
361
- <option value="azure"<?php selected($this->_config->get_string('cdn.engine'), 'azure'); ?><?php if (!W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>Microsoft Azure Storage</option>
362
- <option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?><?php if (!$check_ftp): ?> disabled="disabled"<?php endif; ?>>Self-hosted / File Transfer Protocol Upload</option>
363
- </optgroup>
364
- </select><br />
365
- <span class="description">Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.</span>
366
- </td>
367
- </tr>
368
- </table>
369
-
370
- <p class="submit">
371
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
372
- <input id="cdn_purge" type="button" value="Purge cache"<?php if (!$cdn_enabled || !w3_can_cdn_purge($this->_config->get_string('cdn.engine'))): ?> disabled="disabled"<?php endif; ?> class="button" />
373
- </p>
374
- <?php echo $this->postbox_footer(); ?>
375
-
376
- <?php echo $this->postbox_header('Browser Cache'); ?>
377
- <p>Reduce server load and decrease response time by using the cache available in site visitor's web browser.</p>
378
-
379
- <table class="form-table">
380
- <tr>
381
- <th>Browser Cache:</th>
382
- <td>
383
- <input type="hidden" name="browsercache.enabled" value="0" />
384
- <label><input class="enabled" type="checkbox" name="browsercache.enabled" value="1"<?php checked($browsercache_enabled, true); ?> />&nbsp;<strong>Enable</strong></label>
385
- <br /><span class="description">Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression and add headers to reduce server load and decrease file load time.</span>
386
- </td>
387
- </tr>
388
- </table>
389
-
390
- <p class="submit">
391
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
392
  </p>
393
  <?php echo $this->postbox_footer(); ?>
394
 
@@ -412,39 +424,10 @@
412
  <p><textarea cols="80" rows="4">Performance Optimization &lt;a href=&quot;http://www.w3-edge.com/wordpress-plugins/&quot; rel=&quot;external&quot;&gt;WordPress Plugins&lt;/a&gt; by W3 EDGE</textarea></p>
413
 
414
  <p class="submit">
415
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
416
- </p>
417
- <?php echo $this->postbox_footer(); ?>
418
-
419
- <?php echo $this->postbox_header('Debug'); ?>
420
- <p>Detailed information about each cache will be appended in (publicly available) <acronym title="Hypertext Markup Language">HTML</acronym> comments in the page's source code. Performance in this mode will not be optimal, use sparingly and disable when not in use.</p>
421
-
422
- <table class="form-table">
423
- <tr>
424
- <th>Debug Mode:</th>
425
- <td>
426
- <input type="hidden" name="pgcache.debug" value="0" />
427
- <input type="hidden" name="minify.debug" value="0" />
428
- <input type="hidden" name="dbcache.debug" value="0" />
429
- <input type="hidden" name="objectcache.debug" value="0" />
430
- <input type="hidden" name="cdn.debug" value="0" />
431
- <input type="hidden" name="varnish.debug" value="0" />
432
- <label><input type="checkbox" name="pgcache.debug" value="pgcache"<?php checked($this->_config->get_boolean('pgcache.debug'), true); ?> /> Page Cache</label><br />
433
- <label><input type="checkbox" name="minify.debug" value="minify"<?php checked($this->_config->get_boolean('minify.debug'), true); ?> /> Minify</label><br />
434
- <label><input type="checkbox" name="dbcache.debug" value="dbcache"<?php checked($this->_config->get_boolean('dbcache.debug'), true); ?> /> Database Cache</label><br />
435
- <label><input type="checkbox" name="objectcache.debug" value="objectcache"<?php checked($this->_config->get_boolean('objectcache.debug'), true); ?> /> Object Cache</label><br />
436
- <label><input type="checkbox" name="cdn.debug" value="cdn"<?php checked($this->_config->get_boolean('cdn.debug'), true); ?> /> Content Delivery Network</label><br />
437
- <label><input type="checkbox" name="varnish.debug" value="varnish"<?php checked($this->_config->get_boolean('varnish.debug'), true); ?> /> Varnish</label><br />
438
- <span class="description">If selected, detailed caching information will be appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page's source code to review.</span>
439
- </td>
440
- </tr>
441
- </table>
442
-
443
- <p class="submit">
444
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
445
  </p>
446
  <?php echo $this->postbox_footer(); ?>
447
-
448
  <?php echo $this->postbox_header('Miscellaneous'); ?>
449
  <table class="form-table">
450
  <?php if (w3_is_nginx()): ?>
@@ -470,6 +453,13 @@
470
  <br /><span class="description">Not recommended for "slow" network-based file systems.</span>
471
  </th>
472
  </tr>
 
 
 
 
 
 
 
473
  <tr>
474
  <th colspan="2">
475
  <input type="hidden" name="widget.latest.enabled" value="0" />
@@ -495,7 +485,38 @@
495
  </table>
496
 
497
  <p class="submit">
498
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  </p>
500
  <?php echo $this->postbox_footer(); ?>
501
  </div>
@@ -504,26 +525,27 @@
504
  <form action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data">
505
  <div class="metabox-holder">
506
  <?php echo $this->postbox_header('Import / Export Settings'); ?>
 
507
  <table class="form-table">
508
  <tr>
509
  <th>Import configuration:</th>
510
  <td>
511
  <input type="file" name="config_file" />
512
- <input type="submit" name="config_import" class="button" value="Upload" />
513
  <br /><span class="description">Upload and replace the active settings file.</span>
514
  </td>
515
  </tr>
516
  <tr>
517
  <th>Export configuration:</th>
518
  <td>
519
- <input type="submit" name="config_export" class="button" value="Download" />
520
  <br /><span class="description">Download the active settings file.</span>
521
  </td>
522
  </tr>
523
  <tr>
524
  <th>Reset configuration:</th>
525
  <td>
526
- <input type="submit" name="config_reset" class="button" value="Restore Default Settings" />
527
  <br /><span class="description">Revert all settings to the defaults. Any settings staged in preview mode will not be modified.</span>
528
  </td>
529
  </tr>
@@ -532,4 +554,4 @@
532
  </div>
533
  </form>
534
 
535
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <p>
5
  The plugin is currently <span class="w3tc-<?php if ($enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>. If an option is disabled it means that either your current installation is not compatible or software installation is required.
6
  </p>
7
 
8
+ <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
9
  <p>
10
  Perform a
11
+ <input type="button" class="button button-self-test {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" value="compatibility check" />,
12
+ <?php echo $this->nonce_field('w3tc'); ?>
13
+ <input class="button" type="submit" name="w3tc_flush_all" value="empty all caches"<?php if (! $can_empty_memcache && ! $can_empty_opcode && ! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> at once or
14
+ <input class="button" type="submit" name="w3tc_flush_memcached" value="empty only the memcached cache(s)"<?php if (! $can_empty_memcache): ?> disabled="disabled"<?php endif; ?> /> or
15
+ <input class="button" type="submit" name="w3tc_flush_opcode" value="empty only the opcode cache"<?php if (! $can_empty_opcode): ?> disabled="disabled"<?php endif; ?> /> or
16
+ <input class="button" type="submit" name="w3tc_flush_file" value="empty only the disk cache(s)"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />.
17
  </p>
18
  </form>
19
 
32
  <tr>
33
  <th>Preview Mode:</th>
34
  <td>
35
+ <?php echo $this->nonce_field('w3tc'); ?>
36
  <?php if ($preview): ?>
37
  <input type="hidden" name="preview" value="0" />
38
+ <input type="submit" name="w3tc_preview_save" class="button-primary" value="Disable" />
39
  <?php echo $this->button_link('Preview', w3_get_home_url() . '/?w3tc_preview=1', true); ?>
40
+ <?php echo $this->button_link('Deploy', sprintf('admin.php?page=%s&w3tc_preview_deploy', $this->_page)); ?>
41
  <?php else: ?>
42
  <input type="hidden" name="preview" value="1" />
43
+ <input type="submit" name="w3tc_preview_save" class="button-primary" value="Enable" />
44
  <?php endif; ?>
45
  <br /><span class="description">Use preview mode to test configuration scenarios prior to releasing them (deploy) on the actual site.</span>
46
  </td>
48
  </table>
49
 
50
  <p class="submit">
51
+ <?php echo $this->nonce_field('w3tc'); ?>
52
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
53
  </p>
54
  <?php echo $this->postbox_footer(); ?>
55
 
70
  <td>
71
  <select name="pgcache.engine">
72
  <optgroup label="Shared Server (disk enhanced is best):">
73
+ <option value="file"<?php selected($this->_config->get_string('pgcache.engine'), 'file'); ?>>Disk: Basic</option>
74
+ <option value="file_generic"<?php selected($this->_config->get_string('pgcache.engine'), 'file_generic'); ?><?php if (! $check_rules): ?> disabled="disabled"<?php endif; ?>>Disk: Enhanced</option>
75
  </optgroup>
76
  <optgroup label="Dedicated / Virtual Server:">
77
  <option value="apc"<?php selected($this->_config->get_string('pgcache.engine'), 'apc'); ?><?php if (! $check_apc): ?> disabled="disabled"<?php endif; ?>>Opcode: Alternative PHP Cache (APC)</option>
88
  </table>
89
 
90
  <p class="submit">
91
+ <?php echo $this->nonce_field('w3tc'); ?>
92
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
93
+ <input type="submit" name="w3tc_flush_pgcache" value="Empty cache"<?php if (! $pgcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
94
  </p>
95
  <?php echo $this->postbox_footer(); ?>
96
 
165
  </table>
166
 
167
  <p class="submit">
168
+ <?php echo $this->nonce_field('w3tc'); ?>
169
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
170
+ <input type="submit" name="w3tc_flush_minify" value="Empty cache"<?php if (! $minify_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
171
  </p>
172
  <?php echo $this->postbox_footer(); ?>
173
 
205
  </table>
206
 
207
  <p class="submit">
208
+ <?php echo $this->nonce_field('w3tc'); ?>
209
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
210
+ <input type="submit" name="w3tc_flush_dbcache" value="Empty cache"<?php if (! $dbcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
211
  </p>
212
  <?php echo $this->postbox_footer(); ?>
213
 
245
  </table>
246
 
247
  <p class="submit">
248
+ <?php echo $this->nonce_field('w3tc'); ?>
249
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
250
+ <input type="submit" name="w3tc_flush_objectcache" value="Empty cache"<?php if (! $objectcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
251
+ </p>
252
+ <?php echo $this->postbox_footer(); ?>
253
+
254
+ <?php echo $this->postbox_header('Browser Cache'); ?>
255
+ <p>Reduce server load and decrease response time by using the cache available in site visitor's web browser.</p>
256
+
257
+ <table class="form-table">
258
+ <tr>
259
+ <th>Browser Cache:</th>
260
+ <td>
261
+ <input type="hidden" name="browsercache.enabled" value="0" />
262
+ <label><input class="enabled" type="checkbox" name="browsercache.enabled" value="1"<?php checked($browsercache_enabled, true); ?> />&nbsp;<strong>Enable</strong></label>
263
+ <br /><span class="description">Enable <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression and add headers to reduce server load and decrease file load time.</span>
264
+ </td>
265
+ </tr>
266
+ </table>
267
+
268
+ <p class="submit">
269
+ <?php echo $this->nonce_field('w3tc'); ?>
270
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
271
+ </p>
272
+ <?php echo $this->postbox_footer(); ?>
273
+
274
+ <?php echo $this->postbox_header('<acronym title="Content Delivery Network">CDN</acronym>'); ?>
275
+ <p>Host static files with your content delivery network provider to reduce page load time.</p>
276
+
277
+ <table class="form-table">
278
+ <tr>
279
+ <th><acronym title="Content Delivery Network">CDN</acronym>:</th>
280
+ <td>
281
+ <input type="hidden" name="cdn.enabled" value="0" />
282
+ <label><input class="enabled" type="checkbox" name="cdn.enabled" value="1"<?php checked($cdn_enabled, true); ?> />&nbsp;<strong>Enable</strong></label>
283
+ <br /><span class="description">Theme files, media library attachments, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> files etc will appear to load instantly for site visitors.</span>
284
+ </td>
285
+ </tr>
286
+ <tr>
287
+ <th><acronym title="Content Delivery Network">CDN</acronym> Type:</th>
288
+ <td>
289
+ <select name="cdn.engine">
290
+ <optgroup label="Origin Pull (mirror is best):">
291
+ <option value="cf2"<?php selected($this->_config->get_string('cdn.engine'), 'cf2'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
292
+ <option value="cotendo"<?php selected($this->_config->get_string('cdn.engine'), 'cotendo'); ?>>Cotendo</option>
293
+ <option value="mirror"<?php selected($this->_config->get_string('cdn.engine'), 'mirror'); ?>>Generic Mirror</option>
294
+ <option value="edgecast"<?php selected($this->_config->get_string('cdn.engine'), 'edgecast'); ?>>Media Temple ProCDN / EdgeCast</option>
295
+ <option value="netdna"<?php selected($this->_config->get_string('cdn.engine'), 'netdna'); ?>>NetDNA / MaxCDN</option>
296
+ </optgroup>
297
+ <optgroup label="Origin Push:">
298
+ <option value="cf"<?php selected($this->_config->get_string('cdn.engine'), 'cf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon CloudFront</option>
299
+ <option value="s3"<?php selected($this->_config->get_string('cdn.engine'), 's3'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Amazon Simple Storage Service (S3)</option>
300
+ <option value="azure"<?php selected($this->_config->get_string('cdn.engine'), 'azure'); ?><?php if (!W3TC_PHP5): ?> disabled="disabled"<?php endif; ?>>Microsoft Azure Storage</option>
301
+ <option value="rscf"<?php selected($this->_config->get_string('cdn.engine'), 'rscf'); ?><?php if (!W3TC_PHP5 || !$check_curl): ?> disabled="disabled"<?php endif; ?>>Rackspace Cloud Files</option>
302
+ <option value="ftp"<?php selected($this->_config->get_string('cdn.engine'), 'ftp'); ?><?php if (!$check_ftp): ?> disabled="disabled"<?php endif; ?>>Self-hosted / File Transfer Protocol Upload</option>
303
+ </optgroup>
304
+ </select><br />
305
+ <span class="description">Select the <acronym title="Content Delivery Network">CDN</acronym> type you wish to use.</span>
306
+ </td>
307
+ </tr>
308
+ </table>
309
+
310
+ <p class="submit">
311
+ <?php echo $this->nonce_field('w3tc'); ?>
312
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
313
+ <input id="cdn_purge" type="button" value="Purge cache"<?php if (!$cdn_enabled || !w3_can_cdn_purge($this->_config->get_string('cdn.engine'))): ?> disabled="disabled"<?php endif; ?> class="button" />
314
+ </p>
315
+ <?php echo $this->postbox_footer(); ?>
316
+
317
+ <?php echo $this->postbox_header('Varnish'); ?>
318
+ <table class="form-table">
319
+ <tr>
320
+ <th colspan="2">
321
+ <input type="hidden" name="varnish.enabled" value="0" />
322
+ <label><input class="enabled" type="checkbox" name="varnish.enabled" value="1"<?php checked($varnish_enabled, true); ?> /> Enable varnish cache purging</label><br />
323
+ </th>
324
+ </tr>
325
+ <tr>
326
+ <th><label for="pgcache_varnish_servers">Varnish servers:</label></th>
327
+ <td>
328
+ <textarea id="pgcache_varnish_servers" name="varnish.servers" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('varnish.servers'))); ?></textarea><br />
329
+ <span class="description">Specify the IP addresses of your varnish instances above. Your <acronym title="Varnish Configuration Language">VCL</acronym>'s <acronym title="Access Control List">ACL</acronym> must allow this request.</span>
330
+ </td>
331
+ </tr>
332
+ </table>
333
+
334
+ <p class="submit">
335
+ <?php echo $this->nonce_field('w3tc'); ?>
336
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
337
  </p>
338
  <?php echo $this->postbox_footer(); ?>
339
 
340
  <?php echo $this->postbox_header('Network Performance &amp; Security powered by CloudFlare'); ?>
341
  <p>
342
  CloudFlare protects and accelerates websites. <a href="https://www.cloudflare.com/sign-up.html?affiliate=w3edge&amp;seed_domain=<?php echo w3_get_host(); ?>&amp;email=<?php echo htmlspecialchars($cloudflare_signup_email); ?>&amp;username=<?php echo htmlspecialchars($cloudflare_signup_user); ?>" target="_blank">Sign up now for free</a> to get started,
343
+ or if you have an account simply log in to obtain your <acronym title="Application Programming Interface">API</acronym> key from the <a href="https://www.cloudflare.com/my-account.html">account page</a> to enter it below.
344
  Contact the CloudFlare <a href="http://www.cloudflare.com/help.html" target="_blank">support team</a> with any questions.
345
  </p>
346
 
398
  </table>
399
 
400
  <p class="submit">
401
+ <?php echo $this->nonce_field('w3tc'); ?>
402
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
403
+ <input id="cloudflare_purge_cache" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Purge cache"<?php if (! $cloudflare_enabled): ?> disabled="disabled"<?php endif; ?> />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  </p>
405
  <?php echo $this->postbox_footer(); ?>
406
 
424
  <p><textarea cols="80" rows="4">Performance Optimization &lt;a href=&quot;http://www.w3-edge.com/wordpress-plugins/&quot; rel=&quot;external&quot;&gt;WordPress Plugins&lt;/a&gt; by W3 EDGE</textarea></p>
425
 
426
  <p class="submit">
427
+ <?php echo $this->nonce_field('w3tc'); ?>
428
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
429
  </p>
430
  <?php echo $this->postbox_footer(); ?>
 
431
  <?php echo $this->postbox_header('Miscellaneous'); ?>
432
  <table class="form-table">
433
  <?php if (w3_is_nginx()): ?>
453
  <br /><span class="description">Not recommended for "slow" network-based file systems.</span>
454
  </th>
455
  </tr>
456
+ <tr>
457
+ <th colspan="2">
458
+ <input type="hidden" name="file_nfs" value="0"<?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> />
459
+ <label><input type="checkbox" name="file_nfs" value="1"<?php checked($file_nfs, true); ?><?php if (! $can_empty_file): ?> disabled="disabled"<?php endif; ?> /> Optimize disk enhanced page and minify caching for <acronym title="Network File System">NFS</acronym></label>
460
+ <br /><span class="description">Try this option if your hosting environment uses a network based file system for a possible performance improvement.</span>
461
+ </th>
462
+ </tr>
463
  <tr>
464
  <th colspan="2">
465
  <input type="hidden" name="widget.latest.enabled" value="0" />
485
  </table>
486
 
487
  <p class="submit">
488
+ <?php echo $this->nonce_field('w3tc'); ?>
489
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
490
+ </p>
491
+ <?php echo $this->postbox_footer(); ?>
492
+
493
+ <?php echo $this->postbox_header('Debug'); ?>
494
+ <p>Detailed information about each cache will be appended in (publicly available) <acronym title="Hypertext Markup Language">HTML</acronym> comments in the page's source code. Performance in this mode will not be optimal, use sparingly and disable when not in use.</p>
495
+
496
+ <table class="form-table">
497
+ <tr>
498
+ <th>Debug Mode:</th>
499
+ <td>
500
+ <input type="hidden" name="pgcache.debug" value="<?php echo ((!$this->_config->get_boolean('pgcache.enabled') && $this->_config->get_boolean('pgcache.debug')) ? "1" : "0") ?>" />
501
+ <input type="hidden" name="minify.debug" value="<?php echo ((!$this->_config->get_boolean('minify.enabled') && $this->_config->get_boolean('minify.debug')) ? "1" : "0") ?>" />
502
+ <input type="hidden" name="dbcache.debug" value="<?php echo ((!$this->_config->get_boolean('dbcache.enabled') && $this->_config->get_boolean('dbcache.debug')) ? "1" : "0") ?>" />
503
+ <input type="hidden" name="objectcache.debug" value="<?php echo ((!$this->_config->get_boolean('objectcache.enabled') && $this->_config->get_boolean('objectcache.debug')) ? "1" : "0") ?>" />
504
+ <input type="hidden" name="cdn.debug" value="<?php echo ((!$this->_config->get_boolean('cdn.enabled') && $this->_config->get_boolean('cdn.debug')) ? "1" : "0") ?>" />
505
+ <input type="hidden" name="varnish.debug" value="<?php echo ((!$this->_config->get_boolean('varnish.enabled') && $this->_config->get_boolean('varnish.debug')) ? "1" : "0") ?>" />
506
+ <label><input type="checkbox" name="pgcache.debug" value="pgcache"<?php checked($this->_config->get_boolean('pgcache.debug') && $this->_config->get_boolean('pgcache.enabled'), true); ?> <?php if (!$this->_config->get_boolean('pgcache.enabled')): ?> disabled="disabled"<?php endif; ?>/> Page Cache</label><br />
507
+ <label><input type="checkbox" name="minify.debug" value="minify"<?php checked($this->_config->get_boolean('minify.debug') && $this->_config->get_boolean('minify.enabled'), true); ?> <?php if (!$this->_config->get_boolean('minify.enabled')): ?> disabled="disabled"<?php endif; ?>/> Minify</label><br />
508
+ <label><input type="checkbox" name="dbcache.debug" value="dbcache"<?php checked($this->_config->get_boolean('dbcache.debug') && $this->_config->get_boolean('dbcache.enabled'), true); ?> <?php if (!$this->_config->get_boolean('dbcache.enabled')): ?> disabled="disabled"<?php endif; ?>/> Database Cache</label><br />
509
+ <label><input type="checkbox" name="objectcache.debug" value="objectcache"<?php checked($this->_config->get_boolean('objectcache.debug') && $this->_config->get_boolean('objectcache.enabled'), true); ?> <?php if (!$this->_config->get_boolean('objectcache.enabled')): ?> disabled="disabled"<?php endif; ?>/> Object Cache</label><br />
510
+ <label><input type="checkbox" name="cdn.debug" value="cdn"<?php checked($this->_config->get_boolean('cdn.debug') && $this->_config->get_boolean('cdn.enabled'), true); ?> <?php if (!$this->_config->get_boolean('cdn.enabled')): ?> disabled="disabled"<?php endif; ?>/> Content Delivery Network</label><br />
511
+ <label><input type="checkbox" name="varnish.debug" value="varnish"<?php checked($this->_config->get_boolean('varnish.debug') && $this->_config->get_boolean('varnish.enabled'), true); ?> <?php if (!$this->_config->get_boolean('varnish.enabled')): ?> disabled="disabled"<?php endif; ?>/> Varnish</label><br />
512
+ <span class="description">If selected, detailed caching information will be appear at the end of each page in a <acronym title="Hypertext Markup Language">HTML</acronym> comment. View a page's source code to review.</span>
513
+ </td>
514
+ </tr>
515
+ </table>
516
+
517
+ <p class="submit">
518
+ <?php echo $this->nonce_field('w3tc'); ?>
519
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
520
  </p>
521
  <?php echo $this->postbox_footer(); ?>
522
  </div>
525
  <form action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data">
526
  <div class="metabox-holder">
527
  <?php echo $this->postbox_header('Import / Export Settings'); ?>
528
+ <?php echo $this->nonce_field('w3tc'); ?>
529
  <table class="form-table">
530
  <tr>
531
  <th>Import configuration:</th>
532
  <td>
533
  <input type="file" name="config_file" />
534
+ <input type="submit" name="w3tc_config_import" class="button" value="Upload" />
535
  <br /><span class="description">Upload and replace the active settings file.</span>
536
  </td>
537
  </tr>
538
  <tr>
539
  <th>Export configuration:</th>
540
  <td>
541
+ <input type="submit" name="w3tc_config_export" class="button" value="Download" />
542
  <br /><span class="description">Download the active settings file.</span>
543
  </td>
544
  </tr>
545
  <tr>
546
  <th>Reset configuration:</th>
547
  <td>
548
+ <input type="submit" name="w3tc_config_reset" class="button" value="Restore Default Settings" />
549
  <br /><span class="description">Revert all settings to the defaults. Any settings staged in preview mode will not be modified.</span>
550
  </td>
551
  </tr>
554
  </div>
555
  </form>
556
 
557
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/index.html ADDED
File without changes
inc/options/{install.phtml → install.php} RENAMED
@@ -1,26 +1,27 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <div id="install">
4
- <ol>
5
  <li>
6
  Set the permissions of wp-content/ back to 755, e.g.:
7
  <pre class="console"># chmod 755 /var/www/vhosts/domain.com/httpdocs/wp-content/</pre>
8
- </li>
9
  <li>On the "<a href="admin.php?page=w3tc_general">General</a>" tab and select your caching methods for page, database and minify. In most cases, "disk enhanced" mode for page cache, "disk" mode for minify and "disk" mode for database caching are "good" settings.</li>
10
  <li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_minify">Minify</a>" tab all of the recommended settings are preset. Use the help button to simplify discovery of your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files and groups. Pay close attention to the method and location of your <acronym title="JavaScript">JS</acronym> group embeddings. See the plugin's <a href="admin.php?page=w3tc_faq">FAQ</a> for more information on usage.</li>
11
- <li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_browsercache">Browser Cache</a>" tab, HTTP compression is enabled by default. Make sure to enable other options to suit your goals.</li>
12
  <li><em>Recommended:</em> If you already have a content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) provider, proceed to the "<a href="admin.php?page=w3tc_cdn">Content Delivery Network</a>" tab and populate the fields and set your preferences. If you do not use the Media Library, you will need to import your images etc into the default locations. Use the Media Library Import Tool on the "Content Delivery Network" tab to perform this task. If you do not have a <acronym title="Content Delivery Network">CDN</acronym> provider, you can still improve your site's performance using the "Self-hosted" method. On your own server, create a subdomain and matching <acronym title="Domain Name System">DNS</acronym> Zone record; e.g. static.domain.com and configure <acronym title="File Transfer Protocol">FTP</acronym> options on the "Content Delivery Network" tab accordingly. Be sure to <acronym title="File Transfer Protocol">FTP</acronym> upload the appropriate files, using the available upload buttons.</li>
13
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_dbcache">Database Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution; in either of these cases the response time of the disk may not be fast enough, so this option is disabled by default.</li>
14
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_objectcache">Object Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution, the response time of the disk may not be fast enough, so this option is disabled by default. Test this option with and without database cache to ensure that it provides a performance increase.</li>
15
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_mobile">User Agent Groups</a>" tab, specify any user agents, like mobile phones if a mobile theme is used.</li>
16
  </ol>
17
-
18
  <p>
19
  Check out the <acronym title="Frequently Asked Questions">FAQ</acronym> for more details on <a href="admin.php?page=w3tc_faq">usage</a>.
20
  </p>
21
-
22
  <hr />
23
-
24
  <?php if (count($rewrite_rules)): ?>
25
  <h3>Rewrite rules</h3>
26
 
@@ -31,12 +32,12 @@
31
 
32
  <hr />
33
  <?php endif; ?>
34
-
35
  <h3>Software Installation for Dedicated / Virtual Dedicated / Multiple Servers (Optional)</h3>
36
-
37
  <p><strong>Server Preparation:</strong><br /><em>Time required: ~1 minute</em></p>
38
-
39
- <ol>
40
  <li>
41
  <a href="http://www.google.com/search?q=installing%20yum&amp;output=search&amp;tbs=qdr:y&amp;tbo=1" target="_blank">Install yum</a> if you don't already have it. Then, if you like, you can update all of your installed software, but do so only if you have the experience and time to double check configurations afterwards:
42
  <pre class="console"># yum update</pre>
@@ -68,16 +69,16 @@
68
  </ol>
69
 
70
  <hr />
71
-
72
  <p id="memcached"><strong>Memcached (Daemon) Installation:</strong><br /><em>Time required: 2 minutes</em></p>
73
 
74
- <ol>
75
  <li>
76
  Try to install with yum:
77
  <pre class="console"># yum install libevent libevent-devel</pre>
78
-
79
  If this succeeds skip to #5. If this fails, then let's compile. Download and extract the <a href="http://www.monkey.org/~provos/libevent/" target="_blank">latest stable version</a>:
80
- <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz" target="_blank">http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz</a> &amp;&amp; tar -xzf libevent-1.4.13-stable.tar.gz &amp;&amp; cd libevent-1.4.13-stable</pre>
81
  </li>
82
  <li>
83
  Let's compile:
@@ -94,8 +95,8 @@
94
  <pre class="console"># ldconfig -v</pre>
95
  </li>
96
  <li>
97
- Now find the <a href="http://www.danga.com/memcached/download.bml" target="_blank">latest stable memcached</a>, download and extract:
98
- <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz" target="_blank">http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz</a> &amp;&amp; tar -xzf memcached-1.4.4.tar.gz &amp;&amp; cd memcached-1.4.4</pre>
99
  </li>
100
  <li>
101
  Let's compile:
@@ -118,15 +119,15 @@
118
  <hr />
119
 
120
  <p id="memcache"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Memcache Module Installation:</strong><br /><em>Time required: 1 minute</em></p>
121
-
122
- <ol>
123
  <li>
124
  Either use <acronym title="PHP Extension Community Library">PECL</acronym> (and skip to #4 if successful):
125
  <pre class="console"># pecl install memcache</pre>
126
  </li>
127
  <li>
128
  Or via compilation. Download the <a href="http://pecl.php.net/package/memcache" target="_blank">latest stable version</a> and extract:
129
- <pre class="console"># cd /usr/local/src/ &amp;&amp; wget <a href="http://pecl.php.net/get/memcache-2.2.5.tgz" target="_blank">http://pecl.php.net/get/memcache-2.2.5.tgz</a> &amp;&amp; tar -xzf memcache-2.2.5.tgz &amp;&amp; cd memcache-2.2.5</pre>
130
  </li>
131
  <li>
132
  Now we start to compile:
@@ -145,19 +146,19 @@
145
  <pre class="console"># php -r 'phpinfo();' | grep 'memcache'</pre>
146
  </li>
147
  </ol>
148
-
149
  <hr />
150
-
151
  <p id="APC"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Alternative PHP Cache (<acronym title="Alternative PHP Cache">APC</acronym>) Installation (Recommended):</strong><br /><em>Time required: 1 minute</em></p>
152
-
153
- <ol>
154
  <li>
155
  Install <acronym title="Alternative PHP Cache">APC</acronym> using the <acronym title="PHP Extension Community Library">PECL</acronym> command (and skip to #5 if successful):
156
  <pre class="console"># pecl install apc</pre>
157
  </li>
158
  <li>
159
  Or via compilation. Download the <a href="http://pecl.php.net/package/APC" target="_blank">latest stable version</a> and extract:
160
- <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://pecl.php.net/get/APC-3.1.6.tgz" target="_blank">http://pecl.php.net/get/APC-3.1.6.tgz</a> &amp;&amp; tar -xzf APC-3.0.19.tgz &amp;&amp; cd APC-3.1.6</pre>
161
  </li>
162
  <li>
163
  Note the paths returned for the following commands:
@@ -183,15 +184,15 @@
183
  <pre class="console"># php -r 'phpinfo();' | grep 'apc'</pre>
184
  </li>
185
  </ol>
186
-
187
  <hr />
188
-
189
  <p id="XCache"><strong>XCache Installation:</strong><br /><em>Time required: 1 minute</em></p>
190
-
191
- <ol>
192
  <li>
193
  Download the <a href="http://xcache.lighttpd.net/wiki/ReleaseArchive" target="_blank">latest compatible version</a> and extract:
194
- <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz" target="_blank">http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz</a> &amp;&amp; tar -xzf xcache-1.3.0.tar.gz &amp;&amp; cd xcache-1.3.0</pre>
195
  </li>
196
  <li>
197
  Note the path returned for the following command:
@@ -216,15 +217,15 @@
216
  <pre class="console"># php -r 'phpinfo();' | grep 'xcache'</pre>
217
  </li>
218
  </ol>
219
-
220
  <hr />
221
-
222
  <p id="eAccelerator"><strong>eAccelerator Installation:</strong><br /><em>Time required: 1 minute</em></p>
223
-
224
- <ol>
225
  <li>
226
  If using <acronym title="Hypertext Preprocessor">PHP</acronym> v5+, download the <a href="http://eaccelerator.net/" target="_blank">lastest compatible version</a> and extract. Remember v0.9.5.3 is the last version that supports user objects, later versions only support opcode caching.
227
- <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2" target="_blank">http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</a> &amp;&amp; tar -xjf eaccelerator-0.9.5.3.tar.bz2 &amp;&amp; cd eaccelerator-0.9.5.3</pre>
228
  </li>
229
  <li>
230
  Note the path returned for the following command:
@@ -249,9 +250,9 @@
249
  <pre class="console"># php -r 'phpinfo();' | grep 'eaccelerator'</pre>
250
  </li>
251
  </ol>
252
-
253
  <hr />
254
-
255
  <div class="metabox-holder">
256
  <?php echo $this->postbox_header('Note(s):'); ?>
257
  <table class="form-table">
@@ -272,4 +273,4 @@
272
  </div>
273
  </div>
274
 
275
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <div id="install">
5
+ <ol>
6
  <li>
7
  Set the permissions of wp-content/ back to 755, e.g.:
8
  <pre class="console"># chmod 755 /var/www/vhosts/domain.com/httpdocs/wp-content/</pre>
9
+ </li>
10
  <li>On the "<a href="admin.php?page=w3tc_general">General</a>" tab and select your caching methods for page, database and minify. In most cases, "disk enhanced" mode for page cache, "disk" mode for minify and "disk" mode for database caching are "good" settings.</li>
11
  <li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_minify">Minify</a>" tab all of the recommended settings are preset. Use the help button to simplify discovery of your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files and groups. Pay close attention to the method and location of your <acronym title="JavaScript">JS</acronym> group embeddings. See the plugin's <a href="admin.php?page=w3tc_faq">FAQ</a> for more information on usage.</li>
12
+ <li><em>Recommended:</em> On the "<a href="admin.php?page=w3tc_browsercache">Browser Cache</a>" tab, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression is enabled by default. Make sure to enable other options to suit your goals.</li>
13
  <li><em>Recommended:</em> If you already have a content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) provider, proceed to the "<a href="admin.php?page=w3tc_cdn">Content Delivery Network</a>" tab and populate the fields and set your preferences. If you do not use the Media Library, you will need to import your images etc into the default locations. Use the Media Library Import Tool on the "Content Delivery Network" tab to perform this task. If you do not have a <acronym title="Content Delivery Network">CDN</acronym> provider, you can still improve your site's performance using the "Self-hosted" method. On your own server, create a subdomain and matching <acronym title="Domain Name System">DNS</acronym> Zone record; e.g. static.domain.com and configure <acronym title="File Transfer Protocol">FTP</acronym> options on the "Content Delivery Network" tab accordingly. Be sure to <acronym title="File Transfer Protocol">FTP</acronym> upload the appropriate files, using the available upload buttons.</li>
14
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_dbcache">Database Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution; in either of these cases the response time of the disk may not be fast enough, so this option is disabled by default.</li>
15
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_objectcache">Object Cache</a>" tab the recommended settings are preset. If using a shared hosting account use the "disk" method with caution, the response time of the disk may not be fast enough, so this option is disabled by default. Test this option with and without database cache to ensure that it provides a performance increase.</li>
16
  <li><em>Optional:</em> On the "<a href="admin.php?page=w3tc_mobile">User Agent Groups</a>" tab, specify any user agents, like mobile phones if a mobile theme is used.</li>
17
  </ol>
18
+
19
  <p>
20
  Check out the <acronym title="Frequently Asked Questions">FAQ</acronym> for more details on <a href="admin.php?page=w3tc_faq">usage</a>.
21
  </p>
22
+
23
  <hr />
24
+
25
  <?php if (count($rewrite_rules)): ?>
26
  <h3>Rewrite rules</h3>
27
 
32
 
33
  <hr />
34
  <?php endif; ?>
35
+
36
  <h3>Software Installation for Dedicated / Virtual Dedicated / Multiple Servers (Optional)</h3>
37
+
38
  <p><strong>Server Preparation:</strong><br /><em>Time required: ~1 minute</em></p>
39
+
40
+ <ol>
41
  <li>
42
  <a href="http://www.google.com/search?q=installing%20yum&amp;output=search&amp;tbs=qdr:y&amp;tbo=1" target="_blank">Install yum</a> if you don't already have it. Then, if you like, you can update all of your installed software, but do so only if you have the experience and time to double check configurations afterwards:
43
  <pre class="console"># yum update</pre>
69
  </ol>
70
 
71
  <hr />
72
+
73
  <p id="memcached"><strong>Memcached (Daemon) Installation:</strong><br /><em>Time required: 2 minutes</em></p>
74
 
75
+ <ol>
76
  <li>
77
  Try to install with yum:
78
  <pre class="console"># yum install libevent libevent-devel</pre>
79
+
80
  If this succeeds skip to #5. If this fails, then let's compile. Download and extract the <a href="http://www.monkey.org/~provos/libevent/" target="_blank">latest stable version</a>:
81
+ <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://www.monkey.org/~provos/libevent-2.0.12-stable.tar.gz" target="_blank">http://monkey.org/~provos/libevent-2.0.14-stable.tar.gz</a> &amp;&amp; tar -xzf libevent-2.0.12-stable.tar.gz &amp;&amp; cd libevent-2.0.12-stable</pre>
82
  </li>
83
  <li>
84
  Let's compile:
95
  <pre class="console"># ldconfig -v</pre>
96
  </li>
97
  <li>
98
+ Now find the <a href="http://memcached.org/" target="_blank">latest stable memcached</a>, download and extract:
99
+ <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://memcached.googlecode.com/files/memcached-1.4.6.tar.gz" target="_blank">http://memcached.googlecode.com/files/memcached-1.4.6.tar.gz</a> &amp;&amp; tar -xzf memcached-1.4.6.tar.gz &amp;&amp; cd memcached-1.4.6</pre>
100
  </li>
101
  <li>
102
  Let's compile:
119
  <hr />
120
 
121
  <p id="memcache"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Memcache Module Installation:</strong><br /><em>Time required: 1 minute</em></p>
122
+
123
+ <ol>
124
  <li>
125
  Either use <acronym title="PHP Extension Community Library">PECL</acronym> (and skip to #4 if successful):
126
  <pre class="console"># pecl install memcache</pre>
127
  </li>
128
  <li>
129
  Or via compilation. Download the <a href="http://pecl.php.net/package/memcache" target="_blank">latest stable version</a> and extract:
130
+ <pre class="console"># cd /usr/local/src/ &amp;&amp; wget <a href="http://pecl.php.net/get/memcache-2.2.6.tgz" target="_blank">http://pecl.php.net/get/memcache-2.2.6.tgz</a> &amp;&amp; tar -xzf memcache-2.2.6.tgz &amp;&amp; cd memcache-2.2.6</pre>
131
  </li>
132
  <li>
133
  Now we start to compile:
146
  <pre class="console"># php -r 'phpinfo();' | grep 'memcache'</pre>
147
  </li>
148
  </ol>
149
+
150
  <hr />
151
+
152
  <p id="APC"><strong><acronym title="PHP Extension Community Library">PECL</acronym> Alternative PHP Cache (<acronym title="Alternative PHP Cache">APC</acronym>) Installation (Recommended):</strong><br /><em>Time required: 1 minute</em></p>
153
+
154
+ <ol>
155
  <li>
156
  Install <acronym title="Alternative PHP Cache">APC</acronym> using the <acronym title="PHP Extension Community Library">PECL</acronym> command (and skip to #5 if successful):
157
  <pre class="console"># pecl install apc</pre>
158
  </li>
159
  <li>
160
  Or via compilation. Download the <a href="http://pecl.php.net/package/APC" target="_blank">latest stable version</a> and extract:
161
+ <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://pecl.php.net/get/APC-3.1.9.tgz" target="_blank">http://pecl.php.net/get/APC-3.1.9.tgz</a> &amp;&amp; tar -xzf APC-3.1.9.tgz &amp;&amp; cd APC-3.1.9</pre>
162
  </li>
163
  <li>
164
  Note the paths returned for the following commands:
184
  <pre class="console"># php -r 'phpinfo();' | grep 'apc'</pre>
185
  </li>
186
  </ol>
187
+
188
  <hr />
189
+
190
  <p id="XCache"><strong>XCache Installation:</strong><br /><em>Time required: 1 minute</em></p>
191
+
192
+ <ol>
193
  <li>
194
  Download the <a href="http://xcache.lighttpd.net/wiki/ReleaseArchive" target="_blank">latest compatible version</a> and extract:
195
+ <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz" target="_blank">http://xcache.lighttpd.net/pub/Releases/1.3.2/xcache-1.3.2.tar.gz</a> &amp;&amp; tar -xzf xcache-1.3.2.tar.gz &amp;&amp; cd xcache-1.3.2</pre>
196
  </li>
197
  <li>
198
  Note the path returned for the following command:
217
  <pre class="console"># php -r 'phpinfo();' | grep 'xcache'</pre>
218
  </li>
219
  </ol>
220
+
221
  <hr />
222
+
223
  <p id="eAccelerator"><strong>eAccelerator Installation:</strong><br /><em>Time required: 1 minute</em></p>
224
+
225
+ <ol>
226
  <li>
227
  If using <acronym title="Hypertext Preprocessor">PHP</acronym> v5+, download the <a href="http://eaccelerator.net/" target="_blank">lastest compatible version</a> and extract. Remember v0.9.5.3 is the last version that supports user objects, later versions only support opcode caching.
228
+ <pre class="console"># cd /usr/local/src &amp;&amp; wget <a href="http://autosetup1.googlecode.com/files/eaccelerator-0.9.5.3.tar.bz2" target="_blank">http://autosetup1.googlecode.com/files/eaccelerator-0.9.5.3.tar.bz2</a> &amp;&amp; tar -xjf eaccelerator-0.9.5.3.tar.bz2 &amp;&amp; cd eaccelerator-0.9.5.3</pre>
229
  </li>
230
  <li>
231
  Note the path returned for the following command:
250
  <pre class="console"># php -r 'phpinfo();' | grep 'eaccelerator'</pre>
251
  </li>
252
  </ol>
253
+
254
  <hr />
255
+
256
  <div class="metabox-holder">
257
  <?php echo $this->postbox_header('Note(s):'); ?>
258
  <table class="form-table">
273
  </div>
274
  </div>
275
 
276
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{minify.phtml → minify.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  var minify_templates = {};
@@ -10,7 +11,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
10
  <?php endforeach; ?>
11
  /*]]>*/</script>
12
 
13
- <form action="admin.php">
14
  <p>
15
  Minify via
16
  <strong><?php echo w3_get_engine_name($this->_config->get_string('minify.engine')); ?></strong>
@@ -18,12 +19,12 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
18
  </p>
19
  <p>
20
  To rebuild the minify cache use the
21
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
22
- <input type="submit" name="flush_minify" value="empty cache"<?php if (! $minify_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
23
  operation.
24
  <?php if (!$auto): ?>
25
  Get minify hints using the
26
- <input type="button" class="button button-minify-recommendations" value="help" />
27
  wizard.
28
  <?php endif; ?>
29
  </p>
@@ -65,7 +66,8 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
65
  </table>
66
 
67
  <p class="submit">
68
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
69
  </p>
70
  <?php echo $this->postbox_footer(); ?>
71
 
@@ -88,7 +90,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
88
  switch ($html_engine) {
89
  case 'html':
90
  case 'htmltidy':
91
- $html_engine_file = W3TC_DIR . '/inc/options/minify/' . $html_engine . '.phtml';
92
  break;
93
  }
94
 
@@ -111,7 +113,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
111
  switch ($html_engine_file2) {
112
  case 'html':
113
  case 'htmltidy':
114
- $html_engine_file = W3TC_DIR . '/inc/options/minify/' . $html_engine . '2.phtml';
115
  break;
116
  }
117
 
@@ -122,11 +124,12 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
122
  </table>
123
 
124
  <p class="submit">
125
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
126
  </p>
127
  <?php echo $this->postbox_footer(); ?>
128
 
129
- <?php echo $this->postbox_header('JavaScript'); ?>
130
  <table class="form-table">
131
  <tr>
132
  <th><acronym title="JavaScript">JS</acronym> minify settings:</th>
@@ -146,7 +149,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
146
  case 'js':
147
  case 'yuijs':
148
  case 'ccjs':
149
- $js_engine_file = W3TC_DIR . '/inc/options/minify/' . $js_engine . '.phtml';
150
  break;
151
  }
152
 
@@ -163,7 +166,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
163
  case 'js':
164
  case 'yuijs':
165
  case 'ccjs':
166
- $js_engine_file2 = W3TC_DIR . '/inc/options/minify/' . $js_engine . '2.phtml';
167
  break;
168
  }
169
 
@@ -245,11 +248,12 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
245
  </table>
246
 
247
  <p class="submit">
248
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
249
  </p>
250
  <?php echo $this->postbox_footer(); ?>
251
 
252
- <?php echo $this->postbox_header('Cascading Style Sheets'); ?>
253
  <table class="form-table">
254
  <tr>
255
  <th><acronym title="Cascading Style Sheet">CSS</acronym> minify settings:</th>
@@ -265,7 +269,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
265
  case 'css':
266
  case 'yuicss':
267
  case 'csstidy':
268
- $css_engine_file = W3TC_DIR . '/inc/options/minify/' . $css_engine . '.phtml';
269
  break;
270
  }
271
 
@@ -292,7 +296,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
292
  case 'css':
293
  case 'yuicss':
294
  case 'csstidy':
295
- $css_engine_file2 = W3TC_DIR . '/inc/options/minify/' . $css_engine . '2.phtml';
296
  break;
297
  }
298
 
@@ -359,7 +363,8 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
359
  </table>
360
 
361
  <p class="submit">
362
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
363
  </p>
364
  <?php echo $this->postbox_footer(); ?>
365
 
@@ -370,7 +375,7 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
370
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
371
  <td>
372
  <input id="memcached_servers" type="text" name="minify.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('minify.memcached.servers'))); ?>" size="100" />
373
- <input id="memcached_test" class="button" type="button" value="Test" />
374
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
375
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
376
  </td>
@@ -404,7 +409,8 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
404
  </table>
405
 
406
  <p class="submit">
407
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
408
  </p>
409
  <?php echo $this->postbox_footer(); ?>
410
 
@@ -423,4 +429,4 @@ minify_templates['<?php echo addslashes($theme_key); ?>']['<?php echo addslashes
423
  </div>
424
  </form>
425
 
426
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  var minify_templates = {};
11
  <?php endforeach; ?>
12
  /*]]>*/</script>
13
 
14
+ <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
15
  <p>
16
  Minify via
17
  <strong><?php echo w3_get_engine_name($this->_config->get_string('minify.engine')); ?></strong>
19
  </p>
20
  <p>
21
  To rebuild the minify cache use the
22
+ <?php echo $this->nonce_field('w3tc'); ?>
23
+ <input type="submit" name="w3tc_flush_minify" value="empty cache"<?php if (! $minify_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
24
  operation.
25
  <?php if (!$auto): ?>
26
  Get minify hints using the
27
+ <input type="button" class="button button-minify-recommendations {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" value="help" />
28
  wizard.
29
  <?php endif; ?>
30
  </p>
66
  </table>
67
 
68
  <p class="submit">
69
+ <?php echo $this->nonce_field('w3tc'); ?>
70
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
71
  </p>
72
  <?php echo $this->postbox_footer(); ?>
73
 
90
  switch ($html_engine) {
91
  case 'html':
92
  case 'htmltidy':
93
+ $html_engine_file = W3TC_INC_DIR . '/options/minify/' . $html_engine . '.php';
94
  break;
95
  }
96
 
113
  switch ($html_engine_file2) {
114
  case 'html':
115
  case 'htmltidy':
116
+ $html_engine_file = W3TC_INC_DIR . '/options/minify/' . $html_engine . '2.php';
117
  break;
118
  }
119
 
124
  </table>
125
 
126
  <p class="submit">
127
+ <?php echo $this->nonce_field('w3tc'); ?>
128
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
129
  </p>
130
  <?php echo $this->postbox_footer(); ?>
131
 
132
+ <?php echo $this->postbox_header('<acronym title="JavaScript">JS</acronym>'); ?>
133
  <table class="form-table">
134
  <tr>
135
  <th><acronym title="JavaScript">JS</acronym> minify settings:</th>
149
  case 'js':
150
  case 'yuijs':
151
  case 'ccjs':
152
+ $js_engine_file = W3TC_INC_DIR . '/options/minify/' . $js_engine . '.php';
153
  break;
154
  }
155
 
166
  case 'js':
167
  case 'yuijs':
168
  case 'ccjs':
169
+ $js_engine_file2 = W3TC_INC_DIR . '/options/minify/' . $js_engine . '2.php';
170
  break;
171
  }
172
 
248
  </table>
249
 
250
  <p class="submit">
251
+ <?php echo $this->nonce_field('w3tc'); ?>
252
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
253
  </p>
254
  <?php echo $this->postbox_footer(); ?>
255
 
256
+ <?php echo $this->postbox_header('<acronym title="Cascading Style Sheet">CSS</acronym>'); ?>
257
  <table class="form-table">
258
  <tr>
259
  <th><acronym title="Cascading Style Sheet">CSS</acronym> minify settings:</th>
269
  case 'css':
270
  case 'yuicss':
271
  case 'csstidy':
272
+ $css_engine_file = W3TC_INC_DIR . '/options/minify/' . $css_engine . '.php';
273
  break;
274
  }
275
 
296
  case 'css':
297
  case 'yuicss':
298
  case 'csstidy':
299
+ $css_engine_file2 = W3TC_INC_DIR . '/options/minify/' . $css_engine . '2.php';
300
  break;
301
  }
302
 
363
  </table>
364
 
365
  <p class="submit">
366
+ <?php echo $this->nonce_field('w3tc'); ?>
367
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
368
  </p>
369
  <?php echo $this->postbox_footer(); ?>
370
 
375
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
376
  <td>
377
  <input id="memcached_servers" type="text" name="minify.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('minify.memcached.servers'))); ?>" size="100" />
378
+ <input id="memcached_test" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test" />
379
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
380
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
381
  </td>
409
  </table>
410
 
411
  <p class="submit">
412
+ <?php echo $this->nonce_field('w3tc'); ?>
413
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
414
  </p>
415
  <?php echo $this->postbox_footer(); ?>
416
 
429
  </div>
430
  </form>
431
 
432
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/minify/{ccjs.phtml → ccjs.php} RENAMED
@@ -1,2 +1,3 @@
 
1
  <input type="hidden" name="minify.ccjs.options.formatting" value="" />
2
  <label><input class="js_enabled" type="checkbox" name="minify.ccjs.options.formatting" value="pretty_print"<?php checked($this->_config->get_string('minify.ccjs.options.formatting'), 'pretty_print'); ?> /> Pretty print</label><br />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.ccjs.options.formatting" value="" />
3
  <label><input class="js_enabled" type="checkbox" name="minify.ccjs.options.formatting" value="pretty_print"<?php checked($this->_config->get_string('minify.ccjs.options.formatting'), 'pretty_print'); ?> /> Pretty print</label><br />
inc/options/minify/{ccjs2.phtml → ccjs2.php} RENAMED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
  $compilation_levels = array(
3
  'WHITESPACE_ONLY' => 'Whitespace only',
4
  'SIMPLE_OPTIMIZATIONS' => 'Simple optimizations',
@@ -18,7 +23,7 @@ $compilation_level = $this->_config->get_string('minify.ccjs.options.compilation
18
  <tr>
19
  <th>&nbsp;</th>
20
  <td>
21
- <input class="minifier_test minifier_ccjs button" type="button" value="Test Closure Compiler" />
22
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
23
  </td>
24
  </tr>
1
  <?php
2
+
3
+ if (!defined('W3TC')) {
4
+ die();
5
+ }
6
+
7
  $compilation_levels = array(
8
  'WHITESPACE_ONLY' => 'Whitespace only',
9
  'SIMPLE_OPTIMIZATIONS' => 'Simple optimizations',
23
  <tr>
24
  <th>&nbsp;</th>
25
  <td>
26
+ <input class="minifier_test button {type: 'ccjs', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test Closure Compiler" />
27
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
28
  </td>
29
  </tr>
inc/options/minify/{css.phtml → css.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <input type="hidden" name="minify.css.strip.comments" value="0" />
2
  <input type="hidden" name="minify.css.strip.crlf" value="0" />
3
  <label><input class="css_enabled" type="checkbox" name="minify.css.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.css.strip.comments'), true); ?> /> Preserved comment removal (not applied when combine only is active)</label><br />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.css.strip.comments" value="0" />
3
  <input type="hidden" name="minify.css.strip.crlf" value="0" />
4
  <label><input class="css_enabled" type="checkbox" name="minify.css.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.css.strip.comments'), true); ?> /> Preserved comment removal (not applied when combine only is active)</label><br />
inc/options/minify/{csstidy.phtml → csstidy.php} RENAMED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
  $css_levels = array(
3
  'CSS2.1',
4
  'CSS2.0',
1
  <?php
2
+
3
+ if (!defined('W3TC')) {
4
+ die();
5
+ }
6
+
7
  $css_levels = array(
8
  'CSS2.1',
9
  'CSS2.0',
inc/options/minify/{csstidy2.phtml → csstidy2.php} RENAMED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
  $csstidy_templates = array(
3
  'highest_compression' => 'Highest (no readability, smallest size)',
4
  'high_compression' => 'High (moderate readability, smaller size)',
1
  <?php
2
+
3
+ if (!defined('W3TC')) {
4
+ die();
5
+ }
6
+
7
  $csstidy_templates = array(
8
  'highest_compression' => 'Highest (no readability, smallest size)',
9
  'high_compression' => 'High (moderate readability, smaller size)',
inc/options/minify/{html.phtml → html.php} RENAMED
@@ -1,2 +1,3 @@
 
1
  <input type="hidden" name="minify.html.strip.crlf" value="0" />
2
  <label><input class="html_enabled" type="checkbox" name="minify.html.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.html.strip.crlf'), true); ?> /> Line break removal</label><br />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.html.strip.crlf" value="0" />
3
  <label><input class="html_enabled" type="checkbox" name="minify.html.strip.crlf" value="1"<?php checked($this->_config->get_boolean('minify.html.strip.crlf'), true); ?> /> Line break removal</label><br />
inc/options/minify/{htmltidy.phtml → htmltidy.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <input type="hidden" name="minify.htmltidy.options.clean" value="0" />
2
  <input type="hidden" name="minify.htmltidy.options.hide-comments" value="0" />
3
  <label><input class="html_enabled" type="checkbox" name="minify.htmltidy.options.clean" value="1"<?php checked($this->_config->get_boolean('minify.htmltidy.options.clean'), true); ?> /> Clean</label><br />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.htmltidy.options.clean" value="0" />
3
  <input type="hidden" name="minify.htmltidy.options.hide-comments" value="0" />
4
  <label><input class="html_enabled" type="checkbox" name="minify.htmltidy.options.clean" value="1"<?php checked($this->_config->get_boolean('minify.htmltidy.options.clean'), true); ?> /> Clean</label><br />
inc/options/minify/{htmltidy2.phtml → htmltidy2.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th><label for="minify_htmltidy_options_wrap">Wrap after:</label></th>
3
  <td><input id="minify_htmltidy_options_wrap" class="html_enabled" type="text" name="minify.htmltidy.options.wrap" value="<?php echo htmlspecialchars($this->_config->get_integer('minify.htmltidy.options.wrap')); ?>" size="8" style="text-align: right;" /> symbols (set to 0 to disable)</td>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th><label for="minify_htmltidy_options_wrap">Wrap after:</label></th>
4
  <td><input id="minify_htmltidy_options_wrap" class="html_enabled" type="text" name="minify.htmltidy.options.wrap" value="<?php echo htmlspecialchars($this->_config->get_integer('minify.htmltidy.options.wrap')); ?>" size="8" style="text-align: right;" /> symbols (set to 0 to disable)</td>
inc/options/minify/index.html ADDED
File without changes
inc/options/minify/{js.phtml → js.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <input type="hidden" name="minify.js.strip.comments" value="0" />
2
  <input type="hidden" name="minify.js.strip.crlf" value="0" />
3
  <label><input class="js_enabled" type="checkbox" name="minify.js.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.comments'), true); ?> /> Preserved comment removal (not applied when combine only is active)</label><br />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.js.strip.comments" value="0" />
3
  <input type="hidden" name="minify.js.strip.crlf" value="0" />
4
  <label><input class="js_enabled" type="checkbox" name="minify.js.strip.comments" value="1"<?php checked($this->_config->get_boolean('minify.js.strip.comments'), true); ?> /> Preserved comment removal (not applied when combine only is active)</label><br />
inc/options/minify/{yuicss2.phtml → yuicss2.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th><label for="minify_yuicss_path_java">Path to JAVA executable:</label></th>
3
  <td><input class="css_enabled" id="minify_yuicss_path_java" type="text" name="minify.yuicss.path.java" value="<?php echo htmlspecialchars($this->_config->get_string('minify.yuicss.path.java')); ?>" size="100" /></td>
@@ -9,7 +10,7 @@
9
  <tr>
10
  <th>&nbsp;</th>
11
  <td>
12
- <input class="minifier_test minifier_yuicss button" type="button" value="Test YUI Compressor" />
13
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
14
  </td>
15
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th><label for="minify_yuicss_path_java">Path to JAVA executable:</label></th>
4
  <td><input class="css_enabled" id="minify_yuicss_path_java" type="text" name="minify.yuicss.path.java" value="<?php echo htmlspecialchars($this->_config->get_string('minify.yuicss.path.java')); ?>" size="100" /></td>
10
  <tr>
11
  <th>&nbsp;</th>
12
  <td>
13
+ <input class="minifier_test button {type: 'yuicss', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test YUI Compressor" />
14
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
15
  </td>
16
  </tr>
inc/options/minify/{yuijs.phtml → yuijs.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <input type="hidden" name="minify.yuijs.options.nomunge" value="0" />
2
  <input type="hidden" name="minify.yuijs.options.preserve-semi" value="0" />
3
  <input type="hidden" name="minify.yuijs.options.disable-optimizations" value="0" />
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <input type="hidden" name="minify.yuijs.options.nomunge" value="0" />
3
  <input type="hidden" name="minify.yuijs.options.preserve-semi" value="0" />
4
  <input type="hidden" name="minify.yuijs.options.disable-optimizations" value="0" />
inc/options/minify/{yuijs2.phtml → yuijs2.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <tr>
2
  <th><label for="minify_yuijs_path_java">Path to JAVA executable:</label></th>
3
  <td><input id="minify_yuijs_path_java" class="js_enabled" type="text" name="minify.yuijs.path.java" value="<?php echo htmlspecialchars($this->_config->get_string('minify.yuijs.path.java')); ?>" size="100" /></td>
@@ -9,7 +10,7 @@
9
  <tr>
10
  <th>&nbsp;</th>
11
  <td>
12
- <input class="minifier_test minifier_yuijs button" type="button" value="Test YUI Compressor" />
13
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
14
  </td>
15
  </tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <tr>
3
  <th><label for="minify_yuijs_path_java">Path to JAVA executable:</label></th>
4
  <td><input id="minify_yuijs_path_java" class="js_enabled" type="text" name="minify.yuijs.path.java" value="<?php echo htmlspecialchars($this->_config->get_string('minify.yuijs.path.java')); ?>" size="100" /></td>
10
  <tr>
11
  <th>&nbsp;</th>
12
  <td>
13
+ <input class="minifier_test button {type: 'yuijs', nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test YUI Compressor" />
14
  <span class="minifier_test_status w3tc-status w3tc-process"></span>
15
  </td>
16
  </tr>
inc/options/{mobile.phtml → mobile.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  var mobile_themes = {};
@@ -78,10 +79,11 @@ mobile_themes['<?php echo addslashes($theme_key); ?>'] = '<?php echo addslashes(
78
  <div id="mobile_groups_empty" style="display: none;">No groups added. All user agents recieve the same page and minify cache results.</div>
79
 
80
  <p class="submit">
81
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
82
  </p>
83
  <?php echo $this->postbox_footer(); ?>
84
  </div>
85
  </form>
86
 
87
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  var mobile_themes = {};
79
  <div id="mobile_groups_empty" style="display: none;">No groups added. All user agents recieve the same page and minify cache results.</div>
80
 
81
  <p class="submit">
82
+ <?php echo $this->nonce_field('w3tc'); ?>
83
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
84
  </p>
85
  <?php echo $this->postbox_footer(); ?>
86
  </div>
87
  </form>
88
 
89
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{objectcache.phtml → objectcache.php} RENAMED
@@ -1,37 +1,22 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
- <form action="admin.php">
4
  <p>
5
  Object caching via
6
  <strong><?php echo w3_get_engine_name($this->_config->get_string('objectcache.engine')); ?></strong>
7
  is currently <span class="w3tc-<?php if ($objectcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
8
  </p>
9
  <p>
10
- To rebuild the object cache use the
11
- <input type="submit" name="flush_objectcache" value="empty cache"<?php if (! $objectcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
 
12
  operation.
13
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
14
  </p>
15
  </form>
16
 
17
  <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
18
  <div class="metabox-holder">
19
- <?php echo $this->postbox_header('General'); ?>
20
- <table class="form-table">
21
- <tr>
22
- <th>
23
- <input type="hidden" name="objectcache.reject.admin" value="0" />
24
- <label><input type="checkbox" name="objectcache.reject.admin" value="1"<?php checked($this->_config->get_boolean('objectcache.reject.admin'), true); ?> /> Don't cache WordPress Admin</label>
25
- <br /><span class="description">Leave this option checked to maintain default WordPress Admin behavior.</span>
26
- </th>
27
- </tr>
28
- </table>
29
-
30
- <p class="submit">
31
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
32
- </p>
33
- <?php echo $this->postbox_footer(); ?>
34
-
35
  <?php echo $this->postbox_header('Advanced'); ?>
36
  <table class="form-table">
37
  <?php if ($this->_config->get_string('objectcache.engine') == 'memcached'): ?>
@@ -39,7 +24,7 @@
39
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
40
  <td>
41
  <input id="memcached_servers" type="text" name="objectcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('objectcache.memcached.servers'))); ?>" size="100" />
42
- <input id="memcached_test" class="button" type="button" value="Test" />
43
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
44
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
45
  </td>
@@ -59,13 +44,6 @@
59
  <br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
60
  </td>
61
  </tr>
62
- <tr>
63
- <th><label for="objectcache_reject_uri">Never cache the following pages:</label></th>
64
- <td>
65
- <textarea id="objectcache_reject_uri" name="objectcache.reject.uri" cols="40" rows="5"><?php echo htmlspecialchars(implode("\r\n", $this->_config->get_array('objectcache.reject.uri'))); ?></textarea>
66
- <br /><span class="description">Always ignore the specified pages / directories.</span>
67
- </td>
68
- </tr>
69
  <tr>
70
  <th><label for="objectcache_groups_global">Global groups:</label></th>
71
  <td>
@@ -83,10 +61,11 @@
83
  </table>
84
 
85
  <p class="submit">
86
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
87
  </p>
88
  <?php echo $this->postbox_footer(); ?>
89
- </div>
90
  </form>
91
 
92
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
+ <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
5
  <p>
6
  Object caching via
7
  <strong><?php echo w3_get_engine_name($this->_config->get_string('objectcache.engine')); ?></strong>
8
  is currently <span class="w3tc-<?php if ($objectcache_enabled): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.
9
  </p>
10
  <p>
11
+ To rebuild the object cache use the
12
+ <?php echo $this->nonce_field('w3tc'); ?>
13
+ <input type="submit" name="w3tc_flush_objectcache" value="empty cache"<?php if (! $objectcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
14
  operation.
 
15
  </p>
16
  </form>
17
 
18
  <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
19
  <div class="metabox-holder">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  <?php echo $this->postbox_header('Advanced'); ?>
21
  <table class="form-table">
22
  <?php if ($this->_config->get_string('objectcache.engine') == 'memcached'): ?>
24
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
25
  <td>
26
  <input id="memcached_servers" type="text" name="objectcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('objectcache.memcached.servers'))); ?>" size="100" />
27
+ <input id="memcached_test" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test" />
28
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
29
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
30
  </td>
44
  <br /><span class="description">If caching to disk, specify how frequently expired cache data is removed. For busy sites, a lower value is best.</span>
45
  </td>
46
  </tr>
 
 
 
 
 
 
 
47
  <tr>
48
  <th><label for="objectcache_groups_global">Global groups:</label></th>
49
  <td>
61
  </table>
62
 
63
  <p class="submit">
64
+ <?php echo $this->nonce_field('w3tc'); ?>
65
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
66
  </p>
67
  <?php echo $this->postbox_footer(); ?>
68
+ </div>
69
  </form>
70
 
71
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{pgcache.phtml → pgcache.php} RENAMED
@@ -1,6 +1,7 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
- <form action="admin.php">
4
  <p>
5
  Page caching via
6
  <strong><?php echo w3_get_engine_name($this->_config->get_string('pgcache.engine')); ?></strong>
@@ -8,9 +9,9 @@
8
  </p>
9
  <p>
10
  To rebuild the page cache use the
 
11
  <input type="submit" name="flush_pgcache" value="empty cache"<?php if (! $pgcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
12
  operation.
13
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
14
  </p>
15
  </form>
16
 
@@ -18,13 +19,6 @@
18
  <div class="metabox-holder">
19
  <?php echo $this->postbox_header('General'); ?>
20
  <table class="form-table">
21
- <tr>
22
- <th>
23
- <input type="hidden" name="pgcache.reject.logged" value="0" />
24
- <label><input type="checkbox" name="pgcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('pgcache.reject.logged'), true); ?> /> Don't cache pages for logged in users</label><br />
25
- <span class="description">Users that have signed in to WordPress (e.g. administrators) will never view cached pages if enabled.</span>
26
- </th>
27
- </tr>
28
  <tr>
29
  <th>
30
  <input type="hidden" name="pgcache.cache.home" value="0" />
@@ -39,6 +33,13 @@
39
  <span class="description">Even if using a feed proxy service (like <a href="http://en.wikipedia.org/wiki/FeedBurner" target="_blank">FeedBurner</a>), enabling this option is still recommended.</span>
40
  </th>
41
  </tr>
 
 
 
 
 
 
 
42
  <tr>
43
  <th>
44
  <input type="hidden" name="pgcache.cache.query" value="0"<?php if ($this->_config->get_string('pgcache.engine') == 'file_generic'): ?> disabled="disabled"<?php endif; ?> />
@@ -50,13 +51,28 @@
50
  <th>
51
  <input type="hidden" name="pgcache.cache.404" value="0" />
52
  <label><input type="checkbox" name="pgcache.cache.404" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.404'), true); ?> /> Cache 404 (not found) pages</label><br />
53
- <span class="description">Reduce server load by caching 404 pages. The "Do not process 404 errors for static objects with WordPress" <a href="admin.php?page=w3tc_browsercache">Browser Cache</a> option is also recommended.</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  </th>
55
  </tr>
56
  </table>
57
 
58
  <p class="submit">
59
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
60
  </p>
61
  <?php echo $this->postbox_footer(); ?>
62
 
@@ -67,7 +83,7 @@
67
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
68
  <td>
69
  <input id="memcached_servers" type="text" name="pgcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('pgcache.memcached.servers'))); ?>" size="100" />
70
- <input id="memcached_test" class="button" type="button" value="Test" />
71
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
72
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
73
  </td>
@@ -127,7 +143,8 @@
127
  </table>
128
 
129
  <p class="submit">
130
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
131
  </p>
132
  <?php echo $this->postbox_footer(); ?>
133
 
@@ -163,7 +180,8 @@
163
  </table>
164
 
165
  <p class="submit">
166
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
167
  </p>
168
  <?php echo $this->postbox_footer(); ?>
169
 
@@ -225,7 +243,8 @@
225
  </table>
226
 
227
  <p class="submit">
228
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
229
  </p>
230
  <?php echo $this->postbox_footer(); ?>
231
 
@@ -244,4 +263,4 @@
244
  </div>
245
  </form>
246
 
247
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
+ <form action="admin.php?page=<?php echo $this->_page; ?>" method="post">
5
  <p>
6
  Page caching via
7
  <strong><?php echo w3_get_engine_name($this->_config->get_string('pgcache.engine')); ?></strong>
9
  </p>
10
  <p>
11
  To rebuild the page cache use the
12
+ <?php echo $this->nonce_field('w3tc'); ?>
13
  <input type="submit" name="flush_pgcache" value="empty cache"<?php if (! $pgcache_enabled): ?> disabled="disabled"<?php endif; ?> class="button" />
14
  operation.
 
15
  </p>
16
  </form>
17
 
19
  <div class="metabox-holder">
20
  <?php echo $this->postbox_header('General'); ?>
21
  <table class="form-table">
 
 
 
 
 
 
 
22
  <tr>
23
  <th>
24
  <input type="hidden" name="pgcache.cache.home" value="0" />
33
  <span class="description">Even if using a feed proxy service (like <a href="http://en.wikipedia.org/wiki/FeedBurner" target="_blank">FeedBurner</a>), enabling this option is still recommended.</span>
34
  </th>
35
  </tr>
36
+ <tr>
37
+ <th>
38
+ <input type="hidden" name="pgcache.cache.ssl" value="0" />
39
+ <label><input type="checkbox" name="pgcache.cache.ssl" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.ssl'), true); ?> /> Cache <acronym titlte="Secure Socket Layer">SSL</acronym> (<acronym title="HyperText Transfer Protocol over SSL">https</acronym>) requests</label><br />
40
+ <span class="description">Cache <acronym titlte="Secure Socket Layer">SSL</acronym> requests (uniquely) for improved performance.</span>
41
+ </th>
42
+ </tr>
43
  <tr>
44
  <th>
45
  <input type="hidden" name="pgcache.cache.query" value="0"<?php if ($this->_config->get_string('pgcache.engine') == 'file_generic'): ?> disabled="disabled"<?php endif; ?> />
51
  <th>
52
  <input type="hidden" name="pgcache.cache.404" value="0" />
53
  <label><input type="checkbox" name="pgcache.cache.404" value="1"<?php checked($this->_config->get_boolean('pgcache.cache.404'), true); ?> /> Cache 404 (not found) pages</label><br />
54
+ <span class="description">Reduce server load by caching 404 pages. If the disk enhanced method of disk caching is used, 404 pages will be returned with a 200 response code. Use at your own risk.</span>
55
+ </th>
56
+ </tr>
57
+ <tr>
58
+ <th>
59
+ <input type="hidden" name="pgcache.check.domain" value="0" />
60
+ <label><input type="checkbox" name="pgcache.check.domain" value="1"<?php checked($this->_config->get_boolean('pgcache.check.domain'), true); ?> /> Cache requests only for <?php echo w3_get_home_domain(); ?> hostname</label><br />
61
+ <span class="description">Cache only requests with the same <acronym title="Uniform Resource Indicator">URL</acronym> as the site's <a href="options-general.php">site address</a>.</span>
62
+ </th>
63
+ </tr>
64
+ <tr>
65
+ <th>
66
+ <input type="hidden" name="pgcache.reject.logged" value="0" />
67
+ <label><input type="checkbox" name="pgcache.reject.logged" value="1"<?php checked($this->_config->get_boolean('pgcache.reject.logged'), true); ?> /> Don't cache pages for logged in users</label><br />
68
+ <span class="description">Users that have signed in to WordPress (e.g. administrators) will never view cached pages if enabled.</span>
69
  </th>
70
  </tr>
71
  </table>
72
 
73
  <p class="submit">
74
+ <?php echo $this->nonce_field('w3tc'); ?>
75
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
76
  </p>
77
  <?php echo $this->postbox_footer(); ?>
78
 
83
  <th><label for="memcached_servers">Memcached hostname:port / <acronym title="Internet Protocol">IP</acronym>:port:</label></th>
84
  <td>
85
  <input id="memcached_servers" type="text" name="pgcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $this->_config->get_array('pgcache.memcached.servers'))); ?>" size="100" />
86
+ <input id="memcached_test" class="button {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Test" />
87
  <span id="memcached_test_status" class="w3tc-status w3tc-process"></span>
88
  <br /><span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
89
  </td>
143
  </table>
144
 
145
  <p class="submit">
146
+ <?php echo $this->nonce_field('w3tc'); ?>
147
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
148
  </p>
149
  <?php echo $this->postbox_footer(); ?>
150
 
180
  </table>
181
 
182
  <p class="submit">
183
+ <?php echo $this->nonce_field('w3tc'); ?>
184
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
185
  </p>
186
  <?php echo $this->postbox_footer(); ?>
187
 
243
  </table>
244
 
245
  <p class="submit">
246
+ <?php echo $this->nonce_field('w3tc'); ?>
247
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
248
  </p>
249
  <?php echo $this->postbox_footer(); ?>
250
 
263
  </div>
264
  </form>
265
 
266
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/{referrer.phtml → referrer.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  var referrer_themes = {};
@@ -78,10 +79,11 @@ referrer_themes['<?php echo addslashes($theme_key); ?>'] = '<?php echo addslashe
78
  <div id="referrer_groups_empty" style="display: none;">No groups added. All referrers recieve the same page and minify cache results.</div>
79
 
80
  <p class="submit">
81
- <input type="submit" name="options_save" class="w3tc-button-save button-primary" value="Save all settings" />
 
82
  </p>
83
  <?php echo $this->postbox_footer(); ?>
84
  </div>
85
  </form>
86
 
87
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  var referrer_themes = {};
79
  <div id="referrer_groups_empty" style="display: none;">No groups added. All referrers recieve the same page and minify cache results.</div>
80
 
81
  <p class="submit">
82
+ <?php echo $this->nonce_field('w3tc'); ?>
83
+ <input type="submit" name="w3tc_save_options" class="w3tc-button-save button-primary" value="Save all settings" />
84
  </p>
85
  <?php echo $this->postbox_footer(); ?>
86
  </div>
87
  </form>
88
 
89
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/support.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/options/common/header.php'; ?>
3
+ <p>
4
+ Request professional services, suggest a feature or submit a bug using the form below:
5
+ </p>
6
+
7
+ <div id="support_container">
8
+ <?php
9
+ if (!$request_type || !isset($this->_request_types[$request_type])) {
10
+ $this->action_support_select();
11
+ } else {
12
+ if (isset($this->_request_prices[$request_type]) && !$payment) {
13
+ $this->action_support_payment();
14
+ } else {
15
+ $this->action_support_form();
16
+ }
17
+ }
18
+ ?>
19
+ </div>
20
+
21
+ <?php include W3TC_INC_DIR . '/options/common/footer.php'; ?>
inc/options/support.phtml DELETED
@@ -1,38 +0,0 @@
1
- <?php if (! $ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
2
- <p>
3
- Request professional services, suggest a feature or submit a bug using the form below:
4
- </p>
5
-
6
- <div id="support_container">
7
- <?php endif; ?>
8
- <form id="support_form" class="w3tc-ignore-change" action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data">
9
- <div class="metabox-holder">
10
- <?php include W3TC_DIR . '/inc/options/support/' . $request_type . '.phtml'; ?>
11
-
12
- <?php echo $this->postbox_header('Note(s):'); ?>
13
- <table class="form-table">
14
- <tr>
15
- <th colspan="2">
16
- <ul>
17
- <li>All submitted data will not be saved and is used solely for the purposes your support request. You will not be added to a mailing list, solicited without your permission, nor will your site be administered after this support case is closed.</li>
18
- <li>Instead of providing your primary administrative or <acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> accounts, create a new administrator account that can be disabled when the support case is closed.</li>
19
- <li>Please add the domain w3-edge.com to your <a href="http://en.wikipedia.org/wiki/Whitelist" target="_blank">email whitelist</a> as soon as possible.</li>
20
- </ul>
21
- </th>
22
- </tr>
23
- </table>
24
- <?php echo $this->postbox_footer(); ?>
25
-
26
- <p>
27
- <input type="hidden" name="request_type" value="<?php echo $request_type; ?>" />
28
- <input type="hidden" name="request_id" value="<?php echo $request_id; ?>" />
29
- <input type="hidden" name="payment" value="<?php echo $payment; ?>" />
30
- <input type="submit" name="support_request" class="button-primary" value="Submit request" />
31
- <input id="support_cancel" type="button" value="Cancel" class="button-primary" />
32
- </p>
33
- </div>
34
- </form>
35
- <?php if (! $ajax): ?>
36
- </div>
37
-
38
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/options/support/form.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <form id="support_form" class="w3tc-ignore-change" action="admin.php?page=<?php echo $this->_page; ?>" method="post" enctype="multipart/form-data">
3
+ <div class="metabox-holder">
4
+ <?php include W3TC_INC_DIR . '/options/support/form/' . $request_type . '.php'; ?>
5
+
6
+ <?php echo $this->postbox_header('Note(s):'); ?>
7
+ <table class="form-table">
8
+ <tr>
9
+ <th colspan="2">
10
+ <ul>
11
+ <li>All submitted data will not be saved and is used solely for the purposes your support request. You will not be added to a mailing list, solicited without your permission, nor will your site be administered after this support case is closed.</li>
12
+ <li>Instead of providing your primary administrative or <acronym title="Secure Shell">SSH</acronym> / <acronym title="File Transfer Protocol">FTP</acronym> accounts, create a new administrator account that can be disabled when the support case is closed.</li>
13
+ <li>Please add the domain w3-edge.com to your <a href="http://en.wikipedia.org/wiki/Whitelist" target="_blank">email whitelist</a> as soon as possible.</li>
14
+ </ul>
15
+ </th>
16
+ </tr>
17
+ </table>
18
+ <?php echo $this->postbox_footer(); ?>
19
+
20
+ <p>
21
+ <input type="hidden" name="request_type" value="<?php echo $request_type; ?>" />
22
+ <input type="hidden" name="request_id" value="<?php echo $request_id; ?>" />
23
+ <input type="hidden" name="payment" value="<?php echo $payment; ?>" />
24
+ <?php echo $this->nonce_field('w3tc'); ?>
25
+ <input type="submit" name="w3tc_support_request" class="button-primary" value="Submit request" />
26
+ <input id="support_cancel" class="{nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Cancel" class="button-primary" />
27
+ </p>
28
+ </div>
29
+ </form>
inc/options/support/{bug_report.phtml → form/bug_report.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
inc/options/support/{phone_support.phtml → form/email_support.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
@@ -20,10 +21,6 @@
20
  <th><label for="support_twitter">Twitter ID:</label></th>
21
  <td><input id="support_twitter" type="text" name="twitter" value="<?php echo htmlspecialchars($twitter); ?>" size="80" /></td>
22
  </tr>
23
- <tr>
24
- <th><label for="support_phone">Phone:</label></th>
25
- <td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
26
- </tr>
27
  <tr>
28
  <th><label for="support_subject">Subject:</label></th>
29
  <td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
@@ -52,6 +49,10 @@
52
 
53
  <?php echo $this->postbox_header('Additional information'); ?>
54
  <table class="form-table">
 
 
 
 
55
  <tr>
56
  <th><label for="support_forum_url">Forum Topic URL:</label></th>
57
  <td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
21
  <th><label for="support_twitter">Twitter ID:</label></th>
22
  <td><input id="support_twitter" type="text" name="twitter" value="<?php echo htmlspecialchars($twitter); ?>" size="80" /></td>
23
  </tr>
 
 
 
 
24
  <tr>
25
  <th><label for="support_subject">Subject:</label></th>
26
  <td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
49
 
50
  <?php echo $this->postbox_header('Additional information'); ?>
51
  <table class="form-table">
52
+ <tr>
53
+ <th><label for="support_phone">Phone:</label></th>
54
+ <td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
55
+ </tr>
56
  <tr>
57
  <th><label for="support_forum_url">Forum Topic URL:</label></th>
58
  <td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
inc/options/support/form/index.html ADDED
File without changes
inc/options/support/{linux_config.phtml → form/linux_config.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
inc/options/support/{new_feature.phtml → form/new_feature.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
inc/options/support/{email_support.phtml → form/phone_support.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
@@ -20,6 +21,10 @@
20
  <th><label for="support_twitter">Twitter ID:</label></th>
21
  <td><input id="support_twitter" type="text" name="twitter" value="<?php echo htmlspecialchars($twitter); ?>" size="80" /></td>
22
  </tr>
 
 
 
 
23
  <tr>
24
  <th><label for="support_subject">Subject:</label></th>
25
  <td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
@@ -48,10 +53,6 @@
48
 
49
  <?php echo $this->postbox_header('Additional information'); ?>
50
  <table class="form-table">
51
- <tr>
52
- <th><label for="support_phone">Phone:</label></th>
53
- <td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
54
- </tr>
55
  <tr>
56
  <th><label for="support_forum_url">Forum Topic URL:</label></th>
57
  <td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
21
  <th><label for="support_twitter">Twitter ID:</label></th>
22
  <td><input id="support_twitter" type="text" name="twitter" value="<?php echo htmlspecialchars($twitter); ?>" size="80" /></td>
23
  </tr>
24
+ <tr>
25
+ <th><label for="support_phone">Phone:</label></th>
26
+ <td><input id="support_phone" type="text" name="phone" value="<?php echo htmlspecialchars($phone); ?>" size="80" /></td>
27
+ </tr>
28
  <tr>
29
  <th><label for="support_subject">Subject:</label></th>
30
  <td><input id="support_subject" type="text" name="subject" value="<?php echo htmlspecialchars($subject); ?>" size="80" /></td>
53
 
54
  <?php echo $this->postbox_header('Additional information'); ?>
55
  <table class="form-table">
 
 
 
 
56
  <tr>
57
  <th><label for="support_forum_url">Forum Topic URL:</label></th>
58
  <td><input id="support_forum_url" type="text" name="forum_url" value="<?php echo htmlspecialchars($forum_url); ?>" size="80" /></td>
inc/options/support/{plugin_config.phtml → form/plugin_config.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information', 'required'); ?>
2
  <table class="form-table">
3
  <tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information', 'required'); ?>
3
  <table class="form-table">
4
  <tr>
inc/options/support/{theme_config.phtml → form/theme_config.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php echo $this->postbox_header('Required information'); ?>
2
  <table class="form-table">
3
  <tr>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php echo $this->postbox_header('Required information'); ?>
3
  <table class="form-table">
4
  <tr>
inc/options/support/index.html ADDED
File without changes
inc/options/support/payment.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <form action="<?php echo W3TC_PAYPAL_URL; ?>" method="get">
3
+ <div class="metabox-holder">
4
+ <?php echo $this->postbox_header('Request payment'); ?>
5
+
6
+ <p><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></p>
7
+
8
+ <p><strong>Price: <?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?> USD</strong></p>
9
+
10
+ <p>
11
+ <input type="hidden" name="cmd" value="_xclick" />
12
+ <input type="hidden" name="business" value="<?php echo W3TC_PAYPAL_BUSINESS; ?>" />
13
+ <input type="hidden" name="item_name" value="<?php echo htmlspecialchars(sprintf('%s: %s (#%s)', ucfirst(w3_get_host()), $this->_request_types[$request_type], $request_id)); ?>" />
14
+ <input type="hidden" name="amount" value="<?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?>" />
15
+ <input type="hidden" name="currency_code" value="USD" />
16
+ <input type="hidden" name="no_shipping" value="1" />
17
+ <input type="hidden" name="rm" value="2" />
18
+ <input type="hidden" name="return" value="<?php echo htmlspecialchars($return_url); ?>" />
19
+ <input type="hidden" name="cancel_return" value="<?php echo htmlspecialchars($cancel_url); ?>" />
20
+ <input type="submit" class="button-primary" value="Buy now" />
21
+ <input id="support_cancel" class="{nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="Cancel" class="button-primary" />
22
+ </p>
23
+ <?php echo $this->postbox_footer(); ?>
24
+ </div>
25
+ </form>
inc/options/support/select.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <div class="metabox-holder">
3
+ <?php echo $this->postbox_header('Choose request type'); ?>
4
+ <table class="form-table">
5
+ <tr>
6
+ <th><label for="support_request_type">Request type:</label></th>
7
+ <td>
8
+ <select id="support_request_type" class="w3tc-ignore-change {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" name="request_type">
9
+ <option value="">-- Choose Type --</option>
10
+ <?php foreach ($this->_request_groups as $_request_group => $_request_types): ?>
11
+ <optgroup label="<?php echo htmlspecialchars($_request_group); ?>:">
12
+ <?php foreach ($_request_types as $_request_type): ?>
13
+ <option value="<?php echo $_request_type; ?>"><?php echo htmlspecialchars($this->_request_types[$_request_type]); ?></option>
14
+ <?php endforeach; ?>
15
+ </optgroup>
16
+ <?php endforeach; ?>
17
+ </select>
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ <?php echo $this->postbox_footer(); ?>
22
+ </div>
inc/options/support_payment.phtml DELETED
@@ -1,35 +0,0 @@
1
- <?php if (!$ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
2
- <p>
3
- Request professional services, suggest a feature or submit a bug using the form below:
4
- </p>
5
-
6
- <div id="support_container">
7
- <?php endif; ?>
8
- <form action="<?php echo W3TC_PAYPAL_URL; ?>" method="get">
9
- <div class="metabox-holder">
10
- <?php echo $this->postbox_header('Request payment'); ?>
11
-
12
- <p><?php echo htmlspecialchars($this->_request_types[$request_type]); ?></p>
13
-
14
- <p><strong>Price: <?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?> USD</strong></p>
15
-
16
- <p>
17
- <input type="hidden" name="cmd" value="_xclick" />
18
- <input type="hidden" name="business" value="<?php echo W3TC_PAYPAL_BUSINESS; ?>" />
19
- <input type="hidden" name="item_name" value="<?php echo htmlspecialchars(sprintf('%s: %s (#%s)', ucfirst(w3_get_host()), $this->_request_types[$request_type], $request_id)); ?>" />
20
- <input type="hidden" name="amount" value="<?php echo sprintf('%.2f', $this->_request_prices[$request_type]); ?>" />
21
- <input type="hidden" name="currency_code" value="USD" />
22
- <input type="hidden" name="no_shipping" value="1" />
23
- <input type="hidden" name="rm" value="2" />
24
- <input type="hidden" name="return" value="<?php echo htmlspecialchars($return_url); ?>" />
25
- <input type="hidden" name="cancel_return" value="<?php echo htmlspecialchars($cancel_url); ?>" />
26
- <input type="submit" class="button-primary" value="Buy now" />
27
- <input id="support_cancel" type="button" value="Cancel" class="button-primary" />
28
- </p>
29
- <?php echo $this->postbox_footer(); ?>
30
- </div>
31
- </form>
32
- <?php if (! $ajax): ?>
33
- </div>
34
-
35
- <?php include W3TC_DIR . '/inc/options/common/footer.phtml'; endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/options/support_select.phtml DELETED
@@ -1,34 +0,0 @@
1
- <?php if (! $ajax): include W3TC_DIR . '/inc/options/common/header.phtml'; ?>
2
- <p>
3
- Request professional services, suggest a feature or submit a bug using the form below:
4
- </p>
5
- <?php endif; ?>
6
-
7
- <div id="support_container">
8
- <form id="support_select_form" class="w3tc-ignore-change" action="admin.php" method="get">
9
- <div class="metabox-holder">
10
- <?php echo $this->postbox_header('Choose request type'); ?>
11
- <table class="form-table">
12
- <tr>
13
- <th><label for="support_request_type">Request type:</label></th>
14
- <td>
15
- <input type="hidden" name="page" value="<?php echo $this->_page; ?>" />
16
- <select id="support_request_type" name="request_type">
17
- <option value="">-- Choose Type --</option>
18
- <?php foreach ($this->_request_groups as $_request_group => $_request_types): ?>
19
- <optgroup label="<?php echo htmlspecialchars($_request_group); ?>:">
20
- <?php foreach ($_request_types as $_request_type): ?>
21
- <option value="<?php echo $_request_type; ?>"><?php echo htmlspecialchars($this->_request_types[$_request_type]); ?></option>
22
- <?php endforeach; ?>
23
- </optgroup>
24
- <?php endforeach; ?>
25
- </select>
26
- </td>
27
- </tr>
28
- </table>
29
- <?php echo $this->postbox_footer(); ?>
30
- </div>
31
- </form>
32
- </div>
33
-
34
- <?php if (! $ajax) include W3TC_DIR . '/inc/options/common/footer.phtml'; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/popup/{cdn_export_file.phtml → cdn_export_file.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  var files = [
@@ -8,7 +9,9 @@ var files = [
8
  ];
9
 
10
  jQuery(function() {
11
- W3tc_Popup_Cdn_Export_File.init(files);
 
 
12
  });
13
  /*]]>*/</script>
14
 
@@ -48,4 +51,4 @@ jQuery(function() {
48
 
49
  <div id="cdn_export_file_log" class="log"></div>
50
 
51
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  var files = [
9
  ];
10
 
11
  jQuery(function() {
12
+ W3tc_Popup_Cdn_Export_File.nonce = '<?php echo wp_create_nonce('w3tc'); ?>';
13
+ W3tc_Popup_Cdn_Export_File.files = files;
14
+ W3tc_Popup_Cdn_Export_File.init();
15
  });
16
  /*]]>*/</script>
17
 
51
 
52
  <div id="cdn_export_file_log" class="log"></div>
53
 
54
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/{cdn_export_library.phtml → cdn_export_library.php} RENAMED
@@ -1,7 +1,9 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  jQuery(function() {
 
5
  W3tc_Popup_Cdn_Export_Library.init();
6
  });
7
  /*]]>*/</script>
@@ -42,4 +44,4 @@ jQuery(function() {
42
 
43
  <div id="cdn_export_library_log" class="log"></div>
44
 
45
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  jQuery(function() {
6
+ W3tc_Popup_Cdn_Export_Library.nonce = '<?php echo wp_create_nonce('w3tc'); ?>';
7
  W3tc_Popup_Cdn_Export_Library.init();
8
  });
9
  /*]]>*/</script>
44
 
45
  <div id="cdn_export_library_log" class="log"></div>
46
 
47
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/{cdn_import_library.phtml → cdn_import_library.php} RENAMED
@@ -1,10 +1,11 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
- var cdn_host = '<?php echo $cdn_host; ?>';
5
-
6
  jQuery(function() {
7
- W3tc_Popup_Cdn_Import_Library.init(cdn_host);
 
 
8
  });
9
  /*]]>*/</script>
10
 
@@ -29,7 +30,7 @@ jQuery(function() {
29
  <tr>
30
  <td>Last response:</td>
31
  <td id="cdn_import_library_last_response">-</td>
32
- </tr>
33
  <tr>
34
  <td colspan="2">
35
  <label><input id="cdn_import_library_redirect_permanent" type="checkbox" checked="checked" /> Create a list of permanent (301) redirects for use in your site's .htaccess file</label>
@@ -62,4 +63,4 @@ jQuery(function() {
62
  <textarea rows="10" cols="90" id="cdn_import_library_rules" class="rules"></textarea>
63
  </p>
64
 
65
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
 
 
5
  jQuery(function() {
6
+ W3tc_Popup_Cdn_Import_Library.nonce = '<?php echo wp_create_nonce('w3tc'); ?>';
7
+ W3tc_Popup_Cdn_Import_Library.cdn_host = '<?php echo $cdn_host; ?>';
8
+ W3tc_Popup_Cdn_Import_Library.init();
9
  });
10
  /*]]>*/</script>
11
 
30
  <tr>
31
  <td>Last response:</td>
32
  <td id="cdn_import_library_last_response">-</td>
33
+ </tr>
34
  <tr>
35
  <td colspan="2">
36
  <label><input id="cdn_import_library_redirect_permanent" type="checkbox" checked="checked" /> Create a list of permanent (301) redirects for use in your site's .htaccess file</label>
63
  <textarea rows="10" cols="90" id="cdn_import_library_rules" class="rules"></textarea>
64
  </p>
65
 
66
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/{cdn_purge.phtml → cdn_purge.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <p>
4
  Remove objects from the CDN by specifying the relative path on individual lines below and clicking the "Purge" button when done. For example:
@@ -30,8 +31,8 @@
30
  <textarea name="files" rows="10" cols="90"></textarea>
31
  </p>
32
  <p>
33
- <input type="hidden" name="w3tc_action" value="cdn_purge_post" />
34
- <input class="button-primary" type="submit" value="Purge" />
35
  </p>
36
  </form>
37
 
@@ -44,4 +45,4 @@
44
  <?php endforeach; ?>
45
  </div>
46
 
47
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <p>
5
  Remove objects from the CDN by specifying the relative path on individual lines below and clicking the "Purge" button when done. For example:
31
  <textarea name="files" rows="10" cols="90"></textarea>
32
  </p>
33
  <p>
34
+ <?php echo $this->nonce_field('w3tc'); ?>
35
+ <input class="button-primary" type="submit" name="w3tc_cdn_purge_post" value="Purge" />
36
  </p>
37
  </form>
38
 
45
  <?php endforeach; ?>
46
  </div>
47
 
48
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/{cdn_queue.phtml → cdn_queue.php} RENAMED
@@ -1,4 +1,5 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <p>This tool lists the pending file uploads and deletions.</p>
4
  <p id="w3tc-options-menu">
@@ -24,13 +25,13 @@
24
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
25
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
26
  <td align="center">
27
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=upload&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>" class="cdn_queue_delete">Delete</a>
28
  </td>
29
  </tr>
30
  <?php endforeach; ?>
31
  </table>
32
  <p>
33
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=upload&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_UPLOAD; ?>" class="cdn_queue_empty">Empty upload queue</a>
34
  </p>
35
  <?php else: ?>
36
  <p class="empty">Upload queue is empty</p>
@@ -54,13 +55,13 @@
54
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
55
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
56
  <td align="center">
57
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=delete&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>" class="cdn_queue_delete">Delete</a>
58
  </td>
59
  </tr>
60
  <?php endforeach; ?>
61
  </table>
62
  <p>
63
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=delete&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_DELETE; ?>" class="cdn_queue_empty">Empty delete queue</a>
64
  </p>
65
  <?php else: ?>
66
  <p class="empty">Delete queue is empty</p>
@@ -84,17 +85,17 @@
84
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
85
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
86
  <td align="center">
87
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=purge&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>" class="cdn_queue_delete">Delete</a>
88
  </td>
89
  </tr>
90
  <?php endforeach; ?>
91
  </table>
92
  <p>
93
- <a href="admin.php?page=w3tc_cdn&amp;w3tc_action=cdn_queue&amp;cdn_queue_tab=purge&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_PURGE; ?>" class="cdn_queue_empty">Empty purge queue</a>
94
  </p>
95
  <?php else: ?>
96
  <p class="empty">Purge queue is empty</p>
97
  <?php endif; ?>
98
  </div>
99
 
100
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <p>This tool lists the pending file uploads and deletions.</p>
5
  <p id="w3tc-options-menu">
25
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
26
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
27
  <td align="center">
28
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=upload&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_delete">Delete</a>
29
  </td>
30
  </tr>
31
  <?php endforeach; ?>
32
  </table>
33
  <p>
34
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=upload&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_UPLOAD; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_empty">Empty upload queue</a>
35
  </p>
36
  <?php else: ?>
37
  <p class="empty">Upload queue is empty</p>
55
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
56
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
57
  <td align="center">
58
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=delete&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_delete">Delete</a>
59
  </td>
60
  </tr>
61
  <?php endforeach; ?>
62
  </table>
63
  <p>
64
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=delete&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_DELETE; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_empty">Empty delete queue</a>
65
  </p>
66
  <?php else: ?>
67
  <p class="empty">Delete queue is empty</p>
85
  <td><?php echo htmlspecialchars($result->last_error); ?></td>
86
  <td align="center"><?php echo htmlspecialchars($result->date); ?></td>
87
  <td align="center">
88
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=purge&amp;cdn_queue_action=delete&amp;cdn_queue_id=<?php echo $result->id; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_delete">Delete</a>
89
  </td>
90
  </tr>
91
  <?php endforeach; ?>
92
  </table>
93
  <p>
94
+ <a href="admin.php?page=w3tc_cdn&amp;w3tc_cdn_queue&amp;cdn_queue_tab=purge&amp;cdn_queue_action=empty&amp;cdn_queue_type=<?php echo W3TC_CDN_COMMAND_PURGE; ?>&amp;_wpnonce=<?php echo $nonce; ?>" class="cdn_queue_empty">Empty purge queue</a>
95
  </p>
96
  <?php else: ?>
97
  <p class="empty">Purge queue is empty</p>
98
  <?php endif; ?>
99
  </div>
100
 
101
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/{cdn_rename_domain.phtml → cdn_rename_domain.php} RENAMED
@@ -1,7 +1,9 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <script type="text/javascript">/*<![CDATA[*/
4
  jQuery(function() {
 
5
  W3tc_Popup_Cdn_Rename_Domain.init();
6
  });
7
  /*]]>*/</script>
@@ -27,14 +29,14 @@ jQuery(function() {
27
  <tr>
28
  <td>Last response:</td>
29
  <td id="cdn_rename_domain_last_response">-</td>
30
- </tr>
31
  <tr>
32
  <td>Domains to rename:</td>
33
  <td>
34
  <textarea cols="40" rows="3" id="cdn_rename_domain_names"></textarea><br />
35
  e.g.: domain.com
36
  </td>
37
- </tr>
38
  </table>
39
 
40
  <p>
@@ -49,4 +51,4 @@ jQuery(function() {
49
 
50
  <div id="cdn_rename_domain_log" class="log"></div>
51
 
52
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <script type="text/javascript">/*<![CDATA[*/
5
  jQuery(function() {
6
+ W3tc_Popup_Cdn_Rename_Domain.nonce = '<?php echo wp_create_nonce('w3tc'); ?>';
7
  W3tc_Popup_Cdn_Rename_Domain.init();
8
  });
9
  /*]]>*/</script>
29
  <tr>
30
  <td>Last response:</td>
31
  <td id="cdn_rename_domain_last_response">-</td>
32
+ </tr>
33
  <tr>
34
  <td>Domains to rename:</td>
35
  <td>
36
  <textarea cols="40" rows="3" id="cdn_rename_domain_names"></textarea><br />
37
  e.g.: domain.com
38
  </td>
39
+ </tr>
40
  </table>
41
 
42
  <p>
51
 
52
  <div id="cdn_rename_domain_log" class="log"></div>
53
 
54
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/popup/common/{footer.phtml → footer.php} RENAMED
File without changes
inc/popup/common/{header.phtml → header.php} RENAMED
@@ -1,12 +1,13 @@
 
1
  <?php
2
  if (! isset($title)) {
3
  $title = 'Untitled';
4
  }
5
-
6
  if (! isset($errors)) {
7
  $errors = array();
8
  }
9
-
10
  if (! isset($notes)) {
11
  $notes =array();
12
  }
@@ -14,16 +15,17 @@
14
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
15
  <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
16
  <head>
17
- <link rel="stylesheet" type="text/css" href="<?php echo plugins_url('inc/css/popup.css?ver=' . W3TC_VERSION, W3TC_FILE); ?>" />
18
  <script type="text/javascript" src="<?php echo site_url('wp-includes/js/jquery/jquery.js?ver=' . W3TC_VERSION); ?>"></script>
19
- <script type="text/javascript" src="<?php echo plugins_url('inc/js/popup.js?ver=' . W3TC_VERSION, W3TC_FILE); ?>"></script>
 
20
  <title><?php echo htmlspecialchars($title); ?> - W3 Total Cache</title>
21
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
22
  </head>
23
  <body>
24
  <div id="content">
25
  <h1><?php echo htmlspecialchars($title); ?></h1>
26
-
27
  <?php if (count($errors)): ?>
28
  <div class="error">
29
  <?php foreach ($errors as $error): ?>
@@ -31,7 +33,7 @@
31
  <?php endforeach; ?>
32
  </div>
33
  <?php endif; ?>
34
-
35
  <?php if (count($notes)): ?>
36
  <div class="updated fade">
37
  <?php foreach ($notes as $note): ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php
3
  if (! isset($title)) {
4
  $title = 'Untitled';
5
  }
6
+
7
  if (! isset($errors)) {
8
  $errors = array();
9
  }
10
+
11
  if (! isset($notes)) {
12
  $notes =array();
13
  }
15
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
16
  <html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
17
  <head>
18
+ <link rel="stylesheet" type="text/css" href="<?php echo plugins_url('pub/css/popup.css?ver=' . W3TC_VERSION, W3TC_FILE); ?>" />
19
  <script type="text/javascript" src="<?php echo site_url('wp-includes/js/jquery/jquery.js?ver=' . W3TC_VERSION); ?>"></script>
20
+ <script type="text/javascript" src="<?php echo plugins_url('pub/js/metadata.js?ver=' . W3TC_VERSION, W3TC_FILE); ?>"></script>
21
+ <script type="text/javascript" src="<?php echo plugins_url('pub/js/popup.js?ver=' . W3TC_VERSION, W3TC_FILE); ?>"></script>
22
  <title><?php echo htmlspecialchars($title); ?> - W3 Total Cache</title>
23
  <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" />
24
  </head>
25
  <body>
26
  <div id="content">
27
  <h1><?php echo htmlspecialchars($title); ?></h1>
28
+
29
  <?php if (count($errors)): ?>
30
  <div class="error">
31
  <?php foreach ($errors as $error): ?>
33
  <?php endforeach; ?>
34
  </div>
35
  <?php endif; ?>
36
+
37
  <?php if (count($notes)): ?>
38
  <div class="updated fade">
39
  <?php foreach ($notes as $note): ?>
inc/popup/common/index.html ADDED
File without changes
inc/popup/index.html ADDED
File without changes
inc/popup/{pagespeed_results.phtml → pagespeed_results.php} RENAMED
@@ -1,9 +1,11 @@
1
- <?php include W3TC_DIR . '/inc/popup/common/header.phtml'; ?>
 
2
 
3
  <?php if ($results): ?>
4
  <h4>Page Speed Score: <?php echo $results['score']; ?>/100</h4>
5
 
6
  <p>
 
7
  <input class="button ps-expand-all" type="button" value="Expand all" />
8
  <input class="button ps-collapse-all" type="button" value="Collapse all" />
9
  <input class="button ps-refresh" type="button" value="Refresh analysis" />
@@ -51,4 +53,4 @@
51
  </p>
52
  <?php endif; ?>
53
 
54
- <?php include W3TC_DIR . '/inc/popup/common/footer.phtml'; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <?php include W3TC_INC_DIR . '/popup/common/header.php'; ?>
3
 
4
  <?php if ($results): ?>
5
  <h4>Page Speed Score: <?php echo $results['score']; ?>/100</h4>
6
 
7
  <p>
8
+ <input class="w3tc-widget-ps-nonce" type="hidden" value="<?php echo wp_create_nonce('w3tc'); ?>" />
9
  <input class="button ps-expand-all" type="button" value="Expand all" />
10
  <input class="button ps-collapse-all" type="button" value="Collapse all" />
11
  <input class="button ps-refresh" type="button" value="Refresh analysis" />
53
  </p>
54
  <?php endif; ?>
55
 
56
+ <?php include W3TC_INC_DIR . '/popup/common/footer.php'; ?>
inc/widget/index.html ADDED
File without changes
inc/widget/latest.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
+ <p class="widget-loading hide-if-no-js {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}">
3
+ <?php echo __( 'Loading&#8230;' ) ?>
4
+ </p>
5
+ <p class="hide-if-js">
6
+ <?php echo __( 'This widget requires JavaScript.' ) ?>
7
+ </p>
inc/widget/{latest.phtml → latest_ajax.php} RENAMED
@@ -1,9 +1,10 @@
 
1
  <?php foreach ($items as $item): ?>
2
  <h4>
3
  <a href="<?php echo $item['link']; ?>"><?php echo $item['title']; ?></a>
4
  </h4>
5
  <p>
6
- <?php echo $item['description']; ?>
7
  </p>
8
  <?php endforeach; ?>
9
 
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php foreach ($items as $item): ?>
3
  <h4>
4
  <a href="<?php echo $item['link']; ?>"><?php echo $item['title']; ?></a>
5
  </h4>
6
  <p>
7
+ <?php echo $item['description']; ?>
8
  </p>
9
  <?php endforeach; ?>
10
 
inc/widget/{latest_control.phtml → latest_control.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <p>
2
  <label>
3
  How many items would you like to display?
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <p>
3
  <label>
4
  How many items would you like to display?
inc/widget/{pagespeed.phtml → pagespeed.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <?php if ($results): ?>
2
  <h4>Page Speed Score: <?php echo $results['score']; ?>/100</h4>
3
 
@@ -12,12 +13,14 @@
12
 
13
  <p>
14
  <input class="button w3tc-widget-ps-refresh" type="button" value="Refresh analysis" />
15
- <input class="button w3tc-widget-ps-view-all" type="button" value="View all results" />
16
  </p>
17
  <?php else: ?>
18
  <?php if ($key): ?>
19
  <p>Unable to fetch Page Speed results.</p>
20
- <p><input class="button w3tc-widget-ps-refresh" type="button" value="Refresh Analysis" /></p>
 
 
21
  <?php else: ?>
22
  <p>Google Page Speed score is not available. Please follow the directions found in the Miscellanous settings box on the <a href="admin.php?page=w3tc_general">General Settings</a> tab.</p>
23
  <?php endif; ?>
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <?php if ($results): ?>
3
  <h4>Page Speed Score: <?php echo $results['score']; ?>/100</h4>
4
 
13
 
14
  <p>
15
  <input class="button w3tc-widget-ps-refresh" type="button" value="Refresh analysis" />
16
+ <input class="button w3tc-widget-ps-view-all {nonce: '<?php echo wp_create_nonce('w3tc'); ?>'}" type="button" value="View all results" />
17
  </p>
18
  <?php else: ?>
19
  <?php if ($key): ?>
20
  <p>Unable to fetch Page Speed results.</p>
21
+ <p>
22
+ <input class="button w3tc-widget-ps-refresh" type="button" value="Refresh Analysis" />
23
+ </p>
24
  <?php else: ?>
25
  <p>Google Page Speed score is not available. Please follow the directions found in the Miscellanous settings box on the <a href="admin.php?page=w3tc_general">General Settings</a> tab.</p>
26
  <?php endif; ?>
inc/widget/{pagespeed_control.phtml → pagespeed_control.php} RENAMED
@@ -1,3 +1,4 @@
 
1
  <p>
2
  <label>
3
  Page Speed API Key:
1
+ <?php if (!defined('W3TC')) die(); ?>
2
  <p>
3
  <label>
4
  Page Speed API Key:
index.html ADDED
File without changes
ini/.htaccess ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ Options -Indexes
2
+ Order deny,allow
3
+ #Deny from all
ini/index.html ADDED
File without changes
lib/.htaccess ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ Options -Indexes
2
+ Order deny,allow
3
+ #Deny from all
lib/CF/cacert.pem CHANGED
@@ -1,3113 +1,3113 @@
1
- ##
2
- ## cacert.pem-foo -- Bundle of CA Root Certificates
3
- ##
4
- ## Converted at: Sat Aug 23 21:39:56 2008 UTC
5
- ##
6
- ## This is a bundle of X.509 certificates of public Certificate Authorities
7
- ## (CA). These were automatically extracted from Mozilla's root certificates
8
- ## file (certdata.txt). This file can be found in the mozilla source tree:
9
- ## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt'
10
- ##
11
- ## It contains the certificates in PEM format and therefore
12
- ## can be directly used with curl / libcurl / php_curl, or with
13
- ## an Apache+mod_ssl webserver for SSL client authentication.
14
- ## Just configure this file as the SSLCACertificateFile.
15
- ##
16
-
17
- # ***** BEGIN LICENSE BLOCK *****
18
- # Version: MPL 1.1/GPL 2.0/LGPL 2.1
19
- #
20
- # The contents of this file are subject to the Mozilla Public License Version
21
- # 1.1 (the "License"); you may not use this file except in compliance with
22
- # the License. You may obtain a copy of the License at
23
- # http://www.mozilla.org/MPL/
24
- #
25
- # Software distributed under the License is distributed on an "AS IS" basis,
26
- # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
27
- # for the specific language governing rights and limitations under the
28
- # License.
29
- #
30
- # The Original Code is the Netscape security libraries.
31
- #
32
- # The Initial Developer of the Original Code is
33
- # Netscape Communications Corporation.
34
- # Portions created by the Initial Developer are Copyright (C) 1994-2000
35
- # the Initial Developer. All Rights Reserved.
36
- #
37
- # Contributor(s):
38
- #
39
- # Alternatively, the contents of this file may be used under the terms of
40
- # either the GNU General Public License Version 2 or later (the "GPL"), or
41
- # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
42
- # in which case the provisions of the GPL or the LGPL are applicable instead
43
- # of those above. If you wish to allow use of your version of this file only
44
- # under the terms of either the GPL or the LGPL, and not to allow others to
45
- # use your version of this file under the terms of the MPL, indicate your
46
- # decision by deleting the provisions above and replace them with the notice
47
- # and other provisions required by the GPL or the LGPL. If you do not delete
48
- # the provisions above, a recipient may use your version of this file under
49
- # the terms of any one of the MPL, the GPL or the LGPL.
50
- #
51
- # ***** END LICENSE BLOCK *****
52
- # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.49 $ $Date: 2008/08/14 18:15:56 $
53
-
54
- Verisign/RSA Secure Server CA
55
- =============================
56
- -----BEGIN CERTIFICATE-----
57
- MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
58
- IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
59
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow
60
- XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL
61
- EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
62
- A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp
63
- sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ
64
- VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG
65
- mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2
66
- qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
67
- -----END CERTIFICATE-----
68
-
69
- GTE CyberTrust Root CA
70
- ======================
71
- -----BEGIN CERTIFICATE-----
72
- MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
73
- Q29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAw
74
- WhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9u
75
- MRwwGgYDVQQDExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
76
- gQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH
77
- 6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswk
78
- wB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEP
79
- I2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGvU9oUtCG4
80
- 1tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
81
- -----END CERTIFICATE-----
82
-
83
- GTE CyberTrust Global Root
84
- ==========================
85
- -----BEGIN CERTIFICATE-----
86
- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
87
- Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
88
- A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
89
- MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
90
- Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
91
- IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
92
- sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
93
- HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
94
- AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
95
- M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
96
- NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
97
- -----END CERTIFICATE-----
98
-
99
- Thawte Personal Basic CA
100
- ========================
101
- -----BEGIN CERTIFICATE-----
102
- MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkExFTATBgNVBAgT
103
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
104
- dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMY
105
- VGhhd3RlIFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0
106
- aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpB
107
- MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhh
108
- d3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
109
- ITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29u
110
- YWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
111
- FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJ
112
- l+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY
113
- 0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAt4plrsD16
114
- iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7c8a914phXAPjLSeoF+CEhULcXpvG
115
- t7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN
116
- 92NWod8isQ==
117
- -----END CERTIFICATE-----
118
-
119
- Thawte Personal Premium CA
120
- ==========================
121
- -----BEGIN CERTIFICATE-----
122
- MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkExFTATBgNVBAgT
123
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
124
- dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMa
125
- VGhhd3RlIFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1p
126
- dW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQG
127
- EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoT
128
- EVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlz
129
- aW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYb
130
- cGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
131
- Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ
132
- 8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicR
133
- FTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
134
- AGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIHb4Vnjt4rueIXsDqg8A6iAJrf8xQV
135
- brvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+W
136
- jS9Q2wfD6h+rM+D1KzGJ
137
- -----END CERTIFICATE-----
138
-
139
- Thawte Personal Freemail CA
140
- ===========================
141
- -----BEGIN CERTIFICATE-----
142
- MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgT
143
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
144
- dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMb
145
- VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVl
146
- bWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNV
147
- BAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
148
- ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
149
- aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJ
150
- ARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
151
- gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6W
152
- ZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgk
153
- CGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
154
- AAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjPMPuoSpaKH2JCI4wXD/S6ZJwXrEcp
155
- 352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK
156
- /qarigd1iwzdUYRr5PjRzneigQ==
157
- -----END CERTIFICATE-----
158
-
159
- Thawte Server CA
160
- ================
161
- -----BEGIN CERTIFICATE-----
162
- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
163
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
164
- dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
165
- AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
166
- b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
167
- BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
168
- c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
169
- A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
170
- ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
171
- /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
172
- 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
173
- MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
174
- GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
175
- GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
176
- -----END CERTIFICATE-----
177
-
178
- Thawte Premium Server CA
179
- ========================
180
- -----BEGIN CERTIFICATE-----
181
- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
182
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
183
- dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
184
- AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
185
- ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
186
- AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
187
- VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
188
- aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
189
- cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
190
- aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
191
- Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
192
- qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
193
- SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
194
- 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
195
- UCemDaYj+bvLpgcUQg==
196
- -----END CERTIFICATE-----
197
-
198
- Equifax Secure CA
199
- =================
200
- -----BEGIN CERTIFICATE-----
201
- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
202
- ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
203
- MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
204
- B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
205
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
206
- fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
207
- 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
208
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
209
- CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
210
- A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
211
- spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
212
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
213
- zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
214
- BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
215
- 70+sB3c4
216
- -----END CERTIFICATE-----
217
-
218
- ABAecom (sub., Am. Bankers Assn.) Root CA
219
- =========================================
220
- -----BEGIN CERTIFICATE-----
221
- MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNV
222
- BAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3RvbjEXMBUGA1UEChMOQUJBLkVD
223
- T00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWlu
224
- QGRpZ3NpZ3RydXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYD
225
- VQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5F
226
- Q09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1p
227
- bkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVD
228
- BwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1j
229
- Vv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNf
230
- WiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtx
231
- A6k4ShZsiSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94
232
- Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQgwDQYJKoZI
233
- hvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0kqS8Kfv2kRLD4VAe9G52dyntQJHsR
234
- W0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJh
235
- koHWG9YA8A6eKHegTYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
236
- /lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
237
- O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
238
- -----END CERTIFICATE-----
239
-
240
- Digital Signature Trust Co. Global CA 1
241
- =======================================
242
- -----BEGIN CERTIFICATE-----
243
- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
244
- ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
245
- MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
246
- IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
247
- A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
248
- NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
249
- o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
250
- BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
251
- dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
252
- IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
253
- MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
254
- BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
255
- ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
256
- kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
257
- RbyhkwS7hp86W0N6w4pl
258
- -----END CERTIFICATE-----
259
-
260
- Digital Signature Trust Co. Global CA 3
261
- =======================================
262
- -----BEGIN CERTIFICATE-----
263
- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
264
- ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
265
- MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
266
- IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
267
- A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
268
- VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
269
- xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
270
- BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
271
- dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
272
- IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
273
- MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
274
- BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
275
- AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
276
- up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
277
- mPnHfxsb1gYgAlihw6ID
278
- -----END CERTIFICATE-----
279
-
280
- Digital Signature Trust Co. Global CA 2
281
- =======================================
282
- -----BEGIN CERTIFICATE-----
283
- MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
284
- czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
285
- YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBS
286
- b290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4
287
- NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
288
- BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
289
- MA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEW
290
- EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLGJrbn
291
- pT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZ
292
- PdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGA
293
- vqPYUrBEzUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5y
294
- P4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn7pTKBBMFYgZw
295
- I7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAojeyP2n714Z5
296
- VEkxlTMr89EJFEliYIalsBHiUMIdBlc+LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2
297
- vAd5ZWRzfdd5ynvVWlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
298
- 8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
299
- gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2kYtdo+o56T9II
300
- 2pPc8JIRetDccpMMc5NihWjQ9A==
301
- -----END CERTIFICATE-----
302
-
303
- Digital Signature Trust Co. Global CA 4
304
- =======================================
305
- -----BEGIN CERTIFICATE-----
306
- MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
307
- czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
308
- YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBS
309
- b290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2
310
- MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
311
- BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
312
- MA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEW
313
- EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANx18IzA
314
- dZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva
315
- 3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9
316
- kVySVGkl5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP
317
- 17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCvbK4iNC7Va26D
318
- unm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtTYOXeFhKFoR
319
- ZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT
320
- 4EOvkTvRyyzYdFQ6HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
321
- 6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
322
- 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK
323
- 1GSYsyapMMj9puyrliGtf8J4tg==
324
- -----END CERTIFICATE-----
325
-
326
- Verisign Class 1 Public Primary Certification Authority
327
- =======================================================
328
- -----BEGIN CERTIFICATE-----
329
- MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT
330
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
331
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla
332
- MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg
333
- MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF
334
- AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw
335
- 0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7
336
- NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf
337
- 7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx
338
- giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A
339
- NACY89FxlA==
340
- -----END CERTIFICATE-----
341
-
342
- Verisign Class 2 Public Primary Certification Authority
343
- =======================================================
344
- -----BEGIN CERTIFICATE-----
345
- MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
346
- FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5
347
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
348
- XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy
349
- IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
350
- A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6
351
- Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/
352
- S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX
353
- XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY
354
- YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2
355
- lw0Xd8rY
356
- -----END CERTIFICATE-----
357
-
358
- Verisign Class 3 Public Primary Certification Authority
359
- =======================================================
360
- -----BEGIN CERTIFICATE-----
361
- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
362
- FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
363
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
364
- XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
365
- IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
366
- A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
367
- f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
368
- hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
369
- TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
370
- WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
371
- Tqj/ZA1k
372
- -----END CERTIFICATE-----
373
-
374
- Verisign Class 1 Public Primary Certification Authority - G2
375
- ============================================================
376
- -----BEGIN CERTIFICATE-----
377
- MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
378
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
379
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
380
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
381
- dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
382
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
383
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
384
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
385
- dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
386
- k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
387
- WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
388
- MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
389
- XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
390
- lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
391
- -----END CERTIFICATE-----
392
-
393
- Verisign Class 2 Public Primary Certification Authority - G2
394
- ============================================================
395
- -----BEGIN CERTIFICATE-----
396
- MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
397
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
398
- cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
399
- Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
400
- c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
401
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
402
- cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
403
- Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
404
- c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
405
- nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
406
- wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
407
- ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
408
- 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
409
- LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
410
- -----END CERTIFICATE-----
411
-
412
- Verisign Class 3 Public Primary Certification Authority - G2
413
- ============================================================
414
- -----BEGIN CERTIFICATE-----
415
- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
416
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
417
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
418
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
419
- dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
420
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
421
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
422
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
423
- dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
424
- FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
425
- lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
426
- MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
427
- 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
428
- Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
429
- -----END CERTIFICATE-----
430
-
431
- Verisign Class 4 Public Primary Certification Authority - G2
432
- ============================================================
433
- -----BEGIN CERTIFICATE-----
434
- MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
435
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
436
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
437
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
438
- dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
439
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
440
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
441
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
442
- dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4
443
- xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH
444
- qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB
445
- MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF
446
- WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB
447
- ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp
448
- -----END CERTIFICATE-----
449
-
450
- GlobalSign Root CA
451
- ==================
452
- -----BEGIN CERTIFICATE-----
453
- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
454
- GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
455
- b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
456
- BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
457
- VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
458
- DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
459
- THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
460
- Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
461
- c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
462
- gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
463
- HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
464
- AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
465
- Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
466
- j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
467
- hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
468
- X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
469
- -----END CERTIFICATE-----
470
-
471
- GlobalSign Root CA - R2
472
- =======================
473
- -----BEGIN CERTIFICATE-----
474
- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
475
- YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
476
- bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
477
- aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
478
- bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
479
- ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
480
- s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
481
- S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
482
- TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
483
- ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
484
- FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
485
- YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
486
- BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
487
- 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
488
- 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
489
- 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
490
- TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
491
- -----END CERTIFICATE-----
492
-
493
- ValiCert Class 1 VA
494
- ===================
495
- -----BEGIN CERTIFICATE-----
496
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
497
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
498
- YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
499
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
500
- MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
501
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
502
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
503
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
504
- A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
505
- GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
506
- DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
507
- lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
508
- icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
509
- Orf1LXLI
510
- -----END CERTIFICATE-----
511
-
512
- ValiCert Class 2 VA
513
- ===================
514
- -----BEGIN CERTIFICATE-----
515
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
516
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
517
- YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
518
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
519
- MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
520
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
521
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
522
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
523
- A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
524
- CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
525
- ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
526
- SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
527
- UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
528
- W9ViH0Pd
529
- -----END CERTIFICATE-----
530
-
531
- RSA Root Certificate 1
532
- ======================
533
- -----BEGIN CERTIFICATE-----
534
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
535
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
536
- YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
537
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
538
- MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
539
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
540
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
541
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
542
- A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
543
- 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
544
- BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
545
- 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
546
- V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
547
- on+jjBXu
548
- -----END CERTIFICATE-----
549
-
550
- Verisign Class 1 Public Primary Certification Authority - G3
551
- ============================================================
552
- -----BEGIN CERTIFICATE-----
553
- MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
554
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
555
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
556
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
557
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
558
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
559
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
560
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
561
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
562
- ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
563
- bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
564
- rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
565
- Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
566
- FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
567
- q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
568
- y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
569
- ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
570
- a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
571
- D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
572
- -----END CERTIFICATE-----
573
-
574
- Verisign Class 2 Public Primary Certification Authority - G3
575
- ============================================================
576
- -----BEGIN CERTIFICATE-----
577
- MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
578
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
579
- azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
580
- b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
581
- aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
582
- BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
583
- c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
584
- aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
585
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
586
- AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
587
- tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
588
- C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
589
- 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
590
- Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
591
- JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
592
- 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
593
- sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
594
- JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
595
- GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
596
- -----END CERTIFICATE-----
597
-
598
- Verisign Class 3 Public Primary Certification Authority - G3
599
- ============================================================
600
- -----BEGIN CERTIFICATE-----
601
- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
602
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
603
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
604
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
605
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
606
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
607
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
608
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
609
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
610
- ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
611
- EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
612
- cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
613
- EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
614
- 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
615
- ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
616
- j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
617
- /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
618
- xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
619
- t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
620
- -----END CERTIFICATE-----
621
-
622
- Verisign Class 4 Public Primary Certification Authority - G3
623
- ============================================================
624
- -----BEGIN CERTIFICATE-----
625
- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
626
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
627
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
628
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
629
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
630
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
631
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
632
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
633
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
634
- ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
635
- tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
636
- 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
637
- Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
638
- Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
639
- j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
640
- mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
641
- fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
642
- RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
643
- UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
644
- -----END CERTIFICATE-----
645
-
646
- Entrust.net Secure Server CA
647
- ============================
648
- -----BEGIN CERTIFICATE-----
649
- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
650
- BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
651
- cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
652
- ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
653
- cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
654
- A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
655
- eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
656
- dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
657
- aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
658
- aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
659
- gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
660
- ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
661
- CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
662
- dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
663
- bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
664
- cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
665
- dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
666
- NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
667
- HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
668
- BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
669
- Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
670
- n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
671
- -----END CERTIFICATE-----
672
-
673
- Entrust.net Secure Personal CA
674
- ==============================
675
- -----BEGIN CERTIFICATE-----
676
- MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMCVVMxFDASBgNV
677
- BAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8v
678
- Q1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1
679
- c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9u
680
- IEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJV
681
- UzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRf
682
- Q0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5
683
- OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRp
684
- ZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdv
685
- kHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGp
686
- OZ5V+Pux5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTm
687
- T173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkwggEVMIHkoIHh
688
- oIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3
689
- dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBs
690
- aWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
691
- cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
692
- KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNVHRAEJDAigA8x
693
- OTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU
694
- xPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1Ud
695
- EwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K
696
- 8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6h
697
- URzzwy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYG
698
- JqibGapEPHayXOw=
699
- -----END CERTIFICATE-----
700
-
701
- Entrust.net Premium 2048 Secure Server CA
702
- =========================================
703
- -----BEGIN CERTIFICATE-----
704
- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
705
- ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
706
- bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
707
- BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
708
- NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
709
- d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
710
- MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
711
- ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
712
- MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
713
- Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
714
- hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
715
- nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
716
- VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
717
- AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
718
- gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
719
- AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
720
- oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
721
- o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
722
- 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
723
- OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
724
- -----END CERTIFICATE-----
725
-
726
- Baltimore CyberTrust Root
727
- =========================
728
- -----BEGIN CERTIFICATE-----
729
- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
730
- ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
731
- ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
732
- SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
733
- dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
734
- uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
735
- UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
736
- G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
737
- XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
738
- l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
739
- VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
740
- BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
741
- cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
742
- hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
743
- Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
744
- RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
745
- -----END CERTIFICATE-----
746
-
747
- Equifax Secure Global eBusiness CA
748
- ==================================
749
- -----BEGIN CERTIFICATE-----
750
- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
751
- RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
752
- bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
753
- HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
754
- b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
755
- PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
756
- qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
757
- hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
758
- BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
759
- MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
760
- I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
761
- NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
762
- -----END CERTIFICATE-----
763
-
764
- Equifax Secure eBusiness CA 1
765
- =============================
766
- -----BEGIN CERTIFICATE-----
767
- MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
768
- RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
769
- LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
770
- ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
771
- IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
772
- 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
773
- IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
774
- MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
775
- Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
776
- AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
777
- lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
778
- KpYrtWKmpj29f5JZzVoqgrI3eQ==
779
- -----END CERTIFICATE-----
780
-
781
- Equifax Secure eBusiness CA 2
782
- =============================
783
- -----BEGIN CERTIFICATE-----
784
- MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
785
- ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
786
- MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
787
- DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
788
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
789
- 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
790
- BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
791
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
792
- JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
793
- A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
794
- uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
795
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
796
- jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
797
- 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
798
- V+GRMOrN
799
- -----END CERTIFICATE-----
800
-
801
- Visa International Global Root 2
802
- ================================
803
- -----BEGIN CERTIFICATE-----
804
- MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxDTALBgNVBAoT
805
- BFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIw
806
- EAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYD
807
- VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZp
808
- Y2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP
809
- ADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW
810
- 73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1
811
- t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm7Igbthkn
812
- GziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhl
813
- V7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYE
814
- FJ59SzS/ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0G
815
- CSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdpNSYx/scuhMKZ
816
- YdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQkIqUs38oW26sTTMs7WXcFsziza6k
817
- PWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOe
818
- yti12HvOdUVmB/RtLdh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
819
- ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
820
- -----END CERTIFICATE-----
821
-
822
- beTRUSTed Root CA
823
- =================
824
- -----BEGIN CERTIFICATE-----
825
- MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJXVzESMBAGA1UE
826
- ChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBDQXMxGjAYBgNVBAMTEWJlVFJV
827
- U1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMC
828
- V1cxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYD
829
- VQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0
830
- c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgz
831
- eubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCg
832
- c0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNn
833
- mrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5
834
- c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8w
835
- ggFZBgNVHSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFS
836
- ZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu
837
- Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv
838
- ZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJl
839
- IGZvdW5kIGF0IGJlVFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
840
- L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
841
- L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQxCzAJBgNVBAYT
842
- AldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3e
843
- KjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR
844
- +csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/b
845
- ow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ
846
- 1gMe1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWu
847
- GVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpGEK5BV2Vs
848
- PyMQPyEQWbfkQN0mDCP2qq4=
849
- -----END CERTIFICATE-----
850
-
851
- AddTrust Low-Value Services Root
852
- ================================
853
- -----BEGIN CERTIFICATE-----
854
- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
855
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
856
- cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
857
- CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
858
- ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
859
- AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
860
- 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
861
- oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
862
- Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
863
- GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
864
- HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
865
- AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
866
- RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
867
- HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
868
- ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
869
- iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
870
- eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
871
- mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
872
- ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
873
- -----END CERTIFICATE-----
874
-
875
- AddTrust External Root
876
- ======================
877
- -----BEGIN CERTIFICATE-----
878
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
879
- QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
880
- VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
881
- NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
882
- cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
883
- Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
884
- +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
885
- Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
886
- aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
887
- 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
888
- 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
889
- BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
890
- VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
891
- VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
892
- IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
893
- j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
894
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
895
- e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
896
- G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
897
- -----END CERTIFICATE-----
898
-
899
- AddTrust Public Services Root
900
- =============================
901
- -----BEGIN CERTIFICATE-----
902
- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
903
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
904
- cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
905
- BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
906
- dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
907
- AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
908
- nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
909
- d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
910
- Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
911
- HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
912
- A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
913
- /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
914
- FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
915
- A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
916
- JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
917
- +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
918
- GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
919
- Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
920
- EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
921
- -----END CERTIFICATE-----
922
-
923
- AddTrust Qualified Certificates Root
924
- ====================================
925
- -----BEGIN CERTIFICATE-----
926
- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
927
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
928
- cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
929
- CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
930
- IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
931
- 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
932
- 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
933
- KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
934
- L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
935
- wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
936
- MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
937
- BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
938
- BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
939
- azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
940
- ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
941
- GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
942
- dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
943
- RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
944
- iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
945
- -----END CERTIFICATE-----
946
-
947
- Verisign Time Stamping Authority CA
948
- ===================================
949
- -----BEGIN CERTIFICATE-----
950
- MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UE
951
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQ
952
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZl
953
- cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWdu
954
- IFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UE
955
- ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV
956
- BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSww
957
- KgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkqhkiG9w0B
958
- AQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhj
959
- zCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6o
960
- v8uQjI11S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEA
961
- MEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZl
962
- cmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20v
963
- cGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRw
964
- Oi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
965
- DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
966
- w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU58dzq6wf7iWb
967
- wBbtt8pb8BQ=
968
- -----END CERTIFICATE-----
969
-
970
- Thawte Time Stamping CA
971
- =======================
972
- -----BEGIN CERTIFICATE-----
973
- MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgT
974
- DFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
975
- A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg
976
- Q0EwHhcNOTcwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNV
977
- BAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEd
978
- MBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBp
979
- bmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+o
980
- J9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9
981
- nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
982
- MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCo
983
- uqoEiYbC9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCe
984
- d/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJSdM=
985
- -----END CERTIFICATE-----
986
-
987
- Entrust.net Global Secure Server CA
988
- ===================================
989
- -----BEGIN CERTIFICATE-----
990
- MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChMLRW50cnVzdC5u
991
- ZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGluY29ycC4gYnkgcmVmLiAobGlt
992
- aXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
993
- AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0w
994
- MDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0G
995
- A1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
996
- Yi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRy
997
- dXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3
998
- DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55l
999
- xyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439P
1000
- mrkDQYC2dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEB
1001
- BAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0VudHJ1c3QubmV0
1002
- MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0
1003
- cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMT
1004
- MUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
1005
- BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
1006
- VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr
1007
- 47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
1008
- AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbv
1009
- H9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3
1010
- a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
1011
- -----END CERTIFICATE-----
1012
-
1013
- Entrust.net Global Secure Personal CA
1014
- =====================================
1015
- -----BEGIN CERTIFICATE-----
1016
- MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
1017
- ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
1018
- bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
1019
- BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcx
1020
- NjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
1021
- d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
1022
- MCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
1023
- ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1024
- iQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQl
1025
- hK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKkl
1026
- Wb1m9fkn5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNV
1027
- HR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3
1028
- d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUw
1029
- IwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5l
1030
- dCBDbGllbnQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
1031
- IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
1032
- MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAM
1033
- BgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQF
1034
- AAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xK
1035
- p9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQ
1036
- Gof4T4HHdguEOnKdzmVml64mXg==
1037
- -----END CERTIFICATE-----
1038
-
1039
- Entrust Root Certification Authority
1040
- ====================================
1041
- -----BEGIN CERTIFICATE-----
1042
- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
1043
- BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
1044
- b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
1045
- A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
1046
- MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
1047
- MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
1048
- Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
1049
- dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1050
- ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
1051
- A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
1052
- Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
1053
- j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
1054
- rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
1055
- DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
1056
- MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
1057
- hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
1058
- A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
1059
- Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
1060
- v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
1061
- W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
1062
- tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
1063
- -----END CERTIFICATE-----
1064
-
1065
- AOL Time Warner Root Certification Authority 1
1066
- ==============================================
1067
- -----BEGIN CERTIFICATE-----
1068
- MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1069
- FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1070
- VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAy
1071
- MDUyOTA2MDAwMFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1072
- VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1073
- QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZI
1074
- hvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8
1075
- hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkG
1076
- IBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93
1077
- f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQI
1078
- fHNlIAqhBC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNj
1079
- MGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+XxIwHwYDVR0j
1080
- BBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
1081
- A4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u
1082
- 0FIy2VkyvNp5ctZ7CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
1083
- WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
1084
- n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoWH1iCC+GWaQVL
1085
- juyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
1086
- -----END CERTIFICATE-----
1087
-
1088
- AOL Time Warner Root Certification Authority 2
1089
- ==============================================
1090
- -----BEGIN CERTIFICATE-----
1091
- MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1092
- FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1093
- VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAy
1094
- MDUyOTA2MDAwMFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1095
- VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1096
- QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZI
1097
- hvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8
1098
- TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWsi4SVqBax
1099
- 7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17n
1100
- OirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2w
1101
- TPDaRrbqJS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rS
1102
- AG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxmlJ85per5n0/xQ
1103
- pCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFhEVsVS6kkUfykXPcXnbDS+gfpj1bk
1104
- GoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuW
1105
- CpTehTacyH+BCQJJKg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
1106
- MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1107
- FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4G
1108
- A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7
1109
- +z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI
1110
- 5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcC
1111
- tQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ
1112
- 68W/ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3
1113
- p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5O8t1wswv
1114
- ziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD062KRffaJ00psUjf5BHklka9
1115
- bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4o
1116
- GKQWDzH9OmwjkyB24f0HhdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2
1117
- uBOLZ8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
1118
- -----END CERTIFICATE-----
1119
-
1120
- beTRUSTed Root CA-Baltimore Implementation
1121
- ==========================================
1122
- -----BEGIN CERTIFICATE-----
1123
- MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1124
- GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Et
1125
- QmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVow
1126
- ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1127
- BAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1128
- hvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ
1129
- +2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8Co
1130
- Cd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9fHBOB1Bir
1131
- lNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNe
1132
- DsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOC
1133
- Ah4wggIaMA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJ
1134
- KIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNlIG9mIHRoaXMg
1135
- Q2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVudCBhbmQgYWNjZXB0YW5jZSBvZiB0
1136
- aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwg
1137
- dGhlIENlcnRpZmljYXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
1138
- eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
1139
- LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDBB
1140
- BggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2lu
1141
- ZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR
1142
- 3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6s
1143
- vfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyX
1144
- EHu67RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfq
1145
- jjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5dUX2xZ/2j
1146
- vTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py05yc493EG931t3GzUwWJBtDL
1147
- SoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
1148
- -----END CERTIFICATE-----
1149
-
1150
- beTRUSTed Root CA - Entrust Implementation
1151
- ==========================================
1152
- -----BEGIN CERTIFICATE-----
1153
- MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1154
- GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Eg
1155
- LSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1ow
1156
- ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1157
- BAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1158
- hvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0c
1159
- S12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE7
1160
- 0mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkbhepxKYhB
1161
- MvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1i
1162
- JAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOC
1163
- AwUwggMBMIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYB
1164
- BQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNyZWF0
1165
- ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1166
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9u
1167
- IFByYWN0aWNlIFN0YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
1168
- aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
1169
- cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUFBwIBFjZodHRw
1170
- czovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZI
1171
- AYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEb
1172
- MBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAt
1173
- IEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0
1174
- MTEwODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44
1175
- iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNVHRMEBTAD
1176
- AQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEAKrgX
1177
- zh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevd
1178
- kObRVlTa4y0MnxEylCIBevZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/
1179
- T220Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2kXgCl
1180
- zMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYhxKlkqu9FNtEaZnz4
1181
- 6TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
1182
- -----END CERTIFICATE-----
1183
-
1184
- beTRUSTed Root CA - RSA Implementation
1185
- ======================================
1186
- -----BEGIN CERTIFICATE-----
1187
- MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBiMRIwEAYDVQQK
1188
- EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMmYmVUUlVT
1189
- VGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEy
1190
- MTEwNzI1WjBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
1191
- czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0G
1192
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRuj
1193
- brWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTu
1194
- lh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xs
1195
- N+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQh
1196
- hlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMB
1197
- AAGjggIYMIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAAD
1198
- CSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNf
1199
- c2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIBOhqCATZSZWxpYW5jZSBvbiBvciB1
1200
- c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2Nl
1201
- cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
1202
- bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
1203
- ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNU
1204
- ZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9p
1205
- bmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAd
1206
- BgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTB
1207
- mMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05
1208
- pmuKmET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqN
1209
- Wz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNMm2+fG8oe
1210
- qqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8ymmFei74pnykkiFY5LKjSq5YD
1211
- WtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
1212
- -----END CERTIFICATE-----
1213
-
1214
- RSA Security 2048 v3
1215
- ====================
1216
- -----BEGIN CERTIFICATE-----
1217
- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1218
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
1219
- MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1220
- BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1221
- AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
1222
- Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
1223
- WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
1224
- KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
1225
- +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
1226
- MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
1227
- FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
1228
- v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
1229
- 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
1230
- VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
1231
- nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
1232
- pKnXwiJPZ9d37CAFYd4=
1233
- -----END CERTIFICATE-----
1234
-
1235
- RSA Security 1024 v3
1236
- ====================
1237
- -----BEGIN CERTIFICATE-----
1238
- MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1239
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAy
1240
- MjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1241
- BgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV
1242
- 3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4m
1243
- mdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1Blq
1244
- FikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAf
1245
- BgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUM
1246
- X96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBD
1247
- leMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNu
1248
- mU4/iXgDmMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
1249
- -----END CERTIFICATE-----
1250
-
1251
- GeoTrust Global CA
1252
- ==================
1253
- -----BEGIN CERTIFICATE-----
1254
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
1255
- Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
1256
- MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1257
- LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1258
- CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
1259
- BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
1260
- 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
1261
- T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
1262
- vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
1263
- AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
1264
- DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
1265
- zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
1266
- d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
1267
- mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
1268
- XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
1269
- Mw==
1270
- -----END CERTIFICATE-----
1271
-
1272
- GeoTrust Global CA 2
1273
- ====================
1274
- -----BEGIN CERTIFICATE-----
1275
- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1276
- R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
1277
- MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1278
- LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1279
- ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
1280
- NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
1281
- LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
1282
- Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
1283
- HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
1284
- MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
1285
- K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
1286
- srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
1287
- ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
1288
- OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
1289
- x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
1290
- H4z1Ir+rzoPz4iIprn2DQKi6bA==
1291
- -----END CERTIFICATE-----
1292
-
1293
- GeoTrust Universal CA
1294
- =====================
1295
- -----BEGIN CERTIFICATE-----
1296
- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1297
- R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
1298
- MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
1299
- Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
1300
- ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
1301
- JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
1302
- RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
1303
- 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
1304
- 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
1305
- qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
1306
- Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
1307
- Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
1308
- KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
1309
- ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
1310
- XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
1311
- hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
1312
- aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
1313
- qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
1314
- oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
1315
- xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
1316
- KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
1317
- DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
1318
- xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
1319
- p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
1320
- P/rmMuGNG2+k5o7Y+SlIis5z/iw=
1321
- -----END CERTIFICATE-----
1322
-
1323
- GeoTrust Universal CA 2
1324
- =======================
1325
- -----BEGIN CERTIFICATE-----
1326
- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1327
- R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
1328
- MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
1329
- SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
1330
- A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
1331
- DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
1332
- j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
1333
- JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
1334
- QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
1335
- WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
1336
- 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
1337
- ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
1338
- SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
1339
- 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
1340
- +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
1341
- BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
1342
- dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
1343
- 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
1344
- mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
1345
- A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
1346
- Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
1347
- pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
1348
- FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
1349
- gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
1350
- X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
1351
- -----END CERTIFICATE-----
1352
-
1353
- UTN-USER First-Network Applications
1354
- ===================================
1355
- -----BEGIN CERTIFICATE-----
1356
- MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
1357
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1358
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
1359
- BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
1360
- WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
1361
- YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1362
- dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
1363
- cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
1364
- mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
1365
- DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
1366
- Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
1367
- P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
1368
- j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
1369
- HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
1370
- cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
1371
- CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
1372
- IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
1373
- RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
1374
- xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
1375
- DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
1376
- -----END CERTIFICATE-----
1377
-
1378
- America Online Root Certification Authority 1
1379
- =============================================
1380
- -----BEGIN CERTIFICATE-----
1381
- MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1382
- QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1383
- Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
1384
- A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1385
- T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
1386
- ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
1387
- v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
1388
- DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
1389
- sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
1390
- 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
1391
- AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
1392
- o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
1393
- GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
1394
- VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
1395
- 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
1396
- Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
1397
- sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
1398
- -----END CERTIFICATE-----
1399
-
1400
- America Online Root Certification Authority 2
1401
- =============================================
1402
- -----BEGIN CERTIFICATE-----
1403
- MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1404
- QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1405
- Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
1406
- A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1407
- T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
1408
- ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
1409
- fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
1410
- f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
1411
- qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
1412
- RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
1413
- gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
1414
- 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
1415
- FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
1416
- Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
1417
- B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
1418
- aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
1419
- AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
1420
- T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
1421
- +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
1422
- JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
1423
- zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
1424
- ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
1425
- 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
1426
- GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
1427
- Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
1428
- cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
1429
- -----END CERTIFICATE-----
1430
-
1431
- Visa eCommerce Root
1432
- ===================
1433
- -----BEGIN CERTIFICATE-----
1434
- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
1435
- EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
1436
- QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
1437
- WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
1438
- VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
1439
- bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
1440
- F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
1441
- RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
1442
- TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
1443
- /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
1444
- GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
1445
- MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
1446
- CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
1447
- YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
1448
- zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
1449
- YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
1450
- 398znM/jra6O1I7mT1GvFpLgXPYHDw==
1451
- -----END CERTIFICATE-----
1452
-
1453
- TC TrustCenter, Germany, Class 2 CA
1454
- ===================================
1455
- -----BEGIN CERTIFICATE-----
1456
- MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1457
- EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1458
- U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1459
- bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1460
- ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1461
- YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1462
- aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1463
- MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1464
- hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs
1465
- qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N
1466
- u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1467
- Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1468
- LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf
1469
- /x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2
1470
- 9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
1471
- ASZ4smZHcFFk
1472
- -----END CERTIFICATE-----
1473
-
1474
- TC TrustCenter, Germany, Class 3 CA
1475
- ===================================
1476
- -----BEGIN CERTIFICATE-----
1477
- MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1478
- EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1479
- U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1480
- bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1481
- ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1482
- YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1483
- aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1484
- MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1485
- hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN
1486
- 2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7
1487
- 7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1488
- Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1489
- LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B
1490
- u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm
1491
- 5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
1492
- CdS7kjXvD9s0
1493
- -----END CERTIFICATE-----
1494
-
1495
- Certum Root CA
1496
- ==============
1497
- -----BEGIN CERTIFICATE-----
1498
- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
1499
- ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
1500
- Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
1501
- by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
1502
- wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
1503
- kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
1504
- 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
1505
- Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
1506
- NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
1507
- hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
1508
- GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
1509
- GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
1510
- 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
1511
- qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
1512
- -----END CERTIFICATE-----
1513
-
1514
- Comodo AAA Services root
1515
- ========================
1516
- -----BEGIN CERTIFICATE-----
1517
- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1518
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1519
- TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
1520
- MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
1521
- c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
1522
- BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1523
- ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
1524
- C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
1525
- i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
1526
- Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
1527
- Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
1528
- Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
1529
- BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
1530
- cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
1531
- LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
1532
- 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
1533
- Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
1534
- 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
1535
- 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
1536
- -----END CERTIFICATE-----
1537
-
1538
- Comodo Secure Services root
1539
- ===========================
1540
- -----BEGIN CERTIFICATE-----
1541
- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1542
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1543
- TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
1544
- MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
1545
- Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
1546
- BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
1547
- ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
1548
- 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
1549
- rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
1550
- oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
1551
- p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
1552
- FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
1553
- gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
1554
- YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
1555
- aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
1556
- 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
1557
- Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
1558
- DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
1559
- pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
1560
- RR3B7Hzs/Sk=
1561
- -----END CERTIFICATE-----
1562
-
1563
- Comodo Trusted Services root
1564
- ============================
1565
- -----BEGIN CERTIFICATE-----
1566
- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1567
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1568
- TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
1569
- MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
1570
- bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
1571
- IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
1572
- AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
1573
- 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
1574
- /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
1575
- juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
1576
- ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
1577
- DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
1578
- /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
1579
- ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
1580
- cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
1581
- uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
1582
- pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
1583
- BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
1584
- R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
1585
- 9y5Xt5hwXsjEeLBi
1586
- -----END CERTIFICATE-----
1587
-
1588
- IPS Chained CAs root
1589
- ====================
1590
- -----BEGIN CERTIFICATE-----
1591
- MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1592
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1593
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1594
- Qi02MDkyOTQ1MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0
1595
- aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1596
- dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEy
1597
- MjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJ
1598
- QmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwu
1599
- MSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJ
1600
- UFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBD
1601
- QSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBz
1602
- QG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQgvJhPUOtopKdJ
1603
- C7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCBhYEFcYGdtJUZqV92NC5jNzVXjrQf
1604
- Qj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQID
1605
- AQABo4IEQzCCBD8wHQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
1606
- AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
1607
- CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBw
1608
- dWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
1609
- IEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1
1610
- dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9y
1611
- aXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNV
1612
- HQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
1613
- BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGC
1614
- NwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
1615
- EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZp
1616
- Y2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8v
1617
- d3d3Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
1618
- MjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3dy5pcHMuZXMvaXBz
1619
- MjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5l
1620
- cy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
1621
- LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5p
1622
- cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
1623
- L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1624
- Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hAK+/b
1625
- lkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M9
1626
- 2GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
1627
- -----END CERTIFICATE-----
1628
-
1629
- IPS CLASE1 root
1630
- ===============
1631
- -----BEGIN CERTIFICATE-----
1632
- MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1633
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1634
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1635
- Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1636
- eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1637
- SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFow
1638
- ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1639
- LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1640
- Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1641
- RTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlm
1642
- aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1643
- hkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5BlmvXSHU0lq4
1644
- oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBSYmL9Yzt9fuzuOOpi9GyocY3h6YvJ
1645
- P8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1646
- BBTrsxl588GlHKzcuh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
1647
- adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1648
- BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1649
- LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1650
- EyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1651
- Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1652
- cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1653
- BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1654
- BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1655
- BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1656
- hvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1657
- cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1658
- BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCGSAGG
1659
- +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTEuaHRtbD8w
1660
- PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5o
1661
- dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1662
- RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1663
- MDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1664
- Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1665
- cy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1urxUq2
1666
- ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmO
1667
- DszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9UkE6tsSU=
1668
- -----END CERTIFICATE-----
1669
-
1670
- IPS CLASE3 root
1671
- ===============
1672
- -----BEGIN CERTIFICATE-----
1673
- MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1674
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1675
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1676
- Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1677
- eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1678
- SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFow
1679
- ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1680
- LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1681
- Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1682
- RTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlm
1683
- aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1684
- hkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49NzjaY2uQARIwo
1685
- 2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY8jjsbJ0gA8DvqqPGZARRLXgNo9Ko
1686
- OtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1687
- BBS4k/8uy9wsjqLnev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
1688
- mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1689
- BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1690
- LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1691
- EyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1692
- Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1693
- cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1694
- BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1695
- BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1696
- BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1697
- hvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1698
- cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1699
- BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCGSAGG
1700
- +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTMuaHRtbD8w
1701
- PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5o
1702
- dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1703
- RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1704
- MDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1705
- Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1706
- cy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc4gYt
1707
- fibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUE
1708
- NPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkOE7LFRVA=
1709
- -----END CERTIFICATE-----
1710
-
1711
- IPS CLASEA1 root
1712
- ================
1713
- -----BEGIN CERTIFICATE-----
1714
- MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1715
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1716
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1717
- Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1718
- dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1719
- KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMy
1720
- WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1721
- YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1722
- ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1723
- QVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENl
1724
- cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1725
- DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2mdd81u4D/u6zJf
1726
- X5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4WwdByOgF9H5fahGRpEiqLJpxq339fWU
1727
- oTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNV
1728
- HQ4EFgQUZyaW56G/2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
1729
- 3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1730
- BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1731
- ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1732
- A1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1733
- UyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1734
- bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1735
- AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1736
- FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1737
- GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1738
- BglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1739
- dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1740
- hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmww
1741
- QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1742
- QTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1743
- bENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1744
- cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1745
- czIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1746
- MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1747
- Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINmyq0e
1748
- B81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5bi
1749
- KcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
1750
- -----END CERTIFICATE-----
1751
-
1752
- IPS CLASEA3 root
1753
- ================
1754
- -----BEGIN CERTIFICATE-----
1755
- MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1756
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1757
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1758
- Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1759
- dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1760
- KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUw
1761
- WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1762
- YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1763
- ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1764
- QVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENl
1765
- cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1766
- DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uGBiJ2MwwSbUhW
1767
- YdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHUVqLyjRGZ/fZ98cfEXgIqmuJKtROK
1768
- AP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNV
1769
- HQ4EFgQUHp9XUEe2YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
1770
- 2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1771
- BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1772
- ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1773
- A1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1774
- UyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1775
- bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1776
- AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1777
- FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1778
- GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1779
- BglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1780
- dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1781
- hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmww
1782
- QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1783
- QTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1784
- bENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1785
- cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1786
- czIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1787
- MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1788
- Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB/MjD
1789
- 81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9S
1790
- KcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
1791
- -----END CERTIFICATE-----
1792
-
1793
- IPS Servidores root
1794
- ===================
1795
- -----BEGIN CERTIFICATE-----
1796
- MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJD
1797
- RUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYG
1798
- A1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3
1799
- DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMx
1800
- CzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcG
1801
- A1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
1802
- Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqG
1803
- SIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3PqHILVik
1804
- gDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Eh
1805
- im51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB
1806
- ACzzw3lYJN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2
1807
- /iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58GNCr+Lh3B0Zx
1808
- 8coLY1xq+XKU1QFPoNtC
1809
- -----END CERTIFICATE-----
1810
-
1811
- IPS Timestamping root
1812
- =====================
1813
- -----BEGIN CERTIFICATE-----
1814
- MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1815
- EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1816
- Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1817
- Qi02MDkyOTQ1MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1
1818
- dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1819
- cml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1
1820
- MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQH
1821
- EwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
1822
- bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsT
1823
- K0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQ
1824
- UyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEW
1825
- D2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLjuVqWajOY2ycJi
1826
- oGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4Efdo/BdApWgnMjvEp+ZCccWZ73b/
1827
- K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0Gm
1828
- qaMCAwEAAaOCBIAwggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
1829
- AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
1830
- BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
1831
- ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5J
1832
- LkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRp
1833
- b24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24g
1834
- QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB
1835
- /zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
1836
- CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
1837
- KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVz
1838
- MBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5n
1839
- IENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
1840
- BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8vd3d3
1841
- Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCGSAGG+EIBAwQ4FjZo
1842
- dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJ
1843
- YIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
1844
- Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lU
1845
- aW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
1846
- MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMv
1847
- aXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
1848
- MAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoe
1849
- FAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWT
1850
- s/zif/WN87GphV+I3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
1851
- -----END CERTIFICATE-----
1852
-
1853
- QuoVadis Root CA
1854
- ================
1855
- -----BEGIN CERTIFICATE-----
1856
- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
1857
- ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1858
- eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
1859
- MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
1860
- cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
1861
- EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1862
- AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
1863
- J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
1864
- F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
1865
- YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
1866
- AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
1867
- PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
1868
- ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
1869
- MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
1870
- YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1871
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
1872
- Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
1873
- Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
1874
- BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
1875
- FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
1876
- aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
1877
- tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
1878
- fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
1879
- LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
1880
- gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
1881
- 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
1882
- 5nrQNiOKSnQ2+Q==
1883
- -----END CERTIFICATE-----
1884
-
1885
- QuoVadis Root CA 2
1886
- ==================
1887
- -----BEGIN CERTIFICATE-----
1888
- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1889
- EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1890
- ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1891
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1892
- DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1893
- XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1894
- lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1895
- lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1896
- lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1897
- 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1898
- wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1899
- D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1900
- BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1901
- J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1902
- DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1903
- a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1904
- ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1905
- Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1906
- UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1907
- VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1908
- +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1909
- IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1910
- WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1911
- f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1912
- 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1913
- VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1914
- -----END CERTIFICATE-----
1915
-
1916
- QuoVadis Root CA 3
1917
- ==================
1918
- -----BEGIN CERTIFICATE-----
1919
- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1920
- EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1921
- OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1922
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1923
- DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1924
- DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1925
- KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1926
- DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1927
- BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1928
- p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1929
- nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1930
- MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1931
- Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1932
- uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1933
- BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1934
- YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1935
- aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1936
- BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1937
- VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1938
- ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1939
- AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1940
- qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1941
- hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1942
- POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1943
- Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1944
- 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1945
- bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1946
- g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1947
- vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1948
- qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1949
- -----END CERTIFICATE-----
1950
-
1951
- Security Communication Root CA
1952
- ==============================
1953
- -----BEGIN CERTIFICATE-----
1954
- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1955
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1956
- HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1957
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1958
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1959
- 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1960
- DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1961
- 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1962
- DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1963
- JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1964
- DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1965
- 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1966
- mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1967
- s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1968
- 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1969
- FL39vmwLAw==
1970
- -----END CERTIFICATE-----
1971
-
1972
- Sonera Class 1 Root CA
1973
- ======================
1974
- -----BEGIN CERTIFICATE-----
1975
- MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1976
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1977
- NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1978
- IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1979
- 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1980
- EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1981
- 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1982
- 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1983
- HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1984
- iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1985
- 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1986
- yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1987
- vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1988
- qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1989
- IRlXvVWa
1990
- -----END CERTIFICATE-----
1991
-
1992
- Sonera Class 2 Root CA
1993
- ======================
1994
- -----BEGIN CERTIFICATE-----
1995
- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1996
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1997
- NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1998
- IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1999
- /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
2000
- dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
2001
- f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
2002
- tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
2003
- nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
2004
- XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
2005
- 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
2006
- cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
2007
- Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
2008
- EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
2009
- llpwrN9M
2010
- -----END CERTIFICATE-----
2011
-
2012
- Staat der Nederlanden Root CA
2013
- =============================
2014
- -----BEGIN CERTIFICATE-----
2015
- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
2016
- ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2017
- Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
2018
- HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
2019
- bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
2020
- vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
2021
- jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
2022
- C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
2023
- vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
2024
- 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
2025
- HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
2026
- dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
2027
- BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
2028
- EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
2029
- MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
2030
- nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
2031
- iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
2032
- -----END CERTIFICATE-----
2033
-
2034
- TDC Internet Root CA
2035
- ====================
2036
- -----BEGIN CERTIFICATE-----
2037
- MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
2038
- ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
2039
- NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
2040
- ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2041
- MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
2042
- xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
2043
- znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
2044
- 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
2045
- otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
2046
- AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
2047
- VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
2048
- MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
2049
- AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
2050
- UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
2051
- CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
2052
- gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
2053
- 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
2054
- O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
2055
- Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
2056
- -----END CERTIFICATE-----
2057
-
2058
- TDC OCES Root CA
2059
- ================
2060
- -----BEGIN CERTIFICATE-----
2061
- MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
2062
- ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
2063
- MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
2064
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
2065
- nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
2066
- zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
2067
- iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
2068
- dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
2069
- 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
2070
- 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
2071
- ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
2072
- cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
2073
- Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
2074
- LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
2075
- MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
2076
- aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
2077
- MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
2078
- +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
2079
- NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
2080
- A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
2081
- A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
2082
- AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
2083
- AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
2084
- -----END CERTIFICATE-----
2085
-
2086
- UTN DATACorp SGC Root CA
2087
- ========================
2088
- -----BEGIN CERTIFICATE-----
2089
- MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
2090
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2091
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
2092
- BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
2093
- MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
2094
- HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
2095
- dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
2096
- AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
2097
- raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
2098
- wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
2099
- 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
2100
- 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
2101
- DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
2102
- BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
2103
- LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
2104
- DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
2105
- Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
2106
- I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
2107
- EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
2108
- DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
2109
- -----END CERTIFICATE-----
2110
-
2111
- UTN USERFirst Email Root CA
2112
- ===========================
2113
- -----BEGIN CERTIFICATE-----
2114
- MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2115
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2116
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
2117
- BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
2118
- OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
2119
- FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
2120
- ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
2121
- dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2122
- MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
2123
- B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
2124
- om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
2125
- TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
2126
- yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
2127
- AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
2128
- HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
2129
- bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
2130
- AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
2131
- xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
2132
- 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
2133
- NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
2134
- w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
2135
- -----END CERTIFICATE-----
2136
-
2137
- UTN USERFirst Hardware Root CA
2138
- ==============================
2139
- -----BEGIN CERTIFICATE-----
2140
- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
2141
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2142
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
2143
- BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
2144
- OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
2145
- eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
2146
- ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
2147
- DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
2148
- wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
2149
- tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
2150
- i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
2151
- Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
2152
- gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
2153
- lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
2154
- UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
2155
- BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
2156
- //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
2157
- XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
2158
- lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
2159
- iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
2160
- nfhmqA==
2161
- -----END CERTIFICATE-----
2162
-
2163
- UTN USERFirst Object Root CA
2164
- ============================
2165
- -----BEGIN CERTIFICATE-----
2166
- MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
2167
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2168
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
2169
- BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
2170
- NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
2171
- HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
2172
- dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
2173
- BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
2174
- loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
2175
- w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
2176
- lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
2177
- RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
2178
- BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
2179
- ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
2180
- c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
2181
- DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
2182
- NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
2183
- PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
2184
- qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
2185
- hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
2186
- -----END CERTIFICATE-----
2187
-
2188
- Camerfirma Chambers of Commerce Root
2189
- ====================================
2190
- -----BEGIN CERTIFICATE-----
2191
- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2192
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2193
- ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
2194
- NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
2195
- cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
2196
- MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
2197
- AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
2198
- xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
2199
- NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
2200
- DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
2201
- d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
2202
- EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
2203
- cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
2204
- AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
2205
- bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
2206
- VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
2207
- aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
2208
- fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
2209
- L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
2210
- UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
2211
- ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
2212
- erfutGWaIZDgqtCYvDi1czyL+Nw=
2213
- -----END CERTIFICATE-----
2214
-
2215
- Camerfirma Global Chambersign Root
2216
- ==================================
2217
- -----BEGIN CERTIFICATE-----
2218
- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2219
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2220
- ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
2221
- NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
2222
- YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
2223
- MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
2224
- ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
2225
- 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
2226
- by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
2227
- 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
2228
- 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
2229
- BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
2230
- aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
2231
- Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
2232
- aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
2233
- ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
2234
- bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
2235
- PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
2236
- gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
2237
- PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
2238
- IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
2239
- t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
2240
- -----END CERTIFICATE-----
2241
-
2242
- NetLock Qualified (Class QA) Root
2243
- =================================
2244
- -----BEGIN CERTIFICATE-----
2245
- MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2246
- CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2247
- BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
2248
- eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
2249
- bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
2250
- MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
2251
- LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
2252
- dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
2253
- aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
2254
- CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
2255
- 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
2256
- m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
2257
- 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
2258
- 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2259
- HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
2260
- YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
2261
- biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
2262
- a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
2263
- YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
2264
- YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
2265
- ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
2266
- L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
2267
- Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
2268
- aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
2269
- YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
2270
- IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
2271
- DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
2272
- wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
2273
- W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
2274
- R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
2275
- 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
2276
- -----END CERTIFICATE-----
2277
-
2278
- NetLock Notary (Class A) Root
2279
- =============================
2280
- -----BEGIN CERTIFICATE-----
2281
- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
2282
- EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2283
- dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
2284
- ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
2285
- DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
2286
- EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
2287
- VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
2288
- cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
2289
- D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
2290
- z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
2291
- /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
2292
- tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
2293
- 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
2294
- A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
2295
- Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
2296
- bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
2297
- IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
2298
- LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
2299
- ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
2300
- IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
2301
- IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
2302
- b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
2303
- bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
2304
- Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
2305
- bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
2306
- ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
2307
- ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
2308
- CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
2309
- KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
2310
- 8CgHrTwXZoi1/baI
2311
- -----END CERTIFICATE-----
2312
-
2313
- NetLock Business (Class B) Root
2314
- ===============================
2315
- -----BEGIN CERTIFICATE-----
2316
- MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2317
- CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2318
- BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
2319
- VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
2320
- VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
2321
- bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
2322
- VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
2323
- iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
2324
- o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
2325
- 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2326
- HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
2327
- RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
2328
- dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
2329
- ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
2330
- c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
2331
- YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
2332
- c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
2333
- Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
2334
- bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
2335
- IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
2336
- YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
2337
- cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
2338
- 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
2339
- stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
2340
- -----END CERTIFICATE-----
2341
-
2342
- NetLock Express (Class C) Root
2343
- ==============================
2344
- -----BEGIN CERTIFICATE-----
2345
- MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2346
- CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2347
- BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
2348
- KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
2349
- BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2350
- dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
2351
- ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
2352
- jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
2353
- W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
2354
- euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
2355
- DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
2356
- RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
2357
- YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
2358
- IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
2359
- aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
2360
- ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
2361
- ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
2362
- dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
2363
- emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
2364
- IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
2365
- UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
2366
- YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
2367
- xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
2368
- gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
2369
- -----END CERTIFICATE-----
2370
-
2371
- XRamp Global CA Root
2372
- ====================
2373
- -----BEGIN CERTIFICATE-----
2374
- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
2375
- BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
2376
- dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
2377
- dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
2378
- HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
2379
- U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2380
- dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
2381
- IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
2382
- foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
2383
- zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
2384
- AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
2385
- xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2386
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
2387
- oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
2388
- AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
2389
- /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
2390
- qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
2391
- nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
2392
- 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
2393
- -----END CERTIFICATE-----
2394
-
2395
- Go Daddy Class 2 CA
2396
- ===================
2397
- -----BEGIN CERTIFICATE-----
2398
- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
2399
- VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
2400
- ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
2401
- A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
2402
- RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
2403
- ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
2404
- 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
2405
- qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
2406
- YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
2407
- vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
2408
- BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
2409
- atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
2410
- MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
2411
- A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
2412
- PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
2413
- I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
2414
- HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
2415
- Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
2416
- vZ8=
2417
- -----END CERTIFICATE-----
2418
-
2419
- Starfield Class 2 CA
2420
- ====================
2421
- -----BEGIN CERTIFICATE-----
2422
- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
2423
- U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
2424
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
2425
- MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
2426
- A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
2427
- SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
2428
- bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
2429
- JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
2430
- epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
2431
- F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
2432
- MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
2433
- hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
2434
- bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
2435
- QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
2436
- afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
2437
- PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
2438
- xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
2439
- KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
2440
- QBFGmh95DmK/D5fs4C8fF5Q=
2441
- -----END CERTIFICATE-----
2442
-
2443
- StartCom Ltd.
2444
- =============
2445
- -----BEGIN CERTIFICATE-----
2446
- MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
2447
- BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsT
2448
- EUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhv
2449
- cml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoX
2450
- DTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcT
2451
- BUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVw
2452
- LjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B
2453
- CQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOe
2454
- yEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+
2455
- o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2
2456
- IhULpNYILzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1Ud
2457
- DgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+MtUNjIExtpid
2458
- jShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWls
2459
- YXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw
2460
- JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
2461
- YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
2462
- HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIB
2463
- DQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0
2464
- cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9j
2465
- ZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9y
2466
- Zy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhB
2467
- OlP1ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6w
2468
- NnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjnfg==
2469
- -----END CERTIFICATE-----
2470
-
2471
- StartCom Certification Authority
2472
- ================================
2473
- -----BEGIN CERTIFICATE-----
2474
- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2475
- U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2476
- ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2477
- NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2478
- LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2479
- U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2480
- ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2481
- o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2482
- Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2483
- eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2484
- 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2485
- 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2486
- osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2487
- untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2488
- UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2489
- 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
2490
- FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
2491
- Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
2492
- YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
2493
- AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
2494
- Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
2495
- U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
2496
- LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
2497
- cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
2498
- cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
2499
- dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
2500
- AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
2501
- 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
2502
- vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
2503
- fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
2504
- fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
2505
- EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
2506
- yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
2507
- 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
2508
- lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
2509
- g14=
2510
- -----END CERTIFICATE-----
2511
-
2512
- Taiwan GRCA
2513
- ===========
2514
- -----BEGIN CERTIFICATE-----
2515
- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
2516
- EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
2517
- DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
2518
- dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
2519
- ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
2520
- w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
2521
- BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
2522
- 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
2523
- htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
2524
- J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
2525
- Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
2526
- B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
2527
- O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
2528
- lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
2529
- HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
2530
- 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
2531
- TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
2532
- Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
2533
- Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
2534
- D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
2535
- DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
2536
- Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
2537
- 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
2538
- CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
2539
- +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
2540
- -----END CERTIFICATE-----
2541
-
2542
- Firmaprofesional Root CA
2543
- ========================
2544
- -----BEGIN CERTIFICATE-----
2545
- MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
2546
- GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
2547
- Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
2548
- ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
2549
- MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
2550
- OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
2551
- ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
2552
- AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
2553
- j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
2554
- lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
2555
- 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
2556
- NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
2557
- KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
2558
- AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
2559
- DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
2560
- ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
2561
- u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
2562
- wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
2563
- 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
2564
- VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
2565
- -----END CERTIFICATE-----
2566
-
2567
- Wells Fargo Root CA
2568
- ===================
2569
- -----BEGIN CERTIFICATE-----
2570
- MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
2571
- BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
2572
- cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2573
- MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
2574
- bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
2575
- MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
2576
- SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
2577
- x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
2578
- E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
2579
- OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
2580
- sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
2581
- YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
2582
- BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
2583
- ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
2584
- m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
2585
- OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
2586
- x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
2587
- tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
2588
- -----END CERTIFICATE-----
2589
-
2590
- Swisscom Root CA 1
2591
- ==================
2592
- -----BEGIN CERTIFICATE-----
2593
- MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
2594
- EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
2595
- dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
2596
- MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2597
- aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
2598
- IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
2599
- MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
2600
- NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
2601
- AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
2602
- b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
2603
- 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
2604
- cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
2605
- WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
2606
- haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
2607
- MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
2608
- HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
2609
- BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
2610
- MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
2611
- jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
2612
- MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
2613
- VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
2614
- vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
2615
- OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
2616
- 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
2617
- nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
2618
- x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
2619
- NY6E0F/6MBr1mmz0DlP5OlvRHA==
2620
- -----END CERTIFICATE-----
2621
-
2622
- DigiCert Assured ID Root CA
2623
- ===========================
2624
- -----BEGIN CERTIFICATE-----
2625
- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
2626
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
2627
- IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
2628
- MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
2629
- ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
2630
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
2631
- 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
2632
- UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
2633
- /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
2634
- oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
2635
- GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
2636
- 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
2637
- hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
2638
- EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
2639
- SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
2640
- 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
2641
- +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
2642
- -----END CERTIFICATE-----
2643
-
2644
- DigiCert Global Root CA
2645
- =======================
2646
- -----BEGIN CERTIFICATE-----
2647
- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
2648
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
2649
- HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
2650
- MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
2651
- dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
2652
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
2653
- TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
2654
- BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
2655
- 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
2656
- 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
2657
- o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
2658
- 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
2659
- BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
2660
- EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
2661
- tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
2662
- UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
2663
- CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
2664
- -----END CERTIFICATE-----
2665
-
2666
- DigiCert High Assurance EV Root CA
2667
- ==================================
2668
- -----BEGIN CERTIFICATE-----
2669
- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
2670
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
2671
- KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
2672
- MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
2673
- MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
2674
- Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
2675
- Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
2676
- OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
2677
- MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
2678
- NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
2679
- h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
2680
- Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
2681
- JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
2682
- V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
2683
- myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
2684
- mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
2685
- vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
2686
- -----END CERTIFICATE-----
2687
-
2688
- Certplus Class 2 Primary CA
2689
- ===========================
2690
- -----BEGIN CERTIFICATE-----
2691
- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
2692
- BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
2693
- OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
2694
- dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
2695
- ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
2696
- 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
2697
- Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
2698
- YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
2699
- e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
2700
- CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
2701
- YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
2702
- L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
2703
- P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
2704
- TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
2705
- 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
2706
- //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
2707
- l7+ijrRU
2708
- -----END CERTIFICATE-----
2709
-
2710
- DST Root CA X3
2711
- ==============
2712
- -----BEGIN CERTIFICATE-----
2713
- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
2714
- ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
2715
- DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
2716
- cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
2717
- ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
2718
- rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
2719
- UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
2720
- xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
2721
- utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
2722
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
2723
- MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
2724
- dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
2725
- GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
2726
- RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
2727
- fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
2728
- -----END CERTIFICATE-----
2729
-
2730
- DST ACES CA X6
2731
- ==============
2732
- -----BEGIN CERTIFICATE-----
2733
- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
2734
- EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
2735
- MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
2736
- MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
2737
- CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
2738
- AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
2739
- DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
2740
- pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
2741
- GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
2742
- MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
2743
- EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
2744
- Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
2745
- dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
2746
- CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
2747
- 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
2748
- Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
2749
- nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
2750
- vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
2751
- oKfN5XozNmr6mis=
2752
- -----END CERTIFICATE-----
2753
-
2754
- TURKTRUST Certificate Services Provider Root 1
2755
- ==============================================
2756
- -----BEGIN CERTIFICATE-----
2757
- MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2758
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
2759
- MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
2760
- acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
2761
- MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
2762
- U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
2763
- TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
2764
- aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
2765
- AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
2766
- yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
2767
- Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
2768
- 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
2769
- W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
2770
- BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
2771
- sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
2772
- q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
2773
- B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
2774
- nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
2775
- -----END CERTIFICATE-----
2776
-
2777
- TURKTRUST Certificate Services Provider Root 2
2778
- ==============================================
2779
- -----BEGIN CERTIFICATE-----
2780
- MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2781
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2782
- MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2783
- QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
2784
- MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
2785
- dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
2786
- A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
2787
- acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
2788
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
2789
- LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
2790
- x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
2791
- QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
2792
- 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
2793
- AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
2794
- A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
2795
- Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
2796
- Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
2797
- hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
2798
- 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
2799
- UrbnBEI=
2800
- -----END CERTIFICATE-----
2801
-
2802
- SwissSign Platinum CA - G2
2803
- ==========================
2804
- -----BEGIN CERTIFICATE-----
2805
- MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
2806
- BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
2807
- HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
2808
- U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
2809
- KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
2810
- 669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
2811
- eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
2812
- WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
2813
- j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
2814
- 8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
2815
- aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
2816
- domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
2817
- +m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
2818
- CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
2819
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
2820
- zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
2821
- IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
2822
- Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
2823
- NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
2824
- U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
2825
- KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
2826
- 9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
2827
- aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
2828
- OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
2829
- Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
2830
- IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
2831
- -----END CERTIFICATE-----
2832
-
2833
- SwissSign Gold CA - G2
2834
- ======================
2835
- -----BEGIN CERTIFICATE-----
2836
- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
2837
- EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
2838
- MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
2839
- c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
2840
- AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
2841
- t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
2842
- jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
2843
- vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
2844
- ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
2845
- AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
2846
- jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
2847
- peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
2848
- 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
2849
- GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
2850
- AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
2851
- OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
2852
- L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
2853
- 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
2854
- 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
2855
- Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
2856
- Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
2857
- mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
2858
- vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
2859
- KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
2860
- NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
2861
- viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
2862
- -----END CERTIFICATE-----
2863
-
2864
- SwissSign Silver CA - G2
2865
- ========================
2866
- -----BEGIN CERTIFICATE-----
2867
- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
2868
- BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
2869
- DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
2870
- aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
2871
- 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
2872
- N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
2873
- +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
2874
- 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
2875
- MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
2876
- qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
2877
- FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
2878
- ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
2879
- celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
2880
- CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
2881
- BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
2882
- tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
2883
- cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
2884
- 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
2885
- kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
2886
- 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
2887
- /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
2888
- DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
2889
- e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
2890
- WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
2891
- DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
2892
- DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
2893
- -----END CERTIFICATE-----
2894
-
2895
- GeoTrust Primary Certification Authority
2896
- ========================================
2897
- -----BEGIN CERTIFICATE-----
2898
- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
2899
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
2900
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
2901
- CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
2902
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2903
- CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
2904
- b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
2905
- nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
2906
- RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
2907
- tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2908
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
2909
- hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
2910
- Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
2911
- NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
2912
- Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2913
- 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2914
- -----END CERTIFICATE-----
2915
-
2916
- thawte Primary Root CA
2917
- ======================
2918
- -----BEGIN CERTIFICATE-----
2919
- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2920
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2921
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2922
- cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2923
- MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2924
- SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2925
- KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2926
- FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2927
- oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2928
- 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2929
- q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2930
- aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2931
- afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2932
- VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2933
- AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2934
- uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2935
- xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2936
- jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2937
- z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2938
- -----END CERTIFICATE-----
2939
-
2940
- VeriSign Class 3 Public Primary Certification Authority - G5
2941
- ============================================================
2942
- -----BEGIN CERTIFICATE-----
2943
- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2944
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2945
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2946
- IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2947
- ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2948
- yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2949
- biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2950
- dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2951
- YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2952
- ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2953
- j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2954
- Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2955
- Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2956
- fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2957
- BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2958
- Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2959
- aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2960
- SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2961
- X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2962
- KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2963
- Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2964
- ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2965
- -----END CERTIFICATE-----
2966
-
2967
- SecureTrust CA
2968
- ==============
2969
- -----BEGIN CERTIFICATE-----
2970
- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2971
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2972
- dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2973
- BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2974
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2975
- OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2976
- DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2977
- GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2978
- 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2979
- ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2980
- BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2981
- aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2982
- KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2983
- SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2984
- mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2985
- nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2986
- 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2987
- -----END CERTIFICATE-----
2988
-
2989
- Secure Global CA
2990
- ================
2991
- -----BEGIN CERTIFICATE-----
2992
- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2993
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2994
- bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2995
- MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2996
- Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2997
- YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2998
- bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2999
- 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
3000
- HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
3001
- 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
3002
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
3003
- oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
3004
- MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
3005
- OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
3006
- CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
3007
- 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
3008
- f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
3009
- -----END CERTIFICATE-----
3010
-
3011
- COMODO Certification Authority
3012
- ==============================
3013
- -----BEGIN CERTIFICATE-----
3014
- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
3015
- BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
3016
- A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
3017
- dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
3018
- MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
3019
- T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3020
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
3021
- +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
3022
- xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
3023
- 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
3024
- 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
3025
- rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
3026
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
3027
- b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
3028
- AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
3029
- OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
3030
- RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
3031
- IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
3032
- +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
3033
- -----END CERTIFICATE-----
3034
-
3035
- DigiNotar Root CA
3036
- =================
3037
- -----BEGIN CERTIFICATE-----
3038
- MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG
3039
- EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G
3040
- CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx
3041
- OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90
3042
- YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3
3043
- DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq
3044
- 7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U
3045
- i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8
3046
- ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq
3047
- bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4
3048
- iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk
3049
- XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb
3050
- qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6
3051
- xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc
3052
- BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
3053
- AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
3054
- jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5
3055
- wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA
3056
- ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT
3057
- FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf
3058
- yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA
3059
- ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ
3060
- /YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE
3061
- CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo
3062
- EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
3063
- -----END CERTIFICATE-----
3064
-
3065
- Network Solutions Certificate Authority
3066
- =======================================
3067
- -----BEGIN CERTIFICATE-----
3068
- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
3069
- EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
3070
- IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
3071
- MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
3072
- MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3073
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
3074
- jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
3075
- aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
3076
- crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
3077
- /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
3078
- AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
3079
- BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
3080
- bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
3081
- A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
3082
- 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
3083
- GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
3084
- wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
3085
- ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
3086
- -----END CERTIFICATE-----
3087
-
3088
- WellsSecure Public Root Certificate Authority
3089
- =============================================
3090
- -----BEGIN CERTIFICATE-----
3091
- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
3092
- F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
3093
- NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
3094
- MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
3095
- bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
3096
- VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3097
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
3098
- iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
3099
- i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
3100
- bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
3101
- K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
3102
- AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
3103
- cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
3104
- lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
3105
- i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
3106
- GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
3107
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
3108
- K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
3109
- bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
3110
- qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
3111
- E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
3112
- tylv2G0xffX8oRAHh84vWdw+WNs=
3113
- -----END CERTIFICATE-----
1
+ ##
2
+ ## cacert.pem-foo -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Converted at: Sat Aug 23 21:39:56 2008 UTC
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## '/mozilla/security/nss/lib/ckfw/builtins/certdata.txt'
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+
17
+ # ***** BEGIN LICENSE BLOCK *****
18
+ # Version: MPL 1.1/GPL 2.0/LGPL 2.1
19
+ #
20
+ # The contents of this file are subject to the Mozilla Public License Version
21
+ # 1.1 (the "License"); you may not use this file except in compliance with
22
+ # the License. You may obtain a copy of the License at
23
+ # http://www.mozilla.org/MPL/
24
+ #
25
+ # Software distributed under the License is distributed on an "AS IS" basis,
26
+ # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
27
+ # for the specific language governing rights and limitations under the
28
+ # License.
29
+ #
30
+ # The Original Code is the Netscape security libraries.
31
+ #
32
+ # The Initial Developer of the Original Code is
33
+ # Netscape Communications Corporation.
34
+ # Portions created by the Initial Developer are Copyright (C) 1994-2000
35
+ # the Initial Developer. All Rights Reserved.
36
+ #
37
+ # Contributor(s):
38
+ #
39
+ # Alternatively, the contents of this file may be used under the terms of
40
+ # either the GNU General Public License Version 2 or later (the "GPL"), or
41
+ # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
42
+ # in which case the provisions of the GPL or the LGPL are applicable instead
43
+ # of those above. If you wish to allow use of your version of this file only
44
+ # under the terms of either the GPL or the LGPL, and not to allow others to
45
+ # use your version of this file under the terms of the MPL, indicate your
46
+ # decision by deleting the provisions above and replace them with the notice
47
+ # and other provisions required by the GPL or the LGPL. If you do not delete
48
+ # the provisions above, a recipient may use your version of this file under
49
+ # the terms of any one of the MPL, the GPL or the LGPL.
50
+ #
51
+ # ***** END LICENSE BLOCK *****
52
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.49 $ $Date: 2008/08/14 18:15:56 $
53
+
54
+ Verisign/RSA Secure Server CA
55
+ =============================
56
+ -----BEGIN CERTIFICATE-----
57
+ MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
58
+ IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
59
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow
60
+ XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL
61
+ EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
62
+ A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp
63
+ sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ
64
+ VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG
65
+ mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2
66
+ qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
67
+ -----END CERTIFICATE-----
68
+
69
+ GTE CyberTrust Root CA
70
+ ======================
71
+ -----BEGIN CERTIFICATE-----
72
+ MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
73
+ Q29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAw
74
+ WhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9u
75
+ MRwwGgYDVQQDExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
76
+ gQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH
77
+ 6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswk
78
+ wB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEP
79
+ I2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGvU9oUtCG4
80
+ 1tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
81
+ -----END CERTIFICATE-----
82
+
83
+ GTE CyberTrust Global Root
84
+ ==========================
85
+ -----BEGIN CERTIFICATE-----
86
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
87
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
88
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
89
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
90
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
91
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
92
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
93
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
94
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
95
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
96
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
97
+ -----END CERTIFICATE-----
98
+
99
+ Thawte Personal Basic CA
100
+ ========================
101
+ -----BEGIN CERTIFICATE-----
102
+ MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkExFTATBgNVBAgT
103
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
104
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMY
105
+ VGhhd3RlIFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0
106
+ aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpB
107
+ MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhh
108
+ d3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
109
+ ITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29u
110
+ YWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
111
+ FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJ
112
+ l+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY
113
+ 0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAt4plrsD16
114
+ iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7c8a914phXAPjLSeoF+CEhULcXpvG
115
+ t7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN
116
+ 92NWod8isQ==
117
+ -----END CERTIFICATE-----
118
+
119
+ Thawte Personal Premium CA
120
+ ==========================
121
+ -----BEGIN CERTIFICATE-----
122
+ MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkExFTATBgNVBAgT
123
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
124
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMa
125
+ VGhhd3RlIFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1p
126
+ dW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQG
127
+ EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoT
128
+ EVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlz
129
+ aW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYb
130
+ cGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
131
+ Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ
132
+ 8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicR
133
+ FTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
134
+ AGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIHb4Vnjt4rueIXsDqg8A6iAJrf8xQV
135
+ brvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+W
136
+ jS9Q2wfD6h+rM+D1KzGJ
137
+ -----END CERTIFICATE-----
138
+
139
+ Thawte Personal Freemail CA
140
+ ===========================
141
+ -----BEGIN CERTIFICATE-----
142
+ MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgT
143
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3Vs
144
+ dGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMb
145
+ VGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVl
146
+ bWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNV
147
+ BAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
148
+ ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
149
+ aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJ
150
+ ARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
151
+ gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6W
152
+ ZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgk
153
+ CGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
154
+ AAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjPMPuoSpaKH2JCI4wXD/S6ZJwXrEcp
155
+ 352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK
156
+ /qarigd1iwzdUYRr5PjRzneigQ==
157
+ -----END CERTIFICATE-----
158
+
159
+ Thawte Server CA
160
+ ================
161
+ -----BEGIN CERTIFICATE-----
162
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
163
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
164
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
165
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
166
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
167
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
168
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
169
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
170
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
171
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
172
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
173
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
174
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
175
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
176
+ -----END CERTIFICATE-----
177
+
178
+ Thawte Premium Server CA
179
+ ========================
180
+ -----BEGIN CERTIFICATE-----
181
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
182
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
183
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
184
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
185
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
186
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
187
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
188
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
189
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
190
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
191
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
192
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
193
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
194
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
195
+ UCemDaYj+bvLpgcUQg==
196
+ -----END CERTIFICATE-----
197
+
198
+ Equifax Secure CA
199
+ =================
200
+ -----BEGIN CERTIFICATE-----
201
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
202
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
203
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
204
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
205
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
206
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
207
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
208
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
209
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
210
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
211
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
212
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
213
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
214
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
215
+ 70+sB3c4
216
+ -----END CERTIFICATE-----
217
+
218
+ ABAecom (sub., Am. Bankers Assn.) Root CA
219
+ =========================================
220
+ -----BEGIN CERTIFICATE-----
221
+ MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAwgYkxCzAJBgNV
222
+ BAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3RvbjEXMBUGA1UEChMOQUJBLkVD
223
+ T00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWlu
224
+ QGRpZ3NpZ3RydXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYD
225
+ VQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5F
226
+ Q09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1p
227
+ bkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVD
228
+ BwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1j
229
+ Vv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNf
230
+ WiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtx
231
+ A6k4ShZsiSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94
232
+ Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQgwDQYJKoZI
233
+ hvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0kqS8Kfv2kRLD4VAe9G52dyntQJHsR
234
+ W0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJh
235
+ koHWG9YA8A6eKHegTYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
236
+ /lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
237
+ O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
238
+ -----END CERTIFICATE-----
239
+
240
+ Digital Signature Trust Co. Global CA 1
241
+ =======================================
242
+ -----BEGIN CERTIFICATE-----
243
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
244
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
245
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
246
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
247
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
248
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
249
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
250
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
251
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
252
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
253
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
254
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
255
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
256
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
257
+ RbyhkwS7hp86W0N6w4pl
258
+ -----END CERTIFICATE-----
259
+
260
+ Digital Signature Trust Co. Global CA 3
261
+ =======================================
262
+ -----BEGIN CERTIFICATE-----
263
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
264
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
265
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
266
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
267
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
268
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
269
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
270
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
271
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
272
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
273
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
274
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
275
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
276
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
277
+ mPnHfxsb1gYgAlihw6ID
278
+ -----END CERTIFICATE-----
279
+
280
+ Digital Signature Trust Co. Global CA 2
281
+ =======================================
282
+ -----BEGIN CERTIFICATE-----
283
+ MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
284
+ czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
285
+ YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBS
286
+ b290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4
287
+ NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
288
+ BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
289
+ MA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEW
290
+ EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLGJrbn
291
+ pT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZ
292
+ PdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGA
293
+ vqPYUrBEzUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5y
294
+ P4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn7pTKBBMFYgZw
295
+ I7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAojeyP2n714Z5
296
+ VEkxlTMr89EJFEliYIalsBHiUMIdBlc+LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2
297
+ vAd5ZWRzfdd5ynvVWlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
298
+ 8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
299
+ gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2kYtdo+o56T9II
300
+ 2pPc8JIRetDccpMMc5NihWjQ9A==
301
+ -----END CERTIFICATE-----
302
+
303
+ Digital Signature Trust Co. Global CA 4
304
+ =======================================
305
+ -----BEGIN CERTIFICATE-----
306
+ MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQswCQYDVQQGEwJ1
307
+ czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0
308
+ YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBS
309
+ b290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2
310
+ MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UE
311
+ BxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjER
312
+ MA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEW
313
+ EmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANx18IzA
314
+ dZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva
315
+ 3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9
316
+ kVySVGkl5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP
317
+ 17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCvbK4iNC7Va26D
318
+ unm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAtTYOXeFhKFoR
319
+ ZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT
320
+ 4EOvkTvRyyzYdFQ6HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
321
+ 6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
322
+ 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK
323
+ 1GSYsyapMMj9puyrliGtf8J4tg==
324
+ -----END CERTIFICATE-----
325
+
326
+ Verisign Class 1 Public Primary Certification Authority
327
+ =======================================================
328
+ -----BEGIN CERTIFICATE-----
329
+ MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVT
330
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
331
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTla
332
+ MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg
333
+ MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEF
334
+ AAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw
335
+ 0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7
336
+ NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf
337
+ 7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnx
338
+ giJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0A
339
+ NACY89FxlA==
340
+ -----END CERTIFICATE-----
341
+
342
+ Verisign Class 2 Public Primary Certification Authority
343
+ =======================================================
344
+ -----BEGIN CERTIFICATE-----
345
+ MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
346
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5
347
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
348
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAy
349
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
350
+ A4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6
351
+ Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/
352
+ S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIobK/o5wXTX
353
+ XtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUY
354
+ YAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2
355
+ lw0Xd8rY
356
+ -----END CERTIFICATE-----
357
+
358
+ Verisign Class 3 Public Primary Certification Authority
359
+ =======================================================
360
+ -----BEGIN CERTIFICATE-----
361
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
362
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
363
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
364
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
365
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
366
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
367
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
368
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
369
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
370
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
371
+ Tqj/ZA1k
372
+ -----END CERTIFICATE-----
373
+
374
+ Verisign Class 1 Public Primary Certification Authority - G2
375
+ ============================================================
376
+ -----BEGIN CERTIFICATE-----
377
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
378
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
379
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
380
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
381
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
382
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
383
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
384
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
385
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
386
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
387
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
388
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
389
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
390
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
391
+ -----END CERTIFICATE-----
392
+
393
+ Verisign Class 2 Public Primary Certification Authority - G2
394
+ ============================================================
395
+ -----BEGIN CERTIFICATE-----
396
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
397
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
398
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
399
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
400
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
401
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
402
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
403
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
404
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
405
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
406
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
407
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
408
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
409
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
410
+ -----END CERTIFICATE-----
411
+
412
+ Verisign Class 3 Public Primary Certification Authority - G2
413
+ ============================================================
414
+ -----BEGIN CERTIFICATE-----
415
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
416
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
417
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
418
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
419
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
420
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
421
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
422
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
423
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
424
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
425
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
426
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
427
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
428
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
429
+ -----END CERTIFICATE-----
430
+
431
+ Verisign Class 4 Public Primary Certification Authority - G2
432
+ ============================================================
433
+ -----BEGIN CERTIFICATE-----
434
+ MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
435
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
436
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
437
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
438
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
439
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFy
440
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
441
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
442
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4
443
+ xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDH
444
+ qGKB3FtKqsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQAB
445
+ MA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGIL4LcY/oCRaxF
446
+ WdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0ycyfYaT5DdPauxYma51N86Xv2S/PB
447
+ ZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRPT8qAkbYp
448
+ -----END CERTIFICATE-----
449
+
450
+ GlobalSign Root CA
451
+ ==================
452
+ -----BEGIN CERTIFICATE-----
453
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
454
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
455
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
456
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
457
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
458
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
459
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
460
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
461
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
462
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
463
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
464
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
465
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
466
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
467
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
468
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
469
+ -----END CERTIFICATE-----
470
+
471
+ GlobalSign Root CA - R2
472
+ =======================
473
+ -----BEGIN CERTIFICATE-----
474
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
475
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
476
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
477
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
478
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
479
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
480
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
481
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
482
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
483
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
484
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
485
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
486
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
487
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
488
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
489
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
490
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
491
+ -----END CERTIFICATE-----
492
+
493
+ ValiCert Class 1 VA
494
+ ===================
495
+ -----BEGIN CERTIFICATE-----
496
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
497
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
498
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
499
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
500
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
501
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
502
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
503
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
504
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
505
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
506
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
507
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
508
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
509
+ Orf1LXLI
510
+ -----END CERTIFICATE-----
511
+
512
+ ValiCert Class 2 VA
513
+ ===================
514
+ -----BEGIN CERTIFICATE-----
515
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
516
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
517
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
518
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
519
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
520
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
521
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
522
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
523
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
524
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
525
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
526
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
527
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
528
+ W9ViH0Pd
529
+ -----END CERTIFICATE-----
530
+
531
+ RSA Root Certificate 1
532
+ ======================
533
+ -----BEGIN CERTIFICATE-----
534
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
535
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
536
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
537
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
538
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
539
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
540
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
541
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
542
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
543
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
544
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
545
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
546
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
547
+ on+jjBXu
548
+ -----END CERTIFICATE-----
549
+
550
+ Verisign Class 1 Public Primary Certification Authority - G3
551
+ ============================================================
552
+ -----BEGIN CERTIFICATE-----
553
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
554
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
555
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
556
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
557
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
558
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
559
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
560
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
561
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
562
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
563
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
564
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
565
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
566
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
567
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
568
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
569
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
570
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
571
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
572
+ -----END CERTIFICATE-----
573
+
574
+ Verisign Class 2 Public Primary Certification Authority - G3
575
+ ============================================================
576
+ -----BEGIN CERTIFICATE-----
577
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
578
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
579
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
580
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
581
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
582
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
583
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
584
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
585
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
586
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
587
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
588
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
589
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
590
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
591
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
592
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
593
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
594
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
595
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
596
+ -----END CERTIFICATE-----
597
+
598
+ Verisign Class 3 Public Primary Certification Authority - G3
599
+ ============================================================
600
+ -----BEGIN CERTIFICATE-----
601
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
602
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
603
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
604
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
605
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
606
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
607
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
608
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
609
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
610
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
611
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
612
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
613
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
614
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
615
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
616
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
617
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
618
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
619
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
620
+ -----END CERTIFICATE-----
621
+
622
+ Verisign Class 4 Public Primary Certification Authority - G3
623
+ ============================================================
624
+ -----BEGIN CERTIFICATE-----
625
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
626
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
627
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
628
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
629
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
630
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
631
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
632
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
633
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
634
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
635
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
636
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
637
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
638
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
639
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
640
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
641
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
642
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
643
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
644
+ -----END CERTIFICATE-----
645
+
646
+ Entrust.net Secure Server CA
647
+ ============================
648
+ -----BEGIN CERTIFICATE-----
649
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
650
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
651
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
652
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
653
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
654
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
655
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
656
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
657
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
658
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
659
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
660
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
661
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
662
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
663
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
664
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
665
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
666
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
667
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
668
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
669
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
670
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
671
+ -----END CERTIFICATE-----
672
+
673
+ Entrust.net Secure Personal CA
674
+ ==============================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMCVVMxFDASBgNV
677
+ BAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8v
678
+ Q1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1
679
+ c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9u
680
+ IEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJV
681
+ UzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRf
682
+ Q0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5
683
+ OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRp
684
+ ZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdv
685
+ kHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGp
686
+ OZ5V+Pux5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTm
687
+ T173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkwggEVMIHkoIHh
688
+ oIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3
689
+ dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBs
690
+ aWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
691
+ cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
692
+ KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNVHRAEJDAigA8x
693
+ OTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU
694
+ xPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1Ud
695
+ EwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K
696
+ 8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6h
697
+ URzzwy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYG
698
+ JqibGapEPHayXOw=
699
+ -----END CERTIFICATE-----
700
+
701
+ Entrust.net Premium 2048 Secure Server CA
702
+ =========================================
703
+ -----BEGIN CERTIFICATE-----
704
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
705
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
706
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
707
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
708
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
709
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
710
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
711
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
712
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
713
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
714
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
715
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
716
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
717
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
718
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
719
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
720
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
721
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
722
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
723
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
724
+ -----END CERTIFICATE-----
725
+
726
+ Baltimore CyberTrust Root
727
+ =========================
728
+ -----BEGIN CERTIFICATE-----
729
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
730
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
731
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
732
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
733
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
734
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
735
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
736
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
737
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
738
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
739
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
740
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
741
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
742
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
743
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
744
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
745
+ -----END CERTIFICATE-----
746
+
747
+ Equifax Secure Global eBusiness CA
748
+ ==================================
749
+ -----BEGIN CERTIFICATE-----
750
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
751
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
752
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
753
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
754
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
755
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
756
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
757
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
758
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
759
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
760
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
761
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
762
+ -----END CERTIFICATE-----
763
+
764
+ Equifax Secure eBusiness CA 1
765
+ =============================
766
+ -----BEGIN CERTIFICATE-----
767
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
768
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
769
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
770
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
771
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
772
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
773
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
774
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
775
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
776
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
777
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
778
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
779
+ -----END CERTIFICATE-----
780
+
781
+ Equifax Secure eBusiness CA 2
782
+ =============================
783
+ -----BEGIN CERTIFICATE-----
784
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
785
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
786
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
787
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
788
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
789
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
790
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
791
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
792
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
793
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
794
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
795
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
796
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
797
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
798
+ V+GRMOrN
799
+ -----END CERTIFICATE-----
800
+
801
+ Visa International Global Root 2
802
+ ================================
803
+ -----BEGIN CERTIFICATE-----
804
+ MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMxDTALBgNVBAoT
805
+ BFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIw
806
+ EAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYD
807
+ VQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZp
808
+ Y2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEP
809
+ ADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW
810
+ 73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1
811
+ t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm7Igbthkn
812
+ GziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhl
813
+ V7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYE
814
+ FJ59SzS/ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0G
815
+ CSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdpNSYx/scuhMKZ
816
+ YdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQkIqUs38oW26sTTMs7WXcFsziza6k
817
+ PWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOe
818
+ yti12HvOdUVmB/RtLdh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
819
+ ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
820
+ -----END CERTIFICATE-----
821
+
822
+ beTRUSTed Root CA
823
+ =================
824
+ -----BEGIN CERTIFICATE-----
825
+ MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJXVzESMBAGA1UE
826
+ ChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBDQXMxGjAYBgNVBAMTEWJlVFJV
827
+ U1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMC
828
+ V1cxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYD
829
+ VQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0
830
+ c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgz
831
+ eubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCg
832
+ c0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNn
833
+ mrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5
834
+ c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8w
835
+ ggFZBgNVHSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFS
836
+ ZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFu
837
+ Y2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv
838
+ ZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJl
839
+ IGZvdW5kIGF0IGJlVFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
840
+ L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
841
+ L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQxCzAJBgNVBAYT
842
+ AldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3e
843
+ KjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR
844
+ +csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/b
845
+ ow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ
846
+ 1gMe1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWu
847
+ GVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpGEK5BV2Vs
848
+ PyMQPyEQWbfkQN0mDCP2qq4=
849
+ -----END CERTIFICATE-----
850
+
851
+ AddTrust Low-Value Services Root
852
+ ================================
853
+ -----BEGIN CERTIFICATE-----
854
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
855
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
856
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
857
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
858
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
859
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
860
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
861
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
862
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
863
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
864
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
865
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
866
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
867
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
868
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
869
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
870
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
871
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
872
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
873
+ -----END CERTIFICATE-----
874
+
875
+ AddTrust External Root
876
+ ======================
877
+ -----BEGIN CERTIFICATE-----
878
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
879
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
880
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
881
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
882
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
883
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
884
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
885
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
886
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
887
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
888
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
889
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
890
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
891
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
892
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
893
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
894
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
895
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
896
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
897
+ -----END CERTIFICATE-----
898
+
899
+ AddTrust Public Services Root
900
+ =============================
901
+ -----BEGIN CERTIFICATE-----
902
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
903
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
904
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
905
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
906
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
907
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
908
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
909
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
910
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
911
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
912
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
913
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
914
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
915
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
916
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
917
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
918
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
919
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
920
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
921
+ -----END CERTIFICATE-----
922
+
923
+ AddTrust Qualified Certificates Root
924
+ ====================================
925
+ -----BEGIN CERTIFICATE-----
926
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
927
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
928
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
929
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
930
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
931
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
932
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
933
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
934
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
935
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
936
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
937
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
938
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
939
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
940
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
941
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
942
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
943
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
944
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
945
+ -----END CERTIFICATE-----
946
+
947
+ Verisign Time Stamping Authority CA
948
+ ===================================
949
+ -----BEGIN CERTIFICATE-----
950
+ MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UE
951
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQ
952
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZl
953
+ cmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWdu
954
+ IFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UE
955
+ ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNV
956
+ BAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSww
957
+ KgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkqhkiG9w0B
958
+ AQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhj
959
+ zCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6o
960
+ v8uQjI11S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEA
961
+ MEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZl
962
+ cmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20v
963
+ cGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRw
964
+ Oi8vb2NzcC52ZXJpc2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
965
+ DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
966
+ w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU58dzq6wf7iWb
967
+ wBbtt8pb8BQ=
968
+ -----END CERTIFICATE-----
969
+
970
+ Thawte Time Stamping CA
971
+ =======================
972
+ -----BEGIN CERTIFICATE-----
973
+ MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkExFTATBgNVBAgT
974
+ DFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
975
+ A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcg
976
+ Q0EwHhcNOTcwMTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNV
977
+ BAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEd
978
+ MBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBp
979
+ bmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+o
980
+ J9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9
981
+ nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
982
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCo
983
+ uqoEiYbC9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCe
984
+ d/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJSdM=
985
+ -----END CERTIFICATE-----
986
+
987
+ Entrust.net Global Secure Server CA
988
+ ===================================
989
+ -----BEGIN CERTIFICATE-----
990
+ MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChMLRW50cnVzdC5u
991
+ ZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGluY29ycC4gYnkgcmVmLiAobGlt
992
+ aXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
993
+ AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0w
994
+ MDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0G
995
+ A1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
996
+ Yi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRy
997
+ dXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3
998
+ DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55l
999
+ xyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439P
1000
+ mrkDQYC2dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEB
1001
+ BAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0VudHJ1c3QubmV0
1002
+ MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0
1003
+ cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMT
1004
+ MUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
1005
+ BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
1006
+ VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr
1007
+ 47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
1008
+ AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbv
1009
+ H9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3
1010
+ a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
1011
+ -----END CERTIFICATE-----
1012
+
1013
+ Entrust.net Global Secure Personal CA
1014
+ =====================================
1015
+ -----BEGIN CERTIFICATE-----
1016
+ MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
1017
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
1018
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
1019
+ BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcx
1020
+ NjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
1021
+ d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
1022
+ MCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
1023
+ ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1024
+ iQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQl
1025
+ hK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKkl
1026
+ Wb1m9fkn5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNV
1027
+ HR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAwPgYDVQQLFDd3
1028
+ d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUw
1029
+ IwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5l
1030
+ dCBDbGllbnQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
1031
+ IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
1032
+ MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAM
1033
+ BgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQF
1034
+ AAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xK
1035
+ p9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQ
1036
+ Gof4T4HHdguEOnKdzmVml64mXg==
1037
+ -----END CERTIFICATE-----
1038
+
1039
+ Entrust Root Certification Authority
1040
+ ====================================
1041
+ -----BEGIN CERTIFICATE-----
1042
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
1043
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
1044
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
1045
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
1046
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
1047
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
1048
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
1049
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1050
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
1051
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
1052
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
1053
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
1054
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
1055
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
1056
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
1057
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
1058
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
1059
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
1060
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
1061
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
1062
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
1063
+ -----END CERTIFICATE-----
1064
+
1065
+ AOL Time Warner Root Certification Authority 1
1066
+ ==============================================
1067
+ -----BEGIN CERTIFICATE-----
1068
+ MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1069
+ FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1070
+ VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAy
1071
+ MDUyOTA2MDAwMFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1072
+ VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1073
+ QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZI
1074
+ hvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8
1075
+ hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkG
1076
+ IBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93
1077
+ f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQI
1078
+ fHNlIAqhBC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNj
1079
+ MGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+XxIwHwYDVR0j
1080
+ BBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
1081
+ A4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u
1082
+ 0FIy2VkyvNp5ctZ7CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
1083
+ WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
1084
+ n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoWH1iCC+GWaQVL
1085
+ juyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
1086
+ -----END CERTIFICATE-----
1087
+
1088
+ AOL Time Warner Root Certification Authority 2
1089
+ ==============================================
1090
+ -----BEGIN CERTIFICATE-----
1091
+ MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMxHTAbBgNVBAoT
1092
+ FEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNhIE9ubGluZSBJbmMuMTcwNQYD
1093
+ VQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAy
1094
+ MDUyOTA2MDAwMFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wg
1095
+ VGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMu
1096
+ QU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZI
1097
+ hvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8
1098
+ TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWsi4SVqBax
1099
+ 7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17n
1100
+ OirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2w
1101
+ TPDaRrbqJS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rS
1102
+ AG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxmlJ85per5n0/xQ
1103
+ pCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFhEVsVS6kkUfykXPcXnbDS+gfpj1bk
1104
+ GoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuW
1105
+ CpTehTacyH+BCQJJKg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
1106
+ MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1107
+ FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4G
1108
+ A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7
1109
+ +z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI
1110
+ 5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcC
1111
+ tQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ
1112
+ 68W/ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3
1113
+ p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5O8t1wswv
1114
+ ziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD062KRffaJ00psUjf5BHklka9
1115
+ bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4o
1116
+ GKQWDzH9OmwjkyB24f0HhdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2
1117
+ uBOLZ8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
1118
+ -----END CERTIFICATE-----
1119
+
1120
+ beTRUSTed Root CA-Baltimore Implementation
1121
+ ==========================================
1122
+ -----BEGIN CERTIFICATE-----
1123
+ MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1124
+ GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Et
1125
+ QmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVow
1126
+ ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1127
+ BAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1128
+ hvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ
1129
+ +2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8Co
1130
+ Cd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9fHBOB1Bir
1131
+ lNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNe
1132
+ DsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOC
1133
+ Ah4wggIaMA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJ
1134
+ KIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNlIG9mIHRoaXMg
1135
+ Q2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVudCBhbmQgYWNjZXB0YW5jZSBvZiB0
1136
+ aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwg
1137
+ dGhlIENlcnRpZmljYXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
1138
+ eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
1139
+ LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDBB
1140
+ BggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2lu
1141
+ ZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR
1142
+ 3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6s
1143
+ vfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyX
1144
+ EHu67RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfq
1145
+ jjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5dUX2xZ/2j
1146
+ vTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py05yc493EG931t3GzUwWJBtDL
1147
+ SoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
1148
+ -----END CERTIFICATE-----
1149
+
1150
+ beTRUSTed Root CA - Entrust Implementation
1151
+ ==========================================
1152
+ -----BEGIN CERTIFICATE-----
1153
+ MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwliZVRSVVNUZWQx
1154
+ GzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0Eg
1155
+ LSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1ow
1156
+ ZjESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNV
1157
+ BAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZI
1158
+ hvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0c
1159
+ S12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE7
1160
+ 0mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkbhepxKYhB
1161
+ MvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1i
1162
+ JAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOC
1163
+ AwUwggMBMIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYB
1164
+ BQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNyZWF0
1165
+ ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1166
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9u
1167
+ IFByYWN0aWNlIFN0YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
1168
+ aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
1169
+ cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUFBwIBFjZodHRw
1170
+ czovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZI
1171
+ AYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEb
1172
+ MBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAt
1173
+ IEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0
1174
+ MTEwODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44
1175
+ iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNVHRMEBTAD
1176
+ AQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEAKrgX
1177
+ zh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevd
1178
+ kObRVlTa4y0MnxEylCIBevZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/
1179
+ T220Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2kXgCl
1180
+ zMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYhxKlkqu9FNtEaZnz4
1181
+ 6TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
1182
+ -----END CERTIFICATE-----
1183
+
1184
+ beTRUSTed Root CA - RSA Implementation
1185
+ ======================================
1186
+ -----BEGIN CERTIFICATE-----
1187
+ MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBiMRIwEAYDVQQK
1188
+ EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMmYmVUUlVT
1189
+ VGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEy
1190
+ MTEwNzI1WjBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
1191
+ czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0G
1192
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRuj
1193
+ brWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTu
1194
+ lh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xs
1195
+ N+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQh
1196
+ hlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMB
1197
+ AAGjggIYMIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAAD
1198
+ CSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNf
1199
+ c2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIBOhqCATZSZWxpYW5jZSBvbiBvciB1
1200
+ c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2Nl
1201
+ cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
1202
+ bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
1203
+ ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNU
1204
+ ZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9p
1205
+ bmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAd
1206
+ BgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTB
1207
+ mMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05
1208
+ pmuKmET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqN
1209
+ Wz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNMm2+fG8oe
1210
+ qqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8ymmFei74pnykkiFY5LKjSq5YD
1211
+ WtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
1212
+ -----END CERTIFICATE-----
1213
+
1214
+ RSA Security 2048 v3
1215
+ ====================
1216
+ -----BEGIN CERTIFICATE-----
1217
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1218
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
1219
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1220
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1221
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
1222
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
1223
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
1224
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
1225
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
1226
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
1227
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
1228
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
1229
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
1230
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
1231
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
1232
+ pKnXwiJPZ9d37CAFYd4=
1233
+ -----END CERTIFICATE-----
1234
+
1235
+ RSA Security 1024 v3
1236
+ ====================
1237
+ -----BEGIN CERTIFICATE-----
1238
+ MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
1239
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAy
1240
+ MjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
1241
+ BgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV
1242
+ 3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4m
1243
+ mdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1Blq
1244
+ FikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAf
1245
+ BgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUM
1246
+ X96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBD
1247
+ leMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNu
1248
+ mU4/iXgDmMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
1249
+ -----END CERTIFICATE-----
1250
+
1251
+ GeoTrust Global CA
1252
+ ==================
1253
+ -----BEGIN CERTIFICATE-----
1254
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
1255
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
1256
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1257
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1258
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
1259
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
1260
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
1261
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
1262
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
1263
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
1264
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
1265
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
1266
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
1267
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
1268
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
1269
+ Mw==
1270
+ -----END CERTIFICATE-----
1271
+
1272
+ GeoTrust Global CA 2
1273
+ ====================
1274
+ -----BEGIN CERTIFICATE-----
1275
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1276
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
1277
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
1278
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1279
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
1280
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
1281
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
1282
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
1283
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
1284
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
1285
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
1286
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
1287
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
1288
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
1289
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
1290
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
1291
+ -----END CERTIFICATE-----
1292
+
1293
+ GeoTrust Universal CA
1294
+ =====================
1295
+ -----BEGIN CERTIFICATE-----
1296
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1297
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
1298
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
1299
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
1300
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
1301
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
1302
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
1303
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
1304
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
1305
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
1306
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
1307
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
1308
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
1309
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
1310
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
1311
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
1312
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
1313
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
1314
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
1315
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
1316
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
1317
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
1318
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
1319
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
1320
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
1321
+ -----END CERTIFICATE-----
1322
+
1323
+ GeoTrust Universal CA 2
1324
+ =======================
1325
+ -----BEGIN CERTIFICATE-----
1326
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
1327
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
1328
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
1329
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
1330
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
1331
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
1332
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
1333
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
1334
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
1335
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
1336
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
1337
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
1338
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
1339
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
1340
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
1341
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
1342
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
1343
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
1344
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
1345
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
1346
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
1347
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
1348
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
1349
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
1350
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
1351
+ -----END CERTIFICATE-----
1352
+
1353
+ UTN-USER First-Network Applications
1354
+ ===================================
1355
+ -----BEGIN CERTIFICATE-----
1356
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
1357
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1358
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
1359
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
1360
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
1361
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1362
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
1363
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
1364
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
1365
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
1366
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
1367
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
1368
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
1369
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
1370
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
1371
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
1372
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
1373
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
1374
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
1375
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
1376
+ -----END CERTIFICATE-----
1377
+
1378
+ America Online Root Certification Authority 1
1379
+ =============================================
1380
+ -----BEGIN CERTIFICATE-----
1381
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1382
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1383
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
1384
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1385
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
1386
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
1387
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
1388
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
1389
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
1390
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
1391
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
1392
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
1393
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
1394
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
1395
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
1396
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
1397
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
1398
+ -----END CERTIFICATE-----
1399
+
1400
+ America Online Root Certification Authority 2
1401
+ =============================================
1402
+ -----BEGIN CERTIFICATE-----
1403
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
1404
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
1405
+ Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
1406
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
1407
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
1408
+ ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
1409
+ fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
1410
+ f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
1411
+ qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
1412
+ RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
1413
+ gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
1414
+ 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
1415
+ FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
1416
+ Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
1417
+ B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
1418
+ aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
1419
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
1420
+ T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
1421
+ +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
1422
+ JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
1423
+ zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
1424
+ ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
1425
+ 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
1426
+ GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
1427
+ Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
1428
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
1429
+ -----END CERTIFICATE-----
1430
+
1431
+ Visa eCommerce Root
1432
+ ===================
1433
+ -----BEGIN CERTIFICATE-----
1434
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
1435
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
1436
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
1437
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
1438
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
1439
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
1440
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
1441
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
1442
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
1443
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
1444
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
1445
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
1446
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
1447
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
1448
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
1449
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
1450
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
1451
+ -----END CERTIFICATE-----
1452
+
1453
+ TC TrustCenter, Germany, Class 2 CA
1454
+ ===================================
1455
+ -----BEGIN CERTIFICATE-----
1456
+ MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1457
+ EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1458
+ U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1459
+ bGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1460
+ ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1461
+ YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1462
+ aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1463
+ MiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1464
+ hvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLs
1465
+ qh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5N
1466
+ u6hLVxa8/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1467
+ Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1468
+ LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBAIRS+yjf
1469
+ /x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ2
1470
+ 9ELw+HkuCkhcq8xRT3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
1471
+ ASZ4smZHcFFk
1472
+ -----END CERTIFICATE-----
1473
+
1474
+ TC TrustCenter, Germany, Class 3 CA
1475
+ ===================================
1476
+ -----BEGIN CERTIFICATE-----
1477
+ MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQI
1478
+ EwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig
1479
+ U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBD
1480
+ bGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05
1481
+ ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFt
1482
+ YnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3Vy
1483
+ aXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3Mg
1484
+ MyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZI
1485
+ hvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN
1486
+ 2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+7
1487
+ 7uMMfTDWw1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMB
1488
+ Af8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0Y2VudGVy
1489
+ LmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0GCSqGSIb3DQEBBAUAA4GBABY9xs3B
1490
+ u4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm
1491
+ 5gZOngylerpuw3yCGdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
1492
+ CdS7kjXvD9s0
1493
+ -----END CERTIFICATE-----
1494
+
1495
+ Certum Root CA
1496
+ ==============
1497
+ -----BEGIN CERTIFICATE-----
1498
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
1499
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
1500
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
1501
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
1502
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
1503
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
1504
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
1505
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
1506
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
1507
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
1508
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
1509
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
1510
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
1511
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
1512
+ -----END CERTIFICATE-----
1513
+
1514
+ Comodo AAA Services root
1515
+ ========================
1516
+ -----BEGIN CERTIFICATE-----
1517
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1518
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1519
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
1520
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
1521
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
1522
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1523
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
1524
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
1525
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
1526
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
1527
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
1528
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
1529
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
1530
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
1531
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
1532
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
1533
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
1534
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
1535
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
1536
+ -----END CERTIFICATE-----
1537
+
1538
+ Comodo Secure Services root
1539
+ ===========================
1540
+ -----BEGIN CERTIFICATE-----
1541
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1542
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1543
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
1544
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
1545
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
1546
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
1547
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
1548
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
1549
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
1550
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
1551
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
1552
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
1553
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
1554
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
1555
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
1556
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
1557
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
1558
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
1559
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
1560
+ RR3B7Hzs/Sk=
1561
+ -----END CERTIFICATE-----
1562
+
1563
+ Comodo Trusted Services root
1564
+ ============================
1565
+ -----BEGIN CERTIFICATE-----
1566
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
1567
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
1568
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
1569
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
1570
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
1571
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
1572
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
1573
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
1574
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
1575
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
1576
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
1577
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
1578
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
1579
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
1580
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
1581
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
1582
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
1583
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
1584
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
1585
+ 9y5Xt5hwXsjEeLBi
1586
+ -----END CERTIFICATE-----
1587
+
1588
+ IPS Chained CAs root
1589
+ ====================
1590
+ -----BEGIN CERTIFICATE-----
1591
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1592
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1593
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1594
+ Qi02MDkyOTQ1MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0
1595
+ aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1596
+ dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEy
1597
+ MjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJ
1598
+ QmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwu
1599
+ MSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJ
1600
+ UFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBD
1601
+ QSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBz
1602
+ QG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQgvJhPUOtopKdJ
1603
+ C7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCBhYEFcYGdtJUZqV92NC5jNzVXjrQf
1604
+ Qj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQID
1605
+ AQABo4IEQzCCBD8wHQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
1606
+ AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
1607
+ CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBw
1608
+ dWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
1609
+ IEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1
1610
+ dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9y
1611
+ aXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNV
1612
+ HQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
1613
+ BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGC
1614
+ NwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
1615
+ EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZp
1616
+ Y2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8v
1617
+ d3d3Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
1618
+ MjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3dy5pcHMuZXMvaXBz
1619
+ MjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5l
1620
+ cy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
1621
+ LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5p
1622
+ cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
1623
+ L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1624
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hAK+/b
1625
+ lkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M9
1626
+ 2GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
1627
+ -----END CERTIFICATE-----
1628
+
1629
+ IPS CLASE1 root
1630
+ ===============
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1633
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1634
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1635
+ Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1636
+ eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1637
+ SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFow
1638
+ ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1639
+ LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1640
+ Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1641
+ RTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlm
1642
+ aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1643
+ hkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5BlmvXSHU0lq4
1644
+ oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBSYmL9Yzt9fuzuOOpi9GyocY3h6YvJ
1645
+ P8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1646
+ BBTrsxl588GlHKzcuh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
1647
+ adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1648
+ BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1649
+ LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1650
+ EyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1651
+ Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1652
+ cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1653
+ BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1654
+ BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1655
+ BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1656
+ hvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1657
+ cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1658
+ BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCGSAGG
1659
+ +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTEuaHRtbD8w
1660
+ PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5o
1661
+ dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1662
+ RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1663
+ MDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1664
+ Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1665
+ cy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1urxUq2
1666
+ ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmO
1667
+ DszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9UkE6tsSU=
1668
+ -----END CERTIFICATE-----
1669
+
1670
+ IPS CLASE3 root
1671
+ ===============
1672
+ -----BEGIN CERTIFICATE-----
1673
+ MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1674
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1675
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1676
+ Qi02MDkyOTQ1MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1677
+ eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqG
1678
+ SIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFow
1679
+ ggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
1680
+ LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoU
1681
+ Imlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFT
1682
+ RTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlm
1683
+ aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkq
1684
+ hkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49NzjaY2uQARIwo
1685
+ 2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY8jjsbJ0gA8DvqqPGZARRLXgNo9Ko
1686
+ OtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQW
1687
+ BBS4k/8uy9wsjqLnev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
1688
+ mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
1689
+ BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBz
1690
+ LmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQL
1691
+ EyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0Eg
1692
+ Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
1693
+ cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMB
1694
+ BggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
1695
+ BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0R
1696
+ BBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBBBglghkgB
1697
+ hvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5l
1698
+ cy8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIB
1699
+ BAQtFitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCGSAGG
1700
+ +EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25DTEFTRTMuaHRtbD8w
1701
+ PAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5o
1702
+ dG1sPzA6BglghkgBhvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
1703
+ RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIw
1704
+ MDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
1705
+ Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
1706
+ cy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc4gYt
1707
+ fibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUE
1708
+ NPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkOE7LFRVA=
1709
+ -----END CERTIFICATE-----
1710
+
1711
+ IPS CLASEA1 root
1712
+ ================
1713
+ -----BEGIN CERTIFICATE-----
1714
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1715
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1716
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1717
+ Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1718
+ dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1719
+ KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMy
1720
+ WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1721
+ YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1722
+ ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1723
+ QVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENl
1724
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1725
+ DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2mdd81u4D/u6zJf
1726
+ X5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4WwdByOgF9H5fahGRpEiqLJpxq339fWU
1727
+ oTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNV
1728
+ HQ4EFgQUZyaW56G/2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
1729
+ 3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1730
+ BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1731
+ ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1732
+ A1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1733
+ UyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1734
+ bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1735
+ AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1736
+ FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1737
+ GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1738
+ BglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1739
+ dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1740
+ hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmww
1741
+ QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1742
+ QTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1743
+ bENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1744
+ cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1745
+ czIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1746
+ MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1747
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINmyq0e
1748
+ B81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5bi
1749
+ KcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
1750
+ -----END CERTIFICATE-----
1751
+
1752
+ IPS CLASEA3 root
1753
+ ================
1754
+ -----BEGIN CERTIFICATE-----
1755
+ MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1756
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1757
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1758
+ Qi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1759
+ dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
1760
+ KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUw
1761
+ WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u
1762
+ YTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
1763
+ ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENM
1764
+ QVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENl
1765
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8w
1766
+ DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uGBiJ2MwwSbUhW
1767
+ YdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHUVqLyjRGZ/fZ98cfEXgIqmuJKtROK
1768
+ AP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNV
1769
+ HQ4EFgQUHp9XUEe2YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
1770
+ 2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
1771
+ BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2Vydmlj
1772
+ ZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0G
1773
+ A1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQ
1774
+ UyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
1775
+ bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsG
1776
+ AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
1777
+ FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
1778
+ GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
1779
+ BglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3
1780
+ dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7Bglg
1781
+ hkgBhvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmww
1782
+ QAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNMQVNF
1783
+ QTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdh
1784
+ bENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
1785
+ cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lw
1786
+ czIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
1787
+ MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRw
1788
+ Oi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB/MjD
1789
+ 81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9S
1790
+ KcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
1791
+ -----END CERTIFICATE-----
1792
+
1793
+ IPS Servidores root
1794
+ ===================
1795
+ -----BEGIN CERTIFICATE-----
1796
+ MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJD
1797
+ RUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYG
1798
+ A1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3
1799
+ DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMx
1800
+ CzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcG
1801
+ A1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
1802
+ Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqG
1803
+ SIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3PqHILVik
1804
+ gDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Eh
1805
+ im51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB
1806
+ ACzzw3lYJN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2
1807
+ /iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58GNCr+Lh3B0Zx
1808
+ 8coLY1xq+XKU1QFPoNtC
1809
+ -----END CERTIFICATE-----
1810
+
1811
+ IPS Timestamping root
1812
+ =====================
1813
+ -----BEGIN CERTIFICATE-----
1814
+ MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVTMRIwEAYDVQQI
1815
+ EwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1
1816
+ Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAg
1817
+ Qi02MDkyOTQ1MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1
1818
+ dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1819
+ cml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1
1820
+ MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQH
1821
+ EwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
1822
+ bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsT
1823
+ K0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQ
1824
+ UyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEW
1825
+ D2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLjuVqWajOY2ycJi
1826
+ oGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4Efdo/BdApWgnMjvEp+ZCccWZ73b/
1827
+ K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0Gm
1828
+ qaMCAwEAAaOCBIAwggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
1829
+ AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
1830
+ BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
1831
+ ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5J
1832
+ LkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRp
1833
+ b24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24g
1834
+ QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB
1835
+ /zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
1836
+ CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
1837
+ KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVz
1838
+ MBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5n
1839
+ IENBIENlcnRpZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
1840
+ BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8vd3d3
1841
+ Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCGSAGG+EIBAwQ4FjZo
1842
+ dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJ
1843
+ YIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
1844
+ Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lU
1845
+ aW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
1846
+ MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMv
1847
+ aXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
1848
+ MAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoe
1849
+ FAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWT
1850
+ s/zif/WN87GphV+I3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
1851
+ -----END CERTIFICATE-----
1852
+
1853
+ QuoVadis Root CA
1854
+ ================
1855
+ -----BEGIN CERTIFICATE-----
1856
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
1857
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1858
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
1859
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
1860
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
1861
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1862
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
1863
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
1864
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
1865
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
1866
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
1867
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
1868
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
1869
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
1870
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
1871
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
1872
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
1873
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
1874
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
1875
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
1876
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
1877
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
1878
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
1879
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
1880
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
1881
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
1882
+ 5nrQNiOKSnQ2+Q==
1883
+ -----END CERTIFICATE-----
1884
+
1885
+ QuoVadis Root CA 2
1886
+ ==================
1887
+ -----BEGIN CERTIFICATE-----
1888
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1889
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1890
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1891
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1892
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1893
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1894
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1895
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1896
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1897
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1898
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1899
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1900
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1901
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1902
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1903
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1904
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1905
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1906
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1907
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1908
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1909
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1910
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1911
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1912
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1913
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1914
+ -----END CERTIFICATE-----
1915
+
1916
+ QuoVadis Root CA 3
1917
+ ==================
1918
+ -----BEGIN CERTIFICATE-----
1919
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1920
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1921
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1922
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1923
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1924
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1925
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1926
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1927
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1928
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1929
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1930
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1931
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1932
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1933
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1934
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1935
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1936
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1937
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1938
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1939
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1940
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1941
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1942
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1943
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1944
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1945
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1946
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1947
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1948
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1949
+ -----END CERTIFICATE-----
1950
+
1951
+ Security Communication Root CA
1952
+ ==============================
1953
+ -----BEGIN CERTIFICATE-----
1954
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1955
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1956
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1957
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1958
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1959
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1960
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1961
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1962
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1963
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1964
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1965
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1966
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1967
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1968
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1969
+ FL39vmwLAw==
1970
+ -----END CERTIFICATE-----
1971
+
1972
+ Sonera Class 1 Root CA
1973
+ ======================
1974
+ -----BEGIN CERTIFICATE-----
1975
+ MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1976
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1977
+ NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1978
+ IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1979
+ 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1980
+ EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1981
+ 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1982
+ 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1983
+ HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1984
+ iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1985
+ 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1986
+ yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1987
+ vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1988
+ qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1989
+ IRlXvVWa
1990
+ -----END CERTIFICATE-----
1991
+
1992
+ Sonera Class 2 Root CA
1993
+ ======================
1994
+ -----BEGIN CERTIFICATE-----
1995
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1996
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1997
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1998
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1999
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
2000
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
2001
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
2002
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
2003
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
2004
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
2005
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
2006
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
2007
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
2008
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
2009
+ llpwrN9M
2010
+ -----END CERTIFICATE-----
2011
+
2012
+ Staat der Nederlanden Root CA
2013
+ =============================
2014
+ -----BEGIN CERTIFICATE-----
2015
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
2016
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2017
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
2018
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
2019
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
2020
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
2021
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
2022
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
2023
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
2024
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
2025
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
2026
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
2027
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
2028
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
2029
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
2030
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
2031
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
2032
+ -----END CERTIFICATE-----
2033
+
2034
+ TDC Internet Root CA
2035
+ ====================
2036
+ -----BEGIN CERTIFICATE-----
2037
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
2038
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
2039
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
2040
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2041
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
2042
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
2043
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
2044
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
2045
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
2046
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
2047
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
2048
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
2049
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
2050
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
2051
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
2052
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
2053
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
2054
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
2055
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
2056
+ -----END CERTIFICATE-----
2057
+
2058
+ TDC OCES Root CA
2059
+ ================
2060
+ -----BEGIN CERTIFICATE-----
2061
+ MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
2062
+ ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
2063
+ MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
2064
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
2065
+ nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
2066
+ zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
2067
+ iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
2068
+ dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
2069
+ 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
2070
+ 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
2071
+ ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
2072
+ cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
2073
+ Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
2074
+ LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
2075
+ MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
2076
+ aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
2077
+ MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
2078
+ +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
2079
+ NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
2080
+ A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
2081
+ A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
2082
+ AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
2083
+ AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
2084
+ -----END CERTIFICATE-----
2085
+
2086
+ UTN DATACorp SGC Root CA
2087
+ ========================
2088
+ -----BEGIN CERTIFICATE-----
2089
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
2090
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2091
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
2092
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
2093
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
2094
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
2095
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
2096
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
2097
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
2098
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
2099
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
2100
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
2101
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
2102
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
2103
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
2104
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
2105
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
2106
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
2107
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
2108
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
2109
+ -----END CERTIFICATE-----
2110
+
2111
+ UTN USERFirst Email Root CA
2112
+ ===========================
2113
+ -----BEGIN CERTIFICATE-----
2114
+ MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2115
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2116
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
2117
+ BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
2118
+ OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
2119
+ FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
2120
+ ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
2121
+ dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2122
+ MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
2123
+ B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
2124
+ om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
2125
+ TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
2126
+ yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
2127
+ AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
2128
+ HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
2129
+ bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
2130
+ AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
2131
+ xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
2132
+ 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
2133
+ NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
2134
+ w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
2135
+ -----END CERTIFICATE-----
2136
+
2137
+ UTN USERFirst Hardware Root CA
2138
+ ==============================
2139
+ -----BEGIN CERTIFICATE-----
2140
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
2141
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2142
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
2143
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
2144
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
2145
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
2146
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
2147
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
2148
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
2149
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
2150
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
2151
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
2152
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
2153
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
2154
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
2155
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
2156
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
2157
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
2158
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
2159
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
2160
+ nfhmqA==
2161
+ -----END CERTIFICATE-----
2162
+
2163
+ UTN USERFirst Object Root CA
2164
+ ============================
2165
+ -----BEGIN CERTIFICATE-----
2166
+ MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
2167
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
2168
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
2169
+ BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
2170
+ NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
2171
+ HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
2172
+ dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
2173
+ BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
2174
+ loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
2175
+ w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
2176
+ lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
2177
+ RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
2178
+ BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
2179
+ ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
2180
+ c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
2181
+ DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
2182
+ NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
2183
+ PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
2184
+ qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
2185
+ hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
2186
+ -----END CERTIFICATE-----
2187
+
2188
+ Camerfirma Chambers of Commerce Root
2189
+ ====================================
2190
+ -----BEGIN CERTIFICATE-----
2191
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2192
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2193
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
2194
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
2195
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
2196
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
2197
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
2198
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
2199
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
2200
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
2201
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
2202
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
2203
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
2204
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
2205
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
2206
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
2207
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
2208
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
2209
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
2210
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
2211
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
2212
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
2213
+ -----END CERTIFICATE-----
2214
+
2215
+ Camerfirma Global Chambersign Root
2216
+ ==================================
2217
+ -----BEGIN CERTIFICATE-----
2218
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
2219
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
2220
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
2221
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
2222
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
2223
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
2224
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
2225
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
2226
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
2227
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
2228
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
2229
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
2230
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
2231
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
2232
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
2233
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
2234
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
2235
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
2236
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
2237
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
2238
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
2239
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
2240
+ -----END CERTIFICATE-----
2241
+
2242
+ NetLock Qualified (Class QA) Root
2243
+ =================================
2244
+ -----BEGIN CERTIFICATE-----
2245
+ MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2246
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2247
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
2248
+ eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
2249
+ bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
2250
+ MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
2251
+ LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
2252
+ dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
2253
+ aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
2254
+ CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
2255
+ 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
2256
+ m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
2257
+ 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
2258
+ 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2259
+ HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
2260
+ YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
2261
+ biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
2262
+ a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
2263
+ YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
2264
+ YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
2265
+ ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
2266
+ L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
2267
+ Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
2268
+ aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
2269
+ YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
2270
+ IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
2271
+ DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
2272
+ wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
2273
+ W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
2274
+ R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
2275
+ 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
2276
+ -----END CERTIFICATE-----
2277
+
2278
+ NetLock Notary (Class A) Root
2279
+ =============================
2280
+ -----BEGIN CERTIFICATE-----
2281
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
2282
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2283
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
2284
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
2285
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
2286
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
2287
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
2288
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
2289
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
2290
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
2291
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
2292
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
2293
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
2294
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
2295
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
2296
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
2297
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
2298
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
2299
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
2300
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
2301
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
2302
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
2303
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
2304
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
2305
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
2306
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
2307
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
2308
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
2309
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
2310
+ 8CgHrTwXZoi1/baI
2311
+ -----END CERTIFICATE-----
2312
+
2313
+ NetLock Business (Class B) Root
2314
+ ===============================
2315
+ -----BEGIN CERTIFICATE-----
2316
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2317
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2318
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
2319
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
2320
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
2321
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
2322
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
2323
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
2324
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
2325
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
2326
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
2327
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
2328
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
2329
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
2330
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
2331
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
2332
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
2333
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
2334
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
2335
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
2336
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
2337
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
2338
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
2339
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
2340
+ -----END CERTIFICATE-----
2341
+
2342
+ NetLock Express (Class C) Root
2343
+ ==============================
2344
+ -----BEGIN CERTIFICATE-----
2345
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
2346
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
2347
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
2348
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
2349
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
2350
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
2351
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
2352
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
2353
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
2354
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
2355
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
2356
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
2357
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
2358
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
2359
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
2360
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
2361
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
2362
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
2363
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
2364
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
2365
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
2366
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
2367
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
2368
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
2369
+ -----END CERTIFICATE-----
2370
+
2371
+ XRamp Global CA Root
2372
+ ====================
2373
+ -----BEGIN CERTIFICATE-----
2374
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
2375
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
2376
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
2377
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
2378
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
2379
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2380
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
2381
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
2382
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
2383
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
2384
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
2385
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2386
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
2387
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
2388
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
2389
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
2390
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
2391
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
2392
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
2393
+ -----END CERTIFICATE-----
2394
+
2395
+ Go Daddy Class 2 CA
2396
+ ===================
2397
+ -----BEGIN CERTIFICATE-----
2398
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
2399
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
2400
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
2401
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
2402
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
2403
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
2404
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
2405
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
2406
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
2407
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
2408
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
2409
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
2410
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
2411
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
2412
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
2413
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
2414
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
2415
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
2416
+ vZ8=
2417
+ -----END CERTIFICATE-----
2418
+
2419
+ Starfield Class 2 CA
2420
+ ====================
2421
+ -----BEGIN CERTIFICATE-----
2422
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
2423
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
2424
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
2425
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
2426
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
2427
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
2428
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
2429
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
2430
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
2431
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
2432
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
2433
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
2434
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
2435
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
2436
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
2437
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
2438
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
2439
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
2440
+ QBFGmh95DmK/D5fs4C8fF5Q=
2441
+ -----END CERTIFICATE-----
2442
+
2443
+ StartCom Ltd.
2444
+ =============
2445
+ -----BEGIN CERTIFICATE-----
2446
+ MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
2447
+ BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsT
2448
+ EUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhv
2449
+ cml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoX
2450
+ DTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcT
2451
+ BUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVw
2452
+ LjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0B
2453
+ CQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOe
2454
+ yEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+
2455
+ o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2
2456
+ IhULpNYILzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1Ud
2457
+ DgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+MtUNjIExtpid
2458
+ jShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWls
2459
+ YXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw
2460
+ JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
2461
+ YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
2462
+ HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIB
2463
+ DQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0
2464
+ cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9j
2465
+ ZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9y
2466
+ Zy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhB
2467
+ OlP1ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6w
2468
+ NnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjnfg==
2469
+ -----END CERTIFICATE-----
2470
+
2471
+ StartCom Certification Authority
2472
+ ================================
2473
+ -----BEGIN CERTIFICATE-----
2474
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2475
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2476
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2477
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2478
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2479
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2480
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2481
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2482
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2483
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2484
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2485
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2486
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2487
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2488
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2489
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
2490
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
2491
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
2492
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
2493
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
2494
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
2495
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
2496
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
2497
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
2498
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
2499
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
2500
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
2501
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
2502
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
2503
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
2504
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
2505
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
2506
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
2507
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
2508
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
2509
+ g14=
2510
+ -----END CERTIFICATE-----
2511
+
2512
+ Taiwan GRCA
2513
+ ===========
2514
+ -----BEGIN CERTIFICATE-----
2515
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
2516
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
2517
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
2518
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
2519
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
2520
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
2521
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
2522
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
2523
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
2524
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
2525
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
2526
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
2527
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
2528
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
2529
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
2530
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
2531
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
2532
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
2533
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
2534
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
2535
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
2536
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
2537
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
2538
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
2539
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
2540
+ -----END CERTIFICATE-----
2541
+
2542
+ Firmaprofesional Root CA
2543
+ ========================
2544
+ -----BEGIN CERTIFICATE-----
2545
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
2546
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
2547
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
2548
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
2549
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
2550
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
2551
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
2552
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
2553
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
2554
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
2555
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
2556
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
2557
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
2558
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
2559
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
2560
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
2561
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
2562
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
2563
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
2564
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
2565
+ -----END CERTIFICATE-----
2566
+
2567
+ Wells Fargo Root CA
2568
+ ===================
2569
+ -----BEGIN CERTIFICATE-----
2570
+ MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
2571
+ BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
2572
+ cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2573
+ MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
2574
+ bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
2575
+ MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
2576
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
2577
+ x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
2578
+ E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
2579
+ OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
2580
+ sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
2581
+ YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
2582
+ BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
2583
+ ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
2584
+ m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
2585
+ OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
2586
+ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
2587
+ tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
2588
+ -----END CERTIFICATE-----
2589
+
2590
+ Swisscom Root CA 1
2591
+ ==================
2592
+ -----BEGIN CERTIFICATE-----
2593
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
2594
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
2595
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
2596
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2597
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
2598
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
2599
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
2600
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
2601
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
2602
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
2603
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
2604
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
2605
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
2606
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
2607
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
2608
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
2609
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
2610
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
2611
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
2612
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
2613
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
2614
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
2615
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
2616
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
2617
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
2618
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
2619
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
2620
+ -----END CERTIFICATE-----
2621
+
2622
+ DigiCert Assured ID Root CA
2623
+ ===========================
2624
+ -----BEGIN CERTIFICATE-----
2625
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
2626
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
2627
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
2628
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
2629
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
2630
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
2631
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
2632
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
2633
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
2634
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
2635
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
2636
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
2637
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
2638
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
2639
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
2640
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
2641
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
2642
+ -----END CERTIFICATE-----
2643
+
2644
+ DigiCert Global Root CA
2645
+ =======================
2646
+ -----BEGIN CERTIFICATE-----
2647
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
2648
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
2649
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
2650
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
2651
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
2652
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
2653
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
2654
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
2655
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
2656
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
2657
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
2658
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
2659
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
2660
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
2661
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
2662
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
2663
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
2664
+ -----END CERTIFICATE-----
2665
+
2666
+ DigiCert High Assurance EV Root CA
2667
+ ==================================
2668
+ -----BEGIN CERTIFICATE-----
2669
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
2670
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
2671
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
2672
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
2673
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
2674
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
2675
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
2676
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
2677
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
2678
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
2679
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
2680
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
2681
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
2682
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
2683
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
2684
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
2685
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
2686
+ -----END CERTIFICATE-----
2687
+
2688
+ Certplus Class 2 Primary CA
2689
+ ===========================
2690
+ -----BEGIN CERTIFICATE-----
2691
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
2692
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
2693
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
2694
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
2695
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
2696
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
2697
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
2698
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
2699
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
2700
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
2701
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
2702
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
2703
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
2704
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
2705
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
2706
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
2707
+ l7+ijrRU
2708
+ -----END CERTIFICATE-----
2709
+
2710
+ DST Root CA X3
2711
+ ==============
2712
+ -----BEGIN CERTIFICATE-----
2713
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
2714
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
2715
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
2716
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
2717
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
2718
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
2719
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
2720
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
2721
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
2722
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
2723
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
2724
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
2725
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
2726
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
2727
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
2728
+ -----END CERTIFICATE-----
2729
+
2730
+ DST ACES CA X6
2731
+ ==============
2732
+ -----BEGIN CERTIFICATE-----
2733
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
2734
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
2735
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
2736
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
2737
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
2738
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
2739
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
2740
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
2741
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
2742
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
2743
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
2744
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
2745
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
2746
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
2747
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
2748
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
2749
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
2750
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
2751
+ oKfN5XozNmr6mis=
2752
+ -----END CERTIFICATE-----
2753
+
2754
+ TURKTRUST Certificate Services Provider Root 1
2755
+ ==============================================
2756
+ -----BEGIN CERTIFICATE-----
2757
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2758
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
2759
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
2760
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
2761
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
2762
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
2763
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
2764
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
2765
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
2766
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
2767
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
2768
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
2769
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
2770
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
2771
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
2772
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
2773
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
2774
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
2775
+ -----END CERTIFICATE-----
2776
+
2777
+ TURKTRUST Certificate Services Provider Root 2
2778
+ ==============================================
2779
+ -----BEGIN CERTIFICATE-----
2780
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2781
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2782
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2783
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
2784
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
2785
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
2786
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
2787
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
2788
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
2789
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
2790
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
2791
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
2792
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
2793
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
2794
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
2795
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
2796
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
2797
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
2798
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
2799
+ UrbnBEI=
2800
+ -----END CERTIFICATE-----
2801
+
2802
+ SwissSign Platinum CA - G2
2803
+ ==========================
2804
+ -----BEGIN CERTIFICATE-----
2805
+ MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
2806
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
2807
+ HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
2808
+ U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
2809
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
2810
+ 669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
2811
+ eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
2812
+ WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
2813
+ j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
2814
+ 8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
2815
+ aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
2816
+ domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
2817
+ +m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
2818
+ CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
2819
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
2820
+ zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
2821
+ IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
2822
+ Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
2823
+ NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
2824
+ U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
2825
+ KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
2826
+ 9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
2827
+ aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
2828
+ OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
2829
+ Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
2830
+ IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
2831
+ -----END CERTIFICATE-----
2832
+
2833
+ SwissSign Gold CA - G2
2834
+ ======================
2835
+ -----BEGIN CERTIFICATE-----
2836
+ MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
2837
+ EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
2838
+ MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
2839
+ c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
2840
+ AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
2841
+ t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
2842
+ jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
2843
+ vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
2844
+ ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
2845
+ AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
2846
+ jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
2847
+ peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
2848
+ 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
2849
+ GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
2850
+ AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
2851
+ OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
2852
+ L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
2853
+ 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
2854
+ 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
2855
+ Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
2856
+ Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
2857
+ mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
2858
+ vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
2859
+ KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
2860
+ NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
2861
+ viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
2862
+ -----END CERTIFICATE-----
2863
+
2864
+ SwissSign Silver CA - G2
2865
+ ========================
2866
+ -----BEGIN CERTIFICATE-----
2867
+ MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
2868
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
2869
+ DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
2870
+ aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
2871
+ 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
2872
+ N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
2873
+ +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
2874
+ 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
2875
+ MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
2876
+ qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
2877
+ FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
2878
+ ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
2879
+ celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
2880
+ CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
2881
+ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
2882
+ tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
2883
+ cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
2884
+ 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
2885
+ kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
2886
+ 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
2887
+ /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
2888
+ DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
2889
+ e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
2890
+ WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
2891
+ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
2892
+ DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
2893
+ -----END CERTIFICATE-----
2894
+
2895
+ GeoTrust Primary Certification Authority
2896
+ ========================================
2897
+ -----BEGIN CERTIFICATE-----
2898
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
2899
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
2900
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
2901
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
2902
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2903
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
2904
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
2905
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
2906
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
2907
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2908
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
2909
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
2910
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
2911
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
2912
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2913
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2914
+ -----END CERTIFICATE-----
2915
+
2916
+ thawte Primary Root CA
2917
+ ======================
2918
+ -----BEGIN CERTIFICATE-----
2919
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2920
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2921
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2922
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2923
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2924
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2925
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2926
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2927
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2928
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2929
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2930
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2931
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2932
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2933
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2934
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2935
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2936
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2937
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2938
+ -----END CERTIFICATE-----
2939
+
2940
+ VeriSign Class 3 Public Primary Certification Authority - G5
2941
+ ============================================================
2942
+ -----BEGIN CERTIFICATE-----
2943
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2944
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2945
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2946
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2947
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2948
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2949
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2950
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2951
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2952
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2953
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2954
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2955
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2956
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2957
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2958
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2959
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2960
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2961
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2962
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2963
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2964
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2965
+ -----END CERTIFICATE-----
2966
+
2967
+ SecureTrust CA
2968
+ ==============
2969
+ -----BEGIN CERTIFICATE-----
2970
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2971
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2972
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2973
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2974
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2975
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2976
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2977
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2978
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2979
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2980
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2981
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2982
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2983
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2984
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2985
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2986
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2987
+ -----END CERTIFICATE-----
2988
+
2989
+ Secure Global CA
2990
+ ================
2991
+ -----BEGIN CERTIFICATE-----
2992
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2993
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2994
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2995
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2996
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2997
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2998
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2999
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
3000
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
3001
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
3002
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
3003
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
3004
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
3005
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
3006
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
3007
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
3008
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
3009
+ -----END CERTIFICATE-----
3010
+
3011
+ COMODO Certification Authority
3012
+ ==============================
3013
+ -----BEGIN CERTIFICATE-----
3014
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
3015
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
3016
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
3017
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
3018
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
3019
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3020
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
3021
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
3022
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
3023
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
3024
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
3025
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
3026
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
3027
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
3028
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
3029
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
3030
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
3031
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
3032
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
3033
+ -----END CERTIFICATE-----
3034
+
3035
+ DigiNotar Root CA
3036
+ =================
3037
+ -----BEGIN CERTIFICATE-----
3038
+ MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQG
3039
+ EwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEgMB4G
3040
+ CSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwHhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgx
3041
+ OTIxWjBfMQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90
3042
+ YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3
3043
+ DQEBAQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B8cp86Yxq
3044
+ 7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXYtsMW2YiwsYcdcNqGtA8U
3045
+ i3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIlHgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8
3046
+ ZkqQfioLBQftFl9VkHXYRskbg+IIvvEjzJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEq
3047
+ bYRAhU52mXyC8/O3AlnUJgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4
3048
+ iHomGgVMktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXva5pk
3049
+ XuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57pK6kwe6AYHw4YC+Vb
3050
+ qdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMipuih2TkGl/VujQKQjBR7P4DNG5y6
3051
+ xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovTyD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHc
3052
+ BmfFlHqabWJMfczgZICynkeOowIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
3053
+ AwIBBjAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
3054
+ jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXyfJ9oHbtdzno5
3055
+ wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBoY6pFITlIYXg23PFDk9Qlx/KA
3056
+ ZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHoM/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedT
3057
+ FLJgQT2EkTFoPSdE2+Xe9PpjRchMPpj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKf
3058
+ yvBovWsdst+Nbwed2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoA
3059
+ ZbwH/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQlnQ7KN+ZQ
3060
+ /YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jEO1hZibCMjFCz2IbLaKPE
3061
+ CudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU9jQZjHkJNsphFyUXC4KYcwx3dMPVDceo
3062
+ EkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
3063
+ -----END CERTIFICATE-----
3064
+
3065
+ Network Solutions Certificate Authority
3066
+ =======================================
3067
+ -----BEGIN CERTIFICATE-----
3068
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
3069
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
3070
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
3071
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
3072
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3073
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
3074
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
3075
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
3076
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
3077
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
3078
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
3079
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
3080
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
3081
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
3082
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
3083
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
3084
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
3085
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
3086
+ -----END CERTIFICATE-----
3087
+
3088
+ WellsSecure Public Root Certificate Authority
3089
+ =============================================
3090
+ -----BEGIN CERTIFICATE-----
3091
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
3092
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
3093
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
3094
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
3095
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
3096
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
3097
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
3098
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
3099
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
3100
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
3101
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
3102
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
3103
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
3104
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
3105
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
3106
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
3107
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
3108
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
3109
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
3110
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
3111
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
3112
+ tylv2G0xffX8oRAHh84vWdw+WNs=
3113
+ -----END CERTIFICATE-----
lib/CF/cloudfiles.php CHANGED
@@ -1,2147 +1,2149 @@
1
- <?php
2
- /**
3
- * This is the PHP Cloud Files API.
4
- *
5
- * <code>
6
- * # Authenticate to Cloud Files. The default is to automatically try
7
- * # to re-authenticate if an authentication token expires.
8
- * #
9
- * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
10
- * # file. This API ships with a newer version obtained directly from
11
- * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
12
- * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
13
- * #
14
- * $auth = new CF_Authentication($username, $api_key);
15
- * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
16
- * $auth->authenticate();
17
- *
18
- * # Establish a connection to the storage system
19
- * #
20
- * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
21
- * # file. This API ships with a newer version obtained directly from
22
- * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
23
- * # call the CF_Connection instance's 'ssl_use_cabundle()' method.
24
- * #
25
- * $conn = new CF_Connection($auth);
26
- * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
27
- *
28
- * # Create a remote Container and storage Object
29
- * #
30
- * $images = $conn->create_container("photos");
31
- * $bday = $images->create_object("first_birthday.jpg");
32
- *
33
- * # Upload content from a local file by streaming it. Note that we use
34
- * # a "float" for the file size to overcome PHP's 32-bit integer limit for
35
- * # very large files.
36
- * #
37
- * $fname = "/home/user/photos/birthdays/birthday1.jpg"; # filename to upload
38
- * $size = (float) sprintf("%u", filesize($fname));
39
- * $fp = open($fname, "r");
40
- * $bday->write($fp, $size);
41
- *
42
- * # Or... use a convenience function instead
43
- * #
44
- * $bday->load_from_filename("/home/user/photos/birthdays/birthday1.jpg");
45
- *
46
- * # Now, publish the "photos" container to serve the images by CDN.
47
- * # Use the "$uri" value to put in your web pages or send the link in an
48
- * # email message, etc.
49
- * #
50
- * $uri = $images->make_public();
51
- *
52
- * # Or... print out the Object's public URI
53
- * #
54
- * print $bday->public_uri();
55
- * </code>
56
- *
57
- * See the included tests directory for additional sample code.
58
- *
59
- * Requres PHP 5.x (for Exceptions and OO syntax) and PHP's cURL module.
60
- *
61
- * It uses the supporting "cloudfiles_http.php" module for HTTP(s) support and
62
- * allows for connection re-use and streaming of content into/out of Cloud Files
63
- * via PHP's cURL module.
64
- *
65
- * See COPYING for license information.
66
- *
67
- * @author Eric "EJ" Johnson <ej@racklabs.com>
68
- * @copyright Copyright (c) 2008, Rackspace US, Inc.
69
- * @package php-cloudfiles
70
- */
71
-
72
- /**
73
- */
74
- require_once("cloudfiles_exceptions.php");
75
- require("cloudfiles_http.php");
76
- define("DEFAULT_CF_API_VERSION", 1);
77
- define("MAX_CONTAINER_NAME_LEN", 256);
78
- define("MAX_OBJECT_NAME_LEN", 1024);
79
- define("MAX_OBJECT_SIZE", 5*1024*1024*1024+1);
80
- define("US_AUTHURL", "https://auth.api.rackspacecloud.com");
81
- define("UK_AUTHURL", "https://lon.auth.api.rackspacecloud.com");
82
- /**
83
- * Class for handling Cloud Files Authentication, call it's {@link authenticate()}
84
- * method to obtain authorized service urls and an authentication token.
85
- *
86
- * Example:
87
- * <code>
88
- * # Create the authentication instance
89
- * #
90
- * $auth = new CF_Authentication("username", "api_key");
91
- *
92
- * # NOTE: For UK Customers please specify your AuthURL Manually
93
- * # There is a Predfined constant to use EX:
94
- * #
95
- * # $auth = new CF_Authentication("username, "api_key", NULL, UK_AUTHURL);
96
- * # Using the UK_AUTHURL keyword will force the api to use the UK AuthUrl.
97
- * # rather then the US one. The NULL Is passed for legacy purposes and must
98
- * # be passed to function correctly.
99
- *
100
- * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
101
- * # file. This API ships with a newer version obtained directly from
102
- * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
103
- * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
104
- * #
105
- * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
106
- *
107
- * # Perform authentication request
108
- * #
109
- * $auth->authenticate();
110
- * </code>
111
- *
112
- * @package php-cloudfiles
113
- */
114
- class CF_Authentication
115
- {
116
- public $dbug;
117
- public $username;
118
- public $api_key;
119
- public $auth_host;
120
- public $account;
121
-
122
- /**
123
- * Instance variables that are set after successful authentication
124
- */
125
- public $storage_url;
126
- public $cdnm_url;
127
- public $auth_token;
128
-
129
- /**
130
- * Class constructor (PHP 5 syntax)
131
- *
132
- * @param string $username Mosso username
133
- * @param string $api_key Mosso API Access Key
134
- * @param string $account <i>Account name</i>
135
- * @param string $auth_host <i>Authentication service URI</i>
136
- */
137
- function __construct($username=NULL, $api_key=NULL, $account=NULL, $auth_host=US_AUTHURL)
138
- {
139
-
140
- $this->dbug = False;
141
- $this->username = $username;
142
- $this->api_key = $api_key;
143
- $this->account_name = $account;
144
- $this->auth_host = $auth_host;
145
-
146
- $this->storage_url = NULL;
147
- $this->cdnm_url = NULL;
148
- $this->auth_token = NULL;
149
-
150
- $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
151
- }
152
-
153
- /**
154
- * Use the Certificate Authority bundle included with this API
155
- *
156
- * Most versions of PHP with cURL support include an outdated Certificate
157
- * Authority (CA) bundle (the file that lists all valid certificate
158
- * signing authorities). The SSL certificates used by the Cloud Files
159
- * storage system are perfectly valid but have been created/signed by
160
- * a CA not listed in these outdated cURL distributions.
161
- *
162
- * As a work-around, we've included an updated CA bundle obtained
163
- * directly from cURL's web site (http://curl.haxx.se). You can direct
164
- * the API to use this CA bundle by calling this method prior to making
165
- * any remote calls. The best place to use this method is right after
166
- * the CF_Authentication instance has been instantiated.
167
- *
168
- * You can specify your own CA bundle by passing in the full pathname
169
- * to the bundle. You can use the included CA bundle by leaving the
170
- * argument blank.
171
- *
172
- * @param string $path Specify path to CA bundle (default to included)
173
- */
174
- function ssl_use_cabundle($path=NULL)
175
- {
176
- $this->cfs_http->ssl_use_cabundle($path);
177
- }
178
-
179
- /**
180
- * Attempt to validate Username/API Access Key
181
- *
182
- * Attempts to validate credentials with the authentication service. It
183
- * either returns <kbd>True</kbd> or throws an Exception. Accepts a single
184
- * (optional) argument for the storage system API version.
185
- *
186
- * Example:
187
- * <code>
188
- * # Create the authentication instance
189
- * #
190
- * $auth = new CF_Authentication("username", "api_key");
191
- *
192
- * # Perform authentication request
193
- * #
194
- * $auth->authenticate();
195
- * </code>
196
- *
197
- * @param string $version API version for Auth service (optional)
198
- * @return boolean <kbd>True</kbd> if successfully authenticated
199
- * @throws AuthenticationException invalid credentials
200
- * @throws InvalidResponseException invalid response
201
- */
202
- function authenticate($version=DEFAULT_CF_API_VERSION)
203
- {
204
- list($status,$reason,$surl,$curl,$atoken) =
205
- $this->cfs_http->authenticate($this->username, $this->api_key,
206
- $this->account_name, $this->auth_host);
207
-
208
- if ($status == 401) {
209
- throw new AuthenticationException("Invalid username or access key.");
210
- }
211
- if ($status != 204) {
212
- throw new InvalidResponseException(
213
- "Unexpected response (".$status."): ".$reason);
214
- }
215
-
216
- if (!($surl || $curl) || !$atoken) {
217
- throw new InvalidResponseException(
218
- "Expected headers missing from auth service.");
219
- }
220
- $this->storage_url = $surl;
221
- $this->cdnm_url = $curl;
222
- $this->auth_token = $atoken;
223
- return True;
224
- }
225
- /**
226
- * Use Cached Token and Storage URL's rather then grabbing from the Auth System
227
- *
228
- * Example:
229
- * <code>
230
- * #Create an Auth instance
231
- * $auth = new CF_Authentication();
232
- * #Pass Cached URL's and Token as Args
233
- * $auth->load_cached_credentials("auth_token", "storage_url", "cdn_management_url");
234
- * </code>
235
- *
236
- * @param string $auth_token A Cloud Files Auth Token (Required)
237
- * @param string $storage_url The Cloud Files Storage URL (Required)
238
- * @param string $cdnm_url CDN Management URL (Required)
239
- * @return boolean <kbd>True</kbd> if successful
240
- * @throws SyntaxException If any of the Required Arguments are missing
241
- */
242
- function load_cached_credentials($auth_token, $storage_url, $cdnm_url)
243
- {
244
- if(!$storage_url || !$cdnm_url)
245
- {
246
- throw new SyntaxException("Missing Required Interface URL's!");
247
- return False;
248
- }
249
- if(!$auth_token)
250
- {
251
- throw new SyntaxException("Missing Auth Token!");
252
- return False;
253
- }
254
-
255
- $this->storage_url = $storage_url;
256
- $this->cdnm_url = $cdnm_url;
257
- $this->auth_token = $auth_token;
258
- return True;
259
- }
260
- /**
261
- * Grab Cloud Files info to be Cached for later use with the load_cached_credentials method.
262
- *
263
- * Example:
264
- * <code>
265
- * #Create an Auth instance
266
- * $auth = new CF_Authentication("UserName","API_Key");
267
- * $auth->authenticate();
268
- * $array = $auth->export_credentials();
269
- * </code>
270
- *
271
- * @return array of url's and an auth token.
272
- */
273
- function export_credentials()
274
- {
275
- $arr = array();
276
- $arr['storage_url'] = $this->storage_url;
277
- $arr['cdnm_url'] = $this->cdnm_url;
278
- $arr['auth_token'] = $this->auth_token;
279
-
280
- return $arr;
281
- }
282
-
283
-
284
- /**
285
- * Make sure the CF_Authentication instance has authenticated.
286
- *
287
- * Ensures that the instance variables necessary to communicate with
288
- * Cloud Files have been set from a previous authenticate() call.
289
- *
290
- * @return boolean <kbd>True</kbd> if successfully authenticated
291
- */
292
- function authenticated()
293
- {
294
- if (!($this->storage_url || $this->cdnm_url) || !$this->auth_token) {
295
- return False;
296
- }
297
- return True;
298
- }
299
-
300
- /**
301
- * Toggle debugging - set cURL verbose flag
302
- */
303
- function setDebug($bool)
304
- {
305
- $this->dbug = $bool;
306
- $this->cfs_http->setDebug($bool);
307
- }
308
- }
309
-
310
- /**
311
- * Class for establishing connections to the Cloud Files storage system.
312
- * Connection instances are used to communicate with the storage system at
313
- * the account level; listing and deleting Containers and returning Container
314
- * instances.
315
- *
316
- * Example:
317
- * <code>
318
- * # Create the authentication instance
319
- * #
320
- * $auth = new CF_Authentication("username", "api_key");
321
- *
322
- * # Perform authentication request
323
- * #
324
- * $auth->authenticate();
325
- *
326
- * # Create a connection to the storage/cdn system(s) and pass in the
327
- * # validated CF_Authentication instance.
328
- * #
329
- * $conn = new CF_Connection($auth);
330
- *
331
- * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
332
- * # file. This API ships with a newer version obtained directly from
333
- * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
334
- * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
335
- * #
336
- * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
337
- * </code>
338
- *
339
- * @package php-cloudfiles
340
- */
341
- class CF_Connection
342
- {
343
- public $dbug;
344
- public $cfs_http;
345
- public $cfs_auth;
346
-
347
- /**
348
- * Pass in a previously authenticated CF_Authentication instance.
349
- *
350
- * Example:
351
- * <code>
352
- * # Create the authentication instance
353
- * #
354
- * $auth = new CF_Authentication("username", "api_key");
355
- *
356
- * # Perform authentication request
357
- * #
358
- * $auth->authenticate();
359
- *
360
- * # Create a connection to the storage/cdn system(s) and pass in the
361
- * # validated CF_Authentication instance.
362
- * #
363
- * $conn = new CF_Connection($auth);
364
- *
365
- * # If you are connecting via Rackspace servers and have access
366
- * # to the servicenet network you can set the $servicenet to True
367
- * # like this.
368
- *
369
- * $conn = new CF_Connection($auth, $servicenet=True);
370
- *
371
- * </code>
372
- *
373
- * If the environement variable RACKSPACE_SERVICENET is defined it will
374
- * force to connect via the servicenet.
375
- *
376
- * @param obj $cfs_auth previously authenticated CF_Authentication instance
377
- * @param boolean $servicenet enable/disable access via Rackspace servicenet.
378
- * @throws AuthenticationException not authenticated
379
- */
380
- function __construct($cfs_auth, $servicenet=False)
381
- {
382
- if (isset($_ENV['RACKSPACE_SERVICENET']))
383
- $servicenet=True;
384
- $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
385
- $this->cfs_auth = $cfs_auth;
386
- if (!$this->cfs_auth->authenticated()) {
387
- $e = "Need to pass in a previously authenticated ";
388
- $e .= "CF_Authentication instance.";
389
- throw new AuthenticationException($e);
390
- }
391
- $this->cfs_http->setCFAuth($this->cfs_auth, $servicenet=$servicenet);
392
- $this->dbug = False;
393
- }
394
-
395
- /**
396
- * Toggle debugging of instance and back-end HTTP module
397
- *
398
- * @param boolean $bool enable/disable cURL debugging
399
- */
400
- function setDebug($bool)
401
- {
402
- $this->dbug = (boolean) $bool;
403
- $this->cfs_http->setDebug($this->dbug);
404
- }
405
-
406
- /**
407
- * Close a connection
408
- *
409
- * Example:
410
- * <code>
411
- *
412
- * $conn->close();
413
- *
414
- * </code>
415
- *
416
- * Will close all current cUrl active connections.
417
- *
418
- */
419
- public function close()
420
- {
421
- $this->cfs_http->close();
422
- }
423
-
424
- /**
425
- * Cloud Files account information
426
- *
427
- * Return an array of two floats (since PHP only supports 32-bit integers);
428
- * number of containers on the account and total bytes used for the account.
429
- *
430
- * Example:
431
- * <code>
432
- * # ... authentication code excluded (see previous examples) ...
433
- * #
434
- * $conn = new CF_Authentication($auth);
435
- *
436
- * list($quantity, $bytes) = $conn->get_info();
437
- * print "Number of containers: " . $quantity . "\n";
438
- * print "Bytes stored in container: " . $bytes . "\n";
439
- * </code>
440
- *
441
- * @return array (number of containers, total bytes stored)
442
- * @throws InvalidResponseException unexpected response
443
- */
444
- function get_info()
445
- {
446
- list($status, $reason, $container_count, $total_bytes) =
447
- $this->cfs_http->head_account();
448
- #if ($status == 401 && $this->_re_auth()) {
449
- # return $this->get_info();
450
- #}
451
- if ($status < 200 || $status > 299) {
452
- throw new InvalidResponseException(
453
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
454
- }
455
- return array($container_count, $total_bytes);
456
- }
457
-
458
- /**
459
- * Create a Container
460
- *
461
- * Given a Container name, return a Container instance, creating a new
462
- * remote Container if it does not exit.
463
- *
464
- * Example:
465
- * <code>
466
- * # ... authentication code excluded (see previous examples) ...
467
- * #
468
- * $conn = new CF_Authentication($auth);
469
- *
470
- * $images = $conn->create_container("my photos");
471
- * </code>
472
- *
473
- * @param string $container_name container name
474
- * @return CF_Container
475
- * @throws SyntaxException invalid name
476
- * @throws InvalidResponseException unexpected response
477
- */
478
- function create_container($container_name=NULL)
479
- {
480
- if ($container_name != "0" and !isset($container_name))
481
- throw new SyntaxException("Container name not set.");
482
-
483
- if (!isset($container_name) or $container_name == "")
484
- throw new SyntaxException("Container name not set.");
485
-
486
- if (strpos($container_name, "/") !== False) {
487
- $r = "Container name '".$container_name;
488
- $r .= "' cannot contain a '/' character.";
489
- throw new SyntaxException($r);
490
- }
491
- if (strlen($container_name) > MAX_CONTAINER_NAME_LEN) {
492
- throw new SyntaxException(sprintf(
493
- "Container name exeeds %d bytes.",
494
- MAX_CONTAINER_NAME_LEN));
495
- }
496
-
497
- $return_code = $this->cfs_http->create_container($container_name);
498
- if (!$return_code) {
499
- throw new InvalidResponseException("Invalid response ("
500
- . $return_code. "): " . $this->cfs_http->get_error());
501
- }
502
- #if ($status == 401 && $this->_re_auth()) {
503
- # return $this->create_container($container_name);
504
- #}
505
- if ($return_code != 201 && $return_code != 202) {
506
- throw new InvalidResponseException(
507
- "Invalid response (".$return_code."): "
508
- . $this->cfs_http->get_error());
509
- }
510
- return new CF_Container($this->cfs_auth, $this->cfs_http, $container_name);
511
- }
512
-
513
- /**
514
- * Delete a Container
515
- *
516
- * Given either a Container instance or name, remove the remote Container.
517
- * The Container must be empty prior to removing it.
518
- *
519
- * Example:
520
- * <code>
521
- * # ... authentication code excluded (see previous examples) ...
522
- * #
523
- * $conn = new CF_Authentication($auth);
524
- *
525
- * $conn->delete_container("my photos");
526
- * </code>
527
- *
528
- * @param string|obj $container container name or instance
529
- * @return boolean <kbd>True</kbd> if successfully deleted
530
- * @throws SyntaxException missing proper argument
531
- * @throws InvalidResponseException invalid response
532
- * @throws NonEmptyContainerException container not empty
533
- * @throws NoSuchContainerException remote container does not exist
534
- */
535
- function delete_container($container=NULL)
536
- {
537
- $container_name = NULL;
538
-
539
- if (is_object($container)) {
540
- if (get_class($container) == "CF_Container") {
541
- $container_name = $container->name;
542
- }
543
- }
544
- if (is_string($container)) {
545
- $container_name = $container;
546
- }
547
-
548
- if ($container_name != "0" and !isset($container_name))
549
- throw new SyntaxException("Must specify container object or name.");
550
-
551
- $return_code = $this->cfs_http->delete_container($container_name);
552
-
553
- if (!$return_code) {
554
- throw new InvalidResponseException("Failed to obtain http response");
555
- }
556
- #if ($status == 401 && $this->_re_auth()) {
557
- # return $this->delete_container($container);
558
- #}
559
- if ($return_code == 409) {
560
- throw new NonEmptyContainerException(
561
- "Container must be empty prior to removing it.");
562
- }
563
- if ($return_code == 404) {
564
- throw new NoSuchContainerException(
565
- "Specified container did not exist to delete.");
566
- }
567
- if ($return_code != 204) {
568
- throw new InvalidResponseException(
569
- "Invalid response (".$return_code."): "
570
- . $this->cfs_http->get_error());
571
- }
572
- return True;
573
- }
574
-
575
- /**
576
- * Return a Container instance
577
- *
578
- * For the given name, return a Container instance if the remote Container
579
- * exists, otherwise throw a Not Found exception.
580
- *
581
- * Example:
582
- * <code>
583
- * # ... authentication code excluded (see previous examples) ...
584
- * #
585
- * $conn = new CF_Authentication($auth);
586
- *
587
- * $images = $conn->get_container("my photos");
588
- * print "Number of Objects: " . $images->count . "\n";
589
- * print "Bytes stored in container: " . $images->bytes . "\n";
590
- * </code>
591
- *
592
- * @param string $container_name name of the remote Container
593
- * @return container CF_Container instance
594
- * @throws NoSuchContainerException thrown if no remote Container
595
- * @throws InvalidResponseException unexpected response
596
- */
597
- function get_container($container_name=NULL)
598
- {
599
- list($status, $reason, $count, $bytes) =
600
- $this->cfs_http->head_container($container_name);
601
- #if ($status == 401 && $this->_re_auth()) {
602
- # return $this->get_container($container_name);
603
- #}
604
- if ($status == 404) {
605
- throw new NoSuchContainerException("Container not found.");
606
- }
607
- if ($status < 200 || $status > 299) {
608
- throw new InvalidResponseException(
609
- "Invalid response: ".$this->cfs_http->get_error());
610
- }
611
- return new CF_Container($this->cfs_auth, $this->cfs_http,
612
- $container_name, $count, $bytes);
613
- }
614
-
615
- /**
616
- * Return array of Container instances
617
- *
618
- * Return an array of CF_Container instances on the account. The instances
619
- * will be fully populated with Container attributes (bytes stored and
620
- * Object count)
621
- *
622
- * Example:
623
- * <code>
624
- * # ... authentication code excluded (see previous examples) ...
625
- * #
626
- * $conn = new CF_Authentication($auth);
627
- *
628
- * $clist = $conn->get_containers();
629
- * foreach ($clist as $cont) {
630
- * print "Container name: " . $cont->name . "\n";
631
- * print "Number of Objects: " . $cont->count . "\n";
632
- * print "Bytes stored in container: " . $cont->bytes . "\n";
633
- * }
634
- * </code>
635
- *
636
- * @return array An array of CF_Container instances
637
- * @throws InvalidResponseException unexpected response
638
- */
639
- function get_containers($limit=0, $marker=NULL)
640
- {
641
- list($status, $reason, $container_info) =
642
- $this->cfs_http->list_containers_info($limit, $marker);
643
- #if ($status == 401 && $this->_re_auth()) {
644
- # return $this->get_containers();
645
- #}
646
- if ($status < 200 || $status > 299) {
647
- throw new InvalidResponseException(
648
- "Invalid response: ".$this->cfs_http->get_error());
649
- }
650
- $containers = array();
651
- foreach ($container_info as $name => $info) {
652
- $containers[] = new CF_Container($this->cfs_auth, $this->cfs_http,
653
- $info['name'], $info["count"], $info["bytes"], False);
654
- }
655
- return $containers;
656
- }
657
-
658
- /**
659
- * Return list of remote Containers
660
- *
661
- * Return an array of strings containing the names of all remote Containers.
662
- *
663
- * Example:
664
- * <code>
665
- * # ... authentication code excluded (see previous examples) ...
666
- * #
667
- * $conn = new CF_Authentication($auth);
668
- *
669
- * $container_list = $conn->list_containers();
670
- * print_r($container_list);
671
- * Array
672
- * (
673
- * [0] => "my photos",
674
- * [1] => "my docs"
675
- * )
676
- * </code>
677
- *
678
- * @param integer $limit restrict results to $limit Containers
679
- * @param string $marker return results greater than $marker
680
- * @return array list of remote Containers
681
- * @throws InvalidResponseException unexpected response
682
- */
683
- function list_containers($limit=0, $marker=NULL)
684
- {
685
- list($status, $reason, $containers) =
686
- $this->cfs_http->list_containers($limit, $marker);
687
- #if ($status == 401 && $this->_re_auth()) {
688
- # return $this->list_containers($limit, $marker);
689
- #}
690
- if ($status < 200 || $status > 299) {
691
- throw new InvalidResponseException(
692
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
693
- }
694
- return $containers;
695
- }
696
-
697
- /**
698
- * Return array of information about remote Containers
699
- *
700
- * Return a nested array structure of Container info.
701
- *
702
- * Example:
703
- * <code>
704
- * # ... authentication code excluded (see previous examples) ...
705
- * #
706
- *
707
- * $container_info = $conn->list_containers_info();
708
- * print_r($container_info);
709
- * Array
710
- * (
711
- * ["my photos"] =>
712
- * Array
713
- * (
714
- * ["bytes"] => 78,
715
- * ["count"] => 2
716
- * )
717
- * ["docs"] =>
718
- * Array
719
- * (
720
- * ["bytes"] => 37323,
721
- * ["count"] => 12
722
- * )
723
- * )
724
- * </code>
725
- *
726
- * @param integer $limit restrict results to $limit Containers
727
- * @param string $marker return results greater than $marker
728
- * @return array nested array structure of Container info
729
- * @throws InvalidResponseException unexpected response
730
- */
731
- function list_containers_info($limit=0, $marker=NULL)
732
- {
733
- list($status, $reason, $container_info) =
734
- $this->cfs_http->list_containers_info($limit, $marker);
735
- #if ($status == 401 && $this->_re_auth()) {
736
- # return $this->list_containers_info($limit, $marker);
737
- #}
738
- if ($status < 200 || $status > 299) {
739
- throw new InvalidResponseException(
740
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
741
- }
742
- return $container_info;
743
- }
744
-
745
- /**
746
- * Return list of Containers that have been published to the CDN.
747
- *
748
- * Return an array of strings containing the names of published Containers.
749
- * Note that this function returns the list of any Container that has
750
- * ever been CDN-enabled regardless of it's existence in the storage
751
- * system.
752
- *
753
- * Example:
754
- * <code>
755
- * # ... authentication code excluded (see previous examples) ...
756
- * #
757
- * $conn = new CF_Authentication($auth);
758
- *
759
- * $public_containers = $conn->list_public_containers();
760
- * print_r($public_containers);
761
- * Array
762
- * (
763
- * [0] => "images",
764
- * [1] => "css",
765
- * [2] => "javascript"
766
- * )
767
- * </code>
768
- *
769
- * @param bool $enabled_only Will list all containers ever CDN enabled if * set to false or only currently enabled CDN containers if set to true. * Defaults to false.
770
- * @return array list of published Container names
771
- * @throws InvalidResponseException unexpected response
772
- */
773
- function list_public_containers($enabled_only=False)
774
- {
775
- list($status, $reason, $containers) =
776
- $this->cfs_http->list_cdn_containers($enabled_only);
777
- #if ($status == 401 && $this->_re_auth()) {
778
- # return $this->list_public_containers();
779
- #}
780
- if ($status < 200 || $status > 299) {
781
- throw new InvalidResponseException(
782
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
783
- }
784
- return $containers;
785
- }
786
-
787
- /**
788
- * Set a user-supplied callback function to report download progress
789
- *
790
- * The callback function is used to report incremental progress of a data
791
- * download functions (e.g. $container->list_objects(), $obj->read(), etc).
792
- * The specified function will be periodically called with the number of
793
- * bytes transferred until the entire download is complete. This callback
794
- * function can be useful for implementing "progress bars" for large
795
- * downloads.
796
- *
797
- * The specified callback function should take a single integer parameter.
798
- *
799
- * <code>
800
- * function read_callback($bytes_transferred) {
801
- * print ">> downloaded " . $bytes_transferred . " bytes.\n";
802
- * # ... do other things ...
803
- * return;
804
- * }
805
- *
806
- * $conn = new CF_Connection($auth_obj);
807
- * $conn->set_read_progress_function("read_callback");
808
- * print_r($conn->list_containers());
809
- *
810
- * # output would look like this:
811
- * #
812
- * >> downloaded 10 bytes.
813
- * >> downloaded 11 bytes.
814
- * Array
815
- * (
816
- * [0] => fuzzy.txt
817
- * [1] => space name
818
- * )
819
- * </code>
820
- *
821
- * @param string $func_name the name of the user callback function
822
- */
823
- function set_read_progress_function($func_name)
824
- {
825
- $this->cfs_http->setReadProgressFunc($func_name);
826
- }
827
-
828
- /**
829
- * Set a user-supplied callback function to report upload progress
830
- *
831
- * The callback function is used to report incremental progress of a data
832
- * upload functions (e.g. $obj->write() call). The specified function will
833
- * be periodically called with the number of bytes transferred until the
834
- * entire upload is complete. This callback function can be useful
835
- * for implementing "progress bars" for large uploads/downloads.
836
- *
837
- * The specified callback function should take a single integer parameter.
838
- *
839
- * <code>
840
- * function write_callback($bytes_transferred) {
841
- * print ">> uploaded " . $bytes_transferred . " bytes.\n";
842
- * # ... do other things ...
843
- * return;
844
- * }
845
- *
846
- * $conn = new CF_Connection($auth_obj);
847
- * $conn->set_write_progress_function("write_callback");
848
- * $container = $conn->create_container("stuff");
849
- * $obj = $container->create_object("foo");
850
- * $obj->write("The callback function will be called during upload.");
851
- *
852
- * # output would look like this:
853
- * # >> uploaded 51 bytes.
854
- * #
855
- * </code>
856
- *
857
- * @param string $func_name the name of the user callback function
858
- */
859
- function set_write_progress_function($func_name)
860
- {
861
- $this->cfs_http->setWriteProgressFunc($func_name);
862
- }
863
-
864
- /**
865
- * Use the Certificate Authority bundle included with this API
866
- *
867
- * Most versions of PHP with cURL support include an outdated Certificate
868
- * Authority (CA) bundle (the file that lists all valid certificate
869
- * signing authorities). The SSL certificates used by the Cloud Files
870
- * storage system are perfectly valid but have been created/signed by
871
- * a CA not listed in these outdated cURL distributions.
872
- *
873
- * As a work-around, we've included an updated CA bundle obtained
874
- * directly from cURL's web site (http://curl.haxx.se). You can direct
875
- * the API to use this CA bundle by calling this method prior to making
876
- * any remote calls. The best place to use this method is right after
877
- * the CF_Authentication instance has been instantiated.
878
- *
879
- * You can specify your own CA bundle by passing in the full pathname
880
- * to the bundle. You can use the included CA bundle by leaving the
881
- * argument blank.
882
- *
883
- * @param string $path Specify path to CA bundle (default to included)
884
- */
885
- function ssl_use_cabundle($path=NULL)
886
- {
887
- $this->cfs_http->ssl_use_cabundle($path);
888
- }
889
-
890
- #private function _re_auth()
891
- #{
892
- # $new_auth = new CF_Authentication(
893
- # $this->cfs_auth->username,
894
- # $this->cfs_auth->api_key,
895
- # $this->cfs_auth->auth_host,
896
- # $this->cfs_auth->account);
897
- # $new_auth->authenticate();
898
- # $this->cfs_auth = $new_auth;
899
- # $this->cfs_http->setCFAuth($this->cfs_auth);
900
- # return True;
901
- #}
902
- }
903
-
904
- /**
905
- * Container operations
906
- *
907
- * Containers are storage compartments where you put your data (objects).
908
- * A container is similar to a directory or folder on a conventional filesystem
909
- * with the exception that they exist in a flat namespace, you can not create
910
- * containers inside of containers.
911
- *
912
- * You also have the option of marking a Container as "public" so that the
913
- * Objects stored in the Container are publicly available via the CDN.
914
- *
915
- * @package php-cloudfiles
916
- */
917
- class CF_Container
918
- {
919
- public $cfs_auth;
920
- public $cfs_http;
921
- public $name;
922
- public $object_count;
923
- public $bytes_used;
924
-
925
- public $cdn_enabled;
926
- public $cdn_uri;
927
- public $cdn_ttl;
928
- public $cdn_log_retention;
929
- public $cdn_acl_user_agent;
930
- public $cdn_acl_referrer;
931
-
932
- /**
933
- * Class constructor
934
- *
935
- * Constructor for Container
936
- *
937
- * @param obj $cfs_auth CF_Authentication instance
938
- * @param obj $cfs_http HTTP connection manager
939
- * @param string $name name of Container
940
- * @param int $count number of Objects stored in this Container
941
- * @param int $bytes number of bytes stored in this Container
942
- * @throws SyntaxException invalid Container name
943
- */
944
- function __construct(&$cfs_auth, &$cfs_http, $name, $count=0,
945
- $bytes=0, $docdn=True)
946
- {
947
- if (strlen($name) > MAX_CONTAINER_NAME_LEN) {
948
- throw new SyntaxException("Container name exceeds "
949
- . "maximum allowed length.");
950
- }
951
- if (strpos($name, "/") !== False) {
952
- throw new SyntaxException(
953
- "Container names cannot contain a '/' character.");
954
- }
955
- $this->cfs_auth = $cfs_auth;
956
- $this->cfs_http = $cfs_http;
957
- $this->name = $name;
958
- $this->object_count = $count;
959
- $this->bytes_used = $bytes;
960
- $this->cdn_enabled = NULL;
961
- $this->cdn_uri = NULL;
962
- $this->cdn_ttl = NULL;
963
- $this->cdn_log_retention = NULL;
964
- $this->cdn_acl_user_agent = NULL;
965
- $this->cdn_acl_referrer = NULL;
966
- if ($this->cfs_http->getCDNMUrl() != NULL && $docdn) {
967
- $this->_cdn_initialize();
968
- }
969
- }
970
-
971
- /**
972
- * String representation of Container
973
- *
974
- * Pretty print the Container instance.
975
- *
976
- * @return string Container details
977
- */
978
- function __toString()
979
- {
980
- $me = sprintf("name: %s, count: %.0f, bytes: %.0f",
981
- $this->name, $this->object_count, $this->bytes_used);
982
- if ($this->cfs_http->getCDNMUrl() != NULL) {
983
- $me .= sprintf(", cdn: %s, cdn uri: %s, cdn ttl: %.0f, logs retention: %s",
984
- $this->is_public() ? "Yes" : "No",
985
- $this->cdn_uri, $this->cdn_ttl,
986
- $this->cdn_log_retention ? "Yes" : "No"
987
- );
988
-
989
- if ($this->cdn_acl_user_agent != NULL) {
990
- $me .= ", cdn acl user agent: " . $this->cdn_acl_user_agent;
991
- }
992
-
993
- if ($this->cdn_acl_referrer != NULL) {
994
- $me .= ", cdn acl referrer: " . $this->cdn_acl_referrer;
995
- }
996
-
997
-
998
- }
999
- return $me;
1000
- }
1001
-
1002
- /**
1003
- * Enable Container content to be served via CDN or modify CDN attributes
1004
- *
1005
- * Either enable this Container's content to be served via CDN or
1006
- * adjust its CDN attributes. This Container will always return the
1007
- * same CDN-enabled URI each time it is toggled public/private/public.
1008
- *
1009
- * Example:
1010
- * <code>
1011
- * # ... authentication code excluded (see previous examples) ...
1012
- * #
1013
- * $conn = new CF_Authentication($auth);
1014
- *
1015
- * $public_container = $conn->create_container("public");
1016
- *
1017
- * # CDN-enable the container and set it's TTL for a month
1018
- * #
1019
- * $public_container->make_public(86400/2); # 12 hours (86400 seconds/day)
1020
- * </code>
1021
- *
1022
- * @param int $ttl the time in seconds content will be cached in the CDN
1023
- * @returns string the CDN enabled Container's URI
1024
- * @throws CDNNotEnabledException CDN functionality not returned during auth
1025
- * @throws AuthenticationException if auth token is not valid/expired
1026
- * @throws InvalidResponseException unexpected response
1027
- */
1028
- function make_public($ttl=86400)
1029
- {
1030
- if ($this->cfs_http->getCDNMUrl() == NULL) {
1031
- throw new CDNNotEnabledException(
1032
- "Authentication response did not indicate CDN availability");
1033
- }
1034
- if ($this->cdn_uri != NULL) {
1035
- # previously published, assume we're setting new attributes
1036
- list($status, $reason, $cdn_uri) =
1037
- $this->cfs_http->update_cdn_container($this->name,$ttl,
1038
- $this->cdn_log_retention,
1039
- $this->cdn_acl_user_agent,
1040
- $this->cdn_acl_referrer);
1041
- #if ($status == 401 && $this->_re_auth()) {
1042
- # return $this->make_public($ttl);
1043
- #}
1044
- if ($status == 404) {
1045
- # this instance _thinks_ the container was published, but the
1046
- # cdn management system thinks otherwise - try again with a PUT
1047
- list($status, $reason, $cdn_uri) =
1048
- $this->cfs_http->add_cdn_container($this->name,$ttl);
1049
-
1050
- }
1051
- } else {
1052
- # publish it for first time
1053
- list($status, $reason, $cdn_uri) =
1054
- $this->cfs_http->add_cdn_container($this->name,$ttl);
1055
- }
1056
- #if ($status == 401 && $this->_re_auth()) {
1057
- # return $this->make_public($ttl);
1058
- #}
1059
- if (!in_array($status, array(201,202))) {
1060
- throw new InvalidResponseException(
1061
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1062
- }
1063
- $this->cdn_enabled = True;
1064
- $this->cdn_ttl = $ttl;
1065
- $this->cdn_uri = $cdn_uri;
1066
- $this->cdn_log_retention = False;
1067
- $this->cdn_acl_user_agent = "";
1068
- $this->cdn_acl_referrer = "";
1069
- return $this->cdn_uri;
1070
- }
1071
-
1072
- /**
1073
- * Enable ACL restriction by User Agent for this container.
1074
- *
1075
- * Example:
1076
- * <code>
1077
- * # ... authentication code excluded (see previous examples) ...
1078
- * #
1079
- * $conn = new CF_Authentication($auth);
1080
- *
1081
- * $public_container = $conn->get_container("public");
1082
- *
1083
- * # Enable ACL by Referrer
1084
- * $public_container->acl_referrer("Mozilla");
1085
- * </code>
1086
- *
1087
- * @returns boolean True if successful
1088
- * @throws CDNNotEnabledException CDN functionality not returned during auth
1089
- * @throws AuthenticationException if auth token is not valid/expired
1090
- * @throws InvalidResponseException unexpected response
1091
- */
1092
- function acl_user_agent($cdn_acl_user_agent="") {
1093
- if ($this->cfs_http->getCDNMUrl() == NULL) {
1094
- throw new CDNNotEnabledException(
1095
- "Authentication response did not indicate CDN availability");
1096
- }
1097
- list($status,$reason) =
1098
- $this->cfs_http->update_cdn_container($this->name,
1099
- $this->cdn_ttl,
1100
- $this->cdn_log_retention,
1101
- $cdn_acl_user_agent,
1102
- $this->cdn_acl_referrer
1103
- );
1104
- if (!in_array($status, array(202,404))) {
1105
- throw new InvalidResponseException(
1106
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1107
- }
1108
- $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1109
- return True;
1110
- }
1111
-
1112
- /**
1113
- * Enable ACL restriction by referer for this container.
1114
- *
1115
- * Example:
1116
- * <code>
1117
- * # ... authentication code excluded (see previous examples) ...
1118
- * #
1119
- * $conn = new CF_Authentication($auth);
1120
- *
1121
- * $public_container = $conn->get_container("public");
1122
- *
1123
- * # Enable Referrer
1124
- * $public_container->acl_referrer("http://www.example.com/gallery.php");
1125
- * </code>
1126
- *
1127
- * @returns boolean True if successful
1128
- * @throws CDNNotEnabledException CDN functionality not returned during auth
1129
- * @throws AuthenticationException if auth token is not valid/expired
1130
- * @throws InvalidResponseException unexpected response
1131
- */
1132
- function acl_referrer($cdn_acl_referrer="") {
1133
- if ($this->cfs_http->getCDNMUrl() == NULL) {
1134
- throw new CDNNotEnabledException(
1135
- "Authentication response did not indicate CDN availability");
1136
- }
1137
- list($status,$reason) =
1138
- $this->cfs_http->update_cdn_container($this->name,
1139
- $this->cdn_ttl,
1140
- $this->cdn_log_retention,
1141
- $this->cdn_acl_user_agent,
1142
- $cdn_acl_referrer
1143
- );
1144
- if (!in_array($status, array(202,404))) {
1145
- throw new InvalidResponseException(
1146
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1147
- }
1148
- $this->cdn_acl_referrer = $cdn_acl_referrer;
1149
- return True;
1150
- }
1151
-
1152
- /**
1153
- * Enable log retention for this CDN container.
1154
- *
1155
- * Enable CDN log retention on the container. If enabled logs will
1156
- * be periodically (at unpredictable intervals) compressed and
1157
- * uploaded to a ".CDN_ACCESS_LOGS" container in the form of
1158
- * "container_name.YYYYMMDDHH-XXXX.gz". Requires CDN be enabled on
1159
- * the account.
1160
- *
1161
- * Example:
1162
- * <code>
1163
- * # ... authentication code excluded (see previous examples) ...
1164
- * #
1165
- * $conn = new CF_Authentication($auth);
1166
- *
1167
- * $public_container = $conn->get_container("public");
1168
- *
1169
- * # Enable logs retention.
1170
- * $public_container->log_retention(True);
1171
- * </code>
1172
- *
1173
- * @returns boolean True if successful
1174
- * @throws CDNNotEnabledException CDN functionality not returned during auth
1175
- * @throws AuthenticationException if auth token is not valid/expired
1176
- * @throws InvalidResponseException unexpected response
1177
- */
1178
- function log_retention($cdn_log_retention=False) {
1179
- if ($this->cfs_http->getCDNMUrl() == NULL) {
1180
- throw new CDNNotEnabledException(
1181
- "Authentication response did not indicate CDN availability");
1182
- }
1183
- list($status,$reason) =
1184
- $this->cfs_http->update_cdn_container($this->name,
1185
- $this->cdn_ttl,
1186
- $cdn_log_retention,
1187
- $this->cdn_acl_user_agent,
1188
- $this->cdn_acl_referrer
1189
- );
1190
- if (!in_array($status, array(202,404))) {
1191
- throw new InvalidResponseException(
1192
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1193
- }
1194
- $this->cdn_log_retention = $cdn_log_retention;
1195
- return True;
1196
- }
1197
-
1198
- /**
1199
- * Disable the CDN sharing for this container
1200
- *
1201
- * Use this method to disallow distribution into the CDN of this Container's
1202
- * content.
1203
- *
1204
- * NOTE: Any content already cached in the CDN will continue to be served
1205
- * from its cache until the TTL expiration transpires. The default
1206
- * TTL is typically one day, so "privatizing" the Container will take
1207
- * up to 24 hours before the content is purged from the CDN cache.
1208
- *
1209
- * Example:
1210
- * <code>
1211
- * # ... authentication code excluded (see previous examples) ...
1212
- * #
1213
- * $conn = new CF_Authentication($auth);
1214
- *
1215
- * $public_container = $conn->get_container("public");
1216
- *
1217
- * # Disable CDN accessability
1218
- * # ... still cached up to a month based on previous example
1219
- * #
1220
- * $public_container->make_private();
1221
- * </code>
1222
- *
1223
- * @returns boolean True if successful
1224
- * @throws CDNNotEnabledException CDN functionality not returned during auth
1225
- * @throws AuthenticationException if auth token is not valid/expired
1226
- * @throws InvalidResponseException unexpected response
1227
- */
1228
- function make_private()
1229
- {
1230
- if ($this->cfs_http->getCDNMUrl() == NULL) {
1231
- throw new CDNNotEnabledException(
1232
- "Authentication response did not indicate CDN availability");
1233
- }
1234
- list($status,$reason) = $this->cfs_http->remove_cdn_container($this->name);
1235
- #if ($status == 401 && $this->_re_auth()) {
1236
- # return $this->make_private();
1237
- #}
1238
- if (!in_array($status, array(202,404))) {
1239
- throw new InvalidResponseException(
1240
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1241
- }
1242
- $this->cdn_enabled = False;
1243
- $this->cdn_ttl = NULL;
1244
- $this->cdn_uri = NULL;
1245
- $this->cdn_log_retention = NULL;
1246
- $this->cdn_acl_user_agent = NULL;
1247
- $this->cdn_acl_referrer = NULL;
1248
- return True;
1249
- }
1250
-
1251
- /**
1252
- * Check if this Container is being publicly served via CDN
1253
- *
1254
- * Use this method to determine if the Container's content is currently
1255
- * available through the CDN.
1256
- *
1257
- * Example:
1258
- * <code>
1259
- * # ... authentication code excluded (see previous examples) ...
1260
- * #
1261
- * $conn = new CF_Authentication($auth);
1262
- *
1263
- * $public_container = $conn->get_container("public");
1264
- *
1265
- * # Display CDN accessability
1266
- * #
1267
- * $public_container->is_public() ? print "Yes" : print "No";
1268
- * </code>
1269
- *
1270
- * @returns boolean True if enabled, False otherwise
1271
- */
1272
- function is_public()
1273
- {
1274
- return $this->cdn_enabled == True ? True : False;
1275
- }
1276
-
1277
- /**
1278
- * Create a new remote storage Object
1279
- *
1280
- * Return a new Object instance. If the remote storage Object exists,
1281
- * the instance's attributes are populated.
1282
- *
1283
- * Example:
1284
- * <code>
1285
- * # ... authentication code excluded (see previous examples) ...
1286
- * #
1287
- * $conn = new CF_Authentication($auth);
1288
- *
1289
- * $public_container = $conn->get_container("public");
1290
- *
1291
- * # This creates a local instance of a storage object but only creates
1292
- * # it in the storage system when the object's write() method is called.
1293
- * #
1294
- * $pic = $public_container->create_object("baby.jpg");
1295
- * </code>
1296
- *
1297
- * @param string $obj_name name of storage Object
1298
- * @return obj CF_Object instance
1299
- */
1300
- function create_object($obj_name=NULL)
1301
- {
1302
- return new CF_Object($this, $obj_name);
1303
- }
1304
-
1305
- /**
1306
- * Return an Object instance for the remote storage Object
1307
- *
1308
- * Given a name, return a Object instance representing the
1309
- * remote storage object.
1310
- *
1311
- * Example:
1312
- * <code>
1313
- * # ... authentication code excluded (see previous examples) ...
1314
- * #
1315
- * $conn = new CF_Authentication($auth);
1316
- *
1317
- * $public_container = $conn->get_container("public");
1318
- *
1319
- * # This call only fetches header information and not the content of
1320
- * # the storage object. Use the Object's read() or stream() methods
1321
- * # to obtain the object's data.
1322
- * #
1323
- * $pic = $public_container->get_object("baby.jpg");
1324
- * </code>
1325
- *
1326
- * @param string $obj_name name of storage Object
1327
- * @return obj CF_Object instance
1328
- */
1329
- function get_object($obj_name=NULL)
1330
- {
1331
- return new CF_Object($this, $obj_name, True);
1332
- }
1333
-
1334
- /**
1335
- * Return a list of Objects
1336
- *
1337
- * Return an array of strings listing the Object names in this Container.
1338
- *
1339
- * Example:
1340
- * <code>
1341
- * # ... authentication code excluded (see previous examples) ...
1342
- * #
1343
- * $images = $conn->get_container("my photos");
1344
- *
1345
- * # Grab the list of all storage objects
1346
- * #
1347
- * $all_objects = $images->list_objects();
1348
- *
1349
- * # Grab subsets of all storage objects
1350
- * #
1351
- * $first_ten = $images->list_objects(10);
1352
- *
1353
- * # Note the use of the previous result's last object name being
1354
- * # used as the 'marker' parameter to fetch the next 10 objects
1355
- * #
1356
- * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1357
- *
1358
- * # Grab images starting with "birthday_party" and default limit/marker
1359
- * # to match all photos with that prefix
1360
- * #
1361
- * $prefixed = $images->list_objects(0, NULL, "birthday");
1362
- *
1363
- * # Assuming you have created the appropriate directory marker Objects,
1364
- * # you can traverse your pseudo-hierarchical containers
1365
- * # with the "path" argument.
1366
- * #
1367
- * $animals = $images->list_objects(0,NULL,NULL,"pictures/animals");
1368
- * $dogs = $images->list_objects(0,NULL,NULL,"pictures/animals/dogs");
1369
- * </code>
1370
- *
1371
- * @param int $limit <i>optional</i> only return $limit names
1372
- * @param int $marker <i>optional</i> subset of names starting at $marker
1373
- * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1374
- * @param string $path <i>optional</i> only return results under "pathname"
1375
- * @return array array of strings
1376
- * @throws InvalidResponseException unexpected response
1377
- */
1378
- function list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1379
- {
1380
- list($status, $reason, $obj_list) =
1381
- $this->cfs_http->list_objects($this->name, $limit,
1382
- $marker, $prefix, $path);
1383
- #if ($status == 401 && $this->_re_auth()) {
1384
- # return $this->list_objects($limit, $marker, $prefix, $path);
1385
- #}
1386
- if ($status < 200 || $status > 299) {
1387
- throw new InvalidResponseException(
1388
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1389
- }
1390
- return $obj_list;
1391
- }
1392
-
1393
- /**
1394
- * Return an array of Objects
1395
- *
1396
- * Return an array of Object instances in this Container.
1397
- *
1398
- * Example:
1399
- * <code>
1400
- * # ... authentication code excluded (see previous examples) ...
1401
- * #
1402
- * $images = $conn->get_container("my photos");
1403
- *
1404
- * # Grab the list of all storage objects
1405
- * #
1406
- * $all_objects = $images->get_objects();
1407
- *
1408
- * # Grab subsets of all storage objects
1409
- * #
1410
- * $first_ten = $images->get_objects(10);
1411
- *
1412
- * # Note the use of the previous result's last object name being
1413
- * # used as the 'marker' parameter to fetch the next 10 objects
1414
- * #
1415
- * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1416
- *
1417
- * # Grab images starting with "birthday_party" and default limit/marker
1418
- * # to match all photos with that prefix
1419
- * #
1420
- * $prefixed = $images->get_objects(0, NULL, "birthday");
1421
- *
1422
- * # Assuming you have created the appropriate directory marker Objects,
1423
- * # you can traverse your pseudo-hierarchical containers
1424
- * # with the "path" argument.
1425
- * #
1426
- * $animals = $images->get_objects(0,NULL,NULL,"pictures/animals");
1427
- * $dogs = $images->get_objects(0,NULL,NULL,"pictures/animals/dogs");
1428
- * </code>
1429
- *
1430
- * @param int $limit <i>optional</i> only return $limit names
1431
- * @param int $marker <i>optional</i> subset of names starting at $marker
1432
- * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1433
- * @param string $path <i>optional</i> only return results under "pathname"
1434
- * @return array array of strings
1435
- * @throws InvalidResponseException unexpected response
1436
- */
1437
- function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1438
- {
1439
- list($status, $reason, $obj_array) =
1440
- $this->cfs_http->get_objects($this->name, $limit,
1441
- $marker, $prefix, $path);
1442
- #if ($status == 401 && $this->_re_auth()) {
1443
- # return $this->get_objects($limit, $marker, $prefix, $path);
1444
- #}
1445
- if ($status < 200 || $status > 299) {
1446
- throw new InvalidResponseException(
1447
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1448
- }
1449
- $objects = array();
1450
- foreach ($obj_array as $obj) {
1451
- $tmp = new CF_Object($this, $obj["name"], False, False);
1452
- $tmp->content_type = $obj["content_type"];
1453
- $tmp->content_length = (float) $obj["bytes"];
1454
- $tmp->set_etag($obj["hash"]);
1455
- $tmp->last_modified = $obj["last_modified"];
1456
- $objects[] = $tmp;
1457
- }
1458
- return $objects;
1459
- }
1460
-
1461
- /**
1462
- * Delete a remote storage Object
1463
- *
1464
- * Given an Object instance or name, permanently remove the remote Object
1465
- * and all associated metadata.
1466
- *
1467
- * Example:
1468
- * <code>
1469
- * # ... authentication code excluded (see previous examples) ...
1470
- * #
1471
- * $conn = new CF_Authentication($auth);
1472
- *
1473
- * $images = $conn->get_container("my photos");
1474
- *
1475
- * # Delete specific object
1476
- * #
1477
- * $images->delete_object("disco_dancing.jpg");
1478
- * </code>
1479
- *
1480
- * @param obj $obj name or instance of Object to delete
1481
- * @return boolean <kbd>True</kbd> if successfully removed
1482
- * @throws SyntaxException invalid Object name
1483
- * @throws NoSuchObjectException remote Object does not exist
1484
- * @throws InvalidResponseException unexpected response
1485
- */
1486
- function delete_object($obj)
1487
- {
1488
- $obj_name = NULL;
1489
- if (is_object($obj)) {
1490
- if (get_class($obj) == "CF_Object") {
1491
- $obj_name = $obj->name;
1492
- }
1493
- }
1494
- if (is_string($obj)) {
1495
- $obj_name = $obj;
1496
- }
1497
- if (!$obj_name) {
1498
- throw new SyntaxException("Object name not set.");
1499
- }
1500
- $status = $this->cfs_http->delete_object($this->name, $obj_name);
1501
- #if ($status == 401 && $this->_re_auth()) {
1502
- # return $this->delete_object($obj);
1503
- #}
1504
- if ($status == 404) {
1505
- $m = "Specified object '".$this->name."/".$obj_name;
1506
- $m.= "' did not exist to delete.";
1507
- throw new NoSuchObjectException($m);
1508
- }
1509
- if ($status != 204) {
1510
- throw new InvalidResponseException(
1511
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1512
- }
1513
- return True;
1514
- }
1515
-
1516
- /**
1517
- * Helper function to create "path" elements for a given Object name
1518
- *
1519
- * Given an Object whos name contains '/' path separators, this function
1520
- * will create the "directory marker" Objects of one byte with the
1521
- * Content-Type of "application/folder".
1522
- *
1523
- * It assumes the last element of the full path is the "real" Object
1524
- * and does NOT create a remote storage Object for that last element.
1525
- */
1526
- function create_paths($path_name)
1527
- {
1528
- if ($path_name[0] == '/') {
1529
- $path_name = mb_substr($path_name, 0, 1);
1530
- }
1531
- $elements = explode('/', $path_name, -1);
1532
- $build_path = "";
1533
- foreach ($elements as $idx => $val) {
1534
- if (!$build_path) {
1535
- $build_path = $val;
1536
- } else {
1537
- $build_path .= "/" . $val;
1538
- }
1539
- $obj = new CF_Object($this, $build_path);
1540
- $obj->content_type = "application/directory";
1541
- $obj->write(".", 1);
1542
- }
1543
- }
1544
-
1545
- /**
1546
- * Internal method to grab CDN/Container info if appropriate to do so
1547
- *
1548
- * @throws InvalidResponseException unexpected response
1549
- */
1550
- private function _cdn_initialize()
1551
- {
1552
- list($status, $reason, $cdn_enabled, $cdn_uri, $cdn_ttl,
1553
- $cdn_log_retention, $cdn_acl_user_agent, $cdn_acl_referrer) =
1554
- $this->cfs_http->head_cdn_container($this->name);
1555
- #if ($status == 401 && $this->_re_auth()) {
1556
- # return $this->_cdn_initialize();
1557
- #}
1558
- if (!in_array($status, array(204,404))) {
1559
- throw new InvalidResponseException(
1560
- "Invalid response (".$status."): ".$this->cfs_http->get_error());
1561
- }
1562
- $this->cdn_enabled = $cdn_enabled;
1563
- $this->cdn_uri = $cdn_uri;
1564
- $this->cdn_ttl = $cdn_ttl;
1565
- $this->cdn_log_retention = $cdn_log_retention;
1566
- $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1567
- $this->cdn_acl_referrer = $cdn_acl_referrer;
1568
- }
1569
-
1570
- #private function _re_auth()
1571
- #{
1572
- # $new_auth = new CF_Authentication(
1573
- # $this->cfs_auth->username,
1574
- # $this->cfs_auth->api_key,
1575
- # $this->cfs_auth->auth_host,
1576
- # $this->cfs_auth->account);
1577
- # $new_auth->authenticate();
1578
- # $this->cfs_auth = $new_auth;
1579
- # $this->cfs_http->setCFAuth($this->cfs_auth);
1580
- # return True;
1581
- #}
1582
- }
1583
-
1584
-
1585
- /**
1586
- * Object operations
1587
- *
1588
- * An Object is analogous to a file on a conventional filesystem. You can
1589
- * read data from, or write data to your Objects. You can also associate
1590
- * arbitrary metadata with them.
1591
- *
1592
- * @package php-cloudfiles
1593
- */
1594
- class CF_Object
1595
- {
1596
- public $container;
1597
- public $name;
1598
- public $last_modified;
1599
- public $content_type;
1600
- public $content_length;
1601
- public $metadata;
1602
- private $etag;
1603
-
1604
- /**
1605
- * Class constructor
1606
- *
1607
- * @param obj $container CF_Container instance
1608
- * @param string $name name of Object
1609
- * @param boolean $force_exists if set, throw an error if Object doesn't exist
1610
- */
1611
- function __construct(&$container, $name, $force_exists=False, $dohead=True)
1612
- {
1613
- if ($name[0] == "/") {
1614
- $r = "Object name '".$name;
1615
- $r .= "' cannot contain begin with a '/' character.";
1616
- throw new SyntaxException($r);
1617
- }
1618
- if (strlen($name) > MAX_OBJECT_NAME_LEN) {
1619
- throw new SyntaxException("Object name exceeds "
1620
- . "maximum allowed length.");
1621
- }
1622
- $this->container = $container;
1623
- $this->name = $name;
1624
- $this->etag = NULL;
1625
- $this->_etag_override = False;
1626
- $this->last_modified = NULL;
1627
- $this->content_type = NULL;
1628
- $this->content_length = 0;
1629
- $this->metadata = array();
1630
- if ($dohead) {
1631
- if (!$this->_initialize() && $force_exists) {
1632
- throw new NoSuchObjectException("No such object '".$name."'");
1633
- }
1634
- }
1635
- }
1636
-
1637
- /**
1638
- * String representation of Object
1639
- *
1640
- * Pretty print the Object's location and name
1641
- *
1642
- * @return string Object information
1643
- */
1644
- function __toString()
1645
- {
1646
- return $this->container->name . "/" . $this->name;
1647
- }
1648
-
1649
- /**
1650
- * Internal check to get the proper mimetype.
1651
- *
1652
- * This function would go over the available PHP methods to get
1653
- * the MIME type.
1654
- *
1655
- * By default it will try to use the PHP fileinfo library which is
1656
- * available from PHP 5.3 or as an PECL extension
1657
- * (http://pecl.php.net/package/Fileinfo).
1658
- *
1659
- * It will get the magic file by default from the system wide file
1660
- * which is usually available in /usr/share/magic on Unix or try
1661
- * to use the file specified in the source directory of the API
1662
- * (share directory).
1663
- *
1664
- * if fileinfo is not available it will try to use the internal
1665
- * mime_content_type function.
1666
- *
1667
- * @param string $handle name of file or buffer to guess the type from
1668
- * @return boolean <kbd>True</kbd> if successful
1669
- * @throws BadContentTypeException
1670
- */
1671
- function _guess_content_type($handle) {
1672
- if ($this->content_type)
1673
- return;
1674
-
1675
- $this->content_type = w3_get_mime_type($handle);
1676
-
1677
- if (!$this->content_type) {
1678
- throw new BadContentTypeException("Required Content-Type not set");
1679
- }
1680
-
1681
- return True;
1682
- }
1683
-
1684
- /**
1685
- * String representation of the Object's public URI
1686
- *
1687
- * A string representing the Object's public URI assuming that it's
1688
- * parent Container is CDN-enabled.
1689
- *
1690
- * Example:
1691
- * <code>
1692
- * # ... authentication/connection/container code excluded
1693
- * # ... see previous examples
1694
- *
1695
- * # Print out the Object's CDN URI (if it has one) in an HTML img-tag
1696
- * #
1697
- * print "<img src='$pic->public_uri()' />\n";
1698
- * </code>
1699
- *
1700
- * @return string Object's public URI or NULL
1701
- */
1702
- function public_uri()
1703
- {
1704
- if ($this->container->cdn_enabled) {
1705
- return $this->container->cdn_uri . "/" . $this->name;
1706
- }
1707
- return NULL;
1708
- }
1709
-
1710
- /**
1711
- * Read the remote Object's data
1712
- *
1713
- * Returns the Object's data. This is useful for smaller Objects such
1714
- * as images or office documents. Object's with larger content should use
1715
- * the stream() method below.
1716
- *
1717
- * Pass in $hdrs array to set specific custom HTTP headers such as
1718
- * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1719
- *
1720
- * Example:
1721
- * <code>
1722
- * # ... authentication/connection/container code excluded
1723
- * # ... see previous examples
1724
- *
1725
- * $my_docs = $conn->get_container("documents");
1726
- * $doc = $my_docs->get_object("README");
1727
- * $data = $doc->read(); # read image content into a string variable
1728
- * print $data;
1729
- *
1730
- * # Or see stream() below for a different example.
1731
- * #
1732
- * </code>
1733
- *
1734
- * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1735
- * @return string Object's data
1736
- * @throws InvalidResponseException unexpected response
1737
- */
1738
- function read($hdrs=array())
1739
- {
1740
- list($status, $reason, $data) =
1741
- $this->container->cfs_http->get_object_to_string($this, $hdrs);
1742
- #if ($status == 401 && $this->_re_auth()) {
1743
- # return $this->read($hdrs);
1744
- #}
1745
- if (($status < 200) || ($status > 299
1746
- && $status != 412 && $status != 304)) {
1747
- throw new InvalidResponseException("Invalid response (".$status."): "
1748
- . $this->container->cfs_http->get_error());
1749
- }
1750
- return $data;
1751
- }
1752
-
1753
- /**
1754
- * Streaming read of Object's data
1755
- *
1756
- * Given an open PHP resource (see PHP's fopen() method), fetch the Object's
1757
- * data and write it to the open resource handle. This is useful for
1758
- * streaming an Object's content to the browser (videos, images) or for
1759
- * fetching content to a local file.
1760
- *
1761
- * Pass in $hdrs array to set specific custom HTTP headers such as
1762
- * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1763
- *
1764
- * Example:
1765
- * <code>
1766
- * # ... authentication/connection/container code excluded
1767
- * # ... see previous examples
1768
- *
1769
- * # Assuming this is a web script to display the README to the
1770
- * # user's browser:
1771
- * #
1772
- * <?php
1773
- * // grab README from storage system
1774
- * //
1775
- * $my_docs = $conn->get_container("documents");
1776
- * $doc = $my_docs->get_object("README");
1777
- *
1778
- * // Hand it back to user's browser with appropriate content-type
1779
- * //
1780
- * header("Content-Type: " . $doc->content_type);
1781
- * $output = fopen("php://output", "w");
1782
- * $doc->stream($output); # stream object content to PHP's output buffer
1783
- * fclose($output);
1784
- * ?>
1785
- *
1786
- * # See read() above for a more simple example.
1787
- * #
1788
- * </code>
1789
- *
1790
- * @param resource $fp open resource for writing data to
1791
- * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1792
- * @return string Object's data
1793
- * @throws InvalidResponseException unexpected response
1794
- */
1795
- function stream(&$fp, $hdrs=array())
1796
- {
1797
- list($status, $reason) =
1798
- $this->container->cfs_http->get_object_to_stream($this,$fp,$hdrs);
1799
- #if ($status == 401 && $this->_re_auth()) {
1800
- # return $this->stream($fp, $hdrs);
1801
- #}
1802
- if (($status < 200) || ($status > 299
1803
- && $status != 412 && $status != 304)) {
1804
- throw new InvalidResponseException("Invalid response (".$status."): "
1805
- .$reason);
1806
- }
1807
- return True;
1808
- }
1809
-
1810
- /**
1811
- * Store new Object metadata
1812
- *
1813
- * Write's an Object's metadata to the remote Object. This will overwrite
1814
- * an prior Object metadata.
1815
- *
1816
- * Example:
1817
- * <code>
1818
- * # ... authentication/connection/container code excluded
1819
- * # ... see previous examples
1820
- *
1821
- * $my_docs = $conn->get_container("documents");
1822
- * $doc = $my_docs->get_object("README");
1823
- *
1824
- * # Define new metadata for the object
1825
- * #
1826
- * $doc->metadata = array(
1827
- * "Author" => "EJ",
1828
- * "Subject" => "How to use the PHP tests",
1829
- * "Version" => "1.2.2"
1830
- * );
1831
- *
1832
- * # Push the new metadata up to the storage system
1833
- * #
1834
- * $doc->sync_metadata();
1835
- * </code>
1836
- *
1837
- * @return boolean <kbd>True</kbd> if successful, <kbd>False</kbd> otherwise
1838
- * @throws InvalidResponseException unexpected response
1839
- */
1840
- function sync_metadata()
1841
- {
1842
- if (!empty($this->metadata)) {
1843
- $status = $this->container->cfs_http->update_object($this);
1844
- #if ($status == 401 && $this->_re_auth()) {
1845
- # return $this->sync_metadata();
1846
- #}
1847
- if ($status != 202) {
1848
- throw new InvalidResponseException("Invalid response ("
1849
- .$status."): ".$this->container->cfs_http->get_error());
1850
- }
1851
- return True;
1852
- }
1853
- return False;
1854
- }
1855
-
1856
- /**
1857
- * Upload Object's data to Cloud Files
1858
- *
1859
- * Write data to the remote Object. The $data argument can either be a
1860
- * PHP resource open for reading (see PHP's fopen() method) or an in-memory
1861
- * variable. If passing in a PHP resource, you must also include the $bytes
1862
- * parameter.
1863
- *
1864
- * Example:
1865
- * <code>
1866
- * # ... authentication/connection/container code excluded
1867
- * # ... see previous examples
1868
- *
1869
- * $my_docs = $conn->get_container("documents");
1870
- * $doc = $my_docs->get_object("README");
1871
- *
1872
- * # Upload placeholder text in my README
1873
- * #
1874
- * $doc->write("This is just placeholder text for now...");
1875
- * </code>
1876
- *
1877
- * @param string|resource $data string or open resource
1878
- * @param float $bytes amount of data to upload (required for resources)
1879
- * @param boolean $verify generate, send, and compare MD5 checksums
1880
- * @return boolean <kbd>True</kbd> when data uploaded successfully
1881
- * @throws SyntaxException missing required parameters
1882
- * @throws BadContentTypeException if no Content-Type was/could be set
1883
- * @throws MisMatchedChecksumException $verify is set and checksums unequal
1884
- * @throws InvalidResponseException unexpected response
1885
- */
1886
- function write($data=NULL, $bytes=0, $verify=True)
1887
- {
1888
- if (!$data) {
1889
- throw new SyntaxException("Missing data source.");
1890
- }
1891
- if ($bytes > MAX_OBJECT_SIZE) {
1892
- throw new SyntaxException("Bytes exceeds maximum object size.");
1893
- }
1894
- if ($verify) {
1895
- if (!$this->_etag_override) {
1896
- $this->etag = $this->compute_md5sum($data);
1897
- }
1898
- } else {
1899
- $this->etag = NULL;
1900
- }
1901
-
1902
- $close_fh = False;
1903
- if (!is_resource($data)) {
1904
- # A hack to treat string data as a file handle. php://memory feels
1905
- # like a better option, but it seems to break on Windows so use
1906
- # a temporary file instead.
1907
- #
1908
- $fp = fopen("php://temp", "wb+");
1909
- #$fp = fopen("php://memory", "wb+");
1910
- fwrite($fp, $data, strlen($data));
1911
- rewind($fp);
1912
- $close_fh = True;
1913
- $this->content_length = (float) strlen($data);
1914
- if ($this->content_length > MAX_OBJECT_SIZE) {
1915
- throw new SyntaxException("Data exceeds maximum object size");
1916
- }
1917
- $ct_data = substr($data, 0, 64);
1918
- } else {
1919
- $this->content_length = $bytes;
1920
- $fp = $data;
1921
- $ct_data = fread($data, 64);
1922
- rewind($data);
1923
- }
1924
-
1925
- $this->_guess_content_type($ct_data);
1926
-
1927
- list($status, $reason, $etag) =
1928
- $this->container->cfs_http->put_object($this, $fp);
1929
- #if ($status == 401 && $this->_re_auth()) {
1930
- # return $this->write($data, $bytes, $verify);
1931
- #}
1932
- if ($status == 412) {
1933
- if ($close_fh) { fclose($fp); }
1934
- throw new SyntaxException("Missing Content-Type header");
1935
- }
1936
- if ($status == 422) {
1937
- if ($close_fh) { fclose($fp); }
1938
- throw new MisMatchedChecksumException(
1939
- "Supplied and computed checksums do not match.");
1940
- }
1941
- if ($status != 201) {
1942
- if ($close_fh) { fclose($fp); }
1943
- throw new InvalidResponseException("Invalid response (".$status."): "
1944
- . $this->container->cfs_http->get_error());
1945
- }
1946
- if (!$verify) {
1947
- $this->etag = $etag;
1948
- }
1949
- if ($close_fh) { fclose($fp); }
1950
- return True;
1951
- }
1952
-
1953
- /**
1954
- * Upload Object data from local filename
1955
- *
1956
- * This is a convenience function to upload the data from a local file. A
1957
- * True value for $verify will cause the method to compute the Object's MD5
1958
- * checksum prior to uploading.
1959
- *
1960
- * Example:
1961
- * <code>
1962
- * # ... authentication/connection/container code excluded
1963
- * # ... see previous examples
1964
- *
1965
- * $my_docs = $conn->get_container("documents");
1966
- * $doc = $my_docs->get_object("README");
1967
- *
1968
- * # Upload my local README's content
1969
- * #
1970
- * $doc->load_from_filename("/home/ej/cloudfiles/readme");
1971
- * </code>
1972
- *
1973
- * @param string $filename full path to local file
1974
- * @param boolean $verify enable local/remote MD5 checksum validation
1975
- * @return boolean <kbd>True</kbd> if data uploaded successfully
1976
- * @throws SyntaxException missing required parameters
1977
- * @throws BadContentTypeException if no Content-Type was/could be set
1978
- * @throws MisMatchedChecksumException $verify is set and checksums unequal
1979
- * @throws InvalidResponseException unexpected response
1980
- * @throws IOException error opening file
1981
- */
1982
- function load_from_filename($filename, $verify=True)
1983
- {
1984
- $fp = @fopen($filename, "r");
1985
- if (!$fp) {
1986
- throw new IOException("Could not open file for reading: ".$filename);
1987
- }
1988
-
1989
- clearstatcache();
1990
-
1991
- $size = (float) sprintf("%u", filesize($filename));
1992
- if ($size > MAX_OBJECT_SIZE) {
1993
- throw new SyntaxException("File size exceeds maximum object size.");
1994
- }
1995
-
1996
- $this->_guess_content_type($filename);
1997
-
1998
- $this->write($fp, $size, $verify);
1999
- fclose($fp);
2000
- return True;
2001
- }
2002
-
2003
- /**
2004
- * Save Object's data to local filename
2005
- *
2006
- * Given a local filename, the Object's data will be written to the newly
2007
- * created file.
2008
- *
2009
- * Example:
2010
- * <code>
2011
- * # ... authentication/connection/container code excluded
2012
- * # ... see previous examples
2013
- *
2014
- * # Whoops! I deleted my local README, let me download/save it
2015
- * #
2016
- * $my_docs = $conn->get_container("documents");
2017
- * $doc = $my_docs->get_object("README");
2018
- *
2019
- * $doc->save_to_filename("/home/ej/cloudfiles/readme.restored");
2020
- * </code>
2021
- *
2022
- * @param string $filename name of local file to write data to
2023
- * @return boolean <kbd>True</kbd> if successful
2024
- * @throws IOException error opening file
2025
- * @throws InvalidResponseException unexpected response
2026
- */
2027
- function save_to_filename($filename)
2028
- {
2029
- $fp = @fopen($filename, "wb");
2030
- if (!$fp) {
2031
- throw new IOException("Could not open file for writing: ".$filename);
2032
- }
2033
- $result = $this->stream($fp);
2034
- fclose($fp);
2035
- return $result;
2036
- }
2037
-
2038
- /**
2039
- * Set Object's MD5 checksum
2040
- *
2041
- * Manually set the Object's ETag. Including the ETag is mandatory for
2042
- * Cloud Files to perform end-to-end verification. Omitting the ETag forces
2043
- * the user to handle any data integrity checks.
2044
- *
2045
- * @param string $etag MD5 checksum hexidecimal string
2046
- */
2047
- function set_etag($etag)
2048
- {
2049
- $this->etag = $etag;
2050
- $this->_etag_override = True;
2051
- }
2052
-
2053
- /**
2054
- * Object's MD5 checksum
2055
- *
2056
- * Accessor method for reading Object's private ETag attribute.
2057
- *
2058
- * @return string MD5 checksum hexidecimal string
2059
- */
2060
- function getETag()
2061
- {
2062
- return $this->etag;
2063
- }
2064
-
2065
- /**
2066
- * Compute the MD5 checksum
2067
- *
2068
- * Calculate the MD5 checksum on either a PHP resource or data. The argument
2069
- * may either be a local filename, open resource for reading, or a string.
2070
- *
2071
- * <b>WARNING:</b> if you are uploading a big file over a stream
2072
- * it could get very slow to compute the md5 you probably want to
2073
- * set the $verify parameter to False in the write() method and
2074
- * compute yourself the md5 before if you have it.
2075
- *
2076
- * @param filename|obj|string $data filename, open resource, or string
2077
- * @return string MD5 checksum hexidecimal string
2078
- */
2079
- function compute_md5sum(&$data)
2080
- {
2081
-
2082
- if (function_exists("hash_init") && is_resource($data)) {
2083
- $ctx = hash_init('md5');
2084
- while (!feof($data)) {
2085
- $buffer = fgets($data, 65536);
2086
- hash_update($ctx, $buffer);
2087
- }
2088
- $md5 = hash_final($ctx, false);
2089
- rewind($data);
2090
- } elseif ((string)is_file($data)) {
2091
- $md5 = md5_file($data);
2092
- } else {
2093
- $md5 = md5($data);
2094
- }
2095
- return $md5;
2096
- }
2097
-
2098
- /**
2099
- * PRIVATE: fetch information about the remote Object if it exists
2100
- */
2101
- private function _initialize()
2102
- {
2103
- list($status, $reason, $etag, $last_modified, $content_type,
2104
- $content_length, $metadata) =
2105
- $this->container->cfs_http->head_object($this);
2106
- #if ($status == 401 && $this->_re_auth()) {
2107
- # return $this->_initialize();
2108
- #}
2109
- if ($status == 404) {
2110
- return False;
2111
- }
2112
- if ($status < 200 || $status > 299) {
2113
- throw new InvalidResponseException("Invalid response (".$status."): "
2114
- . $this->container->cfs_http->get_error());
2115
- }
2116
- $this->etag = $etag;
2117
- $this->last_modified = $last_modified;
2118
- $this->content_type = $content_type;
2119
- $this->content_length = $content_length;
2120
- $this->metadata = $metadata;
2121
- return True;
2122
- }
2123
-
2124
- #private function _re_auth()
2125
- #{
2126
- # $new_auth = new CF_Authentication(
2127
- # $this->cfs_auth->username,
2128
- # $this->cfs_auth->api_key,
2129
- # $this->cfs_auth->auth_host,
2130
- # $this->cfs_auth->account);
2131
- # $new_auth->authenticate();
2132
- # $this->container->cfs_auth = $new_auth;
2133
- # $this->container->cfs_http->setCFAuth($this->cfs_auth);
2134
- # return True;
2135
- #}
2136
- }
2137
-
2138
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
2139
-
2140
- /*
2141
- * Local variables:
2142
- * tab-width: 4
2143
- * c-basic-offset: 4
2144
- * c-hanging-comment-ender-p: nil
2145
- * End:
2146
- */
2147
- ?>
 
 
1
+ <?php
2
+ /**
3
+ * This is the PHP Cloud Files API.
4
+ *
5
+ * <code>
6
+ * # Authenticate to Cloud Files. The default is to automatically try
7
+ * # to re-authenticate if an authentication token expires.
8
+ * #
9
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
10
+ * # file. This API ships with a newer version obtained directly from
11
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
12
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
13
+ * #
14
+ * $auth = new CF_Authentication($username, $api_key);
15
+ * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
16
+ * $auth->authenticate();
17
+ *
18
+ * # Establish a connection to the storage system
19
+ * #
20
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
21
+ * # file. This API ships with a newer version obtained directly from
22
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
23
+ * # call the CF_Connection instance's 'ssl_use_cabundle()' method.
24
+ * #
25
+ * $conn = new CF_Connection($auth);
26
+ * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
27
+ *
28
+ * # Create a remote Container and storage Object
29
+ * #
30
+ * $images = $conn->create_container("photos");
31
+ * $bday = $images->create_object("first_birthday.jpg");
32
+ *
33
+ * # Upload content from a local file by streaming it. Note that we use
34
+ * # a "float" for the file size to overcome PHP's 32-bit integer limit for
35
+ * # very large files.
36
+ * #
37
+ * $fname = "/home/user/photos/birthdays/birthday1.jpg"; # filename to upload
38
+ * $size = (float) sprintf("%u", filesize($fname));
39
+ * $fp = open($fname, "r");
40
+ * $bday->write($fp, $size);
41
+ *
42
+ * # Or... use a convenience function instead
43
+ * #
44
+ * $bday->load_from_filename("/home/user/photos/birthdays/birthday1.jpg");
45
+ *
46
+ * # Now, publish the "photos" container to serve the images by CDN.
47
+ * # Use the "$uri" value to put in your web pages or send the link in an
48
+ * # email message, etc.
49
+ * #
50
+ * $uri = $images->make_public();
51
+ *
52
+ * # Or... print out the Object's public URI
53
+ * #
54
+ * print $bday->public_uri();
55
+ * </code>
56
+ *
57
+ * See the included tests directory for additional sample code.
58
+ *
59
+ * Requres PHP 5.x (for Exceptions and OO syntax) and PHP's cURL module.
60
+ *
61
+ * It uses the supporting "cloudfiles_http.php" module for HTTP(s) support and
62
+ * allows for connection re-use and streaming of content into/out of Cloud Files
63
+ * via PHP's cURL module.
64
+ *
65
+ * See COPYING for license information.
66
+ *
67
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
68
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
69
+ * @package php-cloudfiles
70
+ */
71
+
72
+ /**
73
+ */
74
+ require_once("cloudfiles_exceptions.php");
75
+ require("cloudfiles_http.php");
76
+ define("DEFAULT_CF_API_VERSION", 1);
77
+ define("MAX_CONTAINER_NAME_LEN", 256);
78
+ define("MAX_OBJECT_NAME_LEN", 1024);
79
+ define("MAX_OBJECT_SIZE", 5*1024*1024*1024+1);
80
+ define("US_AUTHURL", "https://auth.api.rackspacecloud.com");
81
+ define("UK_AUTHURL", "https://lon.auth.api.rackspacecloud.com");
82
+ /**
83
+ * Class for handling Cloud Files Authentication, call it's {@link authenticate()}
84
+ * method to obtain authorized service urls and an authentication token.
85
+ *
86
+ * Example:
87
+ * <code>
88
+ * # Create the authentication instance
89
+ * #
90
+ * $auth = new CF_Authentication("username", "api_key");
91
+ *
92
+ * # NOTE: For UK Customers please specify your AuthURL Manually
93
+ * # There is a Predfined constant to use EX:
94
+ * #
95
+ * # $auth = new CF_Authentication("username, "api_key", NULL, UK_AUTHURL);
96
+ * # Using the UK_AUTHURL keyword will force the api to use the UK AuthUrl.
97
+ * # rather then the US one. The NULL Is passed for legacy purposes and must
98
+ * # be passed to function correctly.
99
+ *
100
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
101
+ * # file. This API ships with a newer version obtained directly from
102
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
103
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
104
+ * #
105
+ * # $auth->ssl_use_cabundle(); # bypass cURL's old CA bundle
106
+ *
107
+ * # Perform authentication request
108
+ * #
109
+ * $auth->authenticate();
110
+ * </code>
111
+ *
112
+ * @package php-cloudfiles
113
+ */
114
+ class CF_Authentication
115
+ {
116
+ public $dbug;
117
+ public $username;
118
+ public $api_key;
119
+ public $auth_host;
120
+ public $account;
121
+
122
+ /**
123
+ * Instance variables that are set after successful authentication
124
+ */
125
+ public $storage_url;
126
+ public $cdnm_url;
127
+ public $auth_token;
128
+
129
+ /**
130
+ * Class constructor (PHP 5 syntax)
131
+ *
132
+ * @param string $username Mosso username
133
+ * @param string $api_key Mosso API Access Key
134
+ * @param string $account <i>Account name</i>
135
+ * @param string $auth_host <i>Authentication service URI</i>
136
+ */
137
+ function __construct($username=NULL, $api_key=NULL, $account=NULL, $auth_host=US_AUTHURL)
138
+ {
139
+
140
+ $this->dbug = False;
141
+ $this->username = $username;
142
+ $this->api_key = $api_key;
143
+ $this->account_name = $account;
144
+ $this->auth_host = $auth_host;
145
+
146
+ $this->storage_url = NULL;
147
+ $this->cdnm_url = NULL;
148
+ $this->auth_token = NULL;
149
+
150
+ $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
151
+ }
152
+
153
+ /**
154
+ * Use the Certificate Authority bundle included with this API
155
+ *
156
+ * Most versions of PHP with cURL support include an outdated Certificate
157
+ * Authority (CA) bundle (the file that lists all valid certificate
158
+ * signing authorities). The SSL certificates used by the Cloud Files
159
+ * storage system are perfectly valid but have been created/signed by
160
+ * a CA not listed in these outdated cURL distributions.
161
+ *
162
+ * As a work-around, we've included an updated CA bundle obtained
163
+ * directly from cURL's web site (http://curl.haxx.se). You can direct
164
+ * the API to use this CA bundle by calling this method prior to making
165
+ * any remote calls. The best place to use this method is right after
166
+ * the CF_Authentication instance has been instantiated.
167
+ *
168
+ * You can specify your own CA bundle by passing in the full pathname
169
+ * to the bundle. You can use the included CA bundle by leaving the
170
+ * argument blank.
171
+ *
172
+ * @param string $path Specify path to CA bundle (default to included)
173
+ */
174
+ function ssl_use_cabundle($path=NULL)
175
+ {
176
+ $this->cfs_http->ssl_use_cabundle($path);
177
+ }
178
+
179
+ /**
180
+ * Attempt to validate Username/API Access Key
181
+ *
182
+ * Attempts to validate credentials with the authentication service. It
183
+ * either returns <kbd>True</kbd> or throws an Exception. Accepts a single
184
+ * (optional) argument for the storage system API version.
185
+ *
186
+ * Example:
187
+ * <code>
188
+ * # Create the authentication instance
189
+ * #
190
+ * $auth = new CF_Authentication("username", "api_key");
191
+ *
192
+ * # Perform authentication request
193
+ * #
194
+ * $auth->authenticate();
195
+ * </code>
196
+ *
197
+ * @param string $version API version for Auth service (optional)
198
+ * @return boolean <kbd>True</kbd> if successfully authenticated
199
+ * @throws AuthenticationException invalid credentials
200
+ * @throws InvalidResponseException invalid response
201
+ */
202
+ function authenticate($version=DEFAULT_CF_API_VERSION)
203
+ {
204
+ list($status,$reason,$surl,$curl,$atoken) =
205
+ $this->cfs_http->authenticate($this->username, $this->api_key,
206
+ $this->account_name, $this->auth_host);
207
+
208
+ if ($status == 401) {
209
+ throw new AuthenticationException("Invalid username or access key.");
210
+ }
211
+ if ($status != 204) {
212
+ throw new InvalidResponseException(
213
+ "Unexpected response (".$status."): ".$reason);
214
+ }
215
+
216
+ if (!($surl || $curl) || !$atoken) {
217
+ throw new InvalidResponseException(
218
+ "Expected headers missing from auth service.");
219
+ }
220
+ $this->storage_url = $surl;
221
+ $this->cdnm_url = $curl;
222
+ $this->auth_token = $atoken;
223
+ return True;
224
+ }
225
+ /**
226
+ * Use Cached Token and Storage URL's rather then grabbing from the Auth System
227
+ *
228
+ * Example:
229
+ * <code>
230
+ * #Create an Auth instance
231
+ * $auth = new CF_Authentication();
232
+ * #Pass Cached URL's and Token as Args
233
+ * $auth->load_cached_credentials("auth_token", "storage_url", "cdn_management_url");
234
+ * </code>
235
+ *
236
+ * @param string $auth_token A Cloud Files Auth Token (Required)
237
+ * @param string $storage_url The Cloud Files Storage URL (Required)
238
+ * @param string $cdnm_url CDN Management URL (Required)
239
+ * @return boolean <kbd>True</kbd> if successful
240
+ * @throws SyntaxException If any of the Required Arguments are missing
241
+ */
242
+ function load_cached_credentials($auth_token, $storage_url, $cdnm_url)
243
+ {
244
+ if(!$storage_url || !$cdnm_url)
245
+ {
246
+ throw new SyntaxException("Missing Required Interface URL's!");
247
+ return False;
248
+ }
249
+ if(!$auth_token)
250
+ {
251
+ throw new SyntaxException("Missing Auth Token!");
252
+ return False;
253
+ }
254
+
255
+ $this->storage_url = $storage_url;
256
+ $this->cdnm_url = $cdnm_url;
257
+ $this->auth_token = $auth_token;
258
+ return True;
259
+ }
260
+ /**
261
+ * Grab Cloud Files info to be Cached for later use with the load_cached_credentials method.
262
+ *
263
+ * Example:
264
+ * <code>
265
+ * #Create an Auth instance
266
+ * $auth = new CF_Authentication("UserName","API_Key");
267
+ * $auth->authenticate();
268
+ * $array = $auth->export_credentials();
269
+ * </code>
270
+ *
271
+ * @return array of url's and an auth token.
272
+ */
273
+ function export_credentials()
274
+ {
275
+ $arr = array();
276
+ $arr['storage_url'] = $this->storage_url;
277
+ $arr['cdnm_url'] = $this->cdnm_url;
278
+ $arr['auth_token'] = $this->auth_token;
279
+
280
+ return $arr;
281
+ }
282
+
283
+
284
+ /**
285
+ * Make sure the CF_Authentication instance has authenticated.
286
+ *
287
+ * Ensures that the instance variables necessary to communicate with
288
+ * Cloud Files have been set from a previous authenticate() call.
289
+ *
290
+ * @return boolean <kbd>True</kbd> if successfully authenticated
291
+ */
292
+ function authenticated()
293
+ {
294
+ if (!($this->storage_url || $this->cdnm_url) || !$this->auth_token) {
295
+ return False;
296
+ }
297
+ return True;
298
+ }
299
+
300
+ /**
301
+ * Toggle debugging - set cURL verbose flag
302
+ */
303
+ function setDebug($bool)
304
+ {
305
+ $this->dbug = $bool;
306
+ $this->cfs_http->setDebug($bool);
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Class for establishing connections to the Cloud Files storage system.
312
+ * Connection instances are used to communicate with the storage system at
313
+ * the account level; listing and deleting Containers and returning Container
314
+ * instances.
315
+ *
316
+ * Example:
317
+ * <code>
318
+ * # Create the authentication instance
319
+ * #
320
+ * $auth = new CF_Authentication("username", "api_key");
321
+ *
322
+ * # Perform authentication request
323
+ * #
324
+ * $auth->authenticate();
325
+ *
326
+ * # Create a connection to the storage/cdn system(s) and pass in the
327
+ * # validated CF_Authentication instance.
328
+ * #
329
+ * $conn = new CF_Connection($auth);
330
+ *
331
+ * # NOTE: Some versions of cURL include an outdated certificate authority (CA)
332
+ * # file. This API ships with a newer version obtained directly from
333
+ * # cURL's web site (http://curl.haxx.se). To use the newer CA bundle,
334
+ * # call the CF_Authentication instance's 'ssl_use_cabundle()' method.
335
+ * #
336
+ * # $conn->ssl_use_cabundle(); # bypass cURL's old CA bundle
337
+ * </code>
338
+ *
339
+ * @package php-cloudfiles
340
+ */
341
+ class CF_Connection
342
+ {
343
+ public $dbug;
344
+ public $cfs_http;
345
+ public $cfs_auth;
346
+
347
+ /**
348
+ * Pass in a previously authenticated CF_Authentication instance.
349
+ *
350
+ * Example:
351
+ * <code>
352
+ * # Create the authentication instance
353
+ * #
354
+ * $auth = new CF_Authentication("username", "api_key");
355
+ *
356
+ * # Perform authentication request
357
+ * #
358
+ * $auth->authenticate();
359
+ *
360
+ * # Create a connection to the storage/cdn system(s) and pass in the
361
+ * # validated CF_Authentication instance.
362
+ * #
363
+ * $conn = new CF_Connection($auth);
364
+ *
365
+ * # If you are connecting via Rackspace servers and have access
366
+ * # to the servicenet network you can set the $servicenet to True
367
+ * # like this.
368
+ *
369
+ * $conn = new CF_Connection($auth, $servicenet=True);
370
+ *
371
+ * </code>
372
+ *
373
+ * If the environement variable RACKSPACE_SERVICENET is defined it will
374
+ * force to connect via the servicenet.
375
+ *
376
+ * @param obj $cfs_auth previously authenticated CF_Authentication instance
377
+ * @param boolean $servicenet enable/disable access via Rackspace servicenet.
378
+ * @throws AuthenticationException not authenticated
379
+ */
380
+ function __construct($cfs_auth, $servicenet=False)
381
+ {
382
+ if (isset($_ENV['RACKSPACE_SERVICENET']))
383
+ $servicenet=True;
384
+ $this->cfs_http = new CF_Http(DEFAULT_CF_API_VERSION);
385
+ $this->cfs_auth = $cfs_auth;
386
+ if (!$this->cfs_auth->authenticated()) {
387
+ $e = "Need to pass in a previously authenticated ";
388
+ $e .= "CF_Authentication instance.";
389
+ throw new AuthenticationException($e);
390
+ }
391
+ $this->cfs_http->setCFAuth($this->cfs_auth, $servicenet=$servicenet);
392
+ $this->dbug = False;
393
+ }
394
+
395
+ /**
396
+ * Toggle debugging of instance and back-end HTTP module
397
+ *
398
+ * @param boolean $bool enable/disable cURL debugging
399
+ */
400
+ function setDebug($bool)
401
+ {
402
+ $this->dbug = (boolean) $bool;
403
+ $this->cfs_http->setDebug($this->dbug);
404
+ }
405
+
406
+ /**
407
+ * Close a connection
408
+ *
409
+ * Example:
410
+ * <code>
411
+ *
412
+ * $conn->close();
413
+ *
414
+ * </code>
415
+ *
416
+ * Will close all current cUrl active connections.
417
+ *
418
+ */
419
+ public function close()
420
+ {
421
+ $this->cfs_http->close();
422
+ }
423
+
424
+ /**
425
+ * Cloud Files account information
426
+ *
427
+ * Return an array of two floats (since PHP only supports 32-bit integers);
428
+ * number of containers on the account and total bytes used for the account.
429
+ *
430
+ * Example:
431
+ * <code>
432
+ * # ... authentication code excluded (see previous examples) ...
433
+ * #
434
+ * $conn = new CF_Authentication($auth);
435
+ *
436
+ * list($quantity, $bytes) = $conn->get_info();
437
+ * print "Number of containers: " . $quantity . "\n";
438
+ * print "Bytes stored in container: " . $bytes . "\n";
439
+ * </code>
440
+ *
441
+ * @return array (number of containers, total bytes stored)
442
+ * @throws InvalidResponseException unexpected response
443
+ */
444
+ function get_info()
445
+ {
446
+ list($status, $reason, $container_count, $total_bytes) =
447
+ $this->cfs_http->head_account();
448
+ #if ($status == 401 && $this->_re_auth()) {
449
+ # return $this->get_info();
450
+ #}
451
+ if ($status < 200 || $status > 299) {
452
+ throw new InvalidResponseException(
453
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
454
+ }
455
+ return array($container_count, $total_bytes);
456
+ }
457
+
458
+ /**
459
+ * Create a Container
460
+ *
461
+ * Given a Container name, return a Container instance, creating a new
462
+ * remote Container if it does not exit.
463
+ *
464
+ * Example:
465
+ * <code>
466
+ * # ... authentication code excluded (see previous examples) ...
467
+ * #
468
+ * $conn = new CF_Authentication($auth);
469
+ *
470
+ * $images = $conn->create_container("my photos");
471
+ * </code>
472
+ *
473
+ * @param string $container_name container name
474
+ * @return CF_Container
475
+ * @throws SyntaxException invalid name
476
+ * @throws InvalidResponseException unexpected response
477
+ */
478
+ function create_container($container_name=NULL)
479
+ {
480
+ if ($container_name != "0" and !isset($container_name))
481
+ throw new SyntaxException("Container name not set.");
482
+
483
+ if (!isset($container_name) or $container_name == "")
484
+ throw new SyntaxException("Container name not set.");
485
+
486
+ if (strpos($container_name, "/") !== False) {
487
+ $r = "Container name '".$container_name;
488
+ $r .= "' cannot contain a '/' character.";
489
+ throw new SyntaxException($r);
490
+ }
491
+ if (strlen($container_name) > MAX_CONTAINER_NAME_LEN) {
492
+ throw new SyntaxException(sprintf(
493
+ "Container name exeeds %d bytes.",
494
+ MAX_CONTAINER_NAME_LEN));
495
+ }
496
+
497
+ $return_code = $this->cfs_http->create_container($container_name);
498
+ if (!$return_code) {
499
+ throw new InvalidResponseException("Invalid response ("
500
+ . $return_code. "): " . $this->cfs_http->get_error());
501
+ }
502
+ #if ($status == 401 && $this->_re_auth()) {
503
+ # return $this->create_container($container_name);
504
+ #}
505
+ if ($return_code != 201 && $return_code != 202) {
506
+ throw new InvalidResponseException(
507
+ "Invalid response (".$return_code."): "
508
+ . $this->cfs_http->get_error());
509
+ }
510
+ return new CF_Container($this->cfs_auth, $this->cfs_http, $container_name);
511
+ }
512
+
513
+ /**
514
+ * Delete a Container
515
+ *
516
+ * Given either a Container instance or name, remove the remote Container.
517
+ * The Container must be empty prior to removing it.
518
+ *
519
+ * Example:
520
+ * <code>
521
+ * # ... authentication code excluded (see previous examples) ...
522
+ * #
523
+ * $conn = new CF_Authentication($auth);
524
+ *
525
+ * $conn->delete_container("my photos");
526
+ * </code>
527
+ *
528
+ * @param string|obj $container container name or instance
529
+ * @return boolean <kbd>True</kbd> if successfully deleted
530
+ * @throws SyntaxException missing proper argument
531
+ * @throws InvalidResponseException invalid response
532
+ * @throws NonEmptyContainerException container not empty
533
+ * @throws NoSuchContainerException remote container does not exist
534
+ */
535
+ function delete_container($container=NULL)
536
+ {
537
+ $container_name = NULL;
538
+
539
+ if (is_object($container)) {
540
+ if (get_class($container) == "CF_Container") {
541
+ $container_name = $container->name;
542
+ }
543
+ }
544
+ if (is_string($container)) {
545
+ $container_name = $container;
546
+ }
547
+
548
+ if ($container_name != "0" and !isset($container_name))
549
+ throw new SyntaxException("Must specify container object or name.");
550
+
551
+ $return_code = $this->cfs_http->delete_container($container_name);
552
+
553
+ if (!$return_code) {
554
+ throw new InvalidResponseException("Failed to obtain http response");
555
+ }
556
+ #if ($status == 401 && $this->_re_auth()) {
557
+ # return $this->delete_container($container);
558
+ #}
559
+ if ($return_code == 409) {
560
+ throw new NonEmptyContainerException(
561
+ "Container must be empty prior to removing it.");
562
+ }
563
+ if ($return_code == 404) {
564
+ throw new NoSuchContainerException(
565
+ "Specified container did not exist to delete.");
566
+ }
567
+ if ($return_code != 204) {
568
+ throw new InvalidResponseException(
569
+ "Invalid response (".$return_code."): "
570
+ . $this->cfs_http->get_error());
571
+ }
572
+ return True;
573
+ }
574
+
575
+ /**
576
+ * Return a Container instance
577
+ *
578
+ * For the given name, return a Container instance if the remote Container
579
+ * exists, otherwise throw a Not Found exception.
580
+ *
581
+ * Example:
582
+ * <code>
583
+ * # ... authentication code excluded (see previous examples) ...
584
+ * #
585
+ * $conn = new CF_Authentication($auth);
586
+ *
587
+ * $images = $conn->get_container("my photos");
588
+ * print "Number of Objects: " . $images->count . "\n";
589
+ * print "Bytes stored in container: " . $images->bytes . "\n";
590
+ * </code>
591
+ *
592
+ * @param string $container_name name of the remote Container
593
+ * @return container CF_Container instance
594
+ * @throws NoSuchContainerException thrown if no remote Container
595
+ * @throws InvalidResponseException unexpected response
596
+ */
597
+ function get_container($container_name=NULL)
598
+ {
599
+ list($status, $reason, $count, $bytes) =
600
+ $this->cfs_http->head_container($container_name);
601
+ #if ($status == 401 && $this->_re_auth()) {
602
+ # return $this->get_container($container_name);
603
+ #}
604
+ if ($status == 404) {
605
+ throw new NoSuchContainerException("Container not found.");
606
+ }
607
+ if ($status < 200 || $status > 299) {
608
+ throw new InvalidResponseException(
609
+ "Invalid response: ".$this->cfs_http->get_error());
610
+ }
611
+ return new CF_Container($this->cfs_auth, $this->cfs_http,
612
+ $container_name, $count, $bytes);
613
+ }
614
+
615
+ /**
616
+ * Return array of Container instances
617
+ *
618
+ * Return an array of CF_Container instances on the account. The instances
619
+ * will be fully populated with Container attributes (bytes stored and
620
+ * Object count)
621
+ *
622
+ * Example:
623
+ * <code>
624
+ * # ... authentication code excluded (see previous examples) ...
625
+ * #
626
+ * $conn = new CF_Authentication($auth);
627
+ *
628
+ * $clist = $conn->get_containers();
629
+ * foreach ($clist as $cont) {
630
+ * print "Container name: " . $cont->name . "\n";
631
+ * print "Number of Objects: " . $cont->count . "\n";
632
+ * print "Bytes stored in container: " . $cont->bytes . "\n";
633
+ * }
634
+ * </code>
635
+ *
636
+ * @return array An array of CF_Container instances
637
+ * @throws InvalidResponseException unexpected response
638
+ */
639
+ function get_containers($limit=0, $marker=NULL)
640
+ {
641
+ list($status, $reason, $container_info) =
642
+ $this->cfs_http->list_containers_info($limit, $marker);
643
+ #if ($status == 401 && $this->_re_auth()) {
644
+ # return $this->get_containers();
645
+ #}
646
+ if ($status < 200 || $status > 299) {
647
+ throw new InvalidResponseException(
648
+ "Invalid response: ".$this->cfs_http->get_error());
649
+ }
650
+ $containers = array();
651
+ foreach ($container_info as $name => $info) {
652
+ $containers[] = new CF_Container($this->cfs_auth, $this->cfs_http,
653
+ $info['name'], $info["count"], $info["bytes"], False);
654
+ }
655
+ return $containers;
656
+ }
657
+
658
+ /**
659
+ * Return list of remote Containers
660
+ *
661
+ * Return an array of strings containing the names of all remote Containers.
662
+ *
663
+ * Example:
664
+ * <code>
665
+ * # ... authentication code excluded (see previous examples) ...
666
+ * #
667
+ * $conn = new CF_Authentication($auth);
668
+ *
669
+ * $container_list = $conn->list_containers();
670
+ * print_r($container_list);
671
+ * Array
672
+ * (
673
+ * [0] => "my photos",
674
+ * [1] => "my docs"
675
+ * )
676
+ * </code>
677
+ *
678
+ * @param integer $limit restrict results to $limit Containers
679
+ * @param string $marker return results greater than $marker
680
+ * @return array list of remote Containers
681
+ * @throws InvalidResponseException unexpected response
682
+ */
683
+ function list_containers($limit=0, $marker=NULL)
684
+ {
685
+ list($status, $reason, $containers) =
686
+ $this->cfs_http->list_containers($limit, $marker);
687
+ #if ($status == 401 && $this->_re_auth()) {
688
+ # return $this->list_containers($limit, $marker);
689
+ #}
690
+ if ($status < 200 || $status > 299) {
691
+ throw new InvalidResponseException(
692
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
693
+ }
694
+ return $containers;
695
+ }
696
+
697
+ /**
698
+ * Return array of information about remote Containers
699
+ *
700
+ * Return a nested array structure of Container info.
701
+ *
702
+ * Example:
703
+ * <code>
704
+ * # ... authentication code excluded (see previous examples) ...
705
+ * #
706
+ *
707
+ * $container_info = $conn->list_containers_info();
708
+ * print_r($container_info);
709
+ * Array
710
+ * (
711
+ * ["my photos"] =>
712
+ * Array
713
+ * (
714
+ * ["bytes"] => 78,
715
+ * ["count"] => 2
716
+ * )
717
+ * ["docs"] =>
718
+ * Array
719
+ * (
720
+ * ["bytes"] => 37323,
721
+ * ["count"] => 12
722
+ * )
723
+ * )
724
+ * </code>
725
+ *
726
+ * @param integer $limit restrict results to $limit Containers
727
+ * @param string $marker return results greater than $marker
728
+ * @return array nested array structure of Container info
729
+ * @throws InvalidResponseException unexpected response
730
+ */
731
+ function list_containers_info($limit=0, $marker=NULL)
732
+ {
733
+ list($status, $reason, $container_info) =
734
+ $this->cfs_http->list_containers_info($limit, $marker);
735
+ #if ($status == 401 && $this->_re_auth()) {
736
+ # return $this->list_containers_info($limit, $marker);
737
+ #}
738
+ if ($status < 200 || $status > 299) {
739
+ throw new InvalidResponseException(
740
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
741
+ }
742
+ return $container_info;
743
+ }
744
+
745
+ /**
746
+ * Return list of Containers that have been published to the CDN.
747
+ *
748
+ * Return an array of strings containing the names of published Containers.
749
+ * Note that this function returns the list of any Container that has
750
+ * ever been CDN-enabled regardless of it's existence in the storage
751
+ * system.
752
+ *
753
+ * Example:
754
+ * <code>
755
+ * # ... authentication code excluded (see previous examples) ...
756
+ * #
757
+ * $conn = new CF_Authentication($auth);
758
+ *
759
+ * $public_containers = $conn->list_public_containers();
760
+ * print_r($public_containers);
761
+ * Array
762
+ * (
763
+ * [0] => "images",
764
+ * [1] => "css",
765
+ * [2] => "javascript"
766
+ * )
767
+ * </code>
768
+ *
769
+ * @param bool $enabled_only Will list all containers ever CDN enabled if * set to false or only currently enabled CDN containers if set to true. * Defaults to false.
770
+ * @return array list of published Container names
771
+ * @throws InvalidResponseException unexpected response
772
+ */
773
+ function list_public_containers($enabled_only=False)
774
+ {
775
+ list($status, $reason, $containers) =
776
+ $this->cfs_http->list_cdn_containers($enabled_only);
777
+ #if ($status == 401 && $this->_re_auth()) {
778
+ # return $this->list_public_containers();
779
+ #}
780
+ if ($status < 200 || $status > 299) {
781
+ throw new InvalidResponseException(
782
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
783
+ }
784
+ return $containers;
785
+ }
786
+
787
+ /**
788
+ * Set a user-supplied callback function to report download progress
789
+ *
790
+ * The callback function is used to report incremental progress of a data
791
+ * download functions (e.g. $container->list_objects(), $obj->read(), etc).
792
+ * The specified function will be periodically called with the number of
793
+ * bytes transferred until the entire download is complete. This callback
794
+ * function can be useful for implementing "progress bars" for large
795
+ * downloads.
796
+ *
797
+ * The specified callback function should take a single integer parameter.
798
+ *
799
+ * <code>
800
+ * function read_callback($bytes_transferred) {
801
+ * print ">> downloaded " . $bytes_transferred . " bytes.\n";
802
+ * # ... do other things ...
803
+ * return;
804
+ * }
805
+ *
806
+ * $conn = new CF_Connection($auth_obj);
807
+ * $conn->set_read_progress_function("read_callback");
808
+ * print_r($conn->list_containers());
809
+ *
810
+ * # output would look like this:
811
+ * #
812
+ * >> downloaded 10 bytes.
813
+ * >> downloaded 11 bytes.
814
+ * Array
815
+ * (
816
+ * [0] => fuzzy.txt
817
+ * [1] => space name
818
+ * )
819
+ * </code>
820
+ *
821
+ * @param string $func_name the name of the user callback function
822
+ */
823
+ function set_read_progress_function($func_name)
824
+ {
825
+ $this->cfs_http->setReadProgressFunc($func_name);
826
+ }
827
+
828
+ /**
829
+ * Set a user-supplied callback function to report upload progress
830
+ *
831
+ * The callback function is used to report incremental progress of a data
832
+ * upload functions (e.g. $obj->write() call). The specified function will
833
+ * be periodically called with the number of bytes transferred until the
834
+ * entire upload is complete. This callback function can be useful
835
+ * for implementing "progress bars" for large uploads/downloads.
836
+ *
837
+ * The specified callback function should take a single integer parameter.
838
+ *
839
+ * <code>
840
+ * function write_callback($bytes_transferred) {
841
+ * print ">> uploaded " . $bytes_transferred . " bytes.\n";
842
+ * # ... do other things ...
843
+ * return;
844
+ * }
845
+ *
846
+ * $conn = new CF_Connection($auth_obj);
847
+ * $conn->set_write_progress_function("write_callback");
848
+ * $container = $conn->create_container("stuff");
849
+ * $obj = $container->create_object("foo");
850
+ * $obj->write("The callback function will be called during upload.");
851
+ *
852
+ * # output would look like this:
853
+ * # >> uploaded 51 bytes.
854
+ * #
855
+ * </code>
856
+ *
857
+ * @param string $func_name the name of the user callback function
858
+ */
859
+ function set_write_progress_function($func_name)
860
+ {
861
+ $this->cfs_http->setWriteProgressFunc($func_name);
862
+ }
863
+
864
+ /**
865
+ * Use the Certificate Authority bundle included with this API
866
+ *
867
+ * Most versions of PHP with cURL support include an outdated Certificate
868
+ * Authority (CA) bundle (the file that lists all valid certificate
869
+ * signing authorities). The SSL certificates used by the Cloud Files
870
+ * storage system are perfectly valid but have been created/signed by
871
+ * a CA not listed in these outdated cURL distributions.
872
+ *
873
+ * As a work-around, we've included an updated CA bundle obtained
874
+ * directly from cURL's web site (http://curl.haxx.se). You can direct
875
+ * the API to use this CA bundle by calling this method prior to making
876
+ * any remote calls. The best place to use this method is right after
877
+ * the CF_Authentication instance has been instantiated.
878
+ *
879
+ * You can specify your own CA bundle by passing in the full pathname
880
+ * to the bundle. You can use the included CA bundle by leaving the
881
+ * argument blank.
882
+ *
883
+ * @param string $path Specify path to CA bundle (default to included)
884
+ */
885
+ function ssl_use_cabundle($path=NULL)
886
+ {
887
+ $this->cfs_http->ssl_use_cabundle($path);
888
+ }
889
+
890
+ #private function _re_auth()
891
+ #{
892
+ # $new_auth = new CF_Authentication(
893
+ # $this->cfs_auth->username,
894
+ # $this->cfs_auth->api_key,
895
+ # $this->cfs_auth->auth_host,
896
+ # $this->cfs_auth->account);
897
+ # $new_auth->authenticate();
898
+ # $this->cfs_auth = $new_auth;
899
+ # $this->cfs_http->setCFAuth($this->cfs_auth);
900
+ # return True;
901
+ #}
902
+ }
903
+
904
+ /**
905
+ * Container operations
906
+ *
907
+ * Containers are storage compartments where you put your data (objects).
908
+ * A container is similar to a directory or folder on a conventional filesystem
909
+ * with the exception that they exist in a flat namespace, you can not create
910
+ * containers inside of containers.
911
+ *
912
+ * You also have the option of marking a Container as "public" so that the
913
+ * Objects stored in the Container are publicly available via the CDN.
914
+ *
915
+ * @package php-cloudfiles
916
+ */
917
+ class CF_Container
918
+ {
919
+ public $cfs_auth;
920
+ public $cfs_http;
921
+ public $name;
922
+ public $object_count;
923
+ public $bytes_used;
924
+
925
+ public $cdn_enabled;
926
+ public $cdn_uri;
927
+ public $cdn_ttl;
928
+ public $cdn_log_retention;
929
+ public $cdn_acl_user_agent;
930
+ public $cdn_acl_referrer;
931
+
932
+ /**
933
+ * Class constructor
934
+ *
935
+ * Constructor for Container
936
+ *
937
+ * @param obj $cfs_auth CF_Authentication instance
938
+ * @param obj $cfs_http HTTP connection manager
939
+ * @param string $name name of Container
940
+ * @param int $count number of Objects stored in this Container
941
+ * @param int $bytes number of bytes stored in this Container
942
+ * @throws SyntaxException invalid Container name
943
+ */
944
+ function __construct(&$cfs_auth, &$cfs_http, $name, $count=0,
945
+ $bytes=0, $docdn=True)
946
+ {
947
+ if (strlen($name) > MAX_CONTAINER_NAME_LEN) {
948
+ throw new SyntaxException("Container name exceeds "
949
+ . "maximum allowed length.");
950
+ }
951
+ if (strpos($name, "/") !== False) {
952
+ throw new SyntaxException(
953
+ "Container names cannot contain a '/' character.");
954
+ }
955
+ $this->cfs_auth = $cfs_auth;
956
+ $this->cfs_http = $cfs_http;
957
+ $this->name = $name;
958
+ $this->object_count = $count;
959
+ $this->bytes_used = $bytes;
960
+ $this->cdn_enabled = NULL;
961
+ $this->cdn_uri = NULL;
962
+ $this->cdn_ttl = NULL;
963
+ $this->cdn_log_retention = NULL;
964
+ $this->cdn_acl_user_agent = NULL;
965
+ $this->cdn_acl_referrer = NULL;
966
+ if ($this->cfs_http->getCDNMUrl() != NULL && $docdn) {
967
+ $this->_cdn_initialize();
968
+ }
969
+ }
970
+
971
+ /**
972
+ * String representation of Container
973
+ *
974
+ * Pretty print the Container instance.
975
+ *
976
+ * @return string Container details
977
+ */
978
+ function __toString()
979
+ {
980
+ $me = sprintf("name: %s, count: %.0f, bytes: %.0f",
981
+ $this->name, $this->object_count, $this->bytes_used);
982
+ if ($this->cfs_http->getCDNMUrl() != NULL) {
983
+ $me .= sprintf(", cdn: %s, cdn uri: %s, cdn ttl: %.0f, logs retention: %s",
984
+ $this->is_public() ? "Yes" : "No",
985
+ $this->cdn_uri, $this->cdn_ttl,
986
+ $this->cdn_log_retention ? "Yes" : "No"
987
+ );
988
+
989
+ if ($this->cdn_acl_user_agent != NULL) {
990
+ $me .= ", cdn acl user agent: " . $this->cdn_acl_user_agent;
991
+ }
992
+
993
+ if ($this->cdn_acl_referrer != NULL) {
994
+ $me .= ", cdn acl referrer: " . $this->cdn_acl_referrer;
995
+ }
996
+
997
+
998
+ }
999
+ return $me;
1000
+ }
1001
+
1002
+ /**
1003
+ * Enable Container content to be served via CDN or modify CDN attributes
1004
+ *
1005
+ * Either enable this Container's content to be served via CDN or
1006
+ * adjust its CDN attributes. This Container will always return the
1007
+ * same CDN-enabled URI each time it is toggled public/private/public.
1008
+ *
1009
+ * Example:
1010
+ * <code>
1011
+ * # ... authentication code excluded (see previous examples) ...
1012
+ * #
1013
+ * $conn = new CF_Authentication($auth);
1014
+ *
1015
+ * $public_container = $conn->create_container("public");
1016
+ *
1017
+ * # CDN-enable the container and set it's TTL for a month
1018
+ * #
1019
+ * $public_container->make_public(86400/2); # 12 hours (86400 seconds/day)
1020
+ * </code>
1021
+ *
1022
+ * @param int $ttl the time in seconds content will be cached in the CDN
1023
+ * @returns string the CDN enabled Container's URI
1024
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1025
+ * @throws AuthenticationException if auth token is not valid/expired
1026
+ * @throws InvalidResponseException unexpected response
1027
+ */
1028
+ function make_public($ttl=86400)
1029
+ {
1030
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1031
+ throw new CDNNotEnabledException(
1032
+ "Authentication response did not indicate CDN availability");
1033
+ }
1034
+ if ($this->cdn_uri != NULL) {
1035
+ # previously published, assume we're setting new attributes
1036
+ list($status, $reason, $cdn_uri) =
1037
+ $this->cfs_http->update_cdn_container($this->name,$ttl,
1038
+ $this->cdn_log_retention,
1039
+ $this->cdn_acl_user_agent,
1040
+ $this->cdn_acl_referrer);
1041
+ #if ($status == 401 && $this->_re_auth()) {
1042
+ # return $this->make_public($ttl);
1043
+ #}
1044
+ if ($status == 404) {
1045
+ # this instance _thinks_ the container was published, but the
1046
+ # cdn management system thinks otherwise - try again with a PUT
1047
+ list($status, $reason, $cdn_uri) =
1048
+ $this->cfs_http->add_cdn_container($this->name,$ttl);
1049
+
1050
+ }
1051
+ } else {
1052
+ # publish it for first time
1053
+ list($status, $reason, $cdn_uri) =
1054
+ $this->cfs_http->add_cdn_container($this->name,$ttl);
1055
+ }
1056
+ #if ($status == 401 && $this->_re_auth()) {
1057
+ # return $this->make_public($ttl);
1058
+ #}
1059
+ if (!in_array($status, array(201,202))) {
1060
+ throw new InvalidResponseException(
1061
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1062
+ }
1063
+ $this->cdn_enabled = True;
1064
+ $this->cdn_ttl = $ttl;
1065
+ $this->cdn_uri = $cdn_uri;
1066
+ $this->cdn_log_retention = False;
1067
+ $this->cdn_acl_user_agent = "";
1068
+ $this->cdn_acl_referrer = "";
1069
+ return $this->cdn_uri;
1070
+ }
1071
+
1072
+ /**
1073
+ * Enable ACL restriction by User Agent for this container.
1074
+ *
1075
+ * Example:
1076
+ * <code>
1077
+ * # ... authentication code excluded (see previous examples) ...
1078
+ * #
1079
+ * $conn = new CF_Authentication($auth);
1080
+ *
1081
+ * $public_container = $conn->get_container("public");
1082
+ *
1083
+ * # Enable ACL by Referrer
1084
+ * $public_container->acl_referrer("Mozilla");
1085
+ * </code>
1086
+ *
1087
+ * @returns boolean True if successful
1088
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1089
+ * @throws AuthenticationException if auth token is not valid/expired
1090
+ * @throws InvalidResponseException unexpected response
1091
+ */
1092
+ function acl_user_agent($cdn_acl_user_agent="") {
1093
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1094
+ throw new CDNNotEnabledException(
1095
+ "Authentication response did not indicate CDN availability");
1096
+ }
1097
+ list($status,$reason) =
1098
+ $this->cfs_http->update_cdn_container($this->name,
1099
+ $this->cdn_ttl,
1100
+ $this->cdn_log_retention,
1101
+ $cdn_acl_user_agent,
1102
+ $this->cdn_acl_referrer
1103
+ );
1104
+ if (!in_array($status, array(202,404))) {
1105
+ throw new InvalidResponseException(
1106
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1107
+ }
1108
+ $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1109
+ return True;
1110
+ }
1111
+
1112
+ /**
1113
+ * Enable ACL restriction by referer for this container.
1114
+ *
1115
+ * Example:
1116
+ * <code>
1117
+ * # ... authentication code excluded (see previous examples) ...
1118
+ * #
1119
+ * $conn = new CF_Authentication($auth);
1120
+ *
1121
+ * $public_container = $conn->get_container("public");
1122
+ *
1123
+ * # Enable Referrer
1124
+ * $public_container->acl_referrer("http://www.example.com/gallery.php");
1125
+ * </code>
1126
+ *
1127
+ * @returns boolean True if successful
1128
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1129
+ * @throws AuthenticationException if auth token is not valid/expired
1130
+ * @throws InvalidResponseException unexpected response
1131
+ */
1132
+ function acl_referrer($cdn_acl_referrer="") {
1133
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1134
+ throw new CDNNotEnabledException(
1135
+ "Authentication response did not indicate CDN availability");
1136
+ }
1137
+ list($status,$reason) =
1138
+ $this->cfs_http->update_cdn_container($this->name,
1139
+ $this->cdn_ttl,
1140
+ $this->cdn_log_retention,
1141
+ $this->cdn_acl_user_agent,
1142
+ $cdn_acl_referrer
1143
+ );
1144
+ if (!in_array($status, array(202,404))) {
1145
+ throw new InvalidResponseException(
1146
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1147
+ }
1148
+ $this->cdn_acl_referrer = $cdn_acl_referrer;
1149
+ return True;
1150
+ }
1151
+
1152
+ /**
1153
+ * Enable log retention for this CDN container.
1154
+ *
1155
+ * Enable CDN log retention on the container. If enabled logs will
1156
+ * be periodically (at unpredictable intervals) compressed and
1157
+ * uploaded to a ".CDN_ACCESS_LOGS" container in the form of
1158
+ * "container_name.YYYYMMDDHH-XXXX.gz". Requires CDN be enabled on
1159
+ * the account.
1160
+ *
1161
+ * Example:
1162
+ * <code>
1163
+ * # ... authentication code excluded (see previous examples) ...
1164
+ * #
1165
+ * $conn = new CF_Authentication($auth);
1166
+ *
1167
+ * $public_container = $conn->get_container("public");
1168
+ *
1169
+ * # Enable logs retention.
1170
+ * $public_container->log_retention(True);
1171
+ * </code>
1172
+ *
1173
+ * @returns boolean True if successful
1174
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1175
+ * @throws AuthenticationException if auth token is not valid/expired
1176
+ * @throws InvalidResponseException unexpected response
1177
+ */
1178
+ function log_retention($cdn_log_retention=False) {
1179
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1180
+ throw new CDNNotEnabledException(
1181
+ "Authentication response did not indicate CDN availability");
1182
+ }
1183
+ list($status,$reason) =
1184
+ $this->cfs_http->update_cdn_container($this->name,
1185
+ $this->cdn_ttl,
1186
+ $cdn_log_retention,
1187
+ $this->cdn_acl_user_agent,
1188
+ $this->cdn_acl_referrer
1189
+ );
1190
+ if (!in_array($status, array(202,404))) {
1191
+ throw new InvalidResponseException(
1192
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1193
+ }
1194
+ $this->cdn_log_retention = $cdn_log_retention;
1195
+ return True;
1196
+ }
1197
+
1198
+ /**
1199
+ * Disable the CDN sharing for this container
1200
+ *
1201
+ * Use this method to disallow distribution into the CDN of this Container's
1202
+ * content.
1203
+ *
1204
+ * NOTE: Any content already cached in the CDN will continue to be served
1205
+ * from its cache until the TTL expiration transpires. The default
1206
+ * TTL is typically one day, so "privatizing" the Container will take
1207
+ * up to 24 hours before the content is purged from the CDN cache.
1208
+ *
1209
+ * Example:
1210
+ * <code>
1211
+ * # ... authentication code excluded (see previous examples) ...
1212
+ * #
1213
+ * $conn = new CF_Authentication($auth);
1214
+ *
1215
+ * $public_container = $conn->get_container("public");
1216
+ *
1217
+ * # Disable CDN accessability
1218
+ * # ... still cached up to a month based on previous example
1219
+ * #
1220
+ * $public_container->make_private();
1221
+ * </code>
1222
+ *
1223
+ * @returns boolean True if successful
1224
+ * @throws CDNNotEnabledException CDN functionality not returned during auth
1225
+ * @throws AuthenticationException if auth token is not valid/expired
1226
+ * @throws InvalidResponseException unexpected response
1227
+ */
1228
+ function make_private()
1229
+ {
1230
+ if ($this->cfs_http->getCDNMUrl() == NULL) {
1231
+ throw new CDNNotEnabledException(
1232
+ "Authentication response did not indicate CDN availability");
1233
+ }
1234
+ list($status,$reason) = $this->cfs_http->remove_cdn_container($this->name);
1235
+ #if ($status == 401 && $this->_re_auth()) {
1236
+ # return $this->make_private();
1237
+ #}
1238
+ if (!in_array($status, array(202,404))) {
1239
+ throw new InvalidResponseException(
1240
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1241
+ }
1242
+ $this->cdn_enabled = False;
1243
+ $this->cdn_ttl = NULL;
1244
+ $this->cdn_uri = NULL;
1245
+ $this->cdn_log_retention = NULL;
1246
+ $this->cdn_acl_user_agent = NULL;
1247
+ $this->cdn_acl_referrer = NULL;
1248
+ return True;
1249
+ }
1250
+
1251
+ /**
1252
+ * Check if this Container is being publicly served via CDN
1253
+ *
1254
+ * Use this method to determine if the Container's content is currently
1255
+ * available through the CDN.
1256
+ *
1257
+ * Example:
1258
+ * <code>
1259
+ * # ... authentication code excluded (see previous examples) ...
1260
+ * #
1261
+ * $conn = new CF_Authentication($auth);
1262
+ *
1263
+ * $public_container = $conn->get_container("public");
1264
+ *
1265
+ * # Display CDN accessability
1266
+ * #
1267
+ * $public_container->is_public() ? print "Yes" : print "No";
1268
+ * </code>
1269
+ *
1270
+ * @returns boolean True if enabled, False otherwise
1271
+ */
1272
+ function is_public()
1273
+ {
1274
+ return $this->cdn_enabled == True ? True : False;
1275
+ }
1276
+
1277
+ /**
1278
+ * Create a new remote storage Object
1279
+ *
1280
+ * Return a new Object instance. If the remote storage Object exists,
1281
+ * the instance's attributes are populated.
1282
+ *
1283
+ * Example:
1284
+ * <code>
1285
+ * # ... authentication code excluded (see previous examples) ...
1286
+ * #
1287
+ * $conn = new CF_Authentication($auth);
1288
+ *
1289
+ * $public_container = $conn->get_container("public");
1290
+ *
1291
+ * # This creates a local instance of a storage object but only creates
1292
+ * # it in the storage system when the object's write() method is called.
1293
+ * #
1294
+ * $pic = $public_container->create_object("baby.jpg");
1295
+ * </code>
1296
+ *
1297
+ * @param string $obj_name name of storage Object
1298
+ * @return obj CF_Object instance
1299
+ */
1300
+ function create_object($obj_name=NULL)
1301
+ {
1302
+ return new CF_Object($this, $obj_name);
1303
+ }
1304
+
1305
+ /**
1306
+ * Return an Object instance for the remote storage Object
1307
+ *
1308
+ * Given a name, return a Object instance representing the
1309
+ * remote storage object.
1310
+ *
1311
+ * Example:
1312
+ * <code>
1313
+ * # ... authentication code excluded (see previous examples) ...
1314
+ * #
1315
+ * $conn = new CF_Authentication($auth);
1316
+ *
1317
+ * $public_container = $conn->get_container("public");
1318
+ *
1319
+ * # This call only fetches header information and not the content of
1320
+ * # the storage object. Use the Object's read() or stream() methods
1321
+ * # to obtain the object's data.
1322
+ * #
1323
+ * $pic = $public_container->get_object("baby.jpg");
1324
+ * </code>
1325
+ *
1326
+ * @param string $obj_name name of storage Object
1327
+ * @return obj CF_Object instance
1328
+ */
1329
+ function get_object($obj_name=NULL)
1330
+ {
1331
+ return new CF_Object($this, $obj_name, True);
1332
+ }
1333
+
1334
+ /**
1335
+ * Return a list of Objects
1336
+ *
1337
+ * Return an array of strings listing the Object names in this Container.
1338
+ *
1339
+ * Example:
1340
+ * <code>
1341
+ * # ... authentication code excluded (see previous examples) ...
1342
+ * #
1343
+ * $images = $conn->get_container("my photos");
1344
+ *
1345
+ * # Grab the list of all storage objects
1346
+ * #
1347
+ * $all_objects = $images->list_objects();
1348
+ *
1349
+ * # Grab subsets of all storage objects
1350
+ * #
1351
+ * $first_ten = $images->list_objects(10);
1352
+ *
1353
+ * # Note the use of the previous result's last object name being
1354
+ * # used as the 'marker' parameter to fetch the next 10 objects
1355
+ * #
1356
+ * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1357
+ *
1358
+ * # Grab images starting with "birthday_party" and default limit/marker
1359
+ * # to match all photos with that prefix
1360
+ * #
1361
+ * $prefixed = $images->list_objects(0, NULL, "birthday");
1362
+ *
1363
+ * # Assuming you have created the appropriate directory marker Objects,
1364
+ * # you can traverse your pseudo-hierarchical containers
1365
+ * # with the "path" argument.
1366
+ * #
1367
+ * $animals = $images->list_objects(0,NULL,NULL,"pictures/animals");
1368
+ * $dogs = $images->list_objects(0,NULL,NULL,"pictures/animals/dogs");
1369
+ * </code>
1370
+ *
1371
+ * @param int $limit <i>optional</i> only return $limit names
1372
+ * @param int $marker <i>optional</i> subset of names starting at $marker
1373
+ * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1374
+ * @param string $path <i>optional</i> only return results under "pathname"
1375
+ * @return array array of strings
1376
+ * @throws InvalidResponseException unexpected response
1377
+ */
1378
+ function list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1379
+ {
1380
+ list($status, $reason, $obj_list) =
1381
+ $this->cfs_http->list_objects($this->name, $limit,
1382
+ $marker, $prefix, $path);
1383
+ #if ($status == 401 && $this->_re_auth()) {
1384
+ # return $this->list_objects($limit, $marker, $prefix, $path);
1385
+ #}
1386
+ if ($status < 200 || $status > 299) {
1387
+ throw new InvalidResponseException(
1388
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1389
+ }
1390
+ return $obj_list;
1391
+ }
1392
+
1393
+ /**
1394
+ * Return an array of Objects
1395
+ *
1396
+ * Return an array of Object instances in this Container.
1397
+ *
1398
+ * Example:
1399
+ * <code>
1400
+ * # ... authentication code excluded (see previous examples) ...
1401
+ * #
1402
+ * $images = $conn->get_container("my photos");
1403
+ *
1404
+ * # Grab the list of all storage objects
1405
+ * #
1406
+ * $all_objects = $images->get_objects();
1407
+ *
1408
+ * # Grab subsets of all storage objects
1409
+ * #
1410
+ * $first_ten = $images->get_objects(10);
1411
+ *
1412
+ * # Note the use of the previous result's last object name being
1413
+ * # used as the 'marker' parameter to fetch the next 10 objects
1414
+ * #
1415
+ * $next_ten = $images->list_objects(10, $first_ten[count($first_ten)-1]);
1416
+ *
1417
+ * # Grab images starting with "birthday_party" and default limit/marker
1418
+ * # to match all photos with that prefix
1419
+ * #
1420
+ * $prefixed = $images->get_objects(0, NULL, "birthday");
1421
+ *
1422
+ * # Assuming you have created the appropriate directory marker Objects,
1423
+ * # you can traverse your pseudo-hierarchical containers
1424
+ * # with the "path" argument.
1425
+ * #
1426
+ * $animals = $images->get_objects(0,NULL,NULL,"pictures/animals");
1427
+ * $dogs = $images->get_objects(0,NULL,NULL,"pictures/animals/dogs");
1428
+ * </code>
1429
+ *
1430
+ * @param int $limit <i>optional</i> only return $limit names
1431
+ * @param int $marker <i>optional</i> subset of names starting at $marker
1432
+ * @param string $prefix <i>optional</i> Objects whose names begin with $prefix
1433
+ * @param string $path <i>optional</i> only return results under "pathname"
1434
+ * @return array array of strings
1435
+ * @throws InvalidResponseException unexpected response
1436
+ */
1437
+ function get_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
1438
+ {
1439
+ list($status, $reason, $obj_array) =
1440
+ $this->cfs_http->get_objects($this->name, $limit,
1441
+ $marker, $prefix, $path);
1442
+ #if ($status == 401 && $this->_re_auth()) {
1443
+ # return $this->get_objects($limit, $marker, $prefix, $path);
1444
+ #}
1445
+ if ($status < 200 || $status > 299) {
1446
+ throw new InvalidResponseException(
1447
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1448
+ }
1449
+ $objects = array();
1450
+ foreach ($obj_array as $obj) {
1451
+ $tmp = new CF_Object($this, $obj["name"], False, False);
1452
+ $tmp->content_type = $obj["content_type"];
1453
+ $tmp->content_length = (float) $obj["bytes"];
1454
+ $tmp->set_etag($obj["hash"]);
1455
+ $tmp->last_modified = $obj["last_modified"];
1456
+ $objects[] = $tmp;
1457
+ }
1458
+ return $objects;
1459
+ }
1460
+
1461
+ /**
1462
+ * Delete a remote storage Object
1463
+ *
1464
+ * Given an Object instance or name, permanently remove the remote Object
1465
+ * and all associated metadata.
1466
+ *
1467
+ * Example:
1468
+ * <code>
1469
+ * # ... authentication code excluded (see previous examples) ...
1470
+ * #
1471
+ * $conn = new CF_Authentication($auth);
1472
+ *
1473
+ * $images = $conn->get_container("my photos");
1474
+ *
1475
+ * # Delete specific object
1476
+ * #
1477
+ * $images->delete_object("disco_dancing.jpg");
1478
+ * </code>
1479
+ *
1480
+ * @param obj $obj name or instance of Object to delete
1481
+ * @return boolean <kbd>True</kbd> if successfully removed
1482
+ * @throws SyntaxException invalid Object name
1483
+ * @throws NoSuchObjectException remote Object does not exist
1484
+ * @throws InvalidResponseException unexpected response
1485
+ */
1486
+ function delete_object($obj)
1487
+ {
1488
+ $obj_name = NULL;
1489
+ if (is_object($obj)) {
1490
+ if (get_class($obj) == "CF_Object") {
1491
+ $obj_name = $obj->name;
1492
+ }
1493
+ }
1494
+ if (is_string($obj)) {
1495
+ $obj_name = $obj;
1496
+ }
1497
+ if (!$obj_name) {
1498
+ throw new SyntaxException("Object name not set.");
1499
+ }
1500
+ $status = $this->cfs_http->delete_object($this->name, $obj_name);
1501
+ #if ($status == 401 && $this->_re_auth()) {
1502
+ # return $this->delete_object($obj);
1503
+ #}
1504
+ if ($status == 404) {
1505
+ $m = "Specified object '".$this->name."/".$obj_name;
1506
+ $m.= "' did not exist to delete.";
1507
+ throw new NoSuchObjectException($m);
1508
+ }
1509
+ if ($status != 204) {
1510
+ throw new InvalidResponseException(
1511
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1512
+ }
1513
+ return True;
1514
+ }
1515
+
1516
+ /**
1517
+ * Helper function to create "path" elements for a given Object name
1518
+ *
1519
+ * Given an Object whos name contains '/' path separators, this function
1520
+ * will create the "directory marker" Objects of one byte with the
1521
+ * Content-Type of "application/folder".
1522
+ *
1523
+ * It assumes the last element of the full path is the "real" Object
1524
+ * and does NOT create a remote storage Object for that last element.
1525
+ */
1526
+ function create_paths($path_name)
1527
+ {
1528
+ if ($path_name[0] == '/') {
1529
+ $path_name = mb_substr($path_name, 0, 1);
1530
+ }
1531
+ $elements = explode('/', $path_name, -1);
1532
+ $build_path = "";
1533
+ foreach ($elements as $idx => $val) {
1534
+ if (!$build_path) {
1535
+ $build_path = $val;
1536
+ } else {
1537
+ $build_path .= "/" . $val;
1538
+ }
1539
+ $obj = new CF_Object($this, $build_path);
1540
+ $obj->content_type = "application/directory";
1541
+ $obj->write(".", 1);
1542
+ }
1543
+ }
1544
+
1545
+ /**
1546
+ * Internal method to grab CDN/Container info if appropriate to do so
1547
+ *
1548
+ * @throws InvalidResponseException unexpected response
1549
+ */
1550
+ private function _cdn_initialize()
1551
+ {
1552
+ list($status, $reason, $cdn_enabled, $cdn_uri, $cdn_ttl,
1553
+ $cdn_log_retention, $cdn_acl_user_agent, $cdn_acl_referrer) =
1554
+ $this->cfs_http->head_cdn_container($this->name);
1555
+ #if ($status == 401 && $this->_re_auth()) {
1556
+ # return $this->_cdn_initialize();
1557
+ #}
1558
+ if (!in_array($status, array(204,404))) {
1559
+ throw new InvalidResponseException(
1560
+ "Invalid response (".$status."): ".$this->cfs_http->get_error());
1561
+ }
1562
+ $this->cdn_enabled = $cdn_enabled;
1563
+ $this->cdn_uri = $cdn_uri;
1564
+ $this->cdn_ttl = $cdn_ttl;
1565
+ $this->cdn_log_retention = $cdn_log_retention;
1566
+ $this->cdn_acl_user_agent = $cdn_acl_user_agent;
1567
+ $this->cdn_acl_referrer = $cdn_acl_referrer;
1568
+ }
1569
+
1570
+ #private function _re_auth()
1571
+ #{
1572
+ # $new_auth = new CF_Authentication(
1573
+ # $this->cfs_auth->username,
1574
+ # $this->cfs_auth->api_key,
1575
+ # $this->cfs_auth->auth_host,
1576
+ # $this->cfs_auth->account);
1577
+ # $new_auth->authenticate();
1578
+ # $this->cfs_auth = $new_auth;
1579
+ # $this->cfs_http->setCFAuth($this->cfs_auth);
1580
+ # return True;
1581
+ #}
1582
+ }
1583
+
1584
+
1585
+ /**
1586
+ * Object operations
1587
+ *
1588
+ * An Object is analogous to a file on a conventional filesystem. You can
1589
+ * read data from, or write data to your Objects. You can also associate
1590
+ * arbitrary metadata with them.
1591
+ *
1592
+ * @package php-cloudfiles
1593
+ */
1594
+ class CF_Object
1595
+ {
1596
+ public $container;
1597
+ public $name;
1598
+ public $last_modified;
1599
+ public $content_type;
1600
+ public $content_length;
1601
+ public $metadata;
1602
+ private $etag;
1603
+
1604
+ /**
1605
+ * Class constructor
1606
+ *
1607
+ * @param obj $container CF_Container instance
1608
+ * @param string $name name of Object
1609
+ * @param boolean $force_exists if set, throw an error if Object doesn't exist
1610
+ */
1611
+ function __construct(&$container, $name, $force_exists=False, $dohead=True)
1612
+ {
1613
+ if ($name[0] == "/") {
1614
+ $r = "Object name '".$name;
1615
+ $r .= "' cannot contain begin with a '/' character.";
1616
+ throw new SyntaxException($r);
1617
+ }
1618
+ if (strlen($name) > MAX_OBJECT_NAME_LEN) {
1619
+ throw new SyntaxException("Object name exceeds "
1620
+ . "maximum allowed length.");
1621
+ }
1622
+ $this->container = $container;
1623
+ $this->name = $name;
1624
+ $this->etag = NULL;
1625
+ $this->_etag_override = False;
1626
+ $this->last_modified = NULL;
1627
+ $this->content_type = NULL;
1628
+ $this->content_length = 0;
1629
+ $this->metadata = array();
1630
+ if ($dohead) {
1631
+ if (!$this->_initialize() && $force_exists) {
1632
+ throw new NoSuchObjectException("No such object '".$name."'");
1633
+ }
1634
+ }
1635
+ }
1636
+
1637
+ /**
1638
+ * String representation of Object
1639
+ *
1640
+ * Pretty print the Object's location and name
1641
+ *
1642
+ * @return string Object information
1643
+ */
1644
+ function __toString()
1645
+ {
1646
+ return $this->container->name . "/" . $this->name;
1647
+ }
1648
+
1649
+ /**
1650
+ * Internal check to get the proper mimetype.
1651
+ *
1652
+ * This function would go over the available PHP methods to get
1653
+ * the MIME type.
1654
+ *
1655
+ * By default it will try to use the PHP fileinfo library which is
1656
+ * available from PHP 5.3 or as an PECL extension
1657
+ * (http://pecl.php.net/package/Fileinfo).
1658
+ *
1659
+ * It will get the magic file by default from the system wide file
1660
+ * which is usually available in /usr/share/magic on Unix or try
1661
+ * to use the file specified in the source directory of the API
1662
+ * (share directory).
1663
+ *
1664
+ * if fileinfo is not available it will try to use the internal
1665
+ * mime_content_type function.
1666
+ *
1667
+ * @param string $handle name of file or buffer to guess the type from
1668
+ * @return boolean <kbd>True</kbd> if successful
1669
+ * @throws BadContentTypeException
1670
+ */
1671
+ function _guess_content_type($handle) {
1672
+ if ($this->content_type)
1673
+ return;
1674
+
1675
+ require_once W3TC_INC_DIR . '/functions/mime.php';
1676
+
1677
+ $this->content_type = w3_get_mime_type($handle);
1678
+
1679
+ if (!$this->content_type) {
1680
+ throw new BadContentTypeException("Required Content-Type not set");
1681
+ }
1682
+
1683
+ return True;
1684
+ }
1685
+
1686
+ /**
1687
+ * String representation of the Object's public URI
1688
+ *
1689
+ * A string representing the Object's public URI assuming that it's
1690
+ * parent Container is CDN-enabled.
1691
+ *
1692
+ * Example:
1693
+ * <code>
1694
+ * # ... authentication/connection/container code excluded
1695
+ * # ... see previous examples
1696
+ *
1697
+ * # Print out the Object's CDN URI (if it has one) in an HTML img-tag
1698
+ * #
1699
+ * print "<img src='$pic->public_uri()' />\n";
1700
+ * </code>
1701
+ *
1702
+ * @return string Object's public URI or NULL
1703
+ */
1704
+ function public_uri()
1705
+ {
1706
+ if ($this->container->cdn_enabled) {
1707
+ return $this->container->cdn_uri . "/" . $this->name;
1708
+ }
1709
+ return NULL;
1710
+ }
1711
+
1712
+ /**
1713
+ * Read the remote Object's data
1714
+ *
1715
+ * Returns the Object's data. This is useful for smaller Objects such
1716
+ * as images or office documents. Object's with larger content should use
1717
+ * the stream() method below.
1718
+ *
1719
+ * Pass in $hdrs array to set specific custom HTTP headers such as
1720
+ * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1721
+ *
1722
+ * Example:
1723
+ * <code>
1724
+ * # ... authentication/connection/container code excluded
1725
+ * # ... see previous examples
1726
+ *
1727
+ * $my_docs = $conn->get_container("documents");
1728
+ * $doc = $my_docs->get_object("README");
1729
+ * $data = $doc->read(); # read image content into a string variable
1730
+ * print $data;
1731
+ *
1732
+ * # Or see stream() below for a different example.
1733
+ * #
1734
+ * </code>
1735
+ *
1736
+ * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1737
+ * @return string Object's data
1738
+ * @throws InvalidResponseException unexpected response
1739
+ */
1740
+ function read($hdrs=array())
1741
+ {
1742
+ list($status, $reason, $data) =
1743
+ $this->container->cfs_http->get_object_to_string($this, $hdrs);
1744
+ #if ($status == 401 && $this->_re_auth()) {
1745
+ # return $this->read($hdrs);
1746
+ #}
1747
+ if (($status < 200) || ($status > 299
1748
+ && $status != 412 && $status != 304)) {
1749
+ throw new InvalidResponseException("Invalid response (".$status."): "
1750
+ . $this->container->cfs_http->get_error());
1751
+ }
1752
+ return $data;
1753
+ }
1754
+
1755
+ /**
1756
+ * Streaming read of Object's data
1757
+ *
1758
+ * Given an open PHP resource (see PHP's fopen() method), fetch the Object's
1759
+ * data and write it to the open resource handle. This is useful for
1760
+ * streaming an Object's content to the browser (videos, images) or for
1761
+ * fetching content to a local file.
1762
+ *
1763
+ * Pass in $hdrs array to set specific custom HTTP headers such as
1764
+ * If-Match, If-None-Match, If-Modified-Since, Range, etc.
1765
+ *
1766
+ * Example:
1767
+ * <code>
1768
+ * # ... authentication/connection/container code excluded
1769
+ * # ... see previous examples
1770
+ *
1771
+ * # Assuming this is a web script to display the README to the
1772
+ * # user's browser:
1773
+ * #
1774
+ * <?php
1775
+ * // grab README from storage system
1776
+ * //
1777
+ * $my_docs = $conn->get_container("documents");
1778
+ * $doc = $my_docs->get_object("README");
1779
+ *
1780
+ * // Hand it back to user's browser with appropriate content-type
1781
+ * //
1782
+ * header("Content-Type: " . $doc->content_type);
1783
+ * $output = fopen("php://output", "w");
1784
+ * $doc->stream($output); # stream object content to PHP's output buffer
1785
+ * fclose($output);
1786
+ * ?>
1787
+ *
1788
+ * # See read() above for a more simple example.
1789
+ * #
1790
+ * </code>
1791
+ *
1792
+ * @param resource $fp open resource for writing data to
1793
+ * @param array $hdrs user-defined headers (Range, If-Match, etc.)
1794
+ * @return string Object's data
1795
+ * @throws InvalidResponseException unexpected response
1796
+ */
1797
+ function stream(&$fp, $hdrs=array())
1798
+ {
1799
+ list($status, $reason) =
1800
+ $this->container->cfs_http->get_object_to_stream($this,$fp,$hdrs);
1801
+ #if ($status == 401 && $this->_re_auth()) {
1802
+ # return $this->stream($fp, $hdrs);
1803
+ #}
1804
+ if (($status < 200) || ($status > 299
1805
+ && $status != 412 && $status != 304)) {
1806
+ throw new InvalidResponseException("Invalid response (".$status."): "
1807
+ .$reason);
1808
+ }
1809
+ return True;
1810
+ }
1811
+
1812
+ /**
1813
+ * Store new Object metadata
1814
+ *
1815
+ * Write's an Object's metadata to the remote Object. This will overwrite
1816
+ * an prior Object metadata.
1817
+ *
1818
+ * Example:
1819
+ * <code>
1820
+ * # ... authentication/connection/container code excluded
1821
+ * # ... see previous examples
1822
+ *
1823
+ * $my_docs = $conn->get_container("documents");
1824
+ * $doc = $my_docs->get_object("README");
1825
+ *
1826
+ * # Define new metadata for the object
1827
+ * #
1828
+ * $doc->metadata = array(
1829
+ * "Author" => "EJ",
1830
+ * "Subject" => "How to use the PHP tests",
1831
+ * "Version" => "1.2.2"
1832
+ * );
1833
+ *
1834
+ * # Push the new metadata up to the storage system
1835
+ * #
1836
+ * $doc->sync_metadata();
1837
+ * </code>
1838
+ *
1839
+ * @return boolean <kbd>True</kbd> if successful, <kbd>False</kbd> otherwise
1840
+ * @throws InvalidResponseException unexpected response
1841
+ */
1842
+ function sync_metadata()
1843
+ {
1844
+ if (!empty($this->metadata)) {
1845
+ $status = $this->container->cfs_http->update_object($this);
1846
+ #if ($status == 401 && $this->_re_auth()) {
1847
+ # return $this->sync_metadata();
1848
+ #}
1849
+ if ($status != 202) {
1850
+ throw new InvalidResponseException("Invalid response ("
1851
+ .$status."): ".$this->container->cfs_http->get_error());
1852
+ }
1853
+ return True;
1854
+ }
1855
+ return False;
1856
+ }
1857
+
1858
+ /**
1859
+ * Upload Object's data to Cloud Files
1860
+ *
1861
+ * Write data to the remote Object. The $data argument can either be a
1862
+ * PHP resource open for reading (see PHP's fopen() method) or an in-memory
1863
+ * variable. If passing in a PHP resource, you must also include the $bytes
1864
+ * parameter.
1865
+ *
1866
+ * Example:
1867
+ * <code>
1868
+ * # ... authentication/connection/container code excluded
1869
+ * # ... see previous examples
1870
+ *
1871
+ * $my_docs = $conn->get_container("documents");
1872
+ * $doc = $my_docs->get_object("README");
1873
+ *
1874
+ * # Upload placeholder text in my README
1875
+ * #
1876
+ * $doc->write("This is just placeholder text for now...");
1877
+ * </code>
1878
+ *
1879
+ * @param string|resource $data string or open resource
1880
+ * @param float $bytes amount of data to upload (required for resources)
1881
+ * @param boolean $verify generate, send, and compare MD5 checksums
1882
+ * @return boolean <kbd>True</kbd> when data uploaded successfully
1883
+ * @throws SyntaxException missing required parameters
1884
+ * @throws BadContentTypeException if no Content-Type was/could be set
1885
+ * @throws MisMatchedChecksumException $verify is set and checksums unequal
1886
+ * @throws InvalidResponseException unexpected response
1887
+ */
1888
+ function write($data=NULL, $bytes=0, $verify=True)
1889
+ {
1890
+ if (!$data) {
1891
+ throw new SyntaxException("Missing data source.");
1892
+ }
1893
+ if ($bytes > MAX_OBJECT_SIZE) {
1894
+ throw new SyntaxException("Bytes exceeds maximum object size.");
1895
+ }
1896
+ if ($verify) {
1897
+ if (!$this->_etag_override) {
1898
+ $this->etag = $this->compute_md5sum($data);
1899
+ }
1900
+ } else {
1901
+ $this->etag = NULL;
1902
+ }
1903
+
1904
+ $close_fh = False;
1905
+ if (!is_resource($data)) {
1906
+ # A hack to treat string data as a file handle. php://memory feels
1907
+ # like a better option, but it seems to break on Windows so use
1908
+ # a temporary file instead.
1909
+ #
1910
+ $fp = fopen("php://temp", "wb+");
1911
+ #$fp = fopen("php://memory", "wb+");
1912
+ fwrite($fp, $data, strlen($data));
1913
+ rewind($fp);
1914
+ $close_fh = True;
1915
+ $this->content_length = (float) strlen($data);
1916
+ if ($this->content_length > MAX_OBJECT_SIZE) {
1917
+ throw new SyntaxException("Data exceeds maximum object size");
1918
+ }
1919
+ $ct_data = substr($data, 0, 64);
1920
+ } else {
1921
+ $this->content_length = $bytes;
1922
+ $fp = $data;
1923
+ $ct_data = fread($data, 64);
1924
+ rewind($data);
1925
+ }
1926
+
1927
+ $this->_guess_content_type($ct_data);
1928
+
1929
+ list($status, $reason, $etag) =
1930
+ $this->container->cfs_http->put_object($this, $fp);
1931
+ #if ($status == 401 && $this->_re_auth()) {
1932
+ # return $this->write($data, $bytes, $verify);
1933
+ #}
1934
+ if ($status == 412) {
1935
+ if ($close_fh) { fclose($fp); }
1936
+ throw new SyntaxException("Missing Content-Type header");
1937
+ }
1938
+ if ($status == 422) {
1939
+ if ($close_fh) { fclose($fp); }
1940
+ throw new MisMatchedChecksumException(
1941
+ "Supplied and computed checksums do not match.");
1942
+ }
1943
+ if ($status != 201) {
1944
+ if ($close_fh) { fclose($fp); }
1945
+ throw new InvalidResponseException("Invalid response (".$status."): "
1946
+ . $this->container->cfs_http->get_error());
1947
+ }
1948
+ if (!$verify) {
1949
+ $this->etag = $etag;
1950
+ }
1951
+ if ($close_fh) { fclose($fp); }
1952
+ return True;
1953
+ }
1954
+
1955
+ /**
1956
+ * Upload Object data from local filename
1957
+ *
1958
+ * This is a convenience function to upload the data from a local file. A
1959
+ * True value for $verify will cause the method to compute the Object's MD5
1960
+ * checksum prior to uploading.
1961
+ *
1962
+ * Example:
1963
+ * <code>
1964
+ * # ... authentication/connection/container code excluded
1965
+ * # ... see previous examples
1966
+ *
1967
+ * $my_docs = $conn->get_container("documents");
1968
+ * $doc = $my_docs->get_object("README");
1969
+ *
1970
+ * # Upload my local README's content
1971
+ * #
1972
+ * $doc->load_from_filename("/home/ej/cloudfiles/readme");
1973
+ * </code>
1974
+ *
1975
+ * @param string $filename full path to local file
1976
+ * @param boolean $verify enable local/remote MD5 checksum validation
1977
+ * @return boolean <kbd>True</kbd> if data uploaded successfully
1978
+ * @throws SyntaxException missing required parameters
1979
+ * @throws BadContentTypeException if no Content-Type was/could be set
1980
+ * @throws MisMatchedChecksumException $verify is set and checksums unequal
1981
+ * @throws InvalidResponseException unexpected response
1982
+ * @throws IOException error opening file
1983
+ */
1984
+ function load_from_filename($filename, $verify=True)
1985
+ {
1986
+ $fp = @fopen($filename, "r");
1987
+ if (!$fp) {
1988
+ throw new IOException("Could not open file for reading: ".$filename);
1989
+ }
1990
+
1991
+ clearstatcache();
1992
+
1993
+ $size = (float) sprintf("%u", filesize($filename));
1994
+ if ($size > MAX_OBJECT_SIZE) {
1995
+ throw new SyntaxException("File size exceeds maximum object size.");
1996
+ }
1997
+
1998
+ $this->_guess_content_type($filename);
1999
+
2000
+ $this->write($fp, $size, $verify);
2001
+ fclose($fp);
2002
+ return True;
2003
+ }
2004
+
2005
+ /**
2006
+ * Save Object's data to local filename
2007
+ *
2008
+ * Given a local filename, the Object's data will be written to the newly
2009
+ * created file.
2010
+ *
2011
+ * Example:
2012
+ * <code>
2013
+ * # ... authentication/connection/container code excluded
2014
+ * # ... see previous examples
2015
+ *
2016
+ * # Whoops! I deleted my local README, let me download/save it
2017
+ * #
2018
+ * $my_docs = $conn->get_container("documents");
2019
+ * $doc = $my_docs->get_object("README");
2020
+ *
2021
+ * $doc->save_to_filename("/home/ej/cloudfiles/readme.restored");
2022
+ * </code>
2023
+ *
2024
+ * @param string $filename name of local file to write data to
2025
+ * @return boolean <kbd>True</kbd> if successful
2026
+ * @throws IOException error opening file
2027
+ * @throws InvalidResponseException unexpected response
2028
+ */
2029
+ function save_to_filename($filename)
2030
+ {
2031
+ $fp = @fopen($filename, "wb");
2032
+ if (!$fp) {
2033
+ throw new IOException("Could not open file for writing: ".$filename);
2034
+ }
2035
+ $result = $this->stream($fp);
2036
+ fclose($fp);
2037
+ return $result;
2038
+ }
2039
+
2040
+ /**
2041
+ * Set Object's MD5 checksum
2042
+ *
2043
+ * Manually set the Object's ETag. Including the ETag is mandatory for
2044
+ * Cloud Files to perform end-to-end verification. Omitting the ETag forces
2045
+ * the user to handle any data integrity checks.
2046
+ *
2047
+ * @param string $etag MD5 checksum hexidecimal string
2048
+ */
2049
+ function set_etag($etag)
2050
+ {
2051
+ $this->etag = $etag;
2052
+ $this->_etag_override = True;
2053
+ }
2054
+
2055
+ /**
2056
+ * Object's MD5 checksum
2057
+ *
2058
+ * Accessor method for reading Object's private ETag attribute.
2059
+ *
2060
+ * @return string MD5 checksum hexidecimal string
2061
+ */
2062
+ function getETag()
2063
+ {
2064
+ return $this->etag;
2065
+ }
2066
+
2067
+ /**
2068
+ * Compute the MD5 checksum
2069
+ *
2070
+ * Calculate the MD5 checksum on either a PHP resource or data. The argument
2071
+ * may either be a local filename, open resource for reading, or a string.
2072
+ *
2073
+ * <b>WARNING:</b> if you are uploading a big file over a stream
2074
+ * it could get very slow to compute the md5 you probably want to
2075
+ * set the $verify parameter to False in the write() method and
2076
+ * compute yourself the md5 before if you have it.
2077
+ *
2078
+ * @param filename|obj|string $data filename, open resource, or string
2079
+ * @return string MD5 checksum hexidecimal string
2080
+ */
2081
+ function compute_md5sum(&$data)
2082
+ {
2083
+
2084
+ if (function_exists("hash_init") && is_resource($data)) {
2085
+ $ctx = hash_init('md5');
2086
+ while (!feof($data)) {
2087
+ $buffer = fgets($data, 65536);
2088
+ hash_update($ctx, $buffer);
2089
+ }
2090
+ $md5 = hash_final($ctx, false);
2091
+ rewind($data);
2092
+ } elseif ((string)is_file($data)) {
2093
+ $md5 = md5_file($data);
2094
+ } else {
2095
+ $md5 = md5($data);
2096
+ }
2097
+ return $md5;
2098
+ }
2099
+
2100
+ /**
2101
+ * PRIVATE: fetch information about the remote Object if it exists
2102
+ */
2103
+ private function _initialize()
2104
+ {
2105
+ list($status, $reason, $etag, $last_modified, $content_type,
2106
+ $content_length, $metadata) =
2107
+ $this->container->cfs_http->head_object($this);
2108
+ #if ($status == 401 && $this->_re_auth()) {
2109
+ # return $this->_initialize();
2110
+ #}
2111
+ if ($status == 404) {
2112
+ return False;
2113
+ }
2114
+ if ($status < 200 || $status > 299) {
2115
+ throw new InvalidResponseException("Invalid response (".$status."): "
2116
+ . $this->container->cfs_http->get_error());
2117
+ }
2118
+ $this->etag = $etag;
2119
+ $this->last_modified = $last_modified;
2120
+ $this->content_type = $content_type;
2121
+ $this->content_length = $content_length;
2122
+ $this->metadata = $metadata;
2123
+ return True;
2124
+ }
2125
+
2126
+ #private function _re_auth()
2127
+ #{
2128
+ # $new_auth = new CF_Authentication(
2129
+ # $this->cfs_auth->username,
2130
+ # $this->cfs_auth->api_key,
2131
+ # $this->cfs_auth->auth_host,
2132
+ # $this->cfs_auth->account);
2133
+ # $new_auth->authenticate();
2134
+ # $this->container->cfs_auth = $new_auth;
2135
+ # $this->container->cfs_http->setCFAuth($this->cfs_auth);
2136
+ # return True;
2137
+ #}
2138
+ }
2139
+
2140
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
2141
+
2142
+ /*
2143
+ * Local variables:
2144
+ * tab-width: 4
2145
+ * c-basic-offset: 4
2146
+ * c-hanging-comment-ender-p: nil
2147
+ * End:
2148
+ */
2149
+ ?>
lib/CF/cloudfiles_exceptions.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
- /**
3
- * Custom Exceptions for the CloudFiles API
4
- *
5
- * Requres PHP 5.x (for Exceptions and OO syntax)
6
- *
7
- * See COPYING for license information.
8
- *
9
- * @author Eric "EJ" Johnson <ej@racklabs.com>
10
- * @copyright Copyright (c) 2008, Rackspace US, Inc.
11
- * @package php-cloudfiles-exceptions
12
- */
13
-
14
- /**
15
- * Custom Exceptions for the CloudFiles API
16
- * @package php-cloudfiles-exceptions
17
- */
18
- class SyntaxException extends Exception { }
19
- class AuthenticationException extends Exception { }
20
- class InvalidResponseException extends Exception { }
21
- class NonEmptyContainerException extends Exception { }
22
- class NoSuchObjectException extends Exception { }
23
- class NoSuchContainerException extends Exception { }
24
- class NoSuchAccountException extends Exception { }
25
- class MisMatchedChecksumException extends Exception { }
26
- class IOException extends Exception { }
27
- class CDNNotEnabledException extends Exception { }
28
- class BadContentTypeException extends Exception { }
29
- class InvalidUTF8Exception extends Exception { }
30
- class ConnectionNotOpenException extends Exception { }
31
-
32
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
33
-
34
- /*
35
- * Local variables:
36
- * tab-width: 4
37
- * c-basic-offset: 4
38
- * c-hanging-comment-ender-p: nil
39
- * End:
40
- */
41
- ?>
1
+ <?php
2
+ /**
3
+ * Custom Exceptions for the CloudFiles API
4
+ *
5
+ * Requres PHP 5.x (for Exceptions and OO syntax)
6
+ *
7
+ * See COPYING for license information.
8
+ *
9
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
10
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
11
+ * @package php-cloudfiles-exceptions
12
+ */
13
+
14
+ /**
15
+ * Custom Exceptions for the CloudFiles API
16
+ * @package php-cloudfiles-exceptions
17
+ */
18
+ class SyntaxException extends Exception { }
19
+ class AuthenticationException extends Exception { }
20
+ class InvalidResponseException extends Exception { }
21
+ class NonEmptyContainerException extends Exception { }
22
+ class NoSuchObjectException extends Exception { }
23
+ class NoSuchContainerException extends Exception { }
24
+ class NoSuchAccountException extends Exception { }
25
+ class MisMatchedChecksumException extends Exception { }
26
+ class IOException extends Exception { }
27
+ class CDNNotEnabledException extends Exception { }
28
+ class BadContentTypeException extends Exception { }
29
+ class InvalidUTF8Exception extends Exception { }
30
+ class ConnectionNotOpenException extends Exception { }
31
+
32
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
33
+
34
+ /*
35
+ * Local variables:
36
+ * tab-width: 4
37
+ * c-basic-offset: 4
38
+ * c-hanging-comment-ender-p: nil
39
+ * End:
40
+ */
41
+ ?>
lib/CF/cloudfiles_http.php CHANGED
@@ -1,1347 +1,1347 @@
1
- <?php
2
- /**
3
- * This is an HTTP client class for Cloud Files. It uses PHP's cURL module
4
- * to handle the actual HTTP request/response. This is NOT a generic HTTP
5
- * client class and is only used to abstract out the HTTP communication for
6
- * the PHP Cloud Files API.
7
- *
8
- * This module was designed to re-use existing HTTP(S) connections between
9
- * subsequent operations. For example, performing multiple PUT operations
10
- * will re-use the same connection.
11
- *
12
- * This modules also provides support for streaming content into and out
13
- * of Cloud Files. The majority (all?) of the PHP HTTP client modules expect
14
- * to read the server's response into a string variable. This will not work
15
- * with large files without killing your server. Methods like,
16
- * get_object_to_stream() and put_object() take an open filehandle
17
- * argument for streaming data out of or into Cloud Files.
18
- *
19
- * Requres PHP 5.x (for Exceptions and OO syntax)
20
- *
21
- * See COPYING for license information.
22
- *
23
- * @author Eric "EJ" Johnson <ej@racklabs.com>
24
- * @copyright Copyright (c) 2008, Rackspace US, Inc.
25
- * @package php-cloudfiles-http
26
- */
27
-
28
- /**
29
- */
30
- require_once("cloudfiles_exceptions.php");
31
-
32
- define("PHP_CF_VERSION", "1.7.6");
33
- define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION));
34
- define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count");
35
- define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used");
36
- define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count");
37
- define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used");
38
- define("METADATA_HEADER", "X-Object-Meta-");
39
- define("CDN_URI", "X-CDN-URI");
40
- define("CDN_ENABLED", "X-CDN-Enabled");
41
- define("CDN_LOG_RETENTION", "X-Log-Retention");
42
- define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL");
43
- define("CDN_ACL_REFERRER", "X-Referrer-ACL");
44
- define("CDN_TTL", "X-TTL");
45
- define("CDNM_URL", "X-CDN-Management-Url");
46
- define("STORAGE_URL", "X-Storage-Url");
47
- define("AUTH_TOKEN", "X-Auth-Token");
48
- define("AUTH_USER_HEADER", "X-Auth-User");
49
- define("AUTH_KEY_HEADER", "X-Auth-Key");
50
- define("AUTH_USER_HEADER_LEGACY", "X-Storage-User");
51
- define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass");
52
- define("AUTH_TOKEN_LEGACY", "X-Storage-Token");
53
-
54
- /**
55
- * HTTP/cURL wrapper for Cloud Files
56
- *
57
- * This class should not be used directly. It's only purpose is to abstract
58
- * out the HTTP communication from the main API.
59
- *
60
- * @package php-cloudfiles-http
61
- */
62
- class CF_Http
63
- {
64
- private $error_str;
65
- private $dbug;
66
- private $cabundle_path;
67
- private $api_version;
68
-
69
- # Authentication instance variables
70
- #
71
- private $storage_url;
72
- private $cdnm_url;
73
- private $auth_token;
74
-
75
- # Request/response variables
76
- #
77
- private $response_status;
78
- private $response_reason;
79
- private $connections;
80
-
81
- # Variables used for content/header callbacks
82
- #
83
- private $_user_read_progress_callback_func;
84
- private $_user_write_progress_callback_func;
85
- private $_write_callback_type;
86
- private $_text_list;
87
- private $_account_container_count;
88
- private $_account_bytes_used;
89
- private $_container_object_count;
90
- private $_container_bytes_used;
91
- private $_obj_etag;
92
- private $_obj_last_modified;
93
- private $_obj_content_type;
94
- private $_obj_content_length;
95
- private $_obj_metadata;
96
- private $_obj_write_resource;
97
- private $_obj_write_string;
98
- private $_cdn_enabled;
99
- private $_cdn_uri;
100
- private $_cdn_ttl;
101
- private $_cdn_log_retention;
102
- private $_cdn_acl_user_agent;
103
- private $_cdn_acl_referrer;
104
-
105
- function __construct($api_version)
106
- {
107
- $this->dbug = False;
108
- $this->cabundle_path = NULL;
109
- $this->api_version = $api_version;
110
- $this->error_str = NULL;
111
-
112
- $this->storage_url = NULL;
113
- $this->cdnm_url = NULL;
114
- $this->auth_token = NULL;
115
-
116
- $this->response_status = NULL;
117
- $this->response_reason = NULL;
118
-
119
- # Curl connections array - since there is no way to "re-set" the
120
- # connection paramaters for a cURL handle, we keep an array of
121
- # the unique use-cases and funnel all of those same type
122
- # requests through the appropriate curl connection.
123
- #
124
- $this->connections = array(
125
- "GET_CALL" => NULL, # GET objects/containers/lists
126
- "PUT_OBJ" => NULL, # PUT object
127
- "HEAD" => NULL, # HEAD requests
128
- "PUT_CONT" => NULL, # PUT container
129
- "DEL_POST" => NULL, # DELETE containers/objects, POST objects
130
- );
131
-
132
- $this->_user_read_progress_callback_func = NULL;
133
- $this->_user_write_progress_callback_func = NULL;
134
- $this->_write_callback_type = NULL;
135
- $this->_text_list = array();
136
- $this->_return_list = NULL;
137
- $this->_account_container_count = 0;
138
- $this->_account_bytes_used = 0;
139
- $this->_container_object_count = 0;
140
- $this->_container_bytes_used = 0;
141
- $this->_obj_write_resource = NULL;
142
- $this->_obj_write_string = "";
143
- $this->_obj_etag = NULL;
144
- $this->_obj_last_modified = NULL;
145
- $this->_obj_content_type = NULL;
146
- $this->_obj_content_length = NULL;
147
- $this->_obj_metadata = array();
148
- $this->_cdn_enabled = NULL;
149
- $this->_cdn_uri = NULL;
150
- $this->_cdn_ttl = NULL;
151
- $this->_cdn_log_retention = NULL;
152
- $this->_cdn_acl_user_agent = NULL;
153
- $this->_cdn_acl_referrer = NULL;
154
-
155
- # The OS list with a PHP without an updated CA File for CURL to
156
- # connect to SSL Websites. It is the first 3 letters of the PHP_OS
157
- # variable.
158
- $OS_CAFILE_NONUPDATED=array(
159
- "win","dar"
160
- );
161
-
162
- if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED))
163
- $this->ssl_use_cabundle();
164
-
165
- }
166
-
167
- function ssl_use_cabundle($path=NULL)
168
- {
169
- if ($path) {
170
- $this->cabundle_path = $path;
171
- } else {
172
- $this->cabundle_path = dirname(__FILE__) . "/cacert.pem";
173
- }
174
- if (!file_exists($this->cabundle_path)) {
175
- throw new IOException("Could not use CA bundle: "
176
- . $this->cabundle_path);
177
- }
178
- return;
179
- }
180
-
181
- # Uses separate cURL connection to authenticate
182
- #
183
- function authenticate($user, $pass, $acct=NULL, $host=NULL)
184
- {
185
- $path = array();
186
- if (isset($acct)){
187
- $headers = array(
188
- sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user),
189
- sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass),
190
- );
191
- $path[] = $host;
192
- $path[] = rawurlencode(sprintf("v%d",$this->api_version));
193
- $path[] = rawurlencode($acct);
194
- } else {
195
- $headers = array(
196
- sprintf("%s: %s", AUTH_USER_HEADER, $user),
197
- sprintf("%s: %s", AUTH_KEY_HEADER, $pass),
198
- );
199
- $path[] = $host;
200
- }
201
- $path[] = "v1.0";
202
- $url = implode("/", $path);
203
-
204
- $curl_ch = curl_init();
205
- if (!is_null($this->cabundle_path)) {
206
- curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True);
207
- curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path);
208
- }
209
- curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug);
210
- @curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1);
211
- curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4);
212
- curl_setopt($curl_ch, CURLOPT_HEADER, 0);
213
- curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers);
214
- curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT);
215
- curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE);
216
- curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb'));
217
- curl_setopt($curl_ch, CURLOPT_CONNECTTIMEOUT, 10);
218
- curl_setopt($curl_ch, CURLOPT_URL, $url);
219
- curl_exec($curl_ch);
220
- curl_close($curl_ch);
221
-
222
- return array($this->response_status, $this->response_reason,
223
- $this->storage_url, $this->cdnm_url, $this->auth_token);
224
- }
225
-
226
- # (CDN) GET /v1/Account
227
- #
228
- function list_cdn_containers($enabled_only)
229
- {
230
- $conn_type = "GET_CALL";
231
- $url_path = $this->_make_path("CDN");
232
-
233
- $this->_write_callback_type = "TEXT_LIST";
234
- if ($enabled_only)
235
- {
236
- $return_code = $this->_send_request($conn_type, $url_path .
237
- '/?enabled_only=true');
238
- }
239
- else
240
- {
241
- $return_code = $this->_send_request($conn_type, $url_path);
242
- }
243
- if (!$return_code) {
244
- $this->error_str .= ": Failed to obtain valid HTTP response.";
245
- array(0,$this->error_str,array());
246
- }
247
- if ($return_code == 401) {
248
- return array($return_code,"Unauthorized",array());
249
- }
250
- if ($return_code == 404) {
251
- return array($return_code,"Account not found.",array());
252
- }
253
- if ($return_code == 204) {
254
- return array($return_code,"Account has no CDN enabled Containers.",
255
- array());
256
- }
257
- if ($return_code == 200) {
258
- $this->create_array();
259
- return array($return_code,$this->response_reason,$this->_text_list);
260
- }
261
- $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
262
- return array($return_code,$this->error_str,array());
263
- }
264
-
265
- # (CDN) POST /v1/Account/Container
266
- #
267
- function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False,
268
- $cdn_acl_user_agent="", $cdn_acl_referrer)
269
- {
270
- if ($container_name == "")
271
- throw new SyntaxException("Container name not set.");
272
-
273
- if ($container_name != "0" and !isset($container_name))
274
- throw new SyntaxException("Container name not set.");
275
-
276
- $url_path = $this->_make_path("CDN", $container_name);
277
- $hdrs = array(
278
- CDN_ENABLED => "True",
279
- CDN_TTL => $ttl,
280
- CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False",
281
- CDN_ACL_USER_AGENT => $cdn_acl_user_agent,
282
- CDN_ACL_REFERRER => $cdn_acl_referrer,
283
- );
284
- $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
285
- if ($return_code == 401) {
286
- $this->error_str = "Unauthorized";
287
- return array($return_code, $this->error_str, NULL);
288
- }
289
- if ($return_code == 404) {
290
- $this->error_str = "Container not found.";
291
- return array($return_code, $this->error_str, NULL);
292
- }
293
- if ($return_code != 202) {
294
- $this->error_str="Unexpected HTTP response: ".$this->response_reason;
295
- return array($return_code, $this->error_str, NULL);
296
- }
297
- return array($return_code, "Accepted", $this->_cdn_uri);
298
-
299
- }
300
-
301
- # (CDN) PUT /v1/Account/Container
302
- #
303
- function add_cdn_container($container_name, $ttl=86400)
304
- {
305
- if ($container_name == "")
306
- throw new SyntaxException("Container name not set.");
307
-
308
- if ($container_name != "0" and !isset($container_name))
309
- throw new SyntaxException("Container name not set.");
310
-
311
- $url_path = $this->_make_path("CDN", $container_name);
312
- $hdrs = array(
313
- CDN_ENABLED => "True",
314
- CDN_TTL => $ttl,
315
- );
316
- $return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs);
317
- if ($return_code == 401) {
318
- $this->error_str = "Unauthorized";
319
- return array($return_code,$this->response_reason,False);
320
- }
321
- if (!in_array($return_code, array(201,202))) {
322
- $this->error_str="Unexpected HTTP response: ".$this->response_reason;
323
- return array($return_code,$this->response_reason,False);
324
- }
325
- return array($return_code,$this->response_reason,$this->_cdn_uri);
326
- }
327
-
328
- # (CDN) POST /v1/Account/Container
329
- #
330
- function remove_cdn_container($container_name)
331
- {
332
- if ($container_name == "")
333
- throw new SyntaxException("Container name not set.");
334
-
335
- if ($container_name != "0" and !isset($container_name))
336
- throw new SyntaxException("Container name not set.");
337
-
338
- $url_path = $this->_make_path("CDN", $container_name);
339
- $hdrs = array(CDN_ENABLED => "False");
340
- $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
341
- if ($return_code == 401) {
342
- $this->error_str = "Unauthorized";
343
- return array($return_code, $this->error_str);
344
- }
345
- if ($return_code == 404) {
346
- $this->error_str = "Container not found.";
347
- return array($return_code, $this->error_str);
348
- }
349
- if ($return_code != 202) {
350
- $this->error_str="Unexpected HTTP response: ".$this->response_reason;
351
- return array($return_code, $this->error_str);
352
- }
353
- return array($return_code, "Accepted");
354
- }
355
-
356
- # (CDN) HEAD /v1/Account
357
- #
358
- function head_cdn_container($container_name)
359
- {
360
- if ($container_name == "")
361
- throw new SyntaxException("Container name not set.");
362
-
363
- if ($container_name != "0" and !isset($container_name))
364
- throw new SyntaxException("Container name not set.");
365
-
366
- $conn_type = "HEAD";
367
- $url_path = $this->_make_path("CDN", $container_name);
368
- $return_code = $this->_send_request($conn_type, $url_path);
369
-
370
- if (!$return_code) {
371
- $this->error_str .= ": Failed to obtain valid HTTP response.";
372
- return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL);
373
- }
374
- if ($return_code == 401) {
375
- return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL);
376
- }
377
- if ($return_code == 404) {
378
- return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL);
379
- }
380
- if ($return_code == 204) {
381
- return array($return_code,$this->response_reason,
382
- $this->_cdn_enabled, $this->_cdn_uri, $this->_cdn_ttl,
383
- $this->_cdn_log_retention,
384
- $this->_cdn_acl_user_agent,
385
- $this->_cdn_acl_referrer
386
- );
387
- }
388
- return array($return_code,$this->response_reason,
389
- NULL,NULL,NULL,
390
- $this->_cdn_log_retention,
391
- $this->_cdn_acl_user_agent,
392
- $this->_cdn_acl_referrer
393
- );
394
- }
395
-
396
- # GET /v1/Account
397
- #
398
- function list_containers($limit=0, $marker=NULL)
399
- {
400
- $conn_type = "GET_CALL";
401
- $url_path = $this->_make_path();
402
-
403
- $limit = intval($limit);
404
- $params = array();
405
- if ($limit > 0) {
406
- $params[] = "limit=$limit";
407
- }
408
- if ($marker) {
409
- $params[] = "marker=".rawurlencode($marker);
410
- }
411
- if (!empty($params)) {
412
- $url_path .= "?" . implode("&", $params);
413
- }
414
-
415
- $this->_write_callback_type = "TEXT_LIST";
416
- $return_code = $this->_send_request($conn_type, $url_path);
417
-
418
- if (!$return_code) {
419
- $this->error_str .= ": Failed to obtain valid HTTP response.";
420
- return array(0,$this->error_str,array());
421
- }
422
- if ($return_code == 204) {
423
- return array($return_code, "Account has no containers.", array());
424
- }
425
- if ($return_code == 404) {
426
- $this->error_str = "Invalid account name for authentication token.";
427
- return array($return_code,$this->error_str,array());
428
- }
429
- if ($return_code == 200) {
430
- $this->create_array();
431
- return array($return_code, $this->response_reason, $this->_text_list);
432
- }
433
- $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
434
- return array($return_code,$this->error_str,array());
435
- }
436
-
437
- # GET /v1/Account?format=json
438
- #
439
- function list_containers_info($limit=0, $marker=NULL)
440
- {
441
- $conn_type = "GET_CALL";
442
- $url_path = $this->_make_path() . "?format=json";
443
-
444
- $limit = intval($limit);
445
- $params = array();
446
- if ($limit > 0) {
447
- $params[] = "limit=$limit";
448
- }
449
- if ($marker) {
450
- $params[] = "marker=".rawurlencode($marker);
451
- }
452
- if (!empty($params)) {
453
- $url_path .= "&" . implode("&", $params);
454
- }
455
-
456
- $this->_write_callback_type = "OBJECT_STRING";
457
- $return_code = $this->_send_request($conn_type, $url_path);
458
-
459
- if (!$return_code) {
460
- $this->error_str .= ": Failed to obtain valid HTTP response.";
461
- return array(0,$this->error_str,array());
462
- }
463
- if ($return_code == 204) {
464
- return array($return_code, "Account has no containers.", array());
465
- }
466
- if ($return_code == 404) {
467
- $this->error_str = "Invalid account name for authentication token.";
468
- return array($return_code,$this->error_str,array());
469
- }
470
- if ($return_code == 200) {
471
- $json_body = json_decode($this->_obj_write_string, True);
472
- return array($return_code, $this->response_reason, $json_body);
473
- }
474
- $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
475
- return array($return_code,$this->error_str,array());
476
- }
477
-
478
- # HEAD /v1/Account
479
- #
480
- function head_account()
481
- {
482
- $conn_type = "HEAD";
483
-
484
- $url_path = $this->_make_path();
485
- $return_code = $this->_send_request($conn_type,$url_path);
486
-
487
- if (!$return_code) {
488
- $this->error_str .= ": Failed to obtain valid HTTP response.";
489
- array(0,$this->error_str,0,0);
490
- }
491
- if ($return_code == 404) {
492
- return array($return_code,"Account not found.",0,0);
493
- }
494
- if ($return_code == 204) {
495
- return array($return_code,$this->response_reason,
496
- $this->_account_container_count, $this->_account_bytes_used);
497
- }
498
- return array($return_code,$this->response_reason,0,0);
499
- }
500
-
501
- # PUT /v1/Account/Container
502
- #
503
- function create_container($container_name)
504
- {
505
- if ($container_name == "")
506
- throw new SyntaxException("Container name not set.");
507
-
508
- if ($container_name != "0" and !isset($container_name))
509
- throw new SyntaxException("Container name not set.");
510
-
511
- $url_path = $this->_make_path("STORAGE", $container_name);
512
- $return_code = $this->_send_request("PUT_CONT",$url_path);
513
-
514
- if (!$return_code) {
515
- $this->error_str .= ": Failed to obtain valid HTTP response.";
516
- return False;
517
- }
518
- return $return_code;
519
- }
520
-
521
- # DELETE /v1/Account/Container
522
- #
523
- function delete_container($container_name)
524
- {
525
- if ($container_name == "")
526
- throw new SyntaxException("Container name not set.");
527
-
528
- if ($container_name != "0" and !isset($container_name))
529
- throw new SyntaxException("Container name not set.");
530
-
531
- $url_path = $this->_make_path("STORAGE", $container_name);
532
- $return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE");
533
-
534
- if (!$return_code) {
535
- $this->error_str .= ": Failed to obtain valid HTTP response.";
536
- }
537
- if ($return_code == 409) {
538
- $this->error_str = "Container must be empty prior to removing it.";
539
- }
540
- if ($return_code == 404) {
541
- $this->error_str = "Specified container did not exist to delete.";
542
- }
543
- if ($return_code != 204) {
544
- $this->error_str = "Unexpected HTTP return code: $return_code.";
545
- }
546
- return $return_code;
547
- }
548
-
549
- # GET /v1/Account/Container
550
- #
551
- function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
552
- {
553
- if (!$cname) {
554
- $this->error_str = "Container name not set.";
555
- return array(0, $this->error_str, array());
556
- }
557
-
558
- $url_path = $this->_make_path("STORAGE", $cname);
559
-
560
- $limit = intval($limit);
561
- $params = array();
562
- if ($limit > 0) {
563
- $params[] = "limit=$limit";
564
- }
565
- if ($marker) {
566
- $params[] = "marker=".rawurlencode($marker);
567
- }
568
- if ($prefix) {
569
- $params[] = "prefix=".rawurlencode($prefix);
570
- }
571
- if ($path) {
572
- $params[] = "path=".rawurlencode($path);
573
- }
574
- if (!empty($params)) {
575
- $url_path .= "?" . implode("&", $params);
576
- }
577
-
578
- $conn_type = "GET_CALL";
579
- $this->_write_callback_type = "TEXT_LIST";
580
- $return_code = $this->_send_request($conn_type,$url_path);
581
-
582
- if (!$return_code) {
583
- $this->error_str .= ": Failed to obtain valid HTTP response.";
584
- return array(0,$this->error_str,array());
585
- }
586
- if ($return_code == 204) {
587
- $this->error_str = "Container has no Objects.";
588
- return array($return_code,$this->error_str,array());
589
- }
590
- if ($return_code == 404) {
591
- $this->error_str = "Container has no Objects.";
592
- return array($return_code,$this->error_str,array());
593
- }
594
- if ($return_code == 200) {
595
- $this->create_array();
596
- return array($return_code,$this->response_reason, $this->_text_list);
597
- }
598
- $this->error_str = "Unexpected HTTP response code: $return_code";
599
- return array(0,$this->error_str,array());
600
- }
601
-
602
- # GET /v1/Account/Container?format=json
603
- #
604
- function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
605
- {
606
- if (!$cname) {
607
- $this->error_str = "Container name not set.";
608
- return array(0, $this->error_str, array());
609
- }
610
-
611
- $url_path = $this->_make_path("STORAGE", $cname);
612
-
613
- $limit = intval($limit);
614
- $params = array();
615
- $params[] = "format=json";
616
- if ($limit > 0) {
617
- $params[] = "limit=$limit";
618
- }
619
- if ($marker) {
620
- $params[] = "marker=".rawurlencode($marker);
621
- }
622
- if ($prefix) {
623
- $params[] = "prefix=".rawurlencode($prefix);
624
- }
625
- if ($path) {
626
- $params[] = "path=".rawurlencode($path);
627
- }
628
- if (!empty($params)) {
629
- $url_path .= "?" . implode("&", $params);
630
- }
631
-
632
- $conn_type = "GET_CALL";
633
- $this->_write_callback_type = "OBJECT_STRING";
634
- $return_code = $this->_send_request($conn_type,$url_path);
635
-
636
- if (!$return_code) {
637
- $this->error_str .= ": Failed to obtain valid HTTP response.";
638
- return array(0,$this->error_str,array());
639
- }
640
- if ($return_code == 204) {
641
- $this->error_str = "Container has no Objects.";
642
- return array($return_code,$this->error_str,array());
643
- }
644
- if ($return_code == 404) {
645
- $this->error_str = "Container has no Objects.";
646
- return array($return_code,$this->error_str,array());
647
- }
648
- if ($return_code == 200) {
649
- $json_body = json_decode($this->_obj_write_string, True);
650
- return array($return_code,$this->response_reason, $json_body);
651
- }
652
- $this->error_str = "Unexpected HTTP response code: $return_code";
653
- return array(0,$this->error_str,array());
654
- }
655
-
656
-
657
- # HEAD /v1/Account/Container
658
- #
659
- function head_container($container_name)
660
- {
661
-
662
- if ($container_name == "") {
663
- $this->error_str = "Container name not set.";
664
- return False;
665
- }
666
-
667
- if ($container_name != "0" and !isset($container_name)) {
668
- $this->error_str = "Container name not set.";
669
- return False;
670
- }
671
-
672
- $conn_type = "HEAD";
673
-
674
- $url_path = $this->_make_path("STORAGE", $container_name);
675
- $return_code = $this->_send_request($conn_type,$url_path);
676
-
677
- if (!$return_code) {
678
- $this->error_str .= ": Failed to obtain valid HTTP response.";
679
- array(0,$this->error_str,0,0);
680
- }
681
- if ($return_code == 404) {
682
- return array($return_code,"Container not found.",0,0);
683
- }
684
- if ($return_code == 204 || $return_code == 200) {
685
- return array($return_code,$this->response_reason,
686
- $this->_container_object_count, $this->_container_bytes_used);
687
- }
688
- return array($return_code,$this->response_reason,0,0);
689
- }
690
-
691
- # GET /v1/Account/Container/Object
692
- #
693
- function get_object_to_string(&$obj, $hdrs=array())
694
- {
695
- if (!is_object($obj) || get_class($obj) != "CF_Object") {
696
- throw new SyntaxException(
697
- "Method argument is not a valid CF_Object.");
698
- }
699
-
700
- $conn_type = "GET_CALL";
701
-
702
- $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
703
- $this->_write_callback_type = "OBJECT_STRING";
704
- $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
705
-
706
- if (!$return_code) {
707
- $this->error_str .= ": Failed to obtain valid HTTP response.";
708
- return array($return_code0,$this->error_str,NULL);
709
- }
710
- if ($return_code == 404) {
711
- $this->error_str = "Object not found.";
712
- return array($return_code0,$this->error_str,NULL);
713
- }
714
- if (($return_code < 200) || ($return_code > 299
715
- && $return_code != 412 && $return_code != 304)) {
716
- $this->error_str = "Unexpected HTTP return code: $return_code";
717
- return array($return_code,$this->error_str,NULL);
718
- }
719
- return array($return_code,$this->response_reason, $this->_obj_write_string);
720
- }
721
-
722
- # GET /v1/Account/Container/Object
723
- #
724
- function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array())
725
- {
726
- if (!is_object($obj) || get_class($obj) != "CF_Object") {
727
- throw new SyntaxException(
728
- "Method argument is not a valid CF_Object.");
729
- }
730
- if (!is_resource($resource)) {
731
- throw new SyntaxException(
732
- "Resource argument not a valid PHP resource.");
733
- }
734
-
735
- $conn_type = "GET_CALL";
736
-
737
- $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
738
- $this->_obj_write_resource = $resource;
739
- $this->_write_callback_type = "OBJECT_STREAM";
740
- $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
741
-
742
- if (!$return_code) {
743
- $this->error_str .= ": Failed to obtain valid HTTP response.";
744
- return array($return_code,$this->error_str);
745
- }
746
- if ($return_code == 404) {
747
- $this->error_str = "Object not found.";
748
- return array($return_code,$this->error_str);
749
- }
750
- if (($return_code < 200) || ($return_code > 299
751
- && $return_code != 412 && $return_code != 304)) {
752
- $this->error_str = "Unexpected HTTP return code: $return_code";
753
- return array($return_code,$this->error_str);
754
- }
755
- return array($return_code,$this->response_reason);
756
- }
757
-
758
- # PUT /v1/Account/Container/Object
759
- #
760
- function put_object(&$obj, &$fp)
761
- {
762
- if (!is_object($obj) || get_class($obj) != "CF_Object") {
763
- throw new SyntaxException(
764
- "Method argument is not a valid CF_Object.");
765
- }
766
- if (!is_resource($fp)) {
767
- throw new SyntaxException(
768
- "File pointer argument is not a valid resource.");
769
- }
770
-
771
- $conn_type = "PUT_OBJ";
772
- $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
773
-
774
- $hdrs = $this->_metadata_headers($obj);
775
-
776
- $etag = $obj->getETag();
777
- if (isset($etag)) {
778
- $hdrs[] = "ETag: " . $etag;
779
- }
780
- if (!$obj->content_type) {
781
- $hdrs[] = "Content-Type: application/octet-stream";
782
- } else {
783
- $hdrs[] = "Content-Type: " . $obj->content_type;
784
- }
785
-
786
- $this->_init($conn_type);
787
- curl_setopt($this->connections[$conn_type],
788
- CURLOPT_INFILE, $fp);
789
- if (!$obj->content_length) {
790
- # We don''t know the Content-Length, so assumed "chunked" PUT
791
- #
792
- curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True);
793
- $hdrs[] = 'Transfer-Encoding: chunked';
794
- } else {
795
- # We know the Content-Length, so use regular transfer
796
- #
797
- curl_setopt($this->connections[$conn_type],
798
- CURLOPT_INFILESIZE, $obj->content_length);
799
- }
800
- $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
801
-
802
- if (!$return_code) {
803
- $this->error_str .= ": Failed to obtain valid HTTP response.";
804
- return array(0,$this->error_str,NULL);
805
- }
806
- if ($return_code == 412) {
807
- $this->error_str = "Missing Content-Type header";
808
- return array($return_code,$this->error_str,NULL);
809
- }
810
- if ($return_code == 422) {
811
- $this->error_str = "Derived and computed checksums do not match.";
812
- return array($return_code,$this->error_str,NULL);
813
- }
814
- if ($return_code != 201) {
815
- $this->error_str = "Unexpected HTTP return code: $return_code";
816
- return array($return_code,$this->error_str,NULL);
817
- }
818
- return array($return_code,$this->response_reason,$this->_obj_etag);
819
- }
820
-
821
- # POST /v1/Account/Container/Object
822
- #
823
- function update_object(&$obj)
824
- {
825
- if (!is_object($obj) || get_class($obj) != "CF_Object") {
826
- throw new SyntaxException(
827
- "Method argument is not a valid CF_Object.");
828
- }
829
-
830
- if (!is_array($obj->metadata) || empty($obj->metadata)) {
831
- $this->error_str = "Metadata array is empty.";
832
- return 0;
833
- }
834
-
835
- $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
836
-
837
- $hdrs = $this->_metadata_headers($obj);
838
- $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
839
- if (!$return_code) {
840
- $this->error_str .= ": Failed to obtain valid HTTP response.";
841
- return 0;
842
- }
843
- if ($return_code == 404) {
844
- $this->error_str = "Account, Container, or Object not found.";
845
- }
846
- if ($return_code != 202) {
847
- $this->error_str = "Unexpected HTTP return code: $return_code";
848
- }
849
- return $return_code;
850
- }
851
-
852
- # HEAD /v1/Account/Container/Object
853
- #
854
- function head_object(&$obj)
855
- {
856
- if (!is_object($obj) || get_class($obj) != "CF_Object") {
857
- throw new SyntaxException(
858
- "Method argument is not a valid CF_Object.");
859
- }
860
-
861
- $conn_type = "HEAD";
862
-
863
- $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
864
- $return_code = $this->_send_request($conn_type,$url_path);
865
-
866
- if (!$return_code) {
867
- $this->error_str .= ": Failed to obtain valid HTTP response.";
868
- return array(0, $this->error_str." ".$this->response_reason,
869
- NULL, NULL, NULL, NULL, array());
870
- }
871
-
872
- if ($return_code == 404) {
873
- return array($return_code, $this->response_reason,
874
- NULL, NULL, NULL, NULL, array());
875
- }
876
- if ($return_code == 204 || $return_code == 200) {
877
- return array($return_code,$this->response_reason,
878
- $this->_obj_etag,
879
- $this->_obj_last_modified,
880
- $this->_obj_content_type,
881
- $this->_obj_content_length,
882
- $this->_obj_metadata);
883
- }
884
- $this->error_str = "Unexpected HTTP return code: $return_code";
885
- return array($return_code, $this->error_str." ".$this->response_reason,
886
- NULL, NULL, NULL, NULL, array());
887
- }
888
-
889
- # DELETE /v1/Account/Container/Object
890
- #
891
- function delete_object($container_name, $object_name)
892
- {
893
- if ($container_name == "") {
894
- $this->error_str = "Container name not set.";
895
- return 0;
896
- }
897
-
898
- if ($container_name != "0" and !isset($container_name)) {
899
- $this->error_str = "Container name not set.";
900
- return 0;
901
- }
902
-
903
- if (!$object_name) {
904
- $this->error_str = "Object name not set.";
905
- return 0;
906
- }
907
-
908
- $url_path = $this->_make_path("STORAGE", $container_name,$object_name);
909
- $return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE");
910
- if (!$return_code) {
911
- $this->error_str .= ": Failed to obtain valid HTTP response.";
912
- return 0;
913
- }
914
- if ($return_code == 404) {
915
- $this->error_str = "Specified container did not exist to delete.";
916
- }
917
- if ($return_code != 204) {
918
- $this->error_str = "Unexpected HTTP return code: $return_code.";
919
- }
920
- return $return_code;
921
- }
922
-
923
- function get_error()
924
- {
925
- return $this->error_str;
926
- }
927
-
928
- function setDebug($bool)
929
- {
930
- $this->dbug = $bool;
931
- foreach ($this->connections as $k => $v) {
932
- if (!is_null($v)) {
933
- curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug);
934
- }
935
- }
936
- }
937
-
938
- function getCDNMUrl()
939
- {
940
- return $this->cdnm_url;
941
- }
942
-
943
- function getStorageUrl()
944
- {
945
- return $this->storage_url;
946
- }
947
-
948
- function getAuthToken()
949
- {
950
- return $this->auth_token;
951
- }
952
-
953
- function setCFAuth($cfs_auth, $servicenet=False)
954
- {
955
- if ($servicenet) {
956
- $this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8);
957
- } else {
958
- $this->storage_url = $cfs_auth->storage_url;
959
- }
960
- $this->auth_token = $cfs_auth->auth_token;
961
- $this->cdnm_url = $cfs_auth->cdnm_url;
962
- }
963
-
964
- function setReadProgressFunc($func_name)
965
- {
966
- $this->_user_read_progress_callback_func = $func_name;
967
- }
968
-
969
- function setWriteProgressFunc($func_name)
970
- {
971
- $this->_user_write_progress_callback_func = $func_name;
972
- }
973
-
974
- private function _header_cb($ch, $header)
975
- {
976
- preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
977
- if (isset($matches[1])) {
978
- $this->response_status = $matches[1];
979
- }
980
- if (isset($matches[2])) {
981
- $this->response_reason = $matches[2];
982
- }
983
- if (stripos($header, CDN_ENABLED) === 0) {
984
- $val = trim(substr($header, strlen(CDN_ENABLED)+1));
985
- if (strtolower($val) == "true") {
986
- $this->_cdn_enabled = True;
987
- } elseif (strtolower($val) == "false") {
988
- $this->_cdn_enabled = False;
989
- } else {
990
- $this->_cdn_enabled = NULL;
991
- }
992
- return strlen($header);
993
- }
994
- if (stripos($header, CDN_URI) === 0) {
995
- $this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1));
996
- return strlen($header);
997
- }
998
- if (stripos($header, CDN_TTL) === 0) {
999
- $this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0;
1000
- return strlen($header);
1001
- }
1002
- if (stripos($header, CDN_LOG_RETENTION) === 0) {
1003
- $this->_cdn_log_retention =
1004
- trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False;
1005
- return strlen($header);
1006
- }
1007
-
1008
- if (stripos($header, CDN_ACL_USER_AGENT) === 0) {
1009
- $this->_cdn_acl_user_agent =
1010
- trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1));
1011
- return strlen($header);
1012
- }
1013
-
1014
- if (stripos($header, CDN_ACL_REFERRER) === 0) {
1015
- $this->_cdn_acl_referrer =
1016
- trim(substr($header, strlen(CDN_ACL_REFERRER)+1));
1017
- return strlen($header);
1018
- }
1019
-
1020
- if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) {
1021
- $this->_account_container_count = (float) trim(substr($header,
1022
- strlen(ACCOUNT_CONTAINER_COUNT)+1))+0;
1023
- return strlen($header);
1024
- }
1025
- if (stripos($header, ACCOUNT_BYTES_USED) === 0) {
1026
- $this->_account_bytes_used = (float) trim(substr($header,
1027
- strlen(ACCOUNT_BYTES_USED)+1))+0;
1028
- return strlen($header);
1029
- }
1030
- if (stripos($header, CONTAINER_OBJ_COUNT) === 0) {
1031
- $this->_container_object_count = (float) trim(substr($header,
1032
- strlen(CONTAINER_OBJ_COUNT)+1))+0;
1033
- return strlen($header);
1034
- }
1035
- if (stripos($header, CONTAINER_BYTES_USED) === 0) {
1036
- $this->_container_bytes_used = (float) trim(substr($header,
1037
- strlen(CONTAINER_BYTES_USED)+1))+0;
1038
- return strlen($header);
1039
- }
1040
- if (stripos($header, METADATA_HEADER) === 0) {
1041
- # $header => X-Object-Meta-Foo: bar baz
1042
- $temp = substr($header, strlen(METADATA_HEADER));
1043
- # $temp => Foo: bar baz
1044
- $parts = explode(":", $temp);
1045
- # $parts[0] => Foo
1046
- $val = substr(strstr($temp, ":"), 1);
1047
- # $val => bar baz
1048
- $this->_obj_metadata[$parts[0]] = trim($val);
1049
- return strlen($header);
1050
- }
1051
- if (stripos($header, "ETag:") === 0) {
1052
- # $header => ETag: abc123def456...
1053
- $val = substr(strstr($header, ":"), 1);
1054
- # $val => abc123def456...
1055
- $this->_obj_etag = trim($val);
1056
- return strlen($header);
1057
- }
1058
- if (stripos($header, "Last-Modified:") === 0) {
1059
- $val = substr(strstr($header, ":"), 1);
1060
- $this->_obj_last_modified = trim($val);
1061
- return strlen($header);
1062
- }
1063
- if (stripos($header, "Content-Type:") === 0) {
1064
- $val = substr(strstr($header, ":"), 1);
1065
- $this->_obj_content_type = trim($val);
1066
- return strlen($header);
1067
- }
1068
- if (stripos($header, "Content-Length:") === 0) {
1069
- $val = substr(strstr($header, ":"), 1);
1070
- $this->_obj_content_length = (float) trim($val)+0;
1071
- return strlen($header);
1072
- }
1073
- return strlen($header);
1074
- }
1075
-
1076
- private function _read_cb($ch, $fd, $length)
1077
- {
1078
- $data = fread($fd, $length);
1079
- $len = strlen($data);
1080
- if (isset($this->_user_write_progress_callback_func)) {
1081
- call_user_func($this->_user_write_progress_callback_func, $len);
1082
- }
1083
- return $data;
1084
- }
1085
-
1086
- private function _write_cb($ch, $data)
1087
- {
1088
- $dlen = strlen($data);
1089
- switch ($this->_write_callback_type) {
1090
- case "TEXT_LIST":
1091
- $this->_return_list = $this->_return_list . $data;
1092
- //= explode("\n",$data); # keep tab,space
1093
- //his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space
1094
- break;
1095
- case "OBJECT_STREAM":
1096
- fwrite($this->_obj_write_resource, $data, $dlen);
1097
- break;
1098
- case "OBJECT_STRING":
1099
- $this->_obj_write_string .= $data;
1100
- break;
1101
- }
1102
- if (isset($this->_user_read_progress_callback_func)) {
1103
- call_user_func($this->_user_read_progress_callback_func, $dlen);
1104
- }
1105
- return $dlen;
1106
- }
1107
-
1108
- private function _auth_hdr_cb($ch, $header)
1109
- {
1110
- preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
1111
- if (isset($matches[1])) {
1112
- $this->response_status = $matches[1];
1113
- }
1114
- if (isset($matches[2])) {
1115
- $this->response_reason = $matches[2];
1116
- }
1117
- if (stripos($header, STORAGE_URL) === 0) {
1118
- $this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1));
1119
- }
1120
- if (stripos($header, CDNM_URL) === 0) {
1121
- $this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1));
1122
- }
1123
- if (stripos($header, AUTH_TOKEN) === 0) {
1124
- $this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1));
1125
- }
1126
- if (stripos($header, AUTH_TOKEN_LEGACY) === 0) {
1127
- $this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1));
1128
- }
1129
- return strlen($header);
1130
- }
1131
-
1132
- private function _make_headers($hdrs=NULL)
1133
- {
1134
- $new_headers = array();
1135
- $has_stoken = False;
1136
- $has_uagent = False;
1137
- if (is_array($hdrs)) {
1138
- foreach ($hdrs as $h => $v) {
1139
- if (is_int($h)) {
1140
- $parts = explode(":", $v);
1141
- $header = $parts[0];
1142
- $value = trim(substr(strstr($v, ":"), 1));
1143
- } else {
1144
- $header = $h;
1145
- $value = trim($v);
1146
- }
1147
-
1148
- if (stripos($header, AUTH_TOKEN) === 0) {
1149
- $has_stoken = True;
1150
- }
1151
- if (stripos($header, "user-agent") === 0) {
1152
- $has_uagent = True;
1153
- }
1154
- $new_headers[] = $header . ": " . $value;
1155
- }
1156
- }
1157
- if (!$has_stoken) {
1158
- $new_headers[] = AUTH_TOKEN . ": " . $this->auth_token;
1159
- }
1160
- if (!$has_uagent) {
1161
- $new_headers[] = "User-Agent: " . USER_AGENT;
1162
- }
1163
- return $new_headers;
1164
- }
1165
-
1166
- private function _init($conn_type, $force_new=False)
1167
- {
1168
- if (!array_key_exists($conn_type, $this->connections)) {
1169
- $this->error_str = "Invalid CURL_XXX connection type";
1170
- return False;
1171
- }
1172
-
1173
- if (is_null($this->connections[$conn_type]) || $force_new) {
1174
- $ch = curl_init();
1175
- } else {
1176
- return;
1177
- }
1178
-
1179
- if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); }
1180
-
1181
- if (!is_null($this->cabundle_path)) {
1182
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1183
- curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path);
1184
- }
1185
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1186
- @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
1187
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
1188
- curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
1189
- curl_setopt($ch, CURLOPT_HEADER, 0);
1190
- curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb'));
1191
-
1192
- if ($conn_type == "GET_CALL") {
1193
- curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb'));
1194
- }
1195
-
1196
- if ($conn_type == "PUT_OBJ") {
1197
- curl_setopt($ch, CURLOPT_PUT, 1);
1198
- curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb'));
1199
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1200
- }
1201
- if ($conn_type == "HEAD") {
1202
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD");
1203
- curl_setopt($ch, CURLOPT_NOBODY, 1);
1204
- }
1205
- if ($conn_type == "PUT_CONT") {
1206
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
1207
- curl_setopt($ch, CURLOPT_INFILESIZE, 0);
1208
- curl_setopt($ch, CURLOPT_NOBODY, 1);
1209
- }
1210
- if ($conn_type == "DEL_POST") {
1211
- curl_setopt($ch, CURLOPT_NOBODY, 1);
1212
- }
1213
- $this->connections[$conn_type] = $ch;
1214
- return;
1215
- }
1216
-
1217
- private function _reset_callback_vars()
1218
- {
1219
- $this->_text_list = array();
1220
- $this->_return_list = NULL;
1221
- $this->_account_container_count = 0;
1222
- $this->_account_bytes_used = 0;
1223
- $this->_container_object_count = 0;
1224
- $this->_container_bytes_used = 0;
1225
- $this->_obj_etag = NULL;
1226
- $this->_obj_last_modified = NULL;
1227
- $this->_obj_content_type = NULL;
1228
- $this->_obj_content_length = NULL;
1229
- $this->_obj_metadata = array();
1230
- $this->_obj_write_string = "";
1231
- $this->_cdn_enabled = NULL;
1232
- $this->_cdn_uri = NULL;
1233
- $this->_cdn_ttl = NULL;
1234
- $this->response_status = 0;
1235
- $this->response_reason = "";
1236
- }
1237
-
1238
- private function _make_path($t="STORAGE",$c=NULL,$o=NULL)
1239
- {
1240
- $path = array();
1241
- switch ($t) {
1242
- case "STORAGE":
1243
- $path[] = $this->storage_url; break;
1244
- case "CDN":
1245
- $path[] = $this->cdnm_url; break;
1246
- }
1247
- if ($c == "0")
1248
- $path[] = rawurlencode($c);
1249
-
1250
- if ($c) {
1251
- $path[] = rawurlencode($c);
1252
- }
1253
- if ($o) {
1254
- # mimic Python''s urllib.quote() feature of a "safe" '/' character
1255
- #
1256
- $path[] = str_replace("%2F","/",rawurlencode($o));
1257
- }
1258
- return implode("/",$path);
1259
- }
1260
-
1261
- private function _metadata_headers(&$obj)
1262
- {
1263
- $hdrs = array();
1264
- foreach ($obj->metadata as $k => $v) {
1265
- if (strpos($k,":") !== False) {
1266
- throw new SyntaxException(
1267
- "Metadata keys cannot contain a ':' character.");
1268
- }
1269
- $k = trim($k);
1270
- $key = sprintf("%s%s", METADATA_HEADER, $k);
1271
- if (!array_key_exists($key, $hdrs)) {
1272
- if (strlen($k) > 128 || strlen($v) > 256) {
1273
- $this->error_str = "Metadata key or value exceeds ";
1274
- $this->error_str .= "maximum length: ($k: $v)";
1275
- return 0;
1276
- }
1277
- $hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v));
1278
- }
1279
- }
1280
- return $hdrs;
1281
- }
1282
-
1283
- private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET")
1284
- {
1285
- $this->_init($conn_type);
1286
- $this->_reset_callback_vars();
1287
- $headers = $this->_make_headers($hdrs);
1288
-
1289
- if (gettype($this->connections[$conn_type]) == "unknown type")
1290
- throw new ConnectionNotOpenException (
1291
- "Connection is not open."
1292
- );
1293
-
1294
- switch ($method) {
1295
- case "DELETE":
1296
- curl_setopt($this->connections[$conn_type],
1297
- CURLOPT_CUSTOMREQUEST, "DELETE");
1298
- break;
1299
- case "POST":
1300
- curl_setopt($this->connections[$conn_type],
1301
- CURLOPT_CUSTOMREQUEST, "POST");
1302
- default:
1303
- break;
1304
- }
1305
-
1306
- curl_setopt($this->connections[$conn_type],
1307
- CURLOPT_HTTPHEADER, $headers);
1308
-
1309
- curl_setopt($this->connections[$conn_type],
1310
- CURLOPT_URL, $url_path);
1311
-
1312
- if (!curl_exec($this->connections[$conn_type]) && curl_errno($this->connections[$conn_type]) !== 0) {
1313
- $this->error_str = "(curl error: "
1314
- . curl_errno($this->connections[$conn_type]) . ") ";
1315
- $this->error_str .= curl_error($this->connections[$conn_type]);
1316
- return False;
1317
- }
1318
- return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE);
1319
- }
1320
-
1321
- function close()
1322
- {
1323
- foreach ($this->connections as $cnx) {
1324
- if (isset($cnx)) {
1325
- curl_close($cnx);
1326
- $this->connections[$cnx] = NULL;
1327
- }
1328
- }
1329
- }
1330
- private function create_array()
1331
- {
1332
- $this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B"));
1333
- return True;
1334
- }
1335
-
1336
- }
1337
-
1338
- /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
1339
-
1340
- /*
1341
- * Local variables:
1342
- * tab-width: 4
1343
- * c-basic-offset: 4
1344
- * c-hanging-comment-ender-p: nil
1345
- * End:
1346
- */
1347
- ?>
1
+ <?php
2
+ /**
3
+ * This is an HTTP client class for Cloud Files. It uses PHP's cURL module
4
+ * to handle the actual HTTP request/response. This is NOT a generic HTTP
5
+ * client class and is only used to abstract out the HTTP communication for
6
+ * the PHP Cloud Files API.
7
+ *
8
+ * This module was designed to re-use existing HTTP(S) connections between
9
+ * subsequent operations. For example, performing multiple PUT operations
10
+ * will re-use the same connection.
11
+ *
12
+ * This modules also provides support for streaming content into and out
13
+ * of Cloud Files. The majority (all?) of the PHP HTTP client modules expect
14
+ * to read the server's response into a string variable. This will not work
15
+ * with large files without killing your server. Methods like,
16
+ * get_object_to_stream() and put_object() take an open filehandle
17
+ * argument for streaming data out of or into Cloud Files.
18
+ *
19
+ * Requres PHP 5.x (for Exceptions and OO syntax)
20
+ *
21
+ * See COPYING for license information.
22
+ *
23
+ * @author Eric "EJ" Johnson <ej@racklabs.com>
24
+ * @copyright Copyright (c) 2008, Rackspace US, Inc.
25
+ * @package php-cloudfiles-http
26
+ */
27
+
28
+ /**
29
+ */
30
+ require_once("cloudfiles_exceptions.php");
31
+
32
+ define("PHP_CF_VERSION", "1.7.6");
33
+ define("USER_AGENT", sprintf("PHP-CloudFiles/%s", PHP_CF_VERSION));
34
+ define("ACCOUNT_CONTAINER_COUNT", "X-Account-Container-Count");
35
+ define("ACCOUNT_BYTES_USED", "X-Account-Bytes-Used");
36
+ define("CONTAINER_OBJ_COUNT", "X-Container-Object-Count");
37
+ define("CONTAINER_BYTES_USED", "X-Container-Bytes-Used");
38
+ define("METADATA_HEADER", "X-Object-Meta-");
39
+ define("CDN_URI", "X-CDN-URI");
40
+ define("CDN_ENABLED", "X-CDN-Enabled");
41
+ define("CDN_LOG_RETENTION", "X-Log-Retention");
42
+ define("CDN_ACL_USER_AGENT", "X-User-Agent-ACL");
43
+ define("CDN_ACL_REFERRER", "X-Referrer-ACL");
44
+ define("CDN_TTL", "X-TTL");
45
+ define("CDNM_URL", "X-CDN-Management-Url");
46
+ define("STORAGE_URL", "X-Storage-Url");
47
+ define("AUTH_TOKEN", "X-Auth-Token");
48
+ define("AUTH_USER_HEADER", "X-Auth-User");
49
+ define("AUTH_KEY_HEADER", "X-Auth-Key");
50
+ define("AUTH_USER_HEADER_LEGACY", "X-Storage-User");
51
+ define("AUTH_KEY_HEADER_LEGACY", "X-Storage-Pass");
52
+ define("AUTH_TOKEN_LEGACY", "X-Storage-Token");
53
+
54
+ /**
55
+ * HTTP/cURL wrapper for Cloud Files
56
+ *
57
+ * This class should not be used directly. It's only purpose is to abstract
58
+ * out the HTTP communication from the main API.
59
+ *
60
+ * @package php-cloudfiles-http
61
+ */
62
+ class CF_Http
63
+ {
64
+ private $error_str;
65
+ private $dbug;
66
+ private $cabundle_path;
67
+ private $api_version;
68
+
69
+ # Authentication instance variables
70
+ #
71
+ private $storage_url;
72
+ private $cdnm_url;
73
+ private $auth_token;
74
+
75
+ # Request/response variables
76
+ #
77
+ private $response_status;
78
+ private $response_reason;
79
+ private $connections;
80
+
81
+ # Variables used for content/header callbacks
82
+ #
83
+ private $_user_read_progress_callback_func;
84
+ private $_user_write_progress_callback_func;
85
+ private $_write_callback_type;
86
+ private $_text_list;
87
+ private $_account_container_count;
88
+ private $_account_bytes_used;
89
+ private $_container_object_count;
90
+ private $_container_bytes_used;
91
+ private $_obj_etag;
92
+ private $_obj_last_modified;
93
+ private $_obj_content_type;
94
+ private $_obj_content_length;
95
+ private $_obj_metadata;
96
+ private $_obj_write_resource;
97
+ private $_obj_write_string;
98
+ private $_cdn_enabled;
99
+ private $_cdn_uri;
100
+ private $_cdn_ttl;
101
+ private $_cdn_log_retention;
102
+ private $_cdn_acl_user_agent;
103
+ private $_cdn_acl_referrer;
104
+
105
+ function __construct($api_version)
106
+ {
107
+ $this->dbug = False;
108
+ $this->cabundle_path = NULL;
109
+ $this->api_version = $api_version;
110
+ $this->error_str = NULL;
111
+
112
+ $this->storage_url = NULL;
113
+ $this->cdnm_url = NULL;
114
+ $this->auth_token = NULL;
115
+
116
+ $this->response_status = NULL;
117
+ $this->response_reason = NULL;
118
+
119
+ # Curl connections array - since there is no way to "re-set" the
120
+ # connection paramaters for a cURL handle, we keep an array of
121
+ # the unique use-cases and funnel all of those same type
122
+ # requests through the appropriate curl connection.
123
+ #
124
+ $this->connections = array(
125
+ "GET_CALL" => NULL, # GET objects/containers/lists
126
+ "PUT_OBJ" => NULL, # PUT object
127
+ "HEAD" => NULL, # HEAD requests
128
+ "PUT_CONT" => NULL, # PUT container
129
+ "DEL_POST" => NULL, # DELETE containers/objects, POST objects
130
+ );
131
+
132
+ $this->_user_read_progress_callback_func = NULL;
133
+ $this->_user_write_progress_callback_func = NULL;
134
+ $this->_write_callback_type = NULL;
135
+ $this->_text_list = array();
136
+ $this->_return_list = NULL;
137
+ $this->_account_container_count = 0;
138
+ $this->_account_bytes_used = 0;
139
+ $this->_container_object_count = 0;
140
+ $this->_container_bytes_used = 0;
141
+ $this->_obj_write_resource = NULL;
142
+ $this->_obj_write_string = "";
143
+ $this->_obj_etag = NULL;
144
+ $this->_obj_last_modified = NULL;
145
+ $this->_obj_content_type = NULL;
146
+ $this->_obj_content_length = NULL;
147
+ $this->_obj_metadata = array();
148
+ $this->_cdn_enabled = NULL;
149
+ $this->_cdn_uri = NULL;
150
+ $this->_cdn_ttl = NULL;
151
+ $this->_cdn_log_retention = NULL;
152
+ $this->_cdn_acl_user_agent = NULL;
153
+ $this->_cdn_acl_referrer = NULL;
154
+
155
+ # The OS list with a PHP without an updated CA File for CURL to
156
+ # connect to SSL Websites. It is the first 3 letters of the PHP_OS
157
+ # variable.
158
+ $OS_CAFILE_NONUPDATED=array(
159
+ "win","dar"
160
+ );
161
+
162
+ if (in_array((strtolower (substr(PHP_OS, 0,3))), $OS_CAFILE_NONUPDATED))
163
+ $this->ssl_use_cabundle();
164
+
165
+ }
166
+
167
+ function ssl_use_cabundle($path=NULL)
168
+ {
169
+ if ($path) {
170
+ $this->cabundle_path = $path;
171
+ } else {
172
+ $this->cabundle_path = dirname(__FILE__) . "/cacert.pem";
173
+ }
174
+ if (!file_exists($this->cabundle_path)) {
175
+ throw new IOException("Could not use CA bundle: "
176
+ . $this->cabundle_path);
177
+ }
178
+ return;
179
+ }
180
+
181
+ # Uses separate cURL connection to authenticate
182
+ #
183
+ function authenticate($user, $pass, $acct=NULL, $host=NULL)
184
+ {
185
+ $path = array();
186
+ if (isset($acct)){
187
+ $headers = array(
188
+ sprintf("%s: %s", AUTH_USER_HEADER_LEGACY, $user),
189
+ sprintf("%s: %s", AUTH_KEY_HEADER_LEGACY, $pass),
190
+ );
191
+ $path[] = $host;
192
+ $path[] = rawurlencode(sprintf("v%d",$this->api_version));
193
+ $path[] = rawurlencode($acct);
194
+ } else {
195
+ $headers = array(
196
+ sprintf("%s: %s", AUTH_USER_HEADER, $user),
197
+ sprintf("%s: %s", AUTH_KEY_HEADER, $pass),
198
+ );
199
+ $path[] = $host;
200
+ }
201
+ $path[] = "v1.0";
202
+ $url = implode("/", $path);
203
+
204
+ $curl_ch = curl_init();
205
+ if (!is_null($this->cabundle_path)) {
206
+ curl_setopt($curl_ch, CURLOPT_SSL_VERIFYPEER, True);
207
+ curl_setopt($curl_ch, CURLOPT_CAINFO, $this->cabundle_path);
208
+ }
209
+ curl_setopt($curl_ch, CURLOPT_VERBOSE, $this->dbug);
210
+ @curl_setopt($curl_ch, CURLOPT_FOLLOWLOCATION, 1);
211
+ curl_setopt($curl_ch, CURLOPT_MAXREDIRS, 4);
212
+ curl_setopt($curl_ch, CURLOPT_HEADER, 0);
213
+ curl_setopt($curl_ch, CURLOPT_HTTPHEADER, $headers);
214
+ curl_setopt($curl_ch, CURLOPT_USERAGENT, USER_AGENT);
215
+ curl_setopt($curl_ch, CURLOPT_RETURNTRANSFER, TRUE);
216
+ curl_setopt($curl_ch, CURLOPT_HEADERFUNCTION,array(&$this,'_auth_hdr_cb'));
217
+ curl_setopt($curl_ch, CURLOPT_CONNECTTIMEOUT, 10);
218
+ curl_setopt($curl_ch, CURLOPT_URL, $url);
219
+ curl_exec($curl_ch);
220
+ curl_close($curl_ch);
221
+
222
+ return array($this->response_status, $this->response_reason,
223
+ $this->storage_url, $this->cdnm_url, $this->auth_token);
224
+ }
225
+
226
+ # (CDN) GET /v1/Account
227
+ #
228
+ function list_cdn_containers($enabled_only)
229
+ {
230
+ $conn_type = "GET_CALL";
231
+ $url_path = $this->_make_path("CDN");
232
+
233
+ $this->_write_callback_type = "TEXT_LIST";
234
+ if ($enabled_only)
235
+ {
236
+ $return_code = $this->_send_request($conn_type, $url_path .
237
+ '/?enabled_only=true');
238
+ }
239
+ else
240
+ {
241
+ $return_code = $this->_send_request($conn_type, $url_path);
242
+ }
243
+ if (!$return_code) {
244
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
245
+ array(0,$this->error_str,array());
246
+ }
247
+ if ($return_code == 401) {
248
+ return array($return_code,"Unauthorized",array());
249
+ }
250
+ if ($return_code == 404) {
251
+ return array($return_code,"Account not found.",array());
252
+ }
253
+ if ($return_code == 204) {
254
+ return array($return_code,"Account has no CDN enabled Containers.",
255
+ array());
256
+ }
257
+ if ($return_code == 200) {
258
+ $this->create_array();
259
+ return array($return_code,$this->response_reason,$this->_text_list);
260
+ }
261
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
262
+ return array($return_code,$this->error_str,array());
263
+ }
264
+
265
+ # (CDN) POST /v1/Account/Container
266
+ #
267
+ function update_cdn_container($container_name, $ttl=86400, $cdn_log_retention=False,
268
+ $cdn_acl_user_agent="", $cdn_acl_referrer)
269
+ {
270
+ if ($container_name == "")
271
+ throw new SyntaxException("Container name not set.");
272
+
273
+ if ($container_name != "0" and !isset($container_name))
274
+ throw new SyntaxException("Container name not set.");
275
+
276
+ $url_path = $this->_make_path("CDN", $container_name);
277
+ $hdrs = array(
278
+ CDN_ENABLED => "True",
279
+ CDN_TTL => $ttl,
280
+ CDN_LOG_RETENTION => $cdn_log_retention ? "True" : "False",
281
+ CDN_ACL_USER_AGENT => $cdn_acl_user_agent,
282
+ CDN_ACL_REFERRER => $cdn_acl_referrer,
283
+ );
284
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
285
+ if ($return_code == 401) {
286
+ $this->error_str = "Unauthorized";
287
+ return array($return_code, $this->error_str, NULL);
288
+ }
289
+ if ($return_code == 404) {
290
+ $this->error_str = "Container not found.";
291
+ return array($return_code, $this->error_str, NULL);
292
+ }
293
+ if ($return_code != 202) {
294
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
295
+ return array($return_code, $this->error_str, NULL);
296
+ }
297
+ return array($return_code, "Accepted", $this->_cdn_uri);
298
+
299
+ }
300
+
301
+ # (CDN) PUT /v1/Account/Container
302
+ #
303
+ function add_cdn_container($container_name, $ttl=86400)
304
+ {
305
+ if ($container_name == "")
306
+ throw new SyntaxException("Container name not set.");
307
+
308
+ if ($container_name != "0" and !isset($container_name))
309
+ throw new SyntaxException("Container name not set.");
310
+
311
+ $url_path = $this->_make_path("CDN", $container_name);
312
+ $hdrs = array(
313
+ CDN_ENABLED => "True",
314
+ CDN_TTL => $ttl,
315
+ );
316
+ $return_code = $this->_send_request("PUT_CONT", $url_path, $hdrs);
317
+ if ($return_code == 401) {
318
+ $this->error_str = "Unauthorized";
319
+ return array($return_code,$this->response_reason,False);
320
+ }
321
+ if (!in_array($return_code, array(201,202))) {
322
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
323
+ return array($return_code,$this->response_reason,False);
324
+ }
325
+ return array($return_code,$this->response_reason,$this->_cdn_uri);
326
+ }
327
+
328
+ # (CDN) POST /v1/Account/Container
329
+ #
330
+ function remove_cdn_container($container_name)
331
+ {
332
+ if ($container_name == "")
333
+ throw new SyntaxException("Container name not set.");
334
+
335
+ if ($container_name != "0" and !isset($container_name))
336
+ throw new SyntaxException("Container name not set.");
337
+
338
+ $url_path = $this->_make_path("CDN", $container_name);
339
+ $hdrs = array(CDN_ENABLED => "False");
340
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
341
+ if ($return_code == 401) {
342
+ $this->error_str = "Unauthorized";
343
+ return array($return_code, $this->error_str);
344
+ }
345
+ if ($return_code == 404) {
346
+ $this->error_str = "Container not found.";
347
+ return array($return_code, $this->error_str);
348
+ }
349
+ if ($return_code != 202) {
350
+ $this->error_str="Unexpected HTTP response: ".$this->response_reason;
351
+ return array($return_code, $this->error_str);
352
+ }
353
+ return array($return_code, "Accepted");
354
+ }
355
+
356
+ # (CDN) HEAD /v1/Account
357
+ #
358
+ function head_cdn_container($container_name)
359
+ {
360
+ if ($container_name == "")
361
+ throw new SyntaxException("Container name not set.");
362
+
363
+ if ($container_name != "0" and !isset($container_name))
364
+ throw new SyntaxException("Container name not set.");
365
+
366
+ $conn_type = "HEAD";
367
+ $url_path = $this->_make_path("CDN", $container_name);
368
+ $return_code = $this->_send_request($conn_type, $url_path);
369
+
370
+ if (!$return_code) {
371
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
372
+ return array(0,$this->error_str,NULL,NULL,NULL,NULL,NULL,NULL);
373
+ }
374
+ if ($return_code == 401) {
375
+ return array($return_code,"Unauthorized",NULL,NULL,NULL,NULL,NULL,NULL);
376
+ }
377
+ if ($return_code == 404) {
378
+ return array($return_code,"Account not found.",NULL,NULL,NULL,NULL,NULL,NULL);
379
+ }
380
+ if ($return_code == 204) {
381
+ return array($return_code,$this->response_reason,
382
+ $this->_cdn_enabled, $this->_cdn_uri, $this->_cdn_ttl,
383
+ $this->_cdn_log_retention,
384
+ $this->_cdn_acl_user_agent,
385
+ $this->_cdn_acl_referrer
386
+ );
387
+ }
388
+ return array($return_code,$this->response_reason,
389
+ NULL,NULL,NULL,
390
+ $this->_cdn_log_retention,
391
+ $this->_cdn_acl_user_agent,
392
+ $this->_cdn_acl_referrer
393
+ );
394
+ }
395
+
396
+ # GET /v1/Account
397
+ #
398
+ function list_containers($limit=0, $marker=NULL)
399
+ {
400
+ $conn_type = "GET_CALL";
401
+ $url_path = $this->_make_path();
402
+
403
+ $limit = intval($limit);
404
+ $params = array();
405
+ if ($limit > 0) {
406
+ $params[] = "limit=$limit";
407
+ }
408
+ if ($marker) {
409
+ $params[] = "marker=".rawurlencode($marker);
410
+ }
411
+ if (!empty($params)) {
412
+ $url_path .= "?" . implode("&", $params);
413
+ }
414
+
415
+ $this->_write_callback_type = "TEXT_LIST";
416
+ $return_code = $this->_send_request($conn_type, $url_path);
417
+
418
+ if (!$return_code) {
419
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
420
+ return array(0,$this->error_str,array());
421
+ }
422
+ if ($return_code == 204) {
423
+ return array($return_code, "Account has no containers.", array());
424
+ }
425
+ if ($return_code == 404) {
426
+ $this->error_str = "Invalid account name for authentication token.";
427
+ return array($return_code,$this->error_str,array());
428
+ }
429
+ if ($return_code == 200) {
430
+ $this->create_array();
431
+ return array($return_code, $this->response_reason, $this->_text_list);
432
+ }
433
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
434
+ return array($return_code,$this->error_str,array());
435
+ }
436
+
437
+ # GET /v1/Account?format=json
438
+ #
439
+ function list_containers_info($limit=0, $marker=NULL)
440
+ {
441
+ $conn_type = "GET_CALL";
442
+ $url_path = $this->_make_path() . "?format=json";
443
+
444
+ $limit = intval($limit);
445
+ $params = array();
446
+ if ($limit > 0) {
447
+ $params[] = "limit=$limit";
448
+ }
449
+ if ($marker) {
450
+ $params[] = "marker=".rawurlencode($marker);
451
+ }
452
+ if (!empty($params)) {
453
+ $url_path .= "&" . implode("&", $params);
454
+ }
455
+
456
+ $this->_write_callback_type = "OBJECT_STRING";
457
+ $return_code = $this->_send_request($conn_type, $url_path);
458
+
459
+ if (!$return_code) {
460
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
461
+ return array(0,$this->error_str,array());
462
+ }
463
+ if ($return_code == 204) {
464
+ return array($return_code, "Account has no containers.", array());
465
+ }
466
+ if ($return_code == 404) {
467
+ $this->error_str = "Invalid account name for authentication token.";
468
+ return array($return_code,$this->error_str,array());
469
+ }
470
+ if ($return_code == 200) {
471
+ $json_body = json_decode($this->_obj_write_string, True);
472
+ return array($return_code, $this->response_reason, $json_body);
473
+ }
474
+ $this->error_str = "Unexpected HTTP response: ".$this->response_reason;
475
+ return array($return_code,$this->error_str,array());
476
+ }
477
+
478
+ # HEAD /v1/Account
479
+ #
480
+ function head_account()
481
+ {
482
+ $conn_type = "HEAD";
483
+
484
+ $url_path = $this->_make_path();
485
+ $return_code = $this->_send_request($conn_type,$url_path);
486
+
487
+ if (!$return_code) {
488
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
489
+ array(0,$this->error_str,0,0);
490
+ }
491
+ if ($return_code == 404) {
492
+ return array($return_code,"Account not found.",0,0);
493
+ }
494
+ if ($return_code == 204) {
495
+ return array($return_code,$this->response_reason,
496
+ $this->_account_container_count, $this->_account_bytes_used);
497
+ }
498
+ return array($return_code,$this->response_reason,0,0);
499
+ }
500
+
501
+ # PUT /v1/Account/Container
502
+ #
503
+ function create_container($container_name)
504
+ {
505
+ if ($container_name == "")
506
+ throw new SyntaxException("Container name not set.");
507
+
508
+ if ($container_name != "0" and !isset($container_name))
509
+ throw new SyntaxException("Container name not set.");
510
+
511
+ $url_path = $this->_make_path("STORAGE", $container_name);
512
+ $return_code = $this->_send_request("PUT_CONT",$url_path);
513
+
514
+ if (!$return_code) {
515
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
516
+ return False;
517
+ }
518
+ return $return_code;
519
+ }
520
+
521
+ # DELETE /v1/Account/Container
522
+ #
523
+ function delete_container($container_name)
524
+ {
525
+ if ($container_name == "")
526
+ throw new SyntaxException("Container name not set.");
527
+
528
+ if ($container_name != "0" and !isset($container_name))
529
+ throw new SyntaxException("Container name not set.");
530
+
531
+ $url_path = $this->_make_path("STORAGE", $container_name);
532
+ $return_code = $this->_send_request("DEL_POST",$url_path,array(),"DELETE");
533
+
534
+ if (!$return_code) {
535
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
536
+ }
537
+ if ($return_code == 409) {
538
+ $this->error_str = "Container must be empty prior to removing it.";
539
+ }
540
+ if ($return_code == 404) {
541
+ $this->error_str = "Specified container did not exist to delete.";
542
+ }
543
+ if ($return_code != 204) {
544
+ $this->error_str = "Unexpected HTTP return code: $return_code.";
545
+ }
546
+ return $return_code;
547
+ }
548
+
549
+ # GET /v1/Account/Container
550
+ #
551
+ function list_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
552
+ {
553
+ if (!$cname) {
554
+ $this->error_str = "Container name not set.";
555
+ return array(0, $this->error_str, array());
556
+ }
557
+
558
+ $url_path = $this->_make_path("STORAGE", $cname);
559
+
560
+ $limit = intval($limit);
561
+ $params = array();
562
+ if ($limit > 0) {
563
+ $params[] = "limit=$limit";
564
+ }
565
+ if ($marker) {
566
+ $params[] = "marker=".rawurlencode($marker);
567
+ }
568
+ if ($prefix) {
569
+ $params[] = "prefix=".rawurlencode($prefix);
570
+ }
571
+ if ($path) {
572
+ $params[] = "path=".rawurlencode($path);
573
+ }
574
+ if (!empty($params)) {
575
+ $url_path .= "?" . implode("&", $params);
576
+ }
577
+
578
+ $conn_type = "GET_CALL";
579
+ $this->_write_callback_type = "TEXT_LIST";
580
+ $return_code = $this->_send_request($conn_type,$url_path);
581
+
582
+ if (!$return_code) {
583
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
584
+ return array(0,$this->error_str,array());
585
+ }
586
+ if ($return_code == 204) {
587
+ $this->error_str = "Container has no Objects.";
588
+ return array($return_code,$this->error_str,array());
589
+ }
590
+ if ($return_code == 404) {
591
+ $this->error_str = "Container has no Objects.";
592
+ return array($return_code,$this->error_str,array());
593
+ }
594
+ if ($return_code == 200) {
595
+ $this->create_array();
596
+ return array($return_code,$this->response_reason, $this->_text_list);
597
+ }
598
+ $this->error_str = "Unexpected HTTP response code: $return_code";
599
+ return array(0,$this->error_str,array());
600
+ }
601
+
602
+ # GET /v1/Account/Container?format=json
603
+ #
604
+ function get_objects($cname,$limit=0,$marker=NULL,$prefix=NULL,$path=NULL)
605
+ {
606
+ if (!$cname) {
607
+ $this->error_str = "Container name not set.";
608
+ return array(0, $this->error_str, array());
609
+ }
610
+
611
+ $url_path = $this->_make_path("STORAGE", $cname);
612
+
613
+ $limit = intval($limit);
614
+ $params = array();
615
+ $params[] = "format=json";
616
+ if ($limit > 0) {
617
+ $params[] = "limit=$limit";
618
+ }
619
+ if ($marker) {
620
+ $params[] = "marker=".rawurlencode($marker);
621
+ }
622
+ if ($prefix) {
623
+ $params[] = "prefix=".rawurlencode($prefix);
624
+ }
625
+ if ($path) {
626
+ $params[] = "path=".rawurlencode($path);
627
+ }
628
+ if (!empty($params)) {
629
+ $url_path .= "?" . implode("&", $params);
630
+ }
631
+
632
+ $conn_type = "GET_CALL";
633
+ $this->_write_callback_type = "OBJECT_STRING";
634
+ $return_code = $this->_send_request($conn_type,$url_path);
635
+
636
+ if (!$return_code) {
637
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
638
+ return array(0,$this->error_str,array());
639
+ }
640
+ if ($return_code == 204) {
641
+ $this->error_str = "Container has no Objects.";
642
+ return array($return_code,$this->error_str,array());
643
+ }
644
+ if ($return_code == 404) {
645
+ $this->error_str = "Container has no Objects.";
646
+ return array($return_code,$this->error_str,array());
647
+ }
648
+ if ($return_code == 200) {
649
+ $json_body = json_decode($this->_obj_write_string, True);
650
+ return array($return_code,$this->response_reason, $json_body);
651
+ }
652
+ $this->error_str = "Unexpected HTTP response code: $return_code";
653
+ return array(0,$this->error_str,array());
654
+ }
655
+
656
+
657
+ # HEAD /v1/Account/Container
658
+ #
659
+ function head_container($container_name)
660
+ {
661
+
662
+ if ($container_name == "") {
663
+ $this->error_str = "Container name not set.";
664
+ return False;
665
+ }
666
+
667
+ if ($container_name != "0" and !isset($container_name)) {
668
+ $this->error_str = "Container name not set.";
669
+ return False;
670
+ }
671
+
672
+ $conn_type = "HEAD";
673
+
674
+ $url_path = $this->_make_path("STORAGE", $container_name);
675
+ $return_code = $this->_send_request($conn_type,$url_path);
676
+
677
+ if (!$return_code) {
678
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
679
+ array(0,$this->error_str,0,0);
680
+ }
681
+ if ($return_code == 404) {
682
+ return array($return_code,"Container not found.",0,0);
683
+ }
684
+ if ($return_code == 204 || $return_code == 200) {
685
+ return array($return_code,$this->response_reason,
686
+ $this->_container_object_count, $this->_container_bytes_used);
687
+ }
688
+ return array($return_code,$this->response_reason,0,0);
689
+ }
690
+
691
+ # GET /v1/Account/Container/Object
692
+ #
693
+ function get_object_to_string(&$obj, $hdrs=array())
694
+ {
695
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
696
+ throw new SyntaxException(
697
+ "Method argument is not a valid CF_Object.");
698
+ }
699
+
700
+ $conn_type = "GET_CALL";
701
+
702
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
703
+ $this->_write_callback_type = "OBJECT_STRING";
704
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
705
+
706
+ if (!$return_code) {
707
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
708
+ return array($return_code0,$this->error_str,NULL);
709
+ }
710
+ if ($return_code == 404) {
711
+ $this->error_str = "Object not found.";
712
+ return array($return_code0,$this->error_str,NULL);
713
+ }
714
+ if (($return_code < 200) || ($return_code > 299
715
+ && $return_code != 412 && $return_code != 304)) {
716
+ $this->error_str = "Unexpected HTTP return code: $return_code";
717
+ return array($return_code,$this->error_str,NULL);
718
+ }
719
+ return array($return_code,$this->response_reason, $this->_obj_write_string);
720
+ }
721
+
722
+ # GET /v1/Account/Container/Object
723
+ #
724
+ function get_object_to_stream(&$obj, &$resource=NULL, $hdrs=array())
725
+ {
726
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
727
+ throw new SyntaxException(
728
+ "Method argument is not a valid CF_Object.");
729
+ }
730
+ if (!is_resource($resource)) {
731
+ throw new SyntaxException(
732
+ "Resource argument not a valid PHP resource.");
733
+ }
734
+
735
+ $conn_type = "GET_CALL";
736
+
737
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
738
+ $this->_obj_write_resource = $resource;
739
+ $this->_write_callback_type = "OBJECT_STREAM";
740
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
741
+
742
+ if (!$return_code) {
743
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
744
+ return array($return_code,$this->error_str);
745
+ }
746
+ if ($return_code == 404) {
747
+ $this->error_str = "Object not found.";
748
+ return array($return_code,$this->error_str);
749
+ }
750
+ if (($return_code < 200) || ($return_code > 299
751
+ && $return_code != 412 && $return_code != 304)) {
752
+ $this->error_str = "Unexpected HTTP return code: $return_code";
753
+ return array($return_code,$this->error_str);
754
+ }
755
+ return array($return_code,$this->response_reason);
756
+ }
757
+
758
+ # PUT /v1/Account/Container/Object
759
+ #
760
+ function put_object(&$obj, &$fp)
761
+ {
762
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
763
+ throw new SyntaxException(
764
+ "Method argument is not a valid CF_Object.");
765
+ }
766
+ if (!is_resource($fp)) {
767
+ throw new SyntaxException(
768
+ "File pointer argument is not a valid resource.");
769
+ }
770
+
771
+ $conn_type = "PUT_OBJ";
772
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
773
+
774
+ $hdrs = $this->_metadata_headers($obj);
775
+
776
+ $etag = $obj->getETag();
777
+ if (isset($etag)) {
778
+ $hdrs[] = "ETag: " . $etag;
779
+ }
780
+ if (!$obj->content_type) {
781
+ $hdrs[] = "Content-Type: application/octet-stream";
782
+ } else {
783
+ $hdrs[] = "Content-Type: " . $obj->content_type;
784
+ }
785
+
786
+ $this->_init($conn_type);
787
+ curl_setopt($this->connections[$conn_type],
788
+ CURLOPT_INFILE, $fp);
789
+ if (!$obj->content_length) {
790
+ # We don''t know the Content-Length, so assumed "chunked" PUT
791
+ #
792
+ curl_setopt($this->connections[$conn_type], CURLOPT_UPLOAD, True);
793
+ $hdrs[] = 'Transfer-Encoding: chunked';
794
+ } else {
795
+ # We know the Content-Length, so use regular transfer
796
+ #
797
+ curl_setopt($this->connections[$conn_type],
798
+ CURLOPT_INFILESIZE, $obj->content_length);
799
+ }
800
+ $return_code = $this->_send_request($conn_type,$url_path,$hdrs);
801
+
802
+ if (!$return_code) {
803
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
804
+ return array(0,$this->error_str,NULL);
805
+ }
806
+ if ($return_code == 412) {
807
+ $this->error_str = "Missing Content-Type header";
808
+ return array($return_code,$this->error_str,NULL);
809
+ }
810
+ if ($return_code == 422) {
811
+ $this->error_str = "Derived and computed checksums do not match.";
812
+ return array($return_code,$this->error_str,NULL);
813
+ }
814
+ if ($return_code != 201) {
815
+ $this->error_str = "Unexpected HTTP return code: $return_code";
816
+ return array($return_code,$this->error_str,NULL);
817
+ }
818
+ return array($return_code,$this->response_reason,$this->_obj_etag);
819
+ }
820
+
821
+ # POST /v1/Account/Container/Object
822
+ #
823
+ function update_object(&$obj)
824
+ {
825
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
826
+ throw new SyntaxException(
827
+ "Method argument is not a valid CF_Object.");
828
+ }
829
+
830
+ if (!is_array($obj->metadata) || empty($obj->metadata)) {
831
+ $this->error_str = "Metadata array is empty.";
832
+ return 0;
833
+ }
834
+
835
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
836
+
837
+ $hdrs = $this->_metadata_headers($obj);
838
+ $return_code = $this->_send_request("DEL_POST",$url_path,$hdrs,"POST");
839
+ if (!$return_code) {
840
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
841
+ return 0;
842
+ }
843
+ if ($return_code == 404) {
844
+ $this->error_str = "Account, Container, or Object not found.";
845
+ }
846
+ if ($return_code != 202) {
847
+ $this->error_str = "Unexpected HTTP return code: $return_code";
848
+ }
849
+ return $return_code;
850
+ }
851
+
852
+ # HEAD /v1/Account/Container/Object
853
+ #
854
+ function head_object(&$obj)
855
+ {
856
+ if (!is_object($obj) || get_class($obj) != "CF_Object") {
857
+ throw new SyntaxException(
858
+ "Method argument is not a valid CF_Object.");
859
+ }
860
+
861
+ $conn_type = "HEAD";
862
+
863
+ $url_path = $this->_make_path("STORAGE", $obj->container->name,$obj->name);
864
+ $return_code = $this->_send_request($conn_type,$url_path);
865
+
866
+ if (!$return_code) {
867
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
868
+ return array(0, $this->error_str." ".$this->response_reason,
869
+ NULL, NULL, NULL, NULL, array());
870
+ }
871
+
872
+ if ($return_code == 404) {
873
+ return array($return_code, $this->response_reason,
874
+ NULL, NULL, NULL, NULL, array());
875
+ }
876
+ if ($return_code == 204 || $return_code == 200) {
877
+ return array($return_code,$this->response_reason,
878
+ $this->_obj_etag,
879
+ $this->_obj_last_modified,
880
+ $this->_obj_content_type,
881
+ $this->_obj_content_length,
882
+ $this->_obj_metadata);
883
+ }
884
+ $this->error_str = "Unexpected HTTP return code: $return_code";
885
+ return array($return_code, $this->error_str." ".$this->response_reason,
886
+ NULL, NULL, NULL, NULL, array());
887
+ }
888
+
889
+ # DELETE /v1/Account/Container/Object
890
+ #
891
+ function delete_object($container_name, $object_name)
892
+ {
893
+ if ($container_name == "") {
894
+ $this->error_str = "Container name not set.";
895
+ return 0;
896
+ }
897
+
898
+ if ($container_name != "0" and !isset($container_name)) {
899
+ $this->error_str = "Container name not set.";
900
+ return 0;
901
+ }
902
+
903
+ if (!$object_name) {
904
+ $this->error_str = "Object name not set.";
905
+ return 0;
906
+ }
907
+
908
+ $url_path = $this->_make_path("STORAGE", $container_name,$object_name);
909
+ $return_code = $this->_send_request("DEL_POST",$url_path,NULL,"DELETE");
910
+ if (!$return_code) {
911
+ $this->error_str .= ": Failed to obtain valid HTTP response.";
912
+ return 0;
913
+ }
914
+ if ($return_code == 404) {
915
+ $this->error_str = "Specified container did not exist to delete.";
916
+ }
917
+ if ($return_code != 204) {
918
+ $this->error_str = "Unexpected HTTP return code: $return_code.";
919
+ }
920
+ return $return_code;
921
+ }
922
+
923
+ function get_error()
924
+ {
925
+ return $this->error_str;
926
+ }
927
+
928
+ function setDebug($bool)
929
+ {
930
+ $this->dbug = $bool;
931
+ foreach ($this->connections as $k => $v) {
932
+ if (!is_null($v)) {
933
+ curl_setopt($this->connections[$k], CURLOPT_VERBOSE, $this->dbug);
934
+ }
935
+ }
936
+ }
937
+
938
+ function getCDNMUrl()
939
+ {
940
+ return $this->cdnm_url;
941
+ }
942
+
943
+ function getStorageUrl()
944
+ {
945
+ return $this->storage_url;
946
+ }
947
+
948
+ function getAuthToken()
949
+ {
950
+ return $this->auth_token;
951
+ }
952
+
953
+ function setCFAuth($cfs_auth, $servicenet=False)
954
+ {
955
+ if ($servicenet) {
956
+ $this->storage_url = "https://snet-" . substr($cfs_auth->storage_url, 8);
957
+ } else {
958
+ $this->storage_url = $cfs_auth->storage_url;
959
+ }
960
+ $this->auth_token = $cfs_auth->auth_token;
961
+ $this->cdnm_url = $cfs_auth->cdnm_url;
962
+ }
963
+
964
+ function setReadProgressFunc($func_name)
965
+ {
966
+ $this->_user_read_progress_callback_func = $func_name;
967
+ }
968
+
969
+ function setWriteProgressFunc($func_name)
970
+ {
971
+ $this->_user_write_progress_callback_func = $func_name;
972
+ }
973
+
974
+ private function _header_cb($ch, $header)
975
+ {
976
+ preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
977
+ if (isset($matches[1])) {
978
+ $this->response_status = $matches[1];
979
+ }
980
+ if (isset($matches[2])) {
981
+ $this->response_reason = $matches[2];
982
+ }
983
+ if (stripos($header, CDN_ENABLED) === 0) {
984
+ $val = trim(substr($header, strlen(CDN_ENABLED)+1));
985
+ if (strtolower($val) == "true") {
986
+ $this->_cdn_enabled = True;
987
+ } elseif (strtolower($val) == "false") {
988
+ $this->_cdn_enabled = False;
989
+ } else {
990
+ $this->_cdn_enabled = NULL;
991
+ }
992
+ return strlen($header);
993
+ }
994
+ if (stripos($header, CDN_URI) === 0) {
995
+ $this->_cdn_uri = trim(substr($header, strlen(CDN_URI)+1));
996
+ return strlen($header);
997
+ }
998
+ if (stripos($header, CDN_TTL) === 0) {
999
+ $this->_cdn_ttl = trim(substr($header, strlen(CDN_TTL)+1))+0;
1000
+ return strlen($header);
1001
+ }
1002
+ if (stripos($header, CDN_LOG_RETENTION) === 0) {
1003
+ $this->_cdn_log_retention =
1004
+ trim(substr($header, strlen(CDN_LOG_RETENTION)+1)) == "True" ? True : False;
1005
+ return strlen($header);
1006
+ }
1007
+
1008
+ if (stripos($header, CDN_ACL_USER_AGENT) === 0) {
1009
+ $this->_cdn_acl_user_agent =
1010
+ trim(substr($header, strlen(CDN_ACL_USER_AGENT)+1));
1011
+ return strlen($header);
1012
+ }
1013
+
1014
+ if (stripos($header, CDN_ACL_REFERRER) === 0) {
1015
+ $this->_cdn_acl_referrer =
1016
+ trim(substr($header, strlen(CDN_ACL_REFERRER)+1));
1017
+ return strlen($header);
1018
+ }
1019
+
1020
+ if (stripos($header, ACCOUNT_CONTAINER_COUNT) === 0) {
1021
+ $this->_account_container_count = (float) trim(substr($header,
1022
+ strlen(ACCOUNT_CONTAINER_COUNT)+1))+0;
1023
+ return strlen($header);
1024
+ }
1025
+ if (stripos($header, ACCOUNT_BYTES_USED) === 0) {
1026
+ $this->_account_bytes_used = (float) trim(substr($header,
1027
+ strlen(ACCOUNT_BYTES_USED)+1))+0;
1028
+ return strlen($header);
1029
+ }
1030
+ if (stripos($header, CONTAINER_OBJ_COUNT) === 0) {
1031
+ $this->_container_object_count = (float) trim(substr($header,
1032
+ strlen(CONTAINER_OBJ_COUNT)+1))+0;
1033
+ return strlen($header);
1034
+ }
1035
+ if (stripos($header, CONTAINER_BYTES_USED) === 0) {
1036
+ $this->_container_bytes_used = (float) trim(substr($header,
1037
+ strlen(CONTAINER_BYTES_USED)+1))+0;
1038
+ return strlen($header);
1039
+ }
1040
+ if (stripos($header, METADATA_HEADER) === 0) {
1041
+ # $header => X-Object-Meta-Foo: bar baz
1042
+ $temp = substr($header, strlen(METADATA_HEADER));
1043
+ # $temp => Foo: bar baz
1044
+ $parts = explode(":", $temp);
1045
+ # $parts[0] => Foo
1046
+ $val = substr(strstr($temp, ":"), 1);
1047
+ # $val => bar baz
1048
+ $this->_obj_metadata[$parts[0]] = trim($val);
1049
+ return strlen($header);
1050
+ }
1051
+ if (stripos($header, "ETag:") === 0) {
1052
+ # $header => ETag: abc123def456...
1053
+ $val = substr(strstr($header, ":"), 1);
1054
+ # $val => abc123def456...
1055
+ $this->_obj_etag = trim($val);
1056
+ return strlen($header);
1057
+ }
1058
+ if (stripos($header, "Last-Modified:") === 0) {
1059
+ $val = substr(strstr($header, ":"), 1);
1060
+ $this->_obj_last_modified = trim($val);
1061
+ return strlen($header);
1062
+ }
1063
+ if (stripos($header, "Content-Type:") === 0) {
1064
+ $val = substr(strstr($header, ":"), 1);
1065
+ $this->_obj_content_type = trim($val);
1066
+ return strlen($header);
1067
+ }
1068
+ if (stripos($header, "Content-Length:") === 0) {
1069
+ $val = substr(strstr($header, ":"), 1);
1070
+ $this->_obj_content_length = (float) trim($val)+0;
1071
+ return strlen($header);
1072
+ }
1073
+ return strlen($header);
1074
+ }
1075
+
1076
+ private function _read_cb($ch, $fd, $length)
1077
+ {
1078
+ $data = fread($fd, $length);
1079
+ $len = strlen($data);
1080
+ if (isset($this->_user_write_progress_callback_func)) {
1081
+ call_user_func($this->_user_write_progress_callback_func, $len);
1082
+ }
1083
+ return $data;
1084
+ }
1085
+
1086
+ private function _write_cb($ch, $data)
1087
+ {
1088
+ $dlen = strlen($data);
1089
+ switch ($this->_write_callback_type) {
1090
+ case "TEXT_LIST":
1091
+ $this->_return_list = $this->_return_list . $data;
1092
+ //= explode("\n",$data); # keep tab,space
1093
+ //his->_text_list[] = rtrim($data,"\n\r\x0B"); # keep tab,space
1094
+ break;
1095
+ case "OBJECT_STREAM":
1096
+ fwrite($this->_obj_write_resource, $data, $dlen);
1097
+ break;
1098
+ case "OBJECT_STRING":
1099
+ $this->_obj_write_string .= $data;
1100
+ break;
1101
+ }
1102
+ if (isset($this->_user_read_progress_callback_func)) {
1103
+ call_user_func($this->_user_read_progress_callback_func, $dlen);
1104
+ }
1105
+ return $dlen;
1106
+ }
1107
+
1108
+ private function _auth_hdr_cb($ch, $header)
1109
+ {
1110
+ preg_match("/^HTTP\/1\.[01] (\d{3}) (.*)/", $header, $matches);
1111
+ if (isset($matches[1])) {
1112
+ $this->response_status = $matches[1];
1113
+ }
1114
+ if (isset($matches[2])) {
1115
+ $this->response_reason = $matches[2];
1116
+ }
1117
+ if (stripos($header, STORAGE_URL) === 0) {
1118
+ $this->storage_url = trim(substr($header, strlen(STORAGE_URL)+1));
1119
+ }
1120
+ if (stripos($header, CDNM_URL) === 0) {
1121
+ $this->cdnm_url = trim(substr($header, strlen(CDNM_URL)+1));
1122
+ }
1123
+ if (stripos($header, AUTH_TOKEN) === 0) {
1124
+ $this->auth_token = trim(substr($header, strlen(AUTH_TOKEN)+1));
1125
+ }
1126
+ if (stripos($header, AUTH_TOKEN_LEGACY) === 0) {
1127
+ $this->auth_token = trim(substr($header,strlen(AUTH_TOKEN_LEGACY)+1));
1128
+ }
1129
+ return strlen($header);
1130
+ }
1131
+
1132
+ private function _make_headers($hdrs=NULL)
1133
+ {
1134
+ $new_headers = array();
1135
+ $has_stoken = False;
1136
+ $has_uagent = False;
1137
+ if (is_array($hdrs)) {
1138
+ foreach ($hdrs as $h => $v) {
1139
+ if (is_int($h)) {
1140
+ $parts = explode(":", $v);
1141
+ $header = $parts[0];
1142
+ $value = trim(substr(strstr($v, ":"), 1));
1143
+ } else {
1144
+ $header = $h;
1145
+ $value = trim($v);
1146
+ }
1147
+
1148
+ if (stripos($header, AUTH_TOKEN) === 0) {
1149
+ $has_stoken = True;
1150
+ }
1151
+ if (stripos($header, "user-agent") === 0) {
1152
+ $has_uagent = True;
1153
+ }
1154
+ $new_headers[] = $header . ": " . $value;
1155
+ }
1156
+ }
1157
+ if (!$has_stoken) {
1158
+ $new_headers[] = AUTH_TOKEN . ": " . $this->auth_token;
1159
+ }
1160
+ if (!$has_uagent) {
1161
+ $new_headers[] = "User-Agent: " . USER_AGENT;
1162
+ }
1163
+ return $new_headers;
1164
+ }
1165
+
1166
+ private function _init($conn_type, $force_new=False)
1167
+ {
1168
+ if (!array_key_exists($conn_type, $this->connections)) {
1169
+ $this->error_str = "Invalid CURL_XXX connection type";
1170
+ return False;
1171
+ }
1172
+
1173
+ if (is_null($this->connections[$conn_type]) || $force_new) {
1174
+ $ch = curl_init();
1175
+ } else {
1176
+ return;
1177
+ }
1178
+
1179
+ if ($this->dbug) { curl_setopt($ch, CURLOPT_VERBOSE, 1); }
1180
+
1181
+ if (!is_null($this->cabundle_path)) {
1182
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1183
+ curl_setopt($ch, CURLOPT_CAINFO, $this->cabundle_path);
1184
+ }
1185
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, True);
1186
+ @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
1187
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
1188
+ curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
1189
+ curl_setopt($ch, CURLOPT_HEADER, 0);
1190
+ curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this, '_header_cb'));
1191
+
1192
+ if ($conn_type == "GET_CALL") {
1193
+ curl_setopt($ch, CURLOPT_WRITEFUNCTION, array(&$this, '_write_cb'));
1194
+ }
1195
+
1196
+ if ($conn_type == "PUT_OBJ") {
1197
+ curl_setopt($ch, CURLOPT_PUT, 1);
1198
+ curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this, '_read_cb'));
1199
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
1200
+ }
1201
+ if ($conn_type == "HEAD") {
1202
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "HEAD");
1203
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1204
+ }
1205
+ if ($conn_type == "PUT_CONT") {
1206
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
1207
+ curl_setopt($ch, CURLOPT_INFILESIZE, 0);
1208
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1209
+ }
1210
+ if ($conn_type == "DEL_POST") {
1211
+ curl_setopt($ch, CURLOPT_NOBODY, 1);
1212
+ }
1213
+ $this->connections[$conn_type] = $ch;
1214
+ return;
1215
+ }
1216
+
1217
+ private function _reset_callback_vars()
1218
+ {
1219
+ $this->_text_list = array();
1220
+ $this->_return_list = NULL;
1221
+ $this->_account_container_count = 0;
1222
+ $this->_account_bytes_used = 0;
1223
+ $this->_container_object_count = 0;
1224
+ $this->_container_bytes_used = 0;
1225
+ $this->_obj_etag = NULL;
1226
+ $this->_obj_last_modified = NULL;
1227
+ $this->_obj_content_type = NULL;
1228
+ $this->_obj_content_length = NULL;
1229
+ $this->_obj_metadata = array();
1230
+ $this->_obj_write_string = "";
1231
+ $this->_cdn_enabled = NULL;
1232
+ $this->_cdn_uri = NULL;
1233
+ $this->_cdn_ttl = NULL;
1234
+ $this->response_status = 0;
1235
+ $this->response_reason = "";
1236
+ }
1237
+
1238
+ private function _make_path($t="STORAGE",$c=NULL,$o=NULL)
1239
+ {
1240
+ $path = array();
1241
+ switch ($t) {
1242
+ case "STORAGE":
1243
+ $path[] = $this->storage_url; break;
1244
+ case "CDN":
1245
+ $path[] = $this->cdnm_url; break;
1246
+ }
1247
+ if ($c == "0")
1248
+ $path[] = rawurlencode($c);
1249
+
1250
+ if ($c) {
1251
+ $path[] = rawurlencode($c);
1252
+ }
1253
+ if ($o) {
1254
+ # mimic Python''s urllib.quote() feature of a "safe" '/' character
1255
+ #
1256
+ $path[] = str_replace("%2F","/",rawurlencode($o));
1257
+ }
1258
+ return implode("/",$path);
1259
+ }
1260
+
1261
+ private function _metadata_headers(&$obj)
1262
+ {
1263
+ $hdrs = array();
1264
+ foreach ($obj->metadata as $k => $v) {
1265
+ if (strpos($k,":") !== False) {
1266
+ throw new SyntaxException(
1267
+ "Metadata keys cannot contain a ':' character.");
1268
+ }
1269
+ $k = trim($k);
1270
+ $key = sprintf("%s%s", METADATA_HEADER, $k);
1271
+ if (!array_key_exists($key, $hdrs)) {
1272
+ if (strlen($k) > 128 || strlen($v) > 256) {
1273
+ $this->error_str = "Metadata key or value exceeds ";
1274
+ $this->error_str .= "maximum length: ($k: $v)";
1275
+ return 0;
1276
+ }
1277
+ $hdrs[] = sprintf("%s%s: %s", METADATA_HEADER, $k, trim($v));
1278
+ }
1279
+ }
1280
+ return $hdrs;
1281
+ }
1282
+
1283
+ private function _send_request($conn_type, $url_path, $hdrs=NULL, $method="GET")
1284
+ {
1285
+ $this->_init($conn_type);
1286
+ $this->_reset_callback_vars();
1287
+ $headers = $this->_make_headers($hdrs);
1288
+
1289
+ if (gettype($this->connections[$conn_type]) == "unknown type")
1290
+ throw new ConnectionNotOpenException (
1291
+ "Connection is not open."
1292
+ );
1293
+
1294
+ switch ($method) {
1295
+ case "DELETE":
1296
+ curl_setopt($this->connections[$conn_type],
1297
+ CURLOPT_CUSTOMREQUEST, "DELETE");
1298
+ break;
1299
+ case "POST":
1300
+ curl_setopt($this->connections[$conn_type],
1301
+ CURLOPT_CUSTOMREQUEST, "POST");
1302
+ default:
1303
+ break;
1304
+ }
1305
+
1306
+ curl_setopt($this->connections[$conn_type],
1307
+ CURLOPT_HTTPHEADER, $headers);
1308
+
1309
+ curl_setopt($this->connections[$conn_type],
1310
+ CURLOPT_URL, $url_path);
1311
+
1312
+ if (!curl_exec($this->connections[$conn_type]) && curl_errno($this->connections[$conn_type]) !== 0) {
1313
+ $this->error_str = "(curl error: "
1314
+ . curl_errno($this->connections[$conn_type]) . ") ";
1315
+ $this->error_str .= curl_error($this->connections[$conn_type]);
1316
+ return False;
1317
+ }
1318
+ return curl_getinfo($this->connections[$conn_type], CURLINFO_HTTP_CODE);
1319
+ }
1320
+
1321
+ function close()
1322
+ {
1323
+ foreach ($this->connections as $cnx) {
1324
+ if (isset($cnx)) {
1325
+ curl_close($cnx);
1326
+ $this->connections[$cnx] = NULL;
1327
+ }
1328
+ }
1329
+ }
1330
+ private function create_array()
1331
+ {
1332
+ $this->_text_list = explode("\n",rtrim($this->_return_list,"\n\x0B"));
1333
+ return True;
1334
+ }
1335
+
1336
+ }
1337
+
1338
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
1339
+
1340
+ /*
1341
+ * Local variables:
1342
+ * tab-width: 4
1343
+ * c-basic-offset: 4
1344
+ * c-hanging-comment-ender-p: nil
1345
+ * End:
1346
+ */
1347
+ ?>
lib/CF/index.html ADDED
File without changes
lib/CSSTidy/class.csstidy.php CHANGED
@@ -1,999 +1,999 @@
1
- <?php
2
- /**
3
- * CSSTidy - CSS Parser and Optimiser
4
- *
5
- * CSS Parser class
6
- *
7
- * This file is part of CSSTidy.
8
- *
9
- * CSSTidy is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License as published by
11
- * the Free Software Foundation; either version 2 of the License, or
12
- * (at your option) any later version.
13
- *
14
- * CSSTidy is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- * GNU General Public License for more details.
18
- *
19
- * You should have received a copy of the GNU General Public License
20
- * along with CSSTidy; if not, write to the Free Software
21
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
- *
23
- * @license http://opensource.org/licenses/gpl-license.php GNU Public License
24
- * @package csstidy
25
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
26
- */
27
-
28
- /**
29
- * Various CSS data needed for correct optimisations etc.
30
- *
31
- * @version 1.3
32
- */
33
- require('data.inc.php');
34
-
35
- /**
36
- * Contains a class for printing CSS code
37
- *
38
- * @version 1.0
39
- */
40
- require('class.csstidy_print.php');
41
-
42
- /**
43
- * Contains a class for optimising CSS code
44
- *
45
- * @version 1.0
46
- */
47
- require('class.csstidy_optimise.php');
48
-
49
- /**
50
- * CSS Parser class
51
- *
52
- * This class represents a CSS parser which reads CSS code and saves it in an array.
53
- * In opposite to most other CSS parsers, it does not use regular expressions and
54
- * thus has full CSS2 support and a higher reliability.
55
- * Additional to that it applies some optimisations and fixes to the CSS code.
56
- * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php
57
- * @package csstidy
58
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
59
- * @version 1.3
60
- */
61
- class csstidy {
62
-
63
- /**
64
- * Saves the parsed CSS
65
- * @var array
66
- * @access public
67
- */
68
- var $css = array();
69
-
70
- /**
71
- * Saves the parsed CSS (raw)
72
- * @var array
73
- * @access private
74
- */
75
- var $tokens = array();
76
-
77
- /**
78
- * Printer class
79
- * @see csstidy_print
80
- * @var object
81
- * @access public
82
- */
83
- var $print;
84
-
85
- /**
86
- * Optimiser class
87
- * @see csstidy_optimise
88
- * @var object
89
- * @access private
90
- */
91
- var $optimise;
92
-
93
- /**
94
- * Saves the CSS charset (@charset)
95
- * @var string
96
- * @access private
97
- */
98
- var $charset = '';
99
-
100
- /**
101
- * Saves all @import URLs
102
- * @var array
103
- * @access private
104
- */
105
- var $import = array();
106
-
107
- /**
108
- * Saves the namespace
109
- * @var string
110
- * @access private
111
- */
112
- var $namespace = '';
113
-
114
- /**
115
- * Contains the version of csstidy
116
- * @var string
117
- * @access private
118
- */
119
- var $version = '1.3';
120
-
121
- /**
122
- * Stores the settings
123
- * @var array
124
- * @access private
125
- */
126
- var $settings = array();
127
-
128
- /**
129
- * Saves the parser-status.
130
- *
131
- * Possible values:
132
- * - is = in selector
133
- * - ip = in property
134
- * - iv = in value
135
- * - instr = in string (started at " or ' or ( )
136
- * - ic = in comment (ignore everything)
137
- * - at = in @-block
138
- *
139
- * @var string
140
- * @access private
141
- */
142
- var $status = 'is';
143
-
144
-
145
- /**
146
- * Saves the current at rule (@media)
147
- * @var string
148
- * @access private
149
- */
150
- var $at = '';
151
-
152
- /**
153
- * Saves the current selector
154
- * @var string
155
- * @access private
156
- */
157
- var $selector = '';
158
-
159
- /**
160
- * Saves the current property
161
- * @var string
162
- * @access private
163
- */
164
- var $property = '';
165
-
166
- /**
167
- * Saves the position of , in selectors
168
- * @var array
169
- * @access private
170
- */
171
- var $sel_separate = array();
172
-
173
- /**
174
- * Saves the current value
175
- * @var string
176
- * @access private
177
- */
178
- var $value = '';
179
-
180
- /**
181
- * Saves the current sub-value
182
- *
183
- * Example for a subvalue:
184
- * background:url(foo.png) red no-repeat;
185
- * "url(foo.png)", "red", and "no-repeat" are subvalues,
186
- * seperated by whitespace
187
- * @var string
188
- * @access private
189
- */
190
- var $sub_value = '';
191
-
192
- /**
193
- * Array which saves all subvalues for a property.
194
- * @var array
195
- * @see sub_value
196
- * @access private
197
- */
198
- var $sub_value_arr = array();
199
-
200
- /**
201
- * Saves the char which opened the last string
202
- * @var string
203
- * @access private
204
- */
205
- var $str_char = '';
206
- var $cur_string = '';
207
-
208
- /**
209
- * Status from which the parser switched to ic or instr
210
- * @var string
211
- * @access private
212
- */
213
- var $from = '';
214
-
215
- /**
216
- * Variable needed to manage string-in-strings, for example url("foo.png")
217
- * @var string
218
- * @access private
219
- */
220
- var $str_in_str = false;
221
-
222
- /**
223
- * =true if in invalid at-rule
224
- * @var bool
225
- * @access private
226
- */
227
- var $invalid_at = false;
228
-
229
- /**
230
- * =true if something has been added to the current selector
231
- * @var bool
232
- * @access private
233
- */
234
- var $added = false;
235
-
236
- /**
237
- * Array which saves the message log
238
- * @var array
239
- * @access private
240
- */
241
- var $log = array();
242
-
243
- /**
244
- * Saves the line number
245
- * @var integer
246
- * @access private
247
- */
248
- var $line = 1;
249
-
250
- /**
251
- * Loads standard template and sets default settings
252
- * @access private
253
- * @version 1.3
254
- */
255
- function csstidy()
256
- {
257
- $this->settings['remove_bslash'] = true;
258
- $this->settings['compress_colors'] = true;
259
- $this->settings['compress_font-weight'] = true;
260
- $this->settings['lowercase_s'] = false;
261
- $this->settings['optimise_shorthands'] = 1;
262
- $this->settings['remove_last_;'] = false;
263
- $this->settings['case_properties'] = 1;
264
- $this->settings['sort_properties'] = false;
265
- $this->settings['sort_selectors'] = false;
266
- $this->settings['merge_selectors'] = 2;
267
- $this->settings['discard_invalid_properties'] = false;
268
- $this->settings['css_level'] = 'CSS2.1';
269
- $this->settings['preserve_css'] = false;
270
- $this->settings['timestamp'] = false;
271
-
272
- $this->load_template('default');
273
- $this->print = new csstidy_print($this);
274
- $this->optimise = new csstidy_optimise($this);
275
- }
276
-
277
- /**
278
- * Get the value of a setting.
279
- * @param string $setting
280
- * @access public
281
- * @return mixed
282
- * @version 1.0
283
- */
284
- function get_cfg($setting)
285
- {
286
- if(isset($this->settings[$setting]))
287
- {
288
- return $this->settings[$setting];
289
- }
290
- return false;
291
- }
292
-
293
- /**
294
- * Set the value of a setting.
295
- * @param string $setting
296
- * @param mixed $value
297
- * @access public
298
- * @return bool
299
- * @version 1.0
300
- */
301
- function set_cfg($setting,$value)
302
- {
303
- if(isset($this->settings[$setting]) && $value !== '')
304
- {
305
- $this->settings[$setting] = $value;
306
- return true;
307
- }
308
- return false;
309
- }
310
-
311
- /**
312
- * Adds a token to $this->tokens
313
- * @param mixed $type
314
- * @param string $data
315
- * @param bool $do add a token even if preserve_css is off
316
- * @access private
317
- * @version 1.0
318
- */
319
- function _add_token($type, $data, $do = false) {
320
- if($this->get_cfg('preserve_css') || $do) {
321
- $this->tokens[] = array($type, ($type == COMMENT) ? $data : trim($data));
322
- }
323
- }
324
-
325
- /**
326
- * Add a message to the message log
327
- * @param string $message
328
- * @param string $type
329
- * @param integer $line
330
- * @access private
331
- * @version 1.0
332
- */
333
- function log($message,$type,$line = -1)
334
- {
335
- if($line === -1)
336
- {
337
- $line = $this->line;
338
- }
339
- $line = intval($line);
340
- $add = array('m' => $message, 't' => $type);
341
- if(!isset($this->log[$line]) || !in_array($add,$this->log[$line]))
342
- {
343
- $this->log[$line][] = $add;
344
- }
345
- }
346
-
347
- /**
348
- * Parse unicode notations and find a replacement character
349
- * @param string $string
350
- * @param integer $i
351
- * @access private
352
- * @return string
353
- * @version 1.2
354
- */
355
- function _unicode(&$string, &$i)
356
- {
357
- ++$i;
358
- $add = '';
359
- $tokens =& $GLOBALS['csstidy']['tokens'];
360
- $replaced = false;
361
-
362
- while($i < strlen($string) && (ctype_xdigit($string{$i}) || ctype_space($string{$i})) && strlen($add) < 6)
363
- {
364
- $add .= $string{$i};
365
-
366
- if(ctype_space($string{$i})) {
367
- break;
368
- }
369
- $i++;
370
- }
371
-
372
- if(hexdec($add) > 47 && hexdec($add) < 58 || hexdec($add) > 64 && hexdec($add) < 91 || hexdec($add) > 96 && hexdec($add) < 123)
373
- {
374
- $this->log('Replaced unicode notation: Changed \\'. $add .' to ' . chr(hexdec($add)),'Information');
375
- $add = chr(hexdec($add));
376
- $replaced = true;
377
- }
378
- else {
379
- $add = trim('\\'.$add);
380
- }
381
-
382
- if(@ctype_xdigit($string{$i+1}) && ctype_space($string{$i})
383
- && !$replaced || !ctype_space($string{$i})) {
384
- $i--;
385
- }
386
-
387
- if($add != '\\' || !$this->get_cfg('remove_bslash') || strpos($tokens, $string{$i+1}) !== false) {
388
- return $add;
389
- }
390
-
391
- if($add == '\\') {
392
- $this->log('Removed unnecessary backslash','Information');
393
- }
394
- return '';
395
- }
396
-
397
- /**
398
- * Loads a new template
399
- * @param string $content either filename (if $from_file == true), content of a template file, "high_compression", "highest_compression", "low_compression", or "default"
400
- * @param bool $from_file uses $content as filename if true
401
- * @access public
402
- * @version 1.1
403
- * @see http://csstidy.sourceforge.net/templates.php
404
- */
405
- function load_template($content, $from_file=true)
406
- {
407
- $predefined_templates =& $GLOBALS['csstidy']['predefined_templates'];
408
- if($content == 'high_compression' || $content == 'default' || $content == 'highest_compression' || $content == 'low_compression')
409
- {
410
- $this->template = $predefined_templates[$content];
411
- return;
412
- }
413
-
414
- if($from_file)
415
- {
416
- $content = strip_tags(file_get_contents($content),'<span>');
417
- }
418
- $content = str_replace("\r\n","\n",$content); // Unify newlines (because the output also only uses \n)
419
- $template = explode('|',$content);
420
-
421
- for ($i = 0; $i < count($template); $i++ )
422
- {
423
- $this->template[$i] = $template[$i];
424
- }
425
- }
426
-
427
- /**
428
- * Starts parsing from URL
429
- * @param string $url
430
- * @access public
431
- * @version 1.0
432
- */
433
- function parse_from_url($url)
434
- {
435
- return $this->parse(@file_get_contents($url));
436
- }
437
-
438
- /**
439
- * Checks if there is a token at the current position
440
- * @param string $string
441
- * @param integer $i
442
- * @access public
443
- * @version 1.11
444
- */
445
- function is_token(&$string, $i)
446
- {
447
- $tokens =& $GLOBALS['csstidy']['tokens'];
448
- return (strpos($tokens, $string{$i}) !== false && !csstidy::escaped($string,$i));
449
- }
450
-
451
-
452
- /**
453
- * Parses CSS in $string. The code is saved as array in $this->css
454
- * @param string $string the CSS code
455
- * @access public
456
- * @return bool
457
- * @version 1.1
458
- */
459
- function parse($string) {
460
- // PHP bug? Settings need to be refreshed in PHP4
461
- $this->print = new csstidy_print($this);
462
- $this->optimise = new csstidy_optimise($this);
463
-
464
- $all_properties =& $GLOBALS['csstidy']['all_properties'];
465
- $at_rules =& $GLOBALS['csstidy']['at_rules'];
466
-
467
- $this->css = array();
468
- $this->print->input_css = $string;
469
- $string = str_replace("\r\n","\n",$string) . ' ';
470
- $cur_comment = '';
471
-
472
- for ($i = 0, $size = strlen($string); $i < $size; $i++ )
473
- {
474
- if($string{$i} == "\n" || $string{$i} == "\r")
475
- {
476
- ++$this->line;
477
- }
478
-
479
- switch($this->status)
480
- {
481
- /* Case in at-block */
482
- case 'at':
483
- if(csstidy::is_token($string,$i))
484
- {
485
- if($string{$i} == '/' && @$string{$i+1} == '*')
486
- {
487
- $this->status = 'ic'; ++$i;
488
- $this->from = 'at';
489
- }
490
- elseif($string{$i} == '{')
491
- {
492
- $this->status = 'is';
493
- $this->_add_token(AT_START, $this->at);
494
- }
495
- elseif($string{$i} == ',')
496
- {
497
- $this->at = trim($this->at).',';
498
- }
499
- elseif($string{$i} == '\\')
500
- {
501
- $this->at .= $this->_unicode($string,$i);
502
- }
503
- }
504
- else
505
- {
506
- $lastpos = strlen($this->at)-1;
507
- if(!( (ctype_space($this->at{$lastpos}) || csstidy::is_token($this->at,$lastpos) && $this->at{$lastpos} == ',') && ctype_space($string{$i})))
508
- {
509
- $this->at .= $string{$i};
510
- }
511
- }
512
- break;
513
-
514
- /* Case in-selector */
515
- case 'is':
516
- if(csstidy::is_token($string,$i))
517
- {
518
- if($string{$i} == '/' && @$string{$i+1} == '*' && trim($this->selector) == '')
519
- {
520
- $this->status = 'ic'; ++$i;
521
- $this->from = 'is';
522
- }
523
- elseif($string{$i} == '@' && trim($this->selector) == '')
524
- {
525
- // Check for at-rule
526
- $this->invalid_at = true;
527
- foreach($at_rules as $name => $type)
528
- {
529
- if(!strcasecmp(substr($string,$i+1,strlen($name)),$name))
530
- {
531
- ($type == 'at') ? $this->at = '@'.$name : $this->selector = '@'.$name;
532
- $this->status = $type;
533
- $i += strlen($name);
534
- $this->invalid_at = false;
535
- }
536
- }
537
-
538
- if($this->invalid_at)
539
- {
540
- $this->selector = '@';
541
- $invalid_at_name = '';
542
- for($j = $i+1; $j < $size; ++$j)
543
- {
544
- if(!ctype_alpha($string{$j}))
545
- {
546
- break;
547
- }
548
- $invalid_at_name .= $string{$j};
549
- }
550
- $this->log('Invalid @-rule: '.$invalid_at_name.' (removed)','Warning');
551
- }
552
- }
553
- elseif(($string{$i} == '"' || $string{$i} == "'"))
554
- {
555
- $this->cur_string = $string{$i};
556
- $this->status = 'instr';
557
- $this->str_char = $string{$i};
558
- $this->from = 'is';
559
- }
560
- elseif($this->invalid_at && $string{$i} == ';')
561
- {
562
- $this->invalid_at = false;
563
- $this->status = 'is';
564
- }
565
- elseif($string{$i} == '{')
566
- {
567
- $this->status = 'ip';
568
- $this->_add_token(SEL_START, $this->selector);
569
- $this->added = false;
570
- }
571
- elseif($string{$i} == '}')
572
- {
573
- $this->_add_token(AT_END, $this->at);
574
- $this->at = '';
575
- $this->selector = '';
576
- $this->sel_separate = array();
577
- }
578
- elseif($string{$i} == ',')
579
- {
580
- $this->selector = trim($this->selector).',';
581
- $this->sel_separate[] = strlen($this->selector);
582
- }
583
- elseif($string{$i} == '\\')
584
- {
585
- $this->selector .= $this->_unicode($string,$i);
586
- }
587
- // remove unnecessary universal selector, FS#147
588
- else if(!($string{$i} == '*' && @in_array($string{$i+1}, array('.', '#', '[', ':')))) {
589
- $this->selector .= $string{$i};
590
- }
591
- }
592
- else
593
- {
594
- $lastpos = strlen($this->selector)-1;
595
- if($lastpos == -1 || !( (ctype_space($this->selector{$lastpos}) || csstidy::is_token($this->selector,$lastpos) && $this->selector{$lastpos} == ',') && ctype_space($string{$i})))
596
- {
597
- $this->selector .= $string{$i};
598
- }
599
- }
600
- break;
601
-
602
- /* Case in-property */
603
- case 'ip':
604
- if(csstidy::is_token($string,$i))
605
- {
606
- if(($string{$i} == ':' || $string{$i} == '=') && $this->property != '')
607
- {
608
- $this->status = 'iv';
609
- if(!$this->get_cfg('discard_invalid_properties') || csstidy::property_is_valid($this->property)) {
610
- $this->_add_token(PROPERTY, $this->property);
611
- }
612
- }
613
- elseif($string{$i} == '/' && @$string{$i+1} == '*' && $this->property == '')
614
- {
615
- $this->status = 'ic'; ++$i;
616
- $this->from = 'ip';
617
- }
618
- elseif($string{$i} == '}')
619
- {
620
- $this->explode_selectors();
621
- $this->status = 'is';
622
- $this->invalid_at = false;
623
- $this->_add_token(SEL_END, $this->selector);
624
- $this->selector = '';
625
- $this->property = '';
626
- }
627
- elseif($string{$i} == ';')
628
- {
629
- $this->property = '';
630
- }
631
- elseif($string{$i} == '\\')
632
- {
633
- $this->property .= $this->_unicode($string,$i);
634
- }
635
- }
636
- elseif(!ctype_space($string{$i}))
637
- {
638
- $this->property .= $string{$i};
639
- }
640
- break;
641
-
642
- /* Case in-value */
643
- case 'iv':
644
- $pn = (($string{$i} == "\n" || $string{$i} == "\r") && $this->property_is_next($string,$i+1) || $i == strlen($string)-1);
645
- if(csstidy::is_token($string,$i) || $pn)
646
- {
647
- if($string{$i} == '/' && @$string{$i+1} == '*')
648
- {
649
- $this->status = 'ic'; ++$i;
650
- $this->from = 'iv';
651
- }
652
- elseif(($string{$i} == '"' || $string{$i} == "'" || $string{$i} == '('))
653
- {
654
- $this->cur_string = $string{$i};
655
- $this->str_char = ($string{$i} == '(') ? ')' : $string{$i};
656
- $this->status = 'instr';
657
- $this->from = 'iv';
658
- }
659
- elseif($string{$i} == ',')
660
- {
661
- $this->sub_value = trim($this->sub_value).',';
662
- }
663
- elseif($string{$i} == '\\')
664
- {
665
- $this->sub_value .= $this->_unicode($string,$i);
666
- }
667
- elseif($string{$i} == ';' || $pn)
668
- {
669
- if($this->selector{0} == '@' && isset($at_rules[substr($this->selector,1)]) && $at_rules[substr($this->selector,1)] == 'iv')
670
- {
671
- $this->sub_value_arr[] = trim($this->sub_value);
672
-
673
- $this->status = 'is';
674
-
675
- switch($this->selector)
676
- {
677
- case '@charset': $this->charset = $this->sub_value_arr[0]; break;
678
- case '@namespace': $this->namespace = implode(' ',$this->sub_value_arr); break;
679
- case '@import': $this->import[] = implode(' ',$this->sub_value_arr); break;
680
- }
681
-
682
- $this->sub_value_arr = array();
683
- $this->sub_value = '';
684
- $this->selector = '';
685
- $this->sel_separate = array();
686
- }
687
- else
688
- {
689
- $this->status = 'ip';
690
- }
691
- }
692
- elseif($string{$i} != '}')
693
- {
694
- $this->sub_value .= $string{$i};
695
- }
696
- if(($string{$i} == '}' || $string{$i} == ';' || $pn) && !empty($this->selector))
697
- {
698
- if($this->at == '')
699
- {
700
- $this->at = DEFAULT_AT;
701
- }
702
-
703
- // case settings
704
- if($this->get_cfg('lowercase_s'))
705
- {
706
- $this->selector = strtolower($this->selector);
707
- }
708
- $this->property = strtolower($this->property);
709
-
710
- $this->optimise->subvalue();
711
- if($this->sub_value != '') {
712
- $this->sub_value_arr[] = $this->sub_value;
713
- $this->sub_value = '';
714
- }
715
-
716
- $this->value = implode(' ',$this->sub_value_arr);
717
-
718
- $this->selector = trim($this->selector);
719
-
720
- $this->optimise->value();
721
-
722
- $valid = csstidy::property_is_valid($this->property);
723
- if((!$this->invalid_at || $this->get_cfg('preserve_css')) && (!$this->get_cfg('discard_invalid_properties') || $valid))
724
- {
725
- $this->css_add_property($this->at,$this->selector,$this->property,$this->value);
726
- $this->_add_token(VALUE, $this->value);
727
- $this->optimise->shorthands();
728
- }
729
- if(!$valid)
730
- {
731
- if($this->get_cfg('discard_invalid_properties'))
732
- {
733
- $this->log('Removed invalid property: '.$this->property,'Warning');
734
- }
735
- else
736
- {
737
- $this->log('Invalid property in '.strtoupper($this->get_cfg('css_level')).': '.$this->property,'Warning');
738
- }
739
- }
740
-
741
- $this->property = '';
742
- $this->sub_value_arr = array();
743
- $this->value = '';
744
- }
745
- if($string{$i} == '}')
746
- {
747
- $this->explode_selectors();
748
- $this->_add_token(SEL_END, $this->selector);
749
- $this->status = 'is';
750
- $this->invalid_at = false;
751
- $this->selector = '';
752
- }
753
- }
754
- elseif(!$pn)
755
- {
756
- $this->sub_value .= $string{$i};
757
-
758
- if(ctype_space($string{$i}))
759
- {
760
- $this->optimise->subvalue();
761
- if($this->sub_value != '') {
762
- $this->sub_value_arr[] = $this->sub_value;
763
- $this->sub_value = '';
764
- }
765
- }
766
- }
767
- break;
768
-
769
- /* Case in string */
770
- case 'instr':
771
- if($this->str_char == ')' && ($string{$i} == '"' || $string{$i} == '\'') && !$this->str_in_str && !csstidy::escaped($string,$i))
772
- {
773
- $this->str_in_str = true;
774
- }
775
- elseif($this->str_char == ')' && ($string{$i} == '"' || $string{$i} == '\'') && $this->str_in_str && !csstidy::escaped($string,$i))
776
- {
777
- $this->str_in_str = false;
778
- }
779
- $temp_add = $string{$i}; // ...and no not-escaped backslash at the previous position
780
- if( ($string{$i} == "\n" || $string{$i} == "\r") && !($string{$i-1} == '\\' && !csstidy::escaped($string,$i-1)) )
781
- {
782
- $temp_add = "\\A ";
783
- $this->log('Fixed incorrect newline in string','Warning');
784
- }
785
- if (!($this->str_char == ')' && in_array($string{$i}, $GLOBALS['csstidy']['whitespace']) && !$this->str_in_str)) {
786
- $this->cur_string .= $temp_add;
787
- }
788
- if($string{$i} == $this->str_char && !csstidy::escaped($string,$i) && !$this->str_in_str)
789
- {
790
- $this->status = $this->from;
791
- if (!preg_match('|[' . implode('', $GLOBALS['csstidy']['whitespace']) . ']|uis', $this->cur_string) && $this->property != 'content') {
792
- if ($this->str_char == '"' || $this->str_char == '\'') {
793
- $this->cur_string = substr($this->cur_string, 1, -1);
794
- } else if (strlen($this->cur_string) > 3 && ($this->cur_string[1] == '"' || $this->cur_string[1] == '\'')) /* () */ {
795
- $this->cur_string = $this->cur_string[0] . substr($this->cur_string, 2, -2) . substr($this->cur_string, -1);
796
- }
797
- }
798
- if($this->from == 'iv')
799
- {
800
- $this->sub_value .= $this->cur_string;
801
- }
802
- elseif($this->from == 'is')
803
- {
804
- $this->selector .= $this->cur_string;
805
- }
806
- }
807
- break;
808
-
809
- /* Case in-comment */
810
- case 'ic':
811
- if($string{$i} == '*' && $string{$i+1} == '/')
812
- {
813
- $this->status = $this->from;
814
- $i++;
815
- $this->_add_token(COMMENT, $cur_comment);
816
- $cur_comment = '';
817
- }
818
- else
819
- {
820
- $cur_comment .= $string{$i};
821
- }
822
- break;
823
- }
824
- }
825
-
826
- $this->optimise->postparse();
827
-
828
- $this->print->_reset();
829
-
830
- return !(empty($this->css) && empty($this->import) && empty($this->charset) && empty($this->tokens) && empty($this->namespace));
831
- }
832
-
833
- /**
834
- * Explodes selectors
835
- * @access private
836
- * @version 1.0
837
- */
838
- function explode_selectors()
839
- {
840
- // Explode multiple selectors
841
- if($this->get_cfg('merge_selectors') == 1)
842
- {
843
- $new_sels = array();
844
- $lastpos = 0;
845
- $this->sel_separate[] = strlen($this->selector);
846
- foreach($this->sel_separate as $num => $pos)
847
- {
848
- if($num == count($this->sel_separate)-1) {
849
- $pos += 1;
850
- }
851
-
852
- $new_sels[] = substr($this->selector,$lastpos,$pos-$lastpos-1);
853
- $lastpos = $pos;
854
- }
855
-
856
- if(count($new_sels) > 1)
857
- {
858
- foreach($new_sels as $selector)
859
- {
860
- $this->merge_css_blocks($this->at,$selector,$this->css[$this->at][$this->selector]);
861
- }
862
- unset($this->css[$this->at][$this->selector]);
863
- }
864
- }
865
- $this->sel_separate = array();
866
- }
867
-
868
- /**
869
- * Checks if a character is escaped (and returns true if it is)
870
- * @param string $string
871
- * @param integer $pos
872
- * @access public
873
- * @return bool
874
- * @version 1.02
875
- */
876
- function escaped(&$string,$pos)
877
- {
878
- return !(@($string{$pos-1} != '\\') || csstidy::escaped($string,$pos-1));
879
- }
880
-
881
- /**
882
- * Adds a property with value to the existing CSS code
883
- * @param string $media
884
- * @param string $selector
885
- * @param string $property
886
- * @param string $new_val
887
- * @access private
888
- * @version 1.2
889
- */
890
- function css_add_property($media,$selector,$property,$new_val)
891
- {
892
- if($this->get_cfg('preserve_css') || trim($new_val) == '') {
893
- return;
894
- }
895
-
896
- $this->added = true;
897
- if(isset($this->css[$media][$selector][$property]))
898
- {
899
- if((csstidy::is_important($this->css[$media][$selector][$property]) && csstidy::is_important($new_val)) || !csstidy::is_important($this->css[$media][$selector][$property]))
900
- {
901
- unset($this->css[$media][$selector][$property]);
902
- $this->css[$media][$selector][$property] = trim($new_val);
903
- }
904
- }
905
- else
906
- {
907
- $this->css[$media][$selector][$property] = trim($new_val);
908
- }
909
- }
910
-
911
- /**
912
- * Adds CSS to an existing media/selector
913
- * @param string $media
914
- * @param string $selector
915
- * @param array $css_add
916
- * @access private
917
- * @version 1.1
918
- */
919
- function merge_css_blocks($media,$selector,$css_add)
920
- {
921
- foreach($css_add as $property => $value)
922
- {
923
- $this->css_add_property($media,$selector,$property,$value,false);
924
- }
925
- }
926
-
927
- /**
928
- * Checks if $value is !important.
929
- * @param string $value
930
- * @return bool
931
- * @access public
932
- * @version 1.0
933
- */
934
- function is_important(&$value)
935
- {
936
- return (!strcasecmp(substr(str_replace($GLOBALS['csstidy']['whitespace'],'',$value),-10,10),'!important'));
937
- }
938
-
939
- /**
940
- * Returns a value without !important
941
- * @param string $value
942
- * @return string
943
- * @access public
944
- * @version 1.0
945
- */
946
- function gvw_important($value)
947
- {
948
- if(csstidy::is_important($value))
949
- {
950
- $value = trim($value);
951
- $value = substr($value,0,-9);
952
- $value = trim($value);
953
- $value = substr($value,0,-1);
954
- $value = trim($value);
955
- return $value;
956
- }
957
- return $value;
958
- }
959
-
960
- /**
961
- * Checks if the next word in a string from pos is a CSS property
962
- * @param string $istring
963
- * @param integer $pos
964
- * @return bool
965
- * @access private
966
- * @version 1.2
967
- */
968
- function property_is_next($istring, $pos)
969
- {
970
- $all_properties =& $GLOBALS['csstidy']['all_properties'];
971
- $istring = substr($istring,$pos,strlen($istring)-$pos);
972
- $pos = strpos($istring,':');
973
- if($pos === false)
974
- {
975
- return false;
976
- }
977
- $istring = strtolower(trim(substr($istring,0,$pos)));
978
- if(isset($all_properties[$istring]))
979
- {
980
- $this->log('Added semicolon to the end of declaration','Warning');
981
- return true;
982
- }
983
- return false;
984
- }
985
-
986
- /**
987
- * Checks if a property is valid
988
- * @param string $property
989
- * @return bool;
990
- * @access public
991
- * @version 1.0
992
- */
993
- function property_is_valid($property) {
994
- $all_properties =& $GLOBALS['csstidy']['all_properties'];
995
- return (isset($all_properties[$property]) && strpos($all_properties[$property],strtoupper($this->get_cfg('css_level'))) !== false );
996
- }
997
-
998
- }
999
- ?>
1
+ <?php
2
+ /**
3
+ * CSSTidy - CSS Parser and Optimiser
4
+ *
5
+ * CSS Parser class
6
+ *
7
+ * This file is part of CSSTidy.
8
+ *
9
+ * CSSTidy is free software; you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation; either version 2 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * CSSTidy is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with CSSTidy; if not, write to the Free Software
21
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
+ *
23
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
24
+ * @package csstidy
25
+ * @author Florian Schmitz (floele at gmail dot com) 2005-2006
26
+ */
27
+
28
+ /**
29
+ * Various CSS data needed for correct optimisations etc.
30
+ *
31
+ * @version 1.3
32
+ */
33
+ require('data.inc.php');
34
+
35
+ /**
36
+ * Contains a class for printing CSS code
37
+ *
38
+ * @version 1.0
39
+ */
40
+ require('class.csstidy_print.php');
41
+
42
+ /**
43
+ * Contains a class for optimising CSS code
44
+ *
45
+ * @version 1.0
46
+ */
47
+ require('class.csstidy_optimise.php');
48
+
49
+ /**
50
+ * CSS Parser class
51
+ *
52
+ * This class represents a CSS parser which reads CSS code and saves it in an array.
53
+ * In opposite to most other CSS parsers, it does not use regular expressions and
54
+ * thus has full CSS2 support and a higher reliability.
55
+ * Additional to that it applies some optimisations and fixes to the CSS code.
56
+ * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php
57
+ * @package csstidy
58
+ * @author Florian Schmitz (floele at gmail dot com) 2005-2006
59
+ * @version 1.3
60
+ */
61
+ class csstidy {
62
+
63
+ /**
64
+ * Saves the parsed CSS
65
+ * @var array
66
+ * @access public
67
+ */
68
+ var $css = array();
69
+
70
+ /**
71
+ * Saves the parsed CSS (raw)
72
+ * @var array
73
+ * @access private
74
+ */
75
+ var $tokens = array();
76
+
77
+ /**
78
+ * Printer class
79
+ * @see csstidy_print
80
+ * @var object
81
+ * @access public
82
+ */
83
+ var $print;
84
+
85
+ /**
86
+ * Optimiser class
87
+ * @see csstidy_optimise
88
+ * @var object
89
+ * @access private
90
+ */
91
+ var $optimise;
92
+
93
+ /**
94
+ * Saves the CSS charset (@charset)
95
+ * @var string
96
+ * @access private
97
+ */
98
+ var $charset = '';
99
+
100
+ /**
101
+ * Saves all @import URLs
102
+ * @var array
103
+ * @access private
104
+ */
105
+ var $import = array();
106
+
107
+ /**
108
+ * Saves the namespace
109
+ * @var string
110
+ * @access private
111
+ */
112
+ var $namespace = '';
113
+
114
+ /**
115
+ * Contains the version of csstidy
116
+ * @var string
117
+ * @access private
118
+ */
119
+ var $version = '1.3';
120
+
121
+ /**
122
+ * Stores the settings
123
+ * @var array
124
+ * @access private
125
+ */
126
+ var $settings = array();
127
+
128
+ /**
129
+ * Saves the parser-status.
130
+ *
131
+ * Possible values:
132
+ * - is = in selector
133
+ * - ip = in property
134
+ * - iv = in value
135
+ * - instr = in string (started at " or ' or ( )
136
+ * - ic = in comment (ignore everything)
137
+ * - at = in @-block
138
+ *
139
+ * @var string
140
+ * @access private
141
+ */
142
+ var $status = 'is';
143
+
144
+
145
+ /**
146
+ * Saves the current at rule (@media)
147
+ * @var string
148
+ * @access private
149
+ */
150
+ var $at = '';
151
+
152
+ /**
153
+ * Saves the current selector
154
+ * @var string
155
+ * @access private
156
+ */
157
+ var $selector = '';
158
+
159
+ /**
160
+ * Saves the current property
161
+ * @var string
162
+ * @access private
163
+ */
164
+ var $property = '';
165
+
166
+ /**
167
+ * Saves the position of , in selectors
168
+ * @var array
169
+ * @access private
170
+ */
171
+ var $sel_separate = array();
172
+
173
+ /**
174
+ * Saves the current value
175
+ * @var string
176
+ * @access private
177
+ */
178
+ var $value = '';
179
+
180
+ /**
181
+ * Saves the current sub-value
182
+ *
183
+ * Example for a subvalue:
184
+ * background:url(foo.png) red no-repeat;
185
+ * "url(foo.png)", "red", and "no-repeat" are subvalues,
186
+ * seperated by whitespace
187
+ * @var string
188
+ * @access private
189
+ */
190
+ var $sub_value = '';
191
+
192
+ /**
193
+ * Array which saves all subvalues for a property.
194
+ * @var array
195
+ * @see sub_value
196
+ * @access private
197
+ */
198
+ var $sub_value_arr = array();
199
+
200
+ /**
201
+ * Saves the char which opened the last string
202
+ * @var string
203
+ * @access private
204
+ */
205
+ var $str_char = '';
206
+ var $cur_string = '';
207
+
208
+ /**
209
+ * Status from which the parser switched to ic or instr
210
+ * @var string
211
+ * @access private
212
+ */
213
+ var $from = '';
214
+
215
+ /**
216
+ * Variable needed to manage string-in-strings, for example url("foo.png")
217
+ * @var string
218
+ * @access private
219
+ */
220
+ var $str_in_str = false;
221
+
222
+ /**
223
+ * =true if in invalid at-rule
224
+ * @var bool
225
+ * @access private
226
+ */
227
+ var $invalid_at = false;
228
+
229
+ /**
230
+ * =true if something has been added to the current selector
231
+ * @var bool
232
+ * @access private
233
+ */
234
+ var $added = false;
235
+
236
+ /**
237
+ * Array which saves the message log
238
+ * @var array
239
+ * @access private
240
+ */
241
+ var $log = array();
242
+
243
+ /**
244
+ * Saves the line number
245
+ * @var integer
246
+ * @access private
247
+ */
248
+ var $line = 1;
249
+
250
+ /**
251
+ * Loads standard template and sets default settings
252
+ * @access private
253
+ * @version 1.3
254
+ */
255
+ function csstidy()
256
+ {
257
+ $this->settings['remove_bslash'] = true;
258
+ $this->settings['compress_colors'] = true;
259
+ $this->settings['compress_font-weight'] = true;
260
+ $this->settings['lowercase_s'] = false;
261
+ $this->settings['optimise_shorthands'] = 1;
262
+ $this->settings['remove_last_;'] = false;
263
+ $this->settings['case_properties'] = 1;
264
+ $this->settings['sort_properties'] = false;
265
+ $this->settings['sort_selectors'] = false;
266
+ $this->settings['merge_selectors'] = 2;
267
+ $this->settings['discard_invalid_properties'] = false;
268
+ $this->settings['css_level'] = 'CSS2.1';
269
+ $this->settings['preserve_css'] = false;
270
+ $this->settings['timestamp'] = false;
271
+
272
+ $this->load_template('default');
273
+ $this->print = new csstidy_print($this);
274
+ $this->optimise = new csstidy_optimise($this);
275
+ }
276
+
277
+ /**
278
+ * Get the value of a setting.
279
+ * @param string $setting
280
+ * @access public
281
+ * @return mixed
282
+ * @version 1.0
283
+ */
284
+ function get_cfg($setting)
285
+ {
286
+ if(isset($this->settings[$setting]))
287
+ {
288
+ return $this->settings[$setting];
289
+ }
290
+ return false;
291
+ }
292
+
293
+ /**
294
+ * Set the value of a setting.
295
+ * @param string $setting
296
+ * @param mixed $value
297
+ * @access public
298
+ * @return bool
299
+ * @version 1.0
300
+ */
301
+ function set_cfg($setting,$value)
302
+ {
303
+ if(isset($this->settings[$setting]) && $value !== '')
304
+ {
305
+ $this->settings[$setting] = $value;
306
+ return true;
307
+ }
308
+ return false;
309
+ }
310
+
311
+ /**
312
+ * Adds a token to $this->tokens
313
+ * @param mixed $type
314
+ * @param string $data
315
+ * @param bool $do add a token even if preserve_css is off
316
+ * @access private
317
+ * @version 1.0
318
+ */
319
+ function _add_token($type, $data, $do = false) {
320
+ if($this->get_cfg('preserve_css') || $do) {
321
+ $this->tokens[] = array($type, ($type == COMMENT) ? $data : trim($data));
322
+ }
323
+ }
324
+
325
+ /**
326
+ * Add a message to the message log
327
+ * @param string $message
328
+ * @param string $type
329
+ * @param integer $line
330
+ * @access private
331
+ * @version 1.0
332
+ */
333
+ function log($message,$type,$line = -1)
334
+ {
335
+ if($line === -1)
336
+ {
337
+ $line = $this->line;
338
+ }
339
+ $line = intval($line);
340
+ $add = array('m' => $message, 't' => $type);
341
+ if(!isset($this->log[$line]) || !in_array($add,$this->log[$line]))
342
+ {
343
+ $this->log[$line][] = $add;
344
+ }
345
+ }
346
+
347
+ /**
348
+ * Parse unicode notations and find a replacement character
349
+ * @param string $string
350
+ * @param integer $i
351
+ * @access private
352
+ * @return string
353
+ * @version 1.2
354
+ */
355
+ function _unicode(&$string, &$i)
356
+ {
357
+ ++$i;
358
+ $add = '';
359
+ $tokens =& $GLOBALS['csstidy']['tokens'];
360
+ $replaced = false;
361
+
362
+ while($i < strlen($string) && (ctype_xdigit($string{$i}) || ctype_space($string{$i})) && strlen($add) < 6)
363
+ {
364
+ $add .= $string{$i};
365
+
366
+ if(ctype_space($string{$i})) {
367
+ break;
368
+ }
369
+ $i++;
370
+ }
371
+
372
+ if(hexdec($add) > 47 && hexdec($add) < 58 || hexdec($add) > 64 && hexdec($add) < 91 || hexdec($add) > 96 && hexdec($add) < 123)
373
+ {
374
+ $this->log('Replaced unicode notation: Changed \\'. $add .' to ' . chr(hexdec($add)),'Information');
375
+ $add = chr(hexdec($add));
376
+ $replaced = true;
377
+ }
378
+ else {
379
+ $add = trim('\\'.$add);
380
+ }
381
+
382
+ if(@ctype_xdigit($string{$i+1}) && ctype_space($string{$i})
383
+ && !$replaced || !ctype_space($string{$i})) {
384
+ $i--;
385
+ }
386
+
387
+ if($add != '\\' || !$this->get_cfg('remove_bslash') || strpos($tokens, $string{$i+1}) !== false) {
388
+ return $add;
389
+ }
390
+
391
+ if($add == '\\') {
392
+ $this->log('Removed unnecessary backslash','Information');
393
+ }
394
+ return '';
395
+ }
396
+
397
+ /**
398
+ * Loads a new template
399
+ * @param string $content either filename (if $from_file == true), content of a template file, "high_compression", "highest_compression", "low_compression", or "default"
400
+ * @param bool $from_file uses $content as filename if true
401
+ * @access public
402
+ * @version 1.1
403
+ * @see http://csstidy.sourceforge.net/templates.php
404
+ */
405
+ function load_template($content, $from_file=true)
406
+ {
407
+ $predefined_templates =& $GLOBALS['csstidy']['predefined_templates'];
408
+ if($content == 'high_compression' || $content == 'default' || $content == 'highest_compression' || $content == 'low_compression')
409
+ {
410
+ $this->template = $predefined_templates[$content];
411
+ return;
412
+ }
413
+
414
+ if($from_file)
415
+ {
416
+ $content = strip_tags(file_get_contents($content),'<span>');
417
+ }
418
+ $content = str_replace("\r\n","\n",$content); // Unify newlines (because the output also only uses \n)
419
+ $template = explode('|',$content);
420
+
421
+ for ($i = 0; $i < count($template); $i++ )
422
+ {
423
+ $this->template[$i] = $template[$i];
424
+ }
425
+ }
426
+
427
+ /**
428
+ * Starts parsing from URL
429
+ * @param string $url
430
+ * @access public
431
+ * @version 1.0
432
+ */
433
+ function parse_from_url($url)
434
+ {
435
+ return $this->parse(@file_get_contents($url));
436
+ }
437
+
438
+ /**
439
+ * Checks if there is a token at the current position
440
+ * @param string $string
441
+ * @param integer $i
442
+ * @access public
443
+ * @version 1.11
444
+ */
445
+ function is_token(&$string, $i)
446
+ {
447
+ $tokens =& $GLOBALS['csstidy']['tokens'];
448
+ return (strpos($tokens, $string{$i}) !== false && !csstidy::escaped($string,$i));
449
+ }
450
+
451
+
452
+ /**
453
+ * Parses CSS in $string. The code is saved as array in $this->css
454
+ * @param string $string the CSS code
455
+ * @access public
456
+ * @return bool
457
+ * @version 1.1
458
+ */
459
+ function parse($string) {
460
+ // PHP bug? Settings need to be refreshed in PHP4
461
+ $this->print = new csstidy_print($this);
462
+ $this->optimise = new csstidy_optimise($this);
463
+
464
+ $all_properties =& $GLOBALS['csstidy']['all_properties'];
465
+ $at_rules =& $GLOBALS['csstidy']['at_rules'];
466
+
467
+ $this->css = array();
468
+ $this->print->input_css = $string;
469
+ $string = str_replace("\r\n","\n",$string) . ' ';
470
+ $cur_comment = '';
471
+
472
+ for ($i = 0, $size = strlen($string); $i < $size; $i++ )
473
+ {
474
+ if($string{$i} == "\n" || $string{$i} == "\r")
475
+ {
476
+ ++$this->line;
477
+ }
478
+
479
+ switch($this->status)
480
+ {
481
+ /* Case in at-block */
482
+ case 'at':
483
+ if(csstidy::is_token($string,$i))
484
+ {
485
+ if($string{$i} == '/' && @$string{$i+1} == '*')
486
+ {
487
+ $this->status = 'ic'; ++$i;
488
+ $this->from = 'at';
489
+ }
490
+ elseif($string{$i} == '{')
491
+ {
492
+ $this->status = 'is';
493
+ $this->_add_token(AT_START, $this->at);
494
+ }
495
+ elseif($string{$i} == ',')
496
+ {
497
+ $this->at = trim($this->at).',';
498
+ }
499
+ elseif($string{$i} == '\\')
500
+ {
501
+ $this->at .= $this->_unicode($string,$i);
502
+ }
503
+ }
504
+ else
505
+ {
506
+ $lastpos = strlen($this->at)-1;
507
+ if(!( (ctype_space($this->at{$lastpos}) || csstidy::is_token($this->at,$lastpos) && $this->at{$lastpos} == ',') && ctype_space($string{$i})))
508
+ {
509
+ $this->at .= $string{$i};
510
+ }
511
+ }
512
+ break;
513
+
514
+ /* Case in-selector */
515
+ case 'is':
516
+ if(csstidy::is_token($string,$i))
517
+ {
518
+ if($string{$i} == '/' && @$string{$i+1} == '*' && trim($this->selector) == '')
519
+ {
520
+ $this->status = 'ic'; ++$i;
521
+ $this->from = 'is';
522
+ }
523
+ elseif($string{$i} == '@' && trim($this->selector) == '')
524
+ {
525
+ // Check for at-rule
526
+ $this->invalid_at = true;
527
+ foreach($at_rules as $name => $type)
528
+ {
529
+ if(!strcasecmp(substr($string,$i+1,strlen($name)),$name))
530
+ {
531
+ ($type == 'at') ? $this->at = '@'.$name : $this->selector = '@'.$name;
532
+ $this->status = $type;
533
+ $i += strlen($name);
534
+ $this->invalid_at = false;
535
+ }
536
+ }
537
+
538
+ if($this->invalid_at)
539
+ {
540
+ $this->selector = '@';
541
+ $invalid_at_name = '';
542
+ for($j = $i+1; $j < $size; ++$j)
543
+ {
544
+ if(!ctype_alpha($string{$j}))
545
+ {
546
+ break;
547
+ }
548
+ $invalid_at_name .= $string{$j};
549
+ }
550
+ $this->log('Invalid @-rule: '.$invalid_at_name.' (removed)','Warning');
551
+ }
552
+ }
553
+ elseif(($string{$i} == '"' || $string{$i} == "'"))
554
+ {
555
+ $this->cur_string = $string{$i};
556
+ $this->status = 'instr';
557
+ $this->str_char = $string{$i};
558
+ $this->from = 'is';
559
+ }
560
+ elseif($this->invalid_at && $string{$i} == ';')
561
+ {
562
+ $this->invalid_at = false;
563
+ $this->status = 'is';
564
+ }
565
+ elseif($string{$i} == '{')
566
+ {
567
+ $this->status = 'ip';
568
+ $this->_add_token(SEL_START, $this->selector);
569
+ $this->added = false;
570
+ }
571
+ elseif($string{$i} == '}')
572
+ {
573
+ $this->_add_token(AT_END, $this->at);
574
+ $this->at = '';
575
+ $this->selector = '';
576
+ $this->sel_separate = array();
577
+ }
578
+ elseif($string{$i} == ',')
579
+ {
580
+ $this->selector = trim($this->selector).',';
581
+ $this->sel_separate[] = strlen($this->selector);
582
+ }
583
+ elseif($string{$i} == '\\')
584
+ {
585
+ $this->selector .= $this->_unicode($string,$i);
586
+ }
587
+ // remove unnecessary universal selector, FS#147
588
+ else if(!($string{$i} == '*' && @in_array($string{$i+1}, array('.', '#', '[', ':')))) {
589
+ $this->selector .= $string{$i};
590
+ }
591
+ }
592
+ else
593
+ {
594
+ $lastpos = strlen($this->selector)-1;
595
+ if($lastpos == -1 || !( (ctype_space($this->selector{$lastpos}) || csstidy::is_token($this->selector,$lastpos) && $this->selector{$lastpos} == ',') && ctype_space($string{$i})))
596
+ {
597
+ $this->selector .= $string{$i};
598
+ }
599
+ }
600
+ break;
601
+
602
+ /* Case in-property */
603
+ case 'ip':
604
+ if(csstidy::is_token($string,$i))
605
+ {
606
+ if(($string{$i} == ':' || $string{$i} == '=') && $this->property != '')
607
+ {
608
+ $this->status = 'iv';
609
+ if(!$this->get_cfg('discard_invalid_properties') || csstidy::property_is_valid($this->property)) {
610
+ $this->_add_token(PROPERTY, $this->property);
611
+ }
612
+ }
613
+ elseif($string{$i} == '/' && @$string{$i+1} == '*' && $this->property == '')
614
+ {
615
+ $this->status = 'ic'; ++$i;
616
+ $this->from = 'ip';
617
+ }
618
+ elseif($string{$i} == '}')
619
+ {
620
+ $this->explode_selectors();
621
+ $this->status = 'is';
622
+ $this->invalid_at = false;
623
+ $this->_add_token(SEL_END, $this->selector);
624
+ $this->selector = '';
625
+ $this->property = '';
626
+ }
627
+ elseif($string{$i} == ';')
628
+ {
629
+ $this->property = '';
630
+ }
631
+ elseif($string{$i} == '\\')
632
+ {
633
+ $this->property .= $this->_unicode($string,$i);
634
+ }
635
+ }
636
+ elseif(!ctype_space($string{$i}))
637
+ {
638
+ $this->property .= $string{$i};
639
+ }
640
+ break;
641
+
642
+ /* Case in-value */
643
+ case 'iv':
644
+ $pn = (($string{$i} == "\n" || $string{$i} == "\r") && $this->property_is_next($string,$i+1) || $i == strlen($string)-1);
645
+ if(csstidy::is_token($string,$i) || $pn)
646
+ {
647
+ if($string{$i} == '/' && @$string{$i+1} == '*')
648
+ {
649
+ $this->status = 'ic'; ++$i;
650
+ $this->from = 'iv';
651
+ }
652
+ elseif(($string{$i} == '"' || $string{$i} == "'" || $string{$i} == '('))
653
+ {
654
+ $this->cur_string = $string{$i};
655
+ $this->str_char = ($string{$i} == '(') ? ')' : $string{$i};
656
+ $this->status = 'instr';
657
+ $this->from = 'iv';
658
+ }
659
+ elseif($string{$i} == ',')
660
+ {
661
+ $this->sub_value = trim($this->sub_value).',';
662
+ }
663
+ elseif($string{$i} == '\\')
664
+ {
665
+ $this->sub_value .= $this->_unicode($string,$i);
666
+ }
667
+ elseif($string{$i} == ';' || $pn)
668
+ {
669
+ if($this->selector{0} == '@' && isset($at_rules[substr($this->selector,1)]) && $at_rules[substr($this->selector,1)] == 'iv')
670
+ {
671
+ $this->sub_value_arr[] = trim($this->sub_value);
672
+
673
+ $this->status = 'is';
674
+
675
+ switch($this->selector)
676
+ {
677
+ case '@charset': $this->charset = $this->sub_value_arr[0]; break;
678
+ case '@namespace': $this->namespace = implode(' ',$this->sub_value_arr); break;
679
+ case '@import': $this->import[] = implode(' ',$this->sub_value_arr); break;
680
+ }
681
+
682
+ $this->sub_value_arr = array();
683
+ $this->sub_value = '';
684
+ $this->selector = '';
685
+ $this->sel_separate = array();
686
+ }
687
+ else
688
+ {
689
+ $this->status = 'ip';
690
+ }
691
+ }
692
+ elseif($string{$i} != '}')
693
+ {
694
+ $this->sub_value .= $string{$i};
695
+ }
696
+ if(($string{$i} == '}' || $string{$i} == ';' || $pn) && !empty($this->selector))
697
+ {
698
+ if($this->at == '')
699
+ {
700
+ $this->at = DEFAULT_AT;
701
+ }
702
+
703
+ // case settings
704
+ if($this->get_cfg('lowercase_s'))
705
+ {
706
+ $this->selector = strtolower($this->selector);
707
+ }
708
+ $this->property = strtolower($this->property);
709
+
710
+ $this->optimise->subvalue();
711
+ if($this->sub_value != '') {
712
+ $this->sub_value_arr[] = $this->sub_value;
713
+ $this->sub_value = '';
714
+ }
715
+
716
+ $this->value = implode(' ',$this->sub_value_arr);
717
+
718
+ $this->selector = trim($this->selector);
719
+
720
+ $this->optimise->value();
721
+
722
+ $valid = csstidy::property_is_valid($this->property);
723
+ if((!$this->invalid_at || $this->get_cfg('preserve_css')) && (!$this->get_cfg('discard_invalid_properties') || $valid))
724
+ {
725
+ $this->css_add_property($this->at,$this->selector,$this->property,$this->value);
726
+ $this->_add_token(VALUE, $this->value);
727
+ $this->optimise->shorthands();
728
+ }
729
+ if(!$valid)
730
+ {
731
+ if($this->get_cfg('discard_invalid_properties'))
732
+ {
733
+ $this->log('Removed invalid property: '.$this->property,'Warning');
734
+ }
735
+ else
736
+ {
737
+ $this->log('Invalid property in '.strtoupper($this->get_cfg('css_level')).': '.$this->property,'Warning');
738
+ }
739
+ }
740
+
741
+ $this->property = '';
742
+ $this->sub_value_arr = array();
743
+ $this->value = '';
744
+ }
745
+ if($string{$i} == '}')
746
+ {
747
+ $this->explode_selectors();
748
+ $this->_add_token(SEL_END, $this->selector);
749
+ $this->status = 'is';
750
+ $this->invalid_at = false;
751
+ $this->selector = '';
752
+ }
753
+ }
754
+ elseif(!$pn)
755
+ {
756
+ $this->sub_value .= $string{$i};
757
+
758
+ if(ctype_space($string{$i}))
759
+ {
760
+ $this->optimise->subvalue();
761
+ if($this->sub_value != '') {
762
+ $this->sub_value_arr[] = $this->sub_value;
763
+ $this->sub_value = '';
764
+ }
765
+ }
766
+ }
767
+ break;
768
+
769
+ /* Case in string */
770
+ case 'instr':
771
+ if($this->str_char == ')' && ($string{$i} == '"' || $string{$i} == '\'') && !$this->str_in_str && !csstidy::escaped($string,$i))
772
+ {
773
+ $this->str_in_str = true;
774
+ }
775
+ elseif($this->str_char == ')' && ($string{$i} == '"' || $string{$i} == '\'') && $this->str_in_str && !csstidy::escaped($string,$i))
776
+ {
777
+ $this->str_in_str = false;
778
+ }
779
+ $temp_add = $string{$i}; // ...and no not-escaped backslash at the previous position
780
+ if( ($string{$i} == "\n" || $string{$i} == "\r") && !($string{$i-1} == '\\' && !csstidy::escaped($string,$i-1)) )
781
+ {
782
+ $temp_add = "\\A ";
783
+ $this->log('Fixed incorrect newline in string','Warning');
784
+ }
785
+ if (!($this->str_char == ')' && in_array($string{$i}, $GLOBALS['csstidy']['whitespace']) && !$this->str_in_str)) {
786
+ $this->cur_string .= $temp_add;
787
+ }
788
+ if($string{$i} == $this->str_char && !csstidy::escaped($string,$i) && !$this->str_in_str)
789
+ {
790
+ $this->status = $this->from;
791
+ if (!preg_match('|[' . implode('', $GLOBALS['csstidy']['whitespace']) . ']|uis', $this->cur_string) && $this->property != 'content') {
792
+ if ($this->str_char == '"' || $this->str_char == '\'') {
793
+ $this->cur_string = substr($this->cur_string, 1, -1);
794
+ } else if (strlen($this->cur_string) > 3 && ($this->cur_string[1] == '"' || $this->cur_string[1] == '\'')) /* () */ {
795
+ $this->cur_string = $this->cur_string[0] . substr($this->cur_string, 2, -2) . substr($this->cur_string, -1);
796
+ }
797
+ }
798
+ if($this->from == 'iv')
799
+ {
800
+ $this->sub_value .= $this->cur_string;
801
+ }
802
+ elseif($this->from == 'is')
803
+ {
804
+ $this->selector .= $this->cur_string;
805
+ }
806
+ }
807
+ break;
808
+
809
+ /* Case in-comment */
810
+ case 'ic':
811
+ if($string{$i} == '*' && $string{$i+1} == '/')
812
+ {
813
+ $this->status = $this->from;
814
+ $i++;
815
+ $this->_add_token(COMMENT, $cur_comment);
816
+ $cur_comment = '';
817
+ }
818
+ else
819
+ {
820
+ $cur_comment .= $string{$i};
821
+ }
822
+ break;
823
+ }
824
+ }
825
+
826
+ $this->optimise->postparse();
827
+
828
+ $this->print->_reset();
829
+
830
+ return !(empty($this->css) && empty($this->import) && empty($this->charset) && empty($this->tokens) && empty($this->namespace));
831
+ }
832
+
833
+ /**
834
+ * Explodes selectors
835
+ * @access private
836
+ * @version 1.0
837
+ */
838
+ function explode_selectors()
839
+ {
840
+ // Explode multiple selectors
841
+ if($this->get_cfg('merge_selectors') == 1)
842
+ {
843
+ $new_sels = array();
844
+ $lastpos = 0;
845
+ $this->sel_separate[] = strlen($this->selector);
846
+ foreach($this->sel_separate as $num => $pos)
847
+ {
848
+ if($num == count($this->sel_separate)-1) {
849
+ $pos += 1;
850
+ }
851
+
852
+ $new_sels[] = substr($this->selector,$lastpos,$pos-$lastpos-1);
853
+ $lastpos = $pos;
854
+ }
855
+
856
+ if(count($new_sels) > 1)
857
+ {
858
+ foreach($new_sels as $selector)
859
+ {
860
+ $this->merge_css_blocks($this->at,$selector,$this->css[$this->at][$this->selector]);
861
+ }
862
+ unset($this->css[$this->at][$this->selector]);
863
+ }
864
+ }
865
+ $this->sel_separate = array();
866
+ }
867
+
868
+ /**
869
+ * Checks if a character is escaped (and returns true if it is)
870
+ * @param string $string
871
+ * @param integer $pos
872
+ * @access public
873
+ * @return bool
874
+ * @version 1.02
875
+ */
876
+ function escaped(&$string,$pos)
877
+ {
878
+ return !(@($string{$pos-1} != '\\') || csstidy::escaped($string,$pos-1));
879
+ }
880
+
881
+ /**
882
+ * Adds a property with value to the existing CSS code
883
+ * @param string $media
884
+ * @param string $selector
885
+ * @param string $property
886
+ * @param string $new_val
887
+ * @access private
888
+ * @version 1.2
889
+ */
890
+ function css_add_property($media,$selector,$property,$new_val)
891
+ {
892
+ if($this->get_cfg('preserve_css') || trim($new_val) == '') {
893
+ return;
894
+ }
895
+
896
+ $this->added = true;
897
+ if(isset($this->css[$media][$selector][$property]))
898
+ {
899
+ if((csstidy::is_important($this->css[$media][$selector][$property]) && csstidy::is_important($new_val)) || !csstidy::is_important($this->css[$media][$selector][$property]))
900
+ {
901
+ unset($this->css[$media][$selector][$property]);
902
+ $this->css[$media][$selector][$property] = trim($new_val);
903
+ }
904
+ }
905
+ else
906
+ {
907
+ $this->css[$media][$selector][$property] = trim($new_val);
908
+ }
909
+ }
910
+
911
+ /**
912
+ * Adds CSS to an existing media/selector
913
+ * @param string $media
914
+ * @param string $selector
915
+ * @param array $css_add
916
+ * @access private
917
+ * @version 1.1
918
+ */
919
+ function merge_css_blocks($media,$selector,$css_add)
920
+ {
921
+ foreach($css_add as $property => $value)
922
+ {
923
+ $this->css_add_property($media,$selector,$property,$value,false);
924
+ }
925
+ }
926
+
927
+ /**
928
+ * Checks if $value is !important.
929
+ * @param string $value
930
+ * @return bool
931
+ * @access public
932
+ * @version 1.0
933
+ */
934
+ function is_important(&$value)
935
+ {
936
+ return (!strcasecmp(substr(str_replace($GLOBALS['csstidy']['whitespace'],'',$value),-10,10),'!important'));
937
+ }
938
+
939
+ /**
940
+ * Returns a value without !important
941
+ * @param string $value
942
+ * @return string
943
+ * @access public
944
+ * @version 1.0
945
+ */
946
+ function gvw_important($value)
947
+ {
948
+ if(csstidy::is_important($value))
949
+ {
950
+ $value = trim($value);
951
+ $value = substr($value,0,-9);
952
+ $value = trim($value);
953
+ $value = substr($value,0,-1);
954
+ $value = trim($value);
955
+ return $value;
956
+ }
957
+ return $value;
958
+ }
959
+
960
+ /**
961
+ * Checks if the next word in a string from pos is a CSS property
962
+ * @param string $istring
963
+ * @param integer $pos
964
+ * @return bool
965
+ * @access private
966
+ * @version 1.2
967
+ */
968
+ function property_is_next($istring, $pos)
969
+ {
970
+ $all_properties =& $GLOBALS['csstidy']['all_properties'];
971
+ $istring = substr($istring,$pos,strlen($istring)-$pos);
972
+ $pos = strpos($istring,':');
973
+ if($pos === false)
974
+ {
975
+ return false;
976
+ }
977
+ $istring = strtolower(trim(substr($istring,0,$pos)));
978
+ if(isset($all_properties[$istring]))
979
+ {
980
+ $this->log('Added semicolon to the end of declaration','Warning');
981
+ return true;
982
+ }
983
+ return false;
984
+ }
985
+
986
+ /**
987
+ * Checks if a property is valid
988
+ * @param string $property
989
+ * @return bool;
990
+ * @access public
991
+ * @version 1.0
992
+ */
993
+ function property_is_valid($property) {
994
+ $all_properties =& $GLOBALS['csstidy']['all_properties'];
995
+ return (isset($all_properties[$property]) && strpos($all_properties[$property],strtoupper($this->get_cfg('css_level'))) !== false );
996
+ }
997
+
998
+ }
999
+ ?>
lib/CSSTidy/class.csstidy_optimise.php CHANGED
@@ -1,809 +1,809 @@
1
- <?php
2
- /**
3
- * CSSTidy - CSS Parser and Optimiser
4
- *
5
- * CSS Optimising Class
6
- * This class optimises CSS data generated by csstidy.
7
- *
8
- * This file is part of CSSTidy.
9
- *
10
- * CSSTidy is free software; you can redistribute it and/or modify
11
- * it under the terms of the GNU General Public License as published by
12
- * the Free Software Foundation; either version 2 of the License, or
13
- * (at your option) any later version.
14
- *
15
- * CSSTidy is distributed in the hope that it will be useful,
16
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
- * GNU General Public License for more details.
19
- *
20
- * You should have received a copy of the GNU General Public License
21
- * along with CSSTidy; if not, write to the Free Software
22
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
- *
24
- * @license http://opensource.org/licenses/gpl-license.php GNU Public License
25
- * @package csstidy
26
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
27
- */
28
-
29
- /**
30
- * CSS Optimising Class
31
- *
32
- * This class optimises CSS data generated by csstidy.
33
- *
34
- * @package csstidy
35
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
36
- * @version 1.0
37
- */
38
-
39
- class csstidy_optimise
40
- {
41
- /**
42
- * Constructor
43
- * @param array $css contains the class csstidy
44
- * @access private
45
- * @version 1.0
46
- */
47
- function csstidy_optimise(&$css)
48
- {
49
- $this->parser =& $css;
50
- $this->css =& $css->css;
51
- $this->sub_value =& $css->sub_value;
52
- $this->at =& $css->at;
53
- $this->selector =& $css->selector;
54
- $this->property =& $css->property;
55
- $this->value =& $css->value;
56
- }
57
-
58
- /**
59
- * Optimises $css after parsing
60
- * @access public
61
- * @version 1.0
62
- */
63
- function postparse()
64
- {
65
- if ($this->parser->get_cfg('preserve_css')) {
66
- return;
67
- }
68
-
69
- if ($this->parser->get_cfg('merge_selectors') == 2)
70
- {
71
- foreach ($this->css as $medium => $value)
72
- {
73
- $this->merge_selectors($this->css[$medium]);
74
- }
75
- }
76
-
77
- if ($this->parser->get_cfg('optimise_shorthands') > 0)
78
- {
79
- foreach ($this->css as $medium => $value)
80
- {
81
- foreach ($value as $selector => $value1)
82
- {
83
- $this->css[$medium][$selector] = csstidy_optimise::merge_4value_shorthands($this->css[$medium][$selector]);
84
-
85
- if ($this->parser->get_cfg('optimise_shorthands') < 2) {
86
- continue;
87
- }
88
-
89
- $this->css[$medium][$selector] = csstidy_optimise::merge_bg($this->css[$medium][$selector]);
90
- if (empty($this->css[$medium][$selector])) {
91
- unset($this->css[$medium][$selector]);
92
- }
93
- }
94
- }
95
- }
96
- }
97
-
98
- /**
99
- * Optimises values
100
- * @access public
101
- * @version 1.0
102
- */
103
- function value()
104
- {
105
- $shorthands =& $GLOBALS['csstidy']['shorthands'];
106
-
107
- // optimise shorthand properties
108
- if(isset($shorthands[$this->property]))
109
- {
110
- $temp = csstidy_optimise::shorthand($this->value); // FIXME - move
111
- if($temp != $this->value)
112
- {
113
- $this->parser->log('Optimised shorthand notation ('.$this->property.'): Changed "'.$this->value.'" to "'.$temp.'"','Information');
114
- }
115
- $this->value = $temp;
116
- }
117
-
118
- // Remove whitespace at ! important
119
- if($this->value != $this->compress_important($this->value))
120
- {
121
- $this->parser->log('Optimised !important','Information');
122
- }
123
- }
124
-
125
- /**
126
- * Optimises shorthands
127
- * @access public
128
- * @version 1.0
129
- */
130
- function shorthands()
131
- {
132
- $shorthands =& $GLOBALS['csstidy']['shorthands'];
133
-
134
- if(!$this->parser->get_cfg('optimise_shorthands') || $this->parser->get_cfg('preserve_css')) {
135
- return;
136
- }
137
-
138
- if($this->property == 'background' && $this->parser->get_cfg('optimise_shorthands') > 1)
139
- {
140
- unset($this->css[$this->at][$this->selector]['background']);
141
- $this->parser->merge_css_blocks($this->at,$this->selector,csstidy_optimise::dissolve_short_bg($this->value));
142
- }
143
- if(isset($shorthands[$this->property]))
144
- {
145
- $this->parser->merge_css_blocks($this->at,$this->selector,csstidy_optimise::dissolve_4value_shorthands($this->property,$this->value));
146
- if(is_array($shorthands[$this->property]))
147
- {
148
- unset($this->css[$this->at][$this->selector][$this->property]);
149
- }
150
- }
151
- }
152
-
153
- /**
154
- * Optimises a sub-value
155
- * @access public
156
- * @version 1.0
157
- */
158
- function subvalue()
159
- {
160
- $replace_colors =& $GLOBALS['csstidy']['replace_colors'];
161
-
162
- $this->sub_value = trim($this->sub_value);
163
- if($this->sub_value == '') // caution : '0'
164
- {
165
- return;
166
- }
167
-
168
- $important = '';
169
- if(csstidy::is_important($this->sub_value))
170
- {
171
- $important = '!important';
172
- }
173
- $this->sub_value = csstidy::gvw_important($this->sub_value);
174
-
175
- // Compress font-weight
176
- if($this->property == 'font-weight' && $this->parser->get_cfg('compress_font-weight'))
177
- {
178
- if($this->sub_value == 'bold')
179
- {
180
- $this->sub_value = '700';
181
- $this->parser->log('Optimised font-weight: Changed "bold" to "700"','Information');
182
- }
183
- else if($this->sub_value == 'normal')
184
- {
185
- $this->sub_value = '400';
186
- $this->parser->log('Optimised font-weight: Changed "normal" to "400"','Information');
187
- }
188
- }
189
-
190
- $temp = $this->compress_numbers($this->sub_value);
191
- if($temp != $this->sub_value)
192
- {
193
- if(strlen($temp) > strlen($this->sub_value)) {
194
- $this->parser->log('Fixed invalid number: Changed "'.$this->sub_value.'" to "'.$temp.'"','Warning');
195
- } else {
196
- $this->parser->log('Optimised number: Changed "'.$this->sub_value.'" to "'.$temp.'"','Information');
197
- }
198
- $this->sub_value = $temp;
199
- }
200
- if($this->parser->get_cfg('compress_colors'))
201
- {
202
- $temp = $this->cut_color($this->sub_value);
203
- if($temp !== $this->sub_value)
204
- {
205
- if(isset($replace_colors[$this->sub_value])) {
206
- $this->parser->log('Fixed invalid color name: Changed "'.$this->sub_value.'" to "'.$temp.'"','Warning');
207
- } else {
208
- $this->parser->log('Optimised color: Changed "'.$this->sub_value.'" to "'.$temp.'"','Information');
209
- }
210
- $this->sub_value = $temp;
211
- }
212
- }
213
- $this->sub_value .= $important;
214
- }
215
-
216
- /**
217
- * Compresses shorthand values. Example: margin:1px 1px 1px 1px -> margin:1px
218
- * @param string $value
219
- * @access public
220
- * @return string
221
- * @version 1.0
222
- */
223
- function shorthand($value)
224
- {
225
- $important = '';
226
- if(csstidy::is_important($value))
227
- {
228
- $values = csstidy::gvw_important($value);
229
- $important = '!important';
230
- }
231
- else $values = $value;
232
-
233
- $values = explode(' ',$values);
234
- switch(count($values))
235
- {
236
- case 4:
237
- if($values[0] == $values[1] && $values[0] == $values[2] && $values[0] == $values[3])
238
- {
239
- return $values[0].$important;
240
- }
241
- elseif($values[1] == $values[3] && $values[0] == $values[2])
242
- {
243
- return $values[0].' '.$values[1].$important;
244
- }
245
- elseif($values[1] == $values[3])
246
- {
247
- return $values[0].' '.$values[1].' '.$values[2].$important;
248
- }
249
- break;
250
-
251
- case 3:
252
- if($values[0] == $values[1] && $values[0] == $values[2])
253
- {
254
- return $values[0].$important;
255
- }
256
- elseif($values[0] == $values[2])
257
- {
258
- return $values[0].' '.$values[1].$important;
259
- }
260
- break;
261
-
262
- case 2:
263
- if($values[0] == $values[1])
264
- {
265
- return $values[0].$important;
266
- }
267
- break;
268
- }
269
-
270
- return $value;
271
- }
272
-
273
- /**
274
- * Removes unnecessary whitespace in ! important
275
- * @param string $string
276
- * @return string
277
- * @access public
278
- * @version 1.1
279
- */
280
- function compress_important(&$string)
281
- {
282
- if(csstidy::is_important($string))
283
- {
284
- $string = csstidy::gvw_important($string) . '!important';
285
- }
286
- return $string;
287
- }
288
-
289
- /**
290
- * Color compression function. Converts all rgb() values to #-values and uses the short-form if possible. Also replaces 4 color names by #-values.
291
- * @param string $color
292
- * @return string
293
- * @version 1.1
294
- */
295
- function cut_color($color)
296
- {
297
- $replace_colors =& $GLOBALS['csstidy']['replace_colors'];
298
-
299
- // rgb(0,0,0) -> #000000 (or #000 in this case later)
300
- if(strtolower(substr($color,0,4)) == 'rgb(')
301
- {
302
- $color_tmp = substr($color,4,strlen($color)-5);
303
- $color_tmp = explode(',',$color_tmp);
304
- for ( $i = 0; $i < count($color_tmp); $i++ )
305
- {
306
- $color_tmp[$i] = trim ($color_tmp[$i]);
307
- if(substr($color_tmp[$i],-1) == '%')
308
- {
309
- $color_tmp[$i] = round((255*$color_tmp[$i])/100);
310
- }
311
- if($color_tmp[$i]>255) $color_tmp[$i] = 255;
312
- }
313
- $color = '#';
314
- for ($i = 0; $i < 3; $i++ )
315
- {
316
- if($color_tmp[$i]<16) {
317
- $color .= '0' . dechex($color_tmp[$i]);
318
- } else {
319
- $color .= dechex($color_tmp[$i]);
320
- }
321
- }
322
- }
323
-
324
- // Fix bad color names
325
- if(isset($replace_colors[strtolower($color)]))
326
- {
327
- $color = $replace_colors[strtolower($color)];
328
- }
329
-
330
- // #aabbcc -> #abc
331
- if(strlen($color) == 7)
332
- {
333
- $color_temp = strtolower($color);
334
- if($color_temp{0} == '#' && $color_temp{1} == $color_temp{2} && $color_temp{3} == $color_temp{4} && $color_temp{5} == $color_temp{6})
335
- {
336
- $color = '#'.$color{1}.$color{3}.$color{5};
337
- }
338
- }
339
-
340
- switch(strtolower($color))
341
- {
342
- /* color name -> hex code */
343
- case 'black': return '#000';
344
- case 'fuchsia': return '#F0F';
345
- case 'white': return '#FFF';
346
- case 'yellow': return '#FF0';
347
-
348
- /* hex code -> color name */
349
- case '#800000': return 'maroon';
350
- case '#ffa500': return 'orange';
351
- case '#808000': return 'olive';
352
- case '#800080': return 'purple';
353
- case '#008000': return 'green';
354
- case '#000080': return 'navy';
355
- case '#008080': return 'teal';
356
- case '#c0c0c0': return 'silver';
357
- case '#808080': return 'gray';
358
- case '#f00': return 'red';
359
- }
360
-
361
- return $color;
362
- }
363
-
364
- /**
365
- * Compresses numbers (ie. 1.0 becomes 1 or 1.100 becomes 1.1 )
366
- * @param string $subvalue
367
- * @return string
368
- * @version 1.2
369
- */
370
- function compress_numbers($subvalue)
371
- {
372
- $units =& $GLOBALS['csstidy']['units'];
373
- $unit_values =& $GLOBALS['csstidy']['unit_values'];
374
- $color_values =& $GLOBALS['csstidy']['color_values'];
375
-
376
- // for font:1em/1em sans-serif...;
377
- if($this->property == 'font')
378
- {
379
- $temp = explode('/',$subvalue);
380
- }
381
- else
382
- {
383
- $temp = array($subvalue);
384
- }
385
- for ($l = 0; $l < count($temp); $l++)
386
- {
387
- // continue if no numeric value
388
- if (!(strlen($temp[$l]) > 0 && ( is_numeric($temp[$l]{0}) || $temp[$l]{0} == '+' || $temp[$l]{0} == '-' ) ))
389
- {
390
- continue;
391
- }
392
-
393
- // Fix bad colors
394
- if (in_array($this->property, $color_values))
395
- {
396
- $temp[$l] = '#'.$temp[$l];
397
- }
398
-
399
- if (floatval($temp[$l]) == 0)
400
- {
401
- $temp[$l] = '0';
402
- }
403
- else
404
- {
405
- $unit_found = FALSE;
406
- for ($m = 0, $size_4 = count($units); $m < $size_4; $m++)
407
- {
408
- if (strpos(strtolower($temp[$l]),$units[$m]) !== FALSE)
409
- {
410
- $temp[$l] = floatval($temp[$l]).$units[$m];
411
- $unit_found = TRUE;
412
- break;
413
- }
414
- }
415
- if (!$unit_found && in_array($this->property,$unit_values,TRUE))
416
- {
417
- $temp[$l] = floatval($temp[$l]).'px';
418
- }
419
- else if (!$unit_found)
420
- {
421
- $temp[$l] = floatval($temp[$l]);
422
- }
423
- // Remove leading zero
424
- if (abs(floatval($temp[$l])) < 1) {
425
- if (floatval($temp[$l]) < 0) {
426
- $temp[$l] = '-' . substr($temp[$l], 2);
427
- } else {
428
- $temp[$l] = substr($temp[$l], 1);
429
- }
430
- }
431
- }
432
- }
433
-
434
- return ((count($temp) > 1) ? $temp[0].'/'.$temp[1] : $temp[0]);
435
- }
436
-
437
- /**
438
- * Merges selectors with same properties. Example: a{color:red} b{color:red} -> a,b{color:red}
439
- * Very basic and has at least one bug. Hopefully there is a replacement soon.
440
- * @param array $array
441
- * @return array
442
- * @access public
443
- * @version 1.2
444
- */
445
- function merge_selectors(&$array)
446
- {
447
- $css = $array;
448
- foreach($css as $key => $value)
449
- {
450
- if(!isset($css[$key]))
451
- {
452
- continue;
453
- }
454
- $newsel = '';
455
-
456
- // Check if properties also exist in another selector
457
- $keys = array();
458
- // PHP bug (?) without $css = $array; here
459
- foreach($css as $selector => $vali)
460
- {
461
- if($selector == $key)
462
- {
463
- continue;
464
- }
465
-
466
- if($css[$key] === $vali)
467
- {
468
- $keys[] = $selector;
469
- }
470
- }
471
-
472
- if(!empty($keys))
473
- {
474
- $newsel = $key;
475
- unset($css[$key]);
476
- foreach($keys as $selector)
477
- {
478
- unset($css[$selector]);
479
- $newsel .= ','.$selector;
480
- }
481
- $css[$newsel] = $value;
482
- }
483
- }
484
- $array = $css;
485
- }
486
-
487
- /**
488
- * Dissolves properties like padding:10px 10px 10px to padding-top:10px;padding-bottom:10px;...
489
- * @param string $property
490
- * @param string $value
491
- * @return array
492
- * @version 1.0
493
- * @see merge_4value_shorthands()
494
- */
495
- function dissolve_4value_shorthands($property,$value)
496
- {
497
- $shorthands =& $GLOBALS['csstidy']['shorthands'];
498
- if(!is_array($shorthands[$property]))
499
- {
500
- $return[$property] = $value;
501
- return $return;
502
- }
503
-
504
- $important = '';
505
- if(csstidy::is_important($value))
506
- {
507
- $value = csstidy::gvw_important($value);
508
- $important = '!important';
509
- }
510
- $values = explode(' ',$value);
511
-
512
-
513
- $return = array();
514
- if(count($values) == 4)
515
- {
516
- for($i=0;$i<4;$i++)
517
- {
518
- $return[$shorthands[$property][$i]] = $values[$i].$important;
519
- }
520
- }
521
- elseif(count($values) == 3)
522
- {
523
- $return[$shorthands[$property][0]] = $values[0].$important;
524
- $return[$shorthands[$property][1]] = $values[1].$important;
525
- $return[$shorthands[$property][3]] = $values[1].$important;
526
- $return[$shorthands[$property][2]] = $values[2].$important;
527
- }
528
- elseif(count($values) == 2)
529
- {
530
- for($i=0;$i<4;$i++)
531
- {
532
- $return[$shorthands[$property][$i]] = (($i % 2 != 0)) ? $values[1].$important : $values[0].$important;
533
- }
534
- }
535
- else
536
- {
537
- for($i=0;$i<4;$i++)
538
- {
539
- $return[$shorthands[$property][$i]] = $values[0].$important;
540
- }
541
- }
542
-
543
- return $return;
544
- }
545
-
546
- /**
547
- * Explodes a string as explode() does, however, not if $sep is escaped or within a string.
548
- * @param string $sep seperator
549
- * @param string $string
550
- * @return array
551
- * @version 1.0
552
- */
553
- function explode_ws($sep,$string)
554
- {
555
- $status = 'st';
556
- $to = '';
557
-
558
- $output = array();
559
- $num = 0;
560
- for($i = 0, $len = strlen($string);$i < $len; $i++)
561
- {
562
- switch($status)
563
- {
564
- case 'st':
565
- if($string{$i} == $sep && !csstidy::escaped($string,$i))
566
- {
567
- ++$num;
568
- }
569
- elseif($string{$i} == '"' || $string{$i} == '\'' || $string{$i} == '(' && !csstidy::escaped($string,$i))
570
- {
571
- $status = 'str';
572
- $to = ($string{$i} == '(') ? ')' : $string{$i};
573
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
574
- }
575
- else
576
- {
577
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
578
- }
579
- break;
580
-
581
- case 'str':
582
- if($string{$i} == $to && !csstidy::escaped($string,$i))
583
- {
584
- $status = 'st';
585
- }
586
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
587
- break;
588
- }
589
- }
590
-
591
- if(isset($output[0]))
592
- {
593
- return $output;
594
- }
595
- else
596
- {
597
- return array($output);
598
- }
599
- }
600
-
601
- /**
602
- * Merges Shorthand properties again, the opposite of dissolve_4value_shorthands()
603
- * @param array $array
604
- * @return array
605
- * @version 1.2
606
- * @see dissolve_4value_shorthands()
607
- */
608
- function merge_4value_shorthands($array)
609
- {
610
- $return = $array;
611
- $shorthands =& $GLOBALS['csstidy']['shorthands'];
612
-
613
- foreach($shorthands as $key => $value)
614
- {
615
- if(isset($array[$value[0]]) && isset($array[$value[1]])
616
- && isset($array[$value[2]]) && isset($array[$value[3]]) && $value !== 0)
617
- {
618
- $return[$key] = '';
619
-
620
- $important = '';
621
- for($i = 0; $i < 4; $i++)
622
- {
623
- $val = $array[$value[$i]];
624
- if(csstidy::is_important($val))
625
- {
626
- $important = '!important';
627
- $return[$key] .= csstidy::gvw_important($val).' ';
628
- }
629
- else
630
- {
631
- $return[$key] .= $val.' ';
632
- }
633
- unset($return[$value[$i]]);
634
- }
635
- $return[$key] = csstidy_optimise::shorthand(trim($return[$key].$important));
636
- }
637
- }
638
- return $return;
639
- }
640
-
641
- /**
642
- * Dissolve background property
643
- * @param string $str_value
644
- * @return array
645
- * @version 1.0
646
- * @see merge_bg()
647
- * @todo full CSS 3 compliance
648
- */
649
- function dissolve_short_bg($str_value)
650
- {
651
- $background_prop_default =& $GLOBALS['csstidy']['background_prop_default'];
652
- $repeat = array('repeat','repeat-x','repeat-y','no-repeat','space');
653
- $attachment = array('scroll','fixed','local');
654
- $clip = array('border','padding');
655
- $origin = array('border','padding','content');
656
- $pos = array('top','center','bottom','left','right');
657
- $important = '';
658
- $return = array('background-image' => NULL,'background-size' => NULL,'background-repeat' => NULL,'background-position' => NULL,'background-attachment'=>NULL,'background-clip' => NULL,'background-origin' => NULL,'background-color' => NULL);
659
-
660
- if(csstidy::is_important($str_value))
661
- {
662
- $important = ' !important';
663
- $str_value = csstidy::gvw_important($str_value);
664
- }
665
-
666
- $str_value = csstidy_optimise::explode_ws(',',$str_value);
667
- for($i = 0; $i < count($str_value); $i++)
668
- {
669
- $have['clip'] = FALSE; $have['pos'] = FALSE;
670
- $have['color'] = FALSE; $have['bg'] = FALSE;
671
-
672
- $str_value[$i] = csstidy_optimise::explode_ws(' ',trim($str_value[$i]));
673
-
674
- for($j = 0; $j < count($str_value[$i]); $j++)
675
- {
676
- if($have['bg'] === FALSE && (substr($str_value[$i][$j],0,4) == 'url(' || $str_value[$i][$j] === 'none'))
677
- {
678
- $return['background-image'] .= $str_value[$i][$j].',';
679
- $have['bg'] = TRUE;
680
- }
681
- elseif(in_array($str_value[$i][$j],$repeat,TRUE))
682
- {
683
- $return['background-repeat'] .= $str_value[$i][$j].',';
684
- }
685
- elseif(in_array($str_value[$i][$j],$attachment,TRUE))
686
- {
687
- $return['background-attachment'] .= $str_value[$i][$j].',';
688
- }
689
- elseif(in_array($str_value[$i][$j],$clip,TRUE) && !$have['clip'])
690
- {
691
- $return['background-clip'] .= $str_value[$i][$j].',';
692
- $have['clip'] = TRUE;
693
- }
694
- elseif(in_array($str_value[$i][$j],$origin,TRUE))
695
- {
696
- $return['background-origin'] .= $str_value[$i][$j].',';
697
- }
698
- elseif($str_value[$i][$j]{0} == '(')
699
- {
700
- $return['background-size'] .= substr($str_value[$i][$j],1,-1).',';
701
- }
702
- elseif(in_array($str_value[$i][$j],$pos,TRUE) || is_numeric($str_value[$i][$j]{0}) || $str_value[$i][$j]{0} === NULL)
703
- {
704
- $return['background-position'] .= $str_value[$i][$j];
705
- if(!$have['pos']) $return['background-position'] .= ' '; else $return['background-position'].= ',';
706
- $have['pos'] = TRUE;
707
- }
708
- elseif(!$have['color'])
709
- {
710
- $return['background-color'] .= $str_value[$i][$j].',';
711
- $have['color'] = TRUE;
712
- }
713
- }
714
- }
715
-
716
- foreach($background_prop_default as $bg_prop => $default_value)
717
- {
718
- if($return[$bg_prop] !== NULL)
719
- {
720
- $return[$bg_prop] = substr($return[$bg_prop],0,-1).$important;
721
- }
722
- else $return[$bg_prop] = $default_value.$important;
723
- }
724
- return $return;
725
- }
726
-
727
- /**
728
- * Merges all background properties
729
- * @param array $input_css
730
- * @return array
731
- * @version 1.0
732
- * @see dissolve_short_bg()
733
- * @todo full CSS 3 compliance
734
- */
735
- function merge_bg($input_css)
736
- {
737
- $background_prop_default =& $GLOBALS['csstidy']['background_prop_default'];
738
- // Max number of background images. CSS3 not yet fully implemented
739
- $number_of_values = @max(count(csstidy_optimise::explode_ws(',',$input_css['background-image'])),count(csstidy_optimise::explode_ws(',',$input_css['background-color'])),1);
740
- // Array with background images to check if BG image exists
741
- $bg_img_array = @csstidy_optimise::explode_ws(',',csstidy::gvw_important($input_css['background-image']));
742
- $new_bg_value = '';
743
- $important = '';
744
-
745
- for($i = 0; $i < $number_of_values; $i++)
746
- {
747
- foreach($background_prop_default as $bg_property => $default_value)
748
- {
749
- // Skip if property does not exist
750
- if(!isset($input_css[$bg_property]))
751
- {
752
- continue;
753
- }
754
-
755
- $cur_value = $input_css[$bg_property];
756
-
757
- // Skip some properties if there is no background image
758
- if((!isset($bg_img_array[$i]) || $bg_img_array[$i] === 'none')
759
- && ($bg_property === 'background-size' || $bg_property === 'background-position'
760
- || $bg_property === 'background-attachment' || $bg_property === 'background-repeat'))
761
- {
762
- continue;
763
- }
764
-
765
- // Remove !important
766
- if(csstidy::is_important($cur_value))
767
- {
768
- $important = ' !important';
769
- $cur_value = csstidy::gvw_important($cur_value);
770
- }
771
-
772
- // Do not add default values
773
- if($cur_value === $default_value)
774
- {
775
- continue;
776
- }
777
-
778
- $temp = csstidy_optimise::explode_ws(',',$cur_value);
779
-
780
- if(isset($temp[$i]))
781
- {
782
- if($bg_property == 'background-size')
783
- {
784
- $new_bg_value .= '('.$temp[$i].') ';
785
- }
786
- else
787
- {
788
- $new_bg_value .= $temp[$i].' ';
789
- }
790
- }
791
- }
792
-
793
- $new_bg_value = trim($new_bg_value);
794
- if($i != $number_of_values-1) $new_bg_value .= ',';
795
- }
796
-
797
- // Delete all background-properties
798
- foreach($background_prop_default as $bg_property => $default_value)
799
- {
800
- unset($input_css[$bg_property]);
801
- }
802
-
803
- // Add new background property
804
- if($new_bg_value !== '') $input_css['background'] = $new_bg_value.$important;
805
-
806
- return $input_css;
807
- }
808
- }
1
+ <?php
2
+ /**
3
+ * CSSTidy - CSS Parser and Optimiser
4
+ *
5
+ * CSS Optimising Class
6
+ * This class optimises CSS data generated by csstidy.
7
+ *
8
+ * This file is part of CSSTidy.
9
+ *
10
+ * CSSTidy is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * CSSTidy is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with CSSTidy; if not, write to the Free Software
22
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
+ *
24
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
25
+ * @package csstidy
26
+ * @author Florian Schmitz (floele at gmail dot com) 2005-2006
27
+ */
28
+
29
+ /**
30
+ * CSS Optimising Class
31
+ *
32
+ * This class optimises CSS data generated by csstidy.
33
+ *
34
+ * @package csstidy
35
+ * @author Florian Schmitz (floele at gmail dot com) 2005-2006
36
+ * @version 1.0
37
+ */
38
+
39
+ class csstidy_optimise
40
+ {
41
+ /**
42
+ * Constructor
43
+ * @param array $css contains the class csstidy
44
+ * @access private
45
+ * @version 1.0
46
+ */
47
+ function csstidy_optimise(&$css)
48
+ {
49
+ $this->parser =& $css;
50
+ $this->css =& $css->css;
51
+ $this->sub_value =& $css->sub_value;
52
+ $this->at =& $css->at;
53
+ $this->selector =& $css->selector;
54
+ $this->property =& $css->property;
55
+ $this->value =& $css->value;
56
+ }
57
+
58
+ /**
59
+ * Optimises $css after parsing
60
+ * @access public
61
+ * @version 1.0
62
+ */
63
+ function postparse()
64
+ {
65
+ if ($this->parser->get_cfg('preserve_css')) {
66
+ return;
67
+ }
68
+
69
+ if ($this->parser->get_cfg('merge_selectors') == 2)
70
+ {
71
+ foreach ($this->css as $medium => $value)
72
+ {
73
+ $this->merge_selectors($this->css[$medium]);
74
+ }
75
+ }
76
+
77
+ if ($this->parser->get_cfg('optimise_shorthands') > 0)
78
+ {
79
+ foreach ($this->css as $medium => $value)
80
+ {
81
+ foreach ($value as $selector => $value1)
82
+ {
83
+ $this->css[$medium][$selector] = csstidy_optimise::merge_4value_shorthands($this->css[$medium][$selector]);
84
+
85
+ if ($this->parser->get_cfg('optimise_shorthands') < 2) {
86
+ continue;
87
+ }
88
+
89
+ $this->css[$medium][$selector] = csstidy_optimise::merge_bg($this->css[$medium][$selector]);
90
+ if (empty($this->css[$medium][$selector])) {
91
+ unset($this->css[$medium][$selector]);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Optimises values
100
+ * @access public
101
+ * @version 1.0
102
+ */
103
+ function value()
104
+ {
105
+ $shorthands =& $GLOBALS['csstidy']['shorthands'];
106
+
107
+ // optimise shorthand properties
108
+ if(isset($shorthands[$this->property]))
109
+ {
110
+ $temp = csstidy_optimise::shorthand($this->value); // FIXME - move
111
+ if($temp != $this->value)
112
+ {
113
+ $this->parser->log('Optimised shorthand notation ('.$this->property.'): Changed "'.$this->value.'" to "'.$temp.'"','Information');
114
+ }
115
+ $this->value = $temp;
116
+ }
117
+
118
+ // Remove whitespace at ! important
119
+ if($this->value != $this->compress_important($this->value))
120
+ {
121
+ $this->parser->log('Optimised !important','Information');
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Optimises shorthands
127
+ * @access public
128
+ * @version 1.0
129
+ */
130
+ function shorthands()
131
+ {
132
+ $shorthands =& $GLOBALS['csstidy']['shorthands'];
133
+
134
+ if(!$this->parser->get_cfg('optimise_shorthands') || $this->parser->get_cfg('preserve_css')) {
135
+ return;
136
+ }
137
+
138
+ if($this->property == 'background' && $this->parser->get_cfg('optimise_shorthands') > 1)
139
+ {
140
+ unset($this->css[$this->at][$this->selector]['background']);
141
+ $this->parser->merge_css_blocks($this->at,$this->selector,csstidy_optimise::dissolve_short_bg($this->value));
142
+ }
143
+ if(isset($shorthands[$this->property]))
144
+ {
145
+ $this->parser->merge_css_blocks($this->at,$this->selector,csstidy_optimise::dissolve_4value_shorthands($this->property,$this->value));
146
+ if(is_array($shorthands[$this->property]))
147
+ {
148
+ unset($this->css[$this->at][$this->selector][$this->property]);
149
+ }
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Optimises a sub-value
155
+ * @access public
156
+ * @version 1.0
157
+ */
158
+ function subvalue()
159
+ {
160
+ $replace_colors =& $GLOBALS['csstidy']['replace_colors'];
161
+
162
+ $this->sub_value = trim($this->sub_value);
163
+ if($this->sub_value == '') // caution : '0'
164
+ {
165
+ return;
166
+ }
167
+
168
+ $important = '';
169
+ if(csstidy::is_important($this->sub_value))
170
+ {
171
+ $important = '!important';
172
+ }
173
+ $this->sub_value = csstidy::gvw_important($this->sub_value);
174
+
175
+ // Compress font-weight
176
+ if($this->property == 'font-weight' && $this->parser->get_cfg('compress_font-weight'))
177
+ {
178
+ if($this->sub_value == 'bold')
179
+ {
180
+ $this->sub_value = '700';
181
+ $this->parser->log('Optimised font-weight: Changed "bold" to "700"','Information');
182
+ }
183
+ else if($this->sub_value == 'normal')
184
+ {
185
+ $this->sub_value = '400';
186
+ $this->parser->log('Optimised font-weight: Changed "normal" to "400"','Information');
187
+ }
188
+ }
189
+
190
+ $temp = $this->compress_numbers($this->sub_value);
191
+ if($temp != $this->sub_value)
192
+ {
193
+ if(strlen($temp) > strlen($this->sub_value)) {
194
+ $this->parser->log('Fixed invalid number: Changed "'.$this->sub_value.'" to "'.$temp.'"','Warning');
195
+ } else {
196
+ $this->parser->log('Optimised number: Changed "'.$this->sub_value.'" to "'.$temp.'"','Information');
197
+ }
198
+ $this->sub_value = $temp;
199
+ }
200
+ if($this->parser->get_cfg('compress_colors'))
201
+ {
202
+ $temp = $this->cut_color($this->sub_value);
203
+ if($temp !== $this->sub_value)
204
+ {
205
+ if(isset($replace_colors[$this->sub_value])) {
206
+ $this->parser->log('Fixed invalid color name: Changed "'.$this->sub_value.'" to "'.$temp.'"','Warning');
207
+ } else {
208
+ $this->parser->log('Optimised color: Changed "'.$this->sub_value.'" to "'.$temp.'"','Information');
209
+ }
210
+ $this->sub_value = $temp;
211
+ }
212
+ }
213
+ $this->sub_value .= $important;
214
+ }
215
+
216
+ /**
217
+ * Compresses shorthand values. Example: margin:1px 1px 1px 1px -> margin:1px
218
+ * @param string $value
219
+ * @access public
220
+ * @return string
221
+ * @version 1.0
222
+ */
223
+ function shorthand($value)
224
+ {
225
+ $important = '';
226
+ if(csstidy::is_important($value))
227
+ {
228
+ $values = csstidy::gvw_important($value);
229
+ $important = '!important';
230
+ }
231
+ else $values = $value;
232
+
233
+ $values = explode(' ',$values);
234
+ switch(count($values))
235
+ {
236
+ case 4:
237
+ if($values[0] == $values[1] && $values[0] == $values[2] && $values[0] == $values[3])
238
+ {
239
+ return $values[0].$important;
240
+ }
241
+ elseif($values[1] == $values[3] && $values[0] == $values[2])
242
+ {
243
+ return $values[0].' '.$values[1].$important;
244
+ }
245
+ elseif($values[1] == $values[3])
246
+ {
247
+ return $values[0].' '.$values[1].' '.$values[2].$important;
248
+ }
249
+ break;
250
+
251
+ case 3:
252
+ if($values[0] == $values[1] && $values[0] == $values[2])
253
+ {
254
+ return $values[0].$important;
255
+ }
256
+ elseif($values[0] == $values[2])
257
+ {
258
+ return $values[0].' '.$values[1].$important;
259
+ }
260
+ break;
261
+
262
+ case 2:
263
+ if($values[0] == $values[1])
264
+ {
265
+ return $values[0].$important;
266
+ }
267
+ break;
268
+ }
269
+
270
+ return $value;
271
+ }
272
+
273
+ /**
274
+ * Removes unnecessary whitespace in ! important
275
+ * @param string $string
276
+ * @return string
277
+ * @access public
278
+ * @version 1.1
279
+ */
280
+ function compress_important(&$string)
281
+ {
282
+ if(csstidy::is_important($string))
283
+ {
284
+ $string = csstidy::gvw_important($string) . '!important';
285
+ }
286
+ return $string;
287
+ }
288
+
289
+ /**
290
+ * Color compression function. Converts all rgb() values to #-values and uses the short-form if possible. Also replaces 4 color names by #-values.
291
+ * @param string $color
292
+ * @return string
293
+ * @version 1.1
294
+ */
295
+ function cut_color($color)
296
+ {
297
+ $replace_colors =& $GLOBALS['csstidy']['replace_colors'];
298
+
299
+ // rgb(0,0,0) -> #000000 (or #000 in this case later)
300
+ if(strtolower(substr($color,0,4)) == 'rgb(')
301
+ {
302
+ $color_tmp = substr($color,4,strlen($color)-5);
303
+ $color_tmp = explode(',',$color_tmp);
304
+ for ( $i = 0; $i < count($color_tmp); $i++ )
305
+ {
306
+ $color_tmp[$i] = trim ($color_tmp[$i]);
307
+ if(substr($color_tmp[$i],-1) == '%')
308
+ {
309
+ $color_tmp[$i] = round((255*$color_tmp[$i])/100);
310
+ }
311
+ if($color_tmp[$i]>255) $color_tmp[$i] = 255;
312
+ }
313
+ $color = '#';
314
+ for ($i = 0; $i < 3; $i++ )
315
+ {
316
+ if($color_tmp[$i]<16) {
317
+ $color .= '0' . dechex($color_tmp[$i]);
318
+ } else {
319
+ $color .= dechex($color_tmp[$i]);
320
+ }
321
+ }
322
+ }
323
+
324
+ // Fix bad color names
325
+ if(isset($replace_colors[strtolower($color)]))
326
+ {
327
+ $color = $replace_colors[strtolower($color)];
328
+ }
329
+
330
+ // #aabbcc -> #abc
331
+ if(strlen($color) == 7)
332
+ {
333
+ $color_temp = strtolower($color);
334
+ if($color_temp{0} == '#' && $color_temp{1} == $color_temp{2} && $color_temp{3} == $color_temp{4} && $color_temp{5} == $color_temp{6})
335
+ {
336
+ $color = '#'.$color{1}.$color{3}.$color{5};
337
+ }
338
+ }
339
+
340
+ switch(strtolower($color))
341
+ {
342
+ /* color name -> hex code */
343
+ case 'black': return '#000';
344
+ case 'fuchsia': return '#F0F';
345
+ case 'white': return '#FFF';
346
+ case 'yellow': return '#FF0';
347
+
348
+ /* hex code -> color name */
349
+ case '#800000': return 'maroon';
350
+ case '#ffa500': return 'orange';
351
+ case '#808000': return 'olive';
352
+ case '#800080': return 'purple';
353
+ case '#008000': return 'green';
354
+ case '#000080': return 'navy';
355
+ case '#008080': return 'teal';
356
+ case '#c0c0c0': return 'silver';
357
+ case '#808080': return 'gray';
358
+ case '#f00': return 'red';
359
+ }
360
+
361
+ return $color;
362
+ }
363
+
364
+ /**
365
+ * Compresses numbers (ie. 1.0 becomes 1 or 1.100 becomes 1.1 )
366
+ * @param string $subvalue
367
+ * @return string
368
+ * @version 1.2
369
+ */
370
+ function compress_numbers($subvalue)
371
+ {
372
+ $units =& $GLOBALS['csstidy']['units'];
373
+ $unit_values =& $GLOBALS['csstidy']['unit_values'];
374
+ $color_values =& $GLOBALS['csstidy']['color_values'];
375
+
376
+ // for font:1em/1em sans-serif...;
377
+ if($this->property == 'font')
378
+ {
379
+ $temp = explode('/',$subvalue);
380
+ }
381
+ else
382
+ {
383
+ $temp = array($subvalue);
384
+ }
385
+ for ($l = 0; $l < count($temp); $l++)
386
+ {
387
+ // continue if no numeric value
388
+ if (!(strlen($temp[$l]) > 0 && ( is_numeric($temp[$l]{0}) || $temp[$l]{0} == '+' || $temp[$l]{0} == '-' ) ))
389
+ {
390
+ continue;
391
+ }
392
+
393
+ // Fix bad colors
394
+ if (in_array($this->property, $color_values))
395
+ {
396
+ $temp[$l] = '#'.$temp[$l];
397
+ }
398
+
399
+ if (floatval($temp[$l]) == 0)
400
+ {
401
+ $temp[$l] = '0';
402
+ }
403
+ else
404
+ {
405
+ $unit_found = FALSE;
406
+ for ($m = 0, $size_4 = count($units); $m < $size_4; $m++)
407
+ {
408
+ if (strpos(strtolower($temp[$l]),$units[$m]) !== FALSE)
409
+ {
410
+ $temp[$l] = floatval($temp[$l]).$units[$m];
411
+ $unit_found = TRUE;
412
+ break;
413
+ }
414
+ }
415
+ if (!$unit_found && in_array($this->property,$unit_values,TRUE))
416
+ {
417
+ $temp[$l] = floatval($temp[$l]).'px';
418
+ }
419
+ else if (!$unit_found)
420
+ {
421
+ $temp[$l] = floatval($temp[$l]);
422
+ }
423
+ // Remove leading zero
424
+ if (abs(floatval($temp[$l])) < 1) {
425
+ if (floatval($temp[$l]) < 0) {
426
+ $temp[$l] = '-' . substr($temp[$l], 2);
427
+ } else {
428
+ $temp[$l] = substr($temp[$l], 1);
429
+ }
430
+ }
431
+ }
432
+ }
433
+
434
+ return ((count($temp) > 1) ? $temp[0].'/'.$temp[1] : $temp[0]);
435
+ }
436
+
437
+ /**
438
+ * Merges selectors with same properties. Example: a{color:red} b{color:red} -> a,b{color:red}
439
+ * Very basic and has at least one bug. Hopefully there is a replacement soon.
440
+ * @param array $array
441
+ * @return array
442
+ * @access public
443
+ * @version 1.2
444
+ */
445
+ function merge_selectors(&$array)
446
+ {
447
+ $css = $array;
448
+ foreach($css as $key => $value)
449
+ {
450
+ if(!isset($css[$key]))
451
+ {
452
+ continue;
453
+ }
454
+ $newsel = '';
455
+
456
+ // Check if properties also exist in another selector
457
+ $keys = array();
458
+ // PHP bug (?) without $css = $array; here
459
+ foreach($css as $selector => $vali)
460
+ {
461
+ if($selector == $key)
462
+ {
463
+ continue;
464
+ }
465
+
466
+ if($css[$key] === $vali)
467
+ {
468
+ $keys[] = $selector;
469
+ }
470
+ }
471
+
472
+ if(!empty($keys))
473
+ {
474
+ $newsel = $key;
475
+ unset($css[$key]);
476
+ foreach($keys as $selector)
477
+ {
478
+ unset($css[$selector]);
479
+ $newsel .= ','.$selector;
480
+ }
481
+ $css[$newsel] = $value;
482
+ }
483
+ }
484
+ $array = $css;
485
+ }
486
+
487
+ /**
488
+ * Dissolves properties like padding:10px 10px 10px to padding-top:10px;padding-bottom:10px;...
489
+ * @param string $property
490
+ * @param string $value
491
+ * @return array
492
+ * @version 1.0
493
+ * @see merge_4value_shorthands()
494
+ */
495
+ function dissolve_4value_shorthands($property,$value)
496
+ {
497
+ $shorthands =& $GLOBALS['csstidy']['shorthands'];
498
+ if(!is_array($shorthands[$property]))
499
+ {
500
+ $return[$property] = $value;
501
+ return $return;
502
+ }
503
+
504
+ $important = '';
505
+ if(csstidy::is_important($value))
506
+ {
507
+ $value = csstidy::gvw_important($value);
508
+ $important = '!important';
509
+ }
510
+ $values = explode(' ',$value);
511
+
512
+
513
+ $return = array();
514
+ if(count($values) == 4)
515
+ {
516
+ for($i=0;$i<4;$i++)
517
+ {
518
+ $return[$shorthands[$property][$i]] = $values[$i].$important;
519
+ }
520
+ }
521
+ elseif(count($values) == 3)
522
+ {
523
+ $return[$shorthands[$property][0]] = $values[0].$important;
524
+ $return[$shorthands[$property][1]] = $values[1].$important;
525
+ $return[$shorthands[$property][3]] = $values[1].$important;
526
+ $return[$shorthands[$property][2]] = $values[2].$important;
527
+ }
528
+ elseif(count($values) == 2)
529
+ {
530
+ for($i=0;$i<4;$i++)
531
+ {
532
+ $return[$shorthands[$property][$i]] = (($i % 2 != 0)) ? $values[1].$important : $values[0].$important;
533
+ }
534
+ }
535
+ else
536
+ {
537
+ for($i=0;$i<4;$i++)
538
+ {
539
+ $return[$shorthands[$property][$i]] = $values[0].$important;
540
+ }
541
+ }
542
+
543
+ return $return;
544
+ }
545
+
546
+ /**
547
+ * Explodes a string as explode() does, however, not if $sep is escaped or within a string.
548
+ * @param string $sep seperator
549
+ * @param string $string
550
+ * @return array
551
+ * @version 1.0
552
+ */
553
+ function explode_ws($sep,$string)
554
+ {
555
+ $status = 'st';
556
+ $to = '';
557
+
558
+ $output = array();
559
+ $num = 0;
560
+ for($i = 0, $len = strlen($string);$i < $len; $i++)
561
+ {
562
+ switch($status)
563
+ {
564
+ case 'st':
565
+ if($string{$i} == $sep && !csstidy::escaped($string,$i))
566
+ {
567
+ ++$num;
568
+ }
569
+ elseif($string{$i} == '"' || $string{$i} == '\'' || $string{$i} == '(' && !csstidy::escaped($string,$i))
570
+ {
571
+ $status = 'str';
572
+ $to = ($string{$i} == '(') ? ')' : $string{$i};
573
+ (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
574
+ }
575
+ else
576
+ {
577
+ (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
578
+ }
579
+ break;
580
+
581
+ case 'str':
582
+ if($string{$i} == $to && !csstidy::escaped($string,$i))
583
+ {
584
+ $status = 'st';
585
+ }
586
+ (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
587
+ break;
588
+ }
589
+ }
590
+
591
+ if(isset($output[0]))
592
+ {
593
+ return $output;
594
+ }
595
+ else
596
+ {
597
+ return array($output);
598
+ }
599
+ }
600
+
601
+ /**
602
+ * Merges Shorthand properties again, the opposite of dissolve_4value_shorthands()
603
+ * @param array $array
604
+ * @return array
605
+ * @version 1.2
606
+ * @see dissolve_4value_shorthands()
607
+ */
608
+ function merge_4value_shorthands($array)
609
+ {
610
+ $return = $array;
611
+ $shorthands =& $GLOBALS['csstidy']['shorthands'];
612
+
613
+ foreach($shorthands as $key => $value)
614
+ {
615
+ if(isset($array[$value[0]]) && isset($array[$value[1]])
616
+ && isset($array[$value[2]]) && isset($array[$value[3]]) && $value !== 0)
617
+ {
618
+ $return[$key] = '';
619
+
620
+ $important = '';
621
+ for($i = 0; $i < 4; $i++)
622
+ {
623
+ $val = $array[$value[$i]];
624
+ if(csstidy::is_important($val))
625
+ {
626
+ $important = '!important';
627
+ $return[$key] .= csstidy::gvw_important($val).' ';
628
+ }
629
+ else
630
+ {
631
+ $return[$key] .= $val.' ';
632
+ }
633
+ unset($return[$value[$i]]);
634
+ }
635
+ $return[$key] = csstidy_optimise::shorthand(trim($return[$key].$important));
636
+ }
637
+ }
638
+ return $return;
639
+ }
640
+
641
+ /**
642
+ * Dissolve background property
643
+ * @param string $str_value
644
+ * @return array
645
+ * @version 1.0
646
+ * @see merge_bg()
647
+ * @todo full CSS 3 compliance
648
+ */
649
+ function dissolve_short_bg($str_value)
650
+ {
651
+ $background_prop_default =& $GLOBALS['csstidy']['background_prop_default'];
652
+ $repeat = array('repeat','repeat-x','repeat-y','no-repeat','space');
653
+ $attachment = array('scroll','fixed','local');
654
+ $clip = array('border','padding');
655
+ $origin = array('border','padding','content');
656
+ $pos = array('top','center','bottom','left','right');
657
+ $important = '';
658
+ $return = array('background-image' => NULL,'background-size' => NULL,'background-repeat' => NULL,'background-position' => NULL,'background-attachment'=>NULL,'background-clip' => NULL,'background-origin' => NULL,'background-color' => NULL);
659
+
660
+ if(csstidy::is_important($str_value))
661
+ {
662
+ $important = ' !important';
663
+ $str_value = csstidy::gvw_important($str_value);
664
+ }
665
+
666
+ $str_value = csstidy_optimise::explode_ws(',',$str_value);
667
+ for($i = 0; $i < count($str_value); $i++)
668
+ {
669
+ $have['clip'] = FALSE; $have['pos'] = FALSE;
670
+ $have['color'] = FALSE; $have['bg'] = FALSE;
671
+
672
+ $str_value[$i] = csstidy_optimise::explode_ws(' ',trim($str_value[$i]));
673
+
674
+ for($j = 0; $j < count($str_value[$i]); $j++)
675
+ {
676
+ if($have['bg'] === FALSE && (substr($str_value[$i][$j],0,4) == 'url(' || $str_value[$i][$j] === 'none'))
677
+ {
678
+ $return['background-image'] .= $str_value[$i][$j].',';
679
+ $have['bg'] = TRUE;
680
+ }
681
+ elseif(in_array($str_value[$i][$j],$repeat,TRUE))
682
+ {
683
+ $return['background-repeat'] .= $str_value[$i][$j].',';
684
+ }
685
+ elseif(in_array($str_value[$i][$j],$attachment,TRUE))
686
+ {
687
+ $return['background-attachment'] .= $str_value[$i][$j].',';
688
+ }
689
+ elseif(in_array($str_value[$i][$j],$clip,TRUE) && !$have['clip'])
690
+ {
691
+ $return['background-clip'] .= $str_value[$i][$j].',';
692
+ $have['clip'] = TRUE;
693
+ }
694
+ elseif(in_array($str_value[$i][$j],$origin,TRUE))
695
+ {
696
+ $return['background-origin'] .= $str_value[$i][$j].',';
697
+ }
698
+ elseif($str_value[$i][$j]{0} == '(')
699
+ {
700
+ $return['background-size'] .= substr($str_value[$i][$j],1,-1).',';
701
+ }
702
+ elseif(in_array($str_value[$i][$j],$pos,TRUE) || is_numeric($str_value[$i][$j]{0}) || $str_value[$i][$j]{0} === NULL)
703
+ {
704
+ $return['background-position'] .= $str_value[$i][$j];
705
+ if(!$have['pos']) $return['background-position'] .= ' '; else $return['background-position'].= ',';
706
+ $have['pos'] = TRUE;
707
+ }
708
+ elseif(!$have['color'])
709
+ {
710
+ $return['background-color'] .= $str_value[$i][$j].',';
711
+ $have['color'] = TRUE;
712
+ }
713
+ }
714
+ }
715
+
716
+ foreach($background_prop_default as $bg_prop => $default_value)
717
+ {
718
+ if($return[$bg_prop] !== NULL)
719
+ {
720
+ $return[$bg_prop] = substr($return[$bg_prop],0,-1).$important;
721
+ }
722
+ else $return[$bg_prop] = $default_value.$important;
723
+ }
724
+ return $return;
725
+ }
726
+
727
+ /**
728
+ * Merges all background properties
729
+ * @param array $input_css
730
+ * @return array
731
+ * @version 1.0
732
+ * @see dissolve_short_bg()
733
+ * @todo full CSS 3 compliance
734
+ */
735
+ function merge_bg($input_css)
736
+ {
737
+ $background_prop_default =& $GLOBALS['csstidy']['background_prop_default'];
738
+ // Max number of background images. CSS3 not yet fully implemented
739
+ $number_of_values = @max(count(csstidy_optimise::explode_ws(',',$input_css['background-image'])),count(csstidy_optimise::explode_ws(',',$input_css['background-color'])),1);
740
+ // Array with background images to check if BG image exists
741
+ $bg_img_array = @csstidy_optimise::explode_ws(',',csstidy::gvw_important($input_css['background-image']));
742
+ $new_bg_value = '';
743
+ $important = '';
744
+
745
+ for($i = 0; $i < $number_of_values; $i++)
746
+ {
747
+ foreach($background_prop_default as $bg_property => $default_value)
748
+ {
749
+ // Skip if property does not exist
750
+ if(!isset($input_css[$bg_property]))
751
+ {
752
+ continue;
753
+ }
754
+
755
+ $cur_value = $input_css[$bg_property];
756
+
757
+ // Skip some properties if there is no background image
758
+ if((!isset($bg_img_array[$i]) || $bg_img_array[$i] === 'none')
759
+ && ($bg_property === 'background-size' || $bg_property === 'background-position'
760
+ || $bg_property === 'background-attachment' || $bg_property === 'background-repeat'))
761
+ {
762
+ continue;
763
+ }
764
+
765
+ // Remove !important
766
+ if(csstidy::is_important($cur_value))
767
+ {
768
+ $important = ' !important';
769
+ $cur_value = csstidy::gvw_important($cur_value);
770
+ }
771
+
772
+ // Do not add default values
773
+ if($cur_value === $default_value)
774
+ {
775
+ continue;
776
+ }
777
+
778
+ $temp = csstidy_optimise::explode_ws(',',$cur_value);
779
+
780
+ if(isset($temp[$i]))
781
+ {
782
+ if($bg_property == 'background-size')
783
+ {
784
+