Official Facebook Pixel - Version 2.0.0

Version Description

Download this release

Release Info

Developer Facebook
Plugin Icon Official Facebook Pixel
Version 2.0.0
Comparing to
See all releases

Code changes from version 1.8.0 to 2.0.0

Files changed (218) hide show
  1. changelog.txt +3 -0
  2. composer.json +5 -2
  3. composer.lock +394 -197
  4. core/EventIdGenerator.php +34 -0
  5. core/FacebookPluginConfig.php +6 -1
  6. core/FacebookPluginUtils.php +13 -0
  7. core/FacebookServerSideEvent.php +68 -0
  8. core/FacebookWordpressOptions.php +25 -0
  9. core/FacebookWordpressPixelInjection.php +3 -0
  10. core/FacebookWordpressSettingsPage.php +72 -0
  11. core/PixelRenderer.php +72 -0
  12. core/ServerEventAsyncTask.php +47 -0
  13. core/ServerEventFactory.php +156 -0
  14. facebook-for-wordpress.php +11 -4
  15. integration/EDDUtils.php +30 -0
  16. integration/FacebookWordpressCalderaForm.php +52 -3
  17. integration/FacebookWordpressContactForm7.php +82 -19
  18. integration/FacebookWordpressEasyDigitalDownloads.php +64 -25
  19. integration/FacebookWordpressFormidableForm.php +91 -10
  20. integration/FacebookWordpressGravityForms.php +69 -4
  21. integration/FacebookWordpressMailchimpForWp.php +28 -3
  22. integration/FacebookWordpressNinjaForms.php +57 -12
  23. integration/FacebookWordpressWPECommerce.php +74 -26
  24. integration/FacebookWordpressWPForms.php +78 -22
  25. integration/IntegrationUtils.php +26 -0
  26. languages/official-facebook-pixel-ar_AR.po +1 -1
  27. languages/official-facebook-pixel-cs_CZ.po +1 -1
  28. languages/official-facebook-pixel-da_DK.po +1 -1
  29. languages/official-facebook-pixel-de_DE.po +1 -1
  30. languages/official-facebook-pixel-en_GB.po +1 -1
  31. languages/official-facebook-pixel-es_ES.po +1 -1
  32. languages/official-facebook-pixel-es_LA.po +1 -1
  33. languages/official-facebook-pixel-fi_FI.po +1 -1
  34. languages/official-facebook-pixel-fr_CA.po +1 -1
  35. languages/official-facebook-pixel-fr_FR.po +1 -1
  36. languages/official-facebook-pixel-he_IL.po +1 -1
  37. languages/official-facebook-pixel-it_IT.po +1 -1
  38. languages/official-facebook-pixel-ja_JP.po +1 -1
  39. languages/official-facebook-pixel-ko_KR.po +1 -1
  40. languages/official-facebook-pixel-nb_NO.po +1 -1
  41. languages/official-facebook-pixel-nl_NL.po +1 -1
  42. languages/official-facebook-pixel-pl_PL.po +1 -1
  43. languages/official-facebook-pixel-pt_BR.po +1 -1
  44. languages/official-facebook-pixel-pt_PT.po +1 -1
  45. languages/official-facebook-pixel-ru_RU.po +1 -1
  46. languages/official-facebook-pixel-sv_SE.po +1 -1
  47. languages/official-facebook-pixel-th_TH.po +1 -1
  48. languages/official-facebook-pixel-tr_TR.po +1 -1
  49. languages/official-facebook-pixel-vi_VN.po +1 -1
  50. languages/official-facebook-pixel-zh_CN.po +1 -1
  51. languages/official-facebook-pixel-zh_TW.po +1 -1
  52. languages/official-facebook-pixel.pot +1 -1
  53. readme.txt +11 -6
  54. vendor/autoload.php +1 -1
  55. vendor/composer/autoload_classmap.php +1 -0
  56. vendor/composer/autoload_psr4.php +1 -0
  57. vendor/composer/autoload_real.php +4 -4
  58. vendor/composer/autoload_static.php +13 -3
  59. vendor/composer/installed.json +94 -1
  60. vendor/facebook/php-business-sdk/.github/ISSUE_TEMPLATE.md +3 -0
  61. vendor/facebook/php-business-sdk/.travis.yml +30 -0
  62. vendor/facebook/php-business-sdk/CHANGELOG.md +71 -0
  63. vendor/facebook/php-business-sdk/CODE_OF_CONDUCT.md +3 -0
  64. vendor/facebook/php-business-sdk/CONTRIBUTING.md +45 -0
  65. vendor/facebook/php-business-sdk/DEVELOPER_GUIDE.md +495 -0
  66. vendor/facebook/php-business-sdk/LICENSE +19 -0
  67. vendor/facebook/php-business-sdk/README.md +360 -0
  68. vendor/facebook/php-business-sdk/bin/clean_account.php +111 -0
  69. vendor/facebook/php-business-sdk/bin/create_phar.php +112 -0
  70. vendor/facebook/php-business-sdk/bin/docsmith.php +68 -0
  71. vendor/facebook/php-business-sdk/bin/get_version.php +34 -0
  72. vendor/facebook/php-business-sdk/composer.json +23 -0
  73. vendor/facebook/php-business-sdk/fb_ca_chain_bundle.crt +3920 -0
  74. vendor/facebook/php-business-sdk/src/FacebookAds/AnonymousSession.php +35 -0
  75. vendor/facebook/php-business-sdk/src/FacebookAds/Api.php +247 -0
  76. vendor/facebook/php-business-sdk/src/FacebookAds/ApiConfig.php +29 -0
  77. vendor/facebook/php-business-sdk/src/FacebookAds/ApiRequest.php +219 -0
  78. vendor/facebook/php-business-sdk/src/FacebookAds/CrashReporter.php +216 -0
  79. vendor/facebook/php-business-sdk/src/FacebookAds/Cursor.php +536 -0
  80. vendor/facebook/php-business-sdk/src/FacebookAds/Enum/AbstractEnum.php +181 -0
  81. vendor/facebook/php-business-sdk/src/FacebookAds/Enum/EmptyEnum.php +56 -0
  82. vendor/facebook/php-business-sdk/src/FacebookAds/Enum/EnumInstanceInterface.php +91 -0
  83. vendor/facebook/php-business-sdk/src/FacebookAds/Exception/Exception.php +29 -0
  84. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/AbstractAdapter.php +56 -0
  85. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/AdapterInterface.php +64 -0
  86. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/AbstractCurl.php +130 -0
  87. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/Curl.php +101 -0
  88. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/Curl55.php +96 -0
  89. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/CurlInterface.php +106 -0
  90. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/CurlAdapter.php +201 -0
  91. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Client.php +220 -0
  92. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/AuthorizationException.php +29 -0
  93. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ClientException.php +29 -0
  94. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/EmptyResponseException.php +42 -0
  95. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/PermissionException.php +29 -0
  96. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/RequestException.php +248 -0
  97. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ServerException.php +29 -0
  98. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ThrottleException.php +29 -0
  99. vendor/facebook/php-business-sdk/src/FacebookAds/Http/FileParameter.php +89 -0
  100. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Headers.php +29 -0
  101. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Parameters.php +59 -0
  102. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Request.php +296 -0
  103. vendor/facebook/php-business-sdk/src/FacebookAds/Http/RequestInterface.php +169 -0
  104. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Response.php +125 -0
  105. vendor/facebook/php-business-sdk/src/FacebookAds/Http/ResponseInterface.php +73 -0
  106. vendor/facebook/php-business-sdk/src/FacebookAds/Http/Util.php +48 -0
  107. vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger.php +276 -0
  108. vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger/JsonAwareParameters.php +38 -0
  109. vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger/JsonNode.php +196 -0
  110. vendor/facebook/php-business-sdk/src/FacebookAds/Logger/LoggerInterface.php +54 -0
  111. vendor/facebook/php-business-sdk/src/FacebookAds/Logger/NullLogger.php +60 -0
  112. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractArchivableCrudObject.php +92 -0
  113. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractCrudObject.php +531 -0
  114. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractObject.php +185 -0
  115. vendor/facebook/php-business-sdk/src/FacebookAds/Object/Ad.php +516 -0
  116. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccount.php +3220 -0
  117. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountActivity.php +80 -0
  118. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountAdRulesHistory.php +61 -0
  119. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountAdVolume.php +57 -0
  120. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountContentFilterLevelsInheritance.php +57 -0
  121. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountCreationRequest.php +103 -0
  122. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDefaultDestination.php +57 -0
  123. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDefaultObjective.php +61 -0
  124. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDeliveryEstimate.php +59 -0
  125. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountMatchedSearchApplicationsEdgeData.php +59 -0
  126. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountMaxBid.php +57 -0
  127. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountPromotableObjects.php +57 -0
  128. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountReachEstimate.php +57 -0
  129. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountRecommendedCamapaignBudget.php +57 -0
  130. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountRoas.php +57 -0
  131. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountSubscribedApps.php +64 -0
  132. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountTargetingUnified.php +67 -0
  133. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountTrackingData.php +57 -0
  134. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountUser.php +76 -0
  135. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdActivity.php +61 -0
  136. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpec.php +59 -0
  137. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecAssetLabel.php +57 -0
  138. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecBody.php +57 -0
  139. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecCaption.php +57 -0
  140. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecDescription.php +57 -0
  141. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecGroupRule.php +57 -0
  142. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecImage.php +57 -0
  143. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecLinkURL.php +57 -0
  144. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecTitle.php +57 -0
  145. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecVideo.php +57 -0
  146. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequest.php +105 -0
  147. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequestSet.php +167 -0
  148. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequestSetNotificationResult.php +57 -0
  149. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdBidAdjustments.php +57 -0
  150. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignActivity.php +92 -0
  151. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignBidConstraint.php +57 -0
  152. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignDeliveryEstimate.php +59 -0
  153. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignDeliveryStatsUnsupportedReasons.php +57 -0
  154. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignFrequencyControlSpecs.php +57 -0
  155. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignGroupActivity.php +84 -0
  156. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignIssuesInfo.php +57 -0
  157. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignLearningStageInfo.php +57 -0
  158. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignOptimizationEvent.php +57 -0
  159. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignPacedBidInfo.php +57 -0
  160. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreative.php +282 -0
  161. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeCollectionThumbnailInfo.php +57 -0
  162. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeInsights.php +57 -0
  163. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeInteractiveComponentsSpec.php +57 -0
  164. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkData.php +61 -0
  165. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataAppLinkSpec.php +57 -0
  166. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataCallToAction.php +59 -0
  167. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataCallToActionValue.php +57 -0
  168. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataChildAttachment.php +57 -0
  169. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataImageLayerSpec.php +71 -0
  170. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataImageOverlaySpec.php +69 -0
  171. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataSponsorshipInfoSpec.php +57 -0
  172. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataTemplateVideoSpec.php +57 -0
  173. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeObjectStorySpec.php +57 -0
  174. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePhotoData.php +57 -0
  175. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePlaceData.php +57 -0
  176. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePlatformCustomization.php +57 -0
  177. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePortraitCustomizations.php +57 -0
  178. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePostClickConfiguration.php +57 -0
  179. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeRecommenderSettings.php +57 -0
  180. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeStaticFallbackSpec.php +57 -0
  181. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeTemplateURLSpec.php +57 -0
  182. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeTextData.php +57 -0
  183. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeVideoData.php +57 -0
  184. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCustomizationRuleSpec.php +57 -0
  185. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdDynamicCreative.php +57 -0
  186. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdEntityTargetSpend.php +57 -0
  187. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdImage.php +264 -0
  188. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdKeywords.php +57 -0
  189. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdLabel.php +226 -0
  190. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdMonetizationProperty.php +183 -0
  191. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdNetworkAnalyticsAsyncQueryResult.php +57 -0
  192. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdNetworkAnalyticsSyncQueryResult.php +67 -0
  193. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacePageSet.php +115 -0
  194. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacePageSetMetadata.php +57 -0
  195. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacement.php +80 -0
  196. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPreview.php +68 -0
  197. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPromotedObject.php +59 -0
  198. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRecommendation.php +61 -0
  199. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRecommendationData.php +57 -0
  200. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdReportRun.php +168 -0
  201. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdReportSpec.php +103 -0
  202. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRule.php +215 -0
  203. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleEvaluationSpec.php +59 -0
  204. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleExecutionOptions.php +59 -0
  205. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleExecutionSpec.php +59 -0
  206. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleFilters.php +59 -0
  207. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistory.php +59 -0
  208. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistoryResult.php +59 -0
  209. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistoryResultAction.php +57 -0
  210. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleSchedule.php +57 -0
  211. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleScheduleSpec.php +57 -0
  212. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleTrigger.php +61 -0
  213. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdSet.php +702 -0
  214. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudy.php +251 -0
  215. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyCell.php +204 -0
  216. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyObjective.php +306 -0
  217. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyObjectiveID.php +57 -0
  218. vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdVideo.php +283 -0
changelog.txt CHANGED
@@ -1,4 +1,7 @@
1
  *** Facebook for WordPress Changelog ***
 
 
 
2
  2019-12-02 version 1.8.0
3
  * Support for WordPress 5.3
4
  * Fix Gravity Forms confirmation redirect
1
  *** Facebook for WordPress Changelog ***
2
+ 2020-03-09 version 2.0.0
3
+ * Added support for Server-Side API
4
+
5
  2019-12-02 version 1.8.0
6
  * Support for WordPress 5.3
7
  * Fix Gravity Forms confirmation redirect
composer.json CHANGED
@@ -8,7 +8,10 @@
8
  "10up/wp_mock": "0.3.0"
9
  },
10
  "license": "GPL",
11
- "require": {},
 
 
 
12
  "autoload": {
13
  "psr-4": {
14
  "FacebookPixelPlugin\\": "./",
@@ -22,4 +25,4 @@
22
  "./"
23
  ]
24
  }
25
- }
8
  "10up/wp_mock": "0.3.0"
9
  },
10
  "license": "GPL",
11
+ "require": {
12
+ "facebook/php-business-sdk": "6.0.0",
13
+ "techcrunch/wp-async-task": "dev-master"
14
+ },
15
  "autoload": {
16
  "psr-4": {
17
  "FacebookPixelPlugin\\": "./",
25
  "./"
26
  ]
27
  }
28
+ }
composer.lock CHANGED
@@ -4,8 +4,97 @@
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
- "content-hash": "066d32789b4468f6c87f31956cc2f876",
8
- "packages": [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  "packages-dev": [
10
  {
11
  "name": "10up/wp_mock",
@@ -50,21 +139,24 @@
50
  },
51
  {
52
  "name": "antecedent/patchwork",
53
- "version": "2.1.8",
54
  "source": {
55
  "type": "git",
56
  "url": "https://github.com/antecedent/patchwork.git",
57
- "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7"
58
  },
59
  "dist": {
60
  "type": "zip",
61
- "url": "https://api.github.com/repos/antecedent/patchwork/zipball/3bb81ace3914c220aa273d1c0603d5e1b454c0d7",
62
- "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7",
63
  "shasum": ""
64
  },
65
  "require": {
66
  "php": ">=5.4.0"
67
  },
 
 
 
68
  "type": "library",
69
  "notification-url": "https://packagist.org/downloads/",
70
  "license": [
@@ -87,31 +179,33 @@
87
  "runkit",
88
  "testing"
89
  ],
90
- "time": "2018-02-19T18:52:50+00:00"
91
  },
92
  {
93
  "name": "doctrine/instantiator",
94
- "version": "1.1.0",
95
  "source": {
96
  "type": "git",
97
  "url": "https://github.com/doctrine/instantiator.git",
98
- "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
99
  },
100
  "dist": {
101
  "type": "zip",
102
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
103
- "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
104
  "shasum": ""
105
  },
106
  "require": {
107
  "php": "^7.1"
108
  },
109
  "require-dev": {
110
- "athletic/athletic": "~0.1.8",
111
  "ext-pdo": "*",
112
  "ext-phar": "*",
113
- "phpunit/phpunit": "^6.2.3",
114
- "squizlabs/php_codesniffer": "^3.0.2"
 
 
115
  },
116
  "type": "library",
117
  "extra": {
@@ -136,12 +230,12 @@
136
  }
137
  ],
138
  "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
139
- "homepage": "https://github.com/doctrine/instantiator",
140
  "keywords": [
141
  "constructor",
142
  "instantiate"
143
  ],
144
- "time": "2017-07-22T11:58:36+00:00"
145
  },
146
  {
147
  "name": "hamcrest/hamcrest-php",
@@ -229,16 +323,16 @@
229
  },
230
  {
231
  "name": "mockery/mockery",
232
- "version": "1.2.0",
233
  "source": {
234
  "type": "git",
235
  "url": "https://github.com/mockery/mockery.git",
236
- "reference": "100633629bf76d57430b86b7098cd6beb996a35a"
237
  },
238
  "dist": {
239
  "type": "zip",
240
- "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a",
241
- "reference": "100633629bf76d57430b86b7098cd6beb996a35a",
242
  "shasum": ""
243
  },
244
  "require": {
@@ -247,12 +341,12 @@
247
  "php": ">=5.6.0"
248
  },
249
  "require-dev": {
250
- "phpunit/phpunit": "~5.7.10|~6.5|~7.0"
251
  },
252
  "type": "library",
253
  "extra": {
254
  "branch-alias": {
255
- "dev-master": "1.0.x-dev"
256
  }
257
  },
258
  "autoload": {
@@ -290,20 +384,20 @@
290
  "test double",
291
  "testing"
292
  ],
293
- "time": "2018-10-02T21:52:37+00:00"
294
  },
295
  {
296
  "name": "myclabs/deep-copy",
297
- "version": "1.8.1",
298
  "source": {
299
  "type": "git",
300
  "url": "https://github.com/myclabs/DeepCopy.git",
301
- "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
302
  },
303
  "dist": {
304
  "type": "zip",
305
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
306
- "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
307
  "shasum": ""
308
  },
309
  "require": {
@@ -338,7 +432,7 @@
338
  "object",
339
  "object graph"
340
  ],
341
- "time": "2018-06-11T23:09:50+00:00"
342
  },
343
  {
344
  "name": "phar-io/manifest",
@@ -541,35 +635,33 @@
541
  },
542
  {
543
  "name": "phpdocumentor/reflection-common",
544
- "version": "1.0.1",
545
  "source": {
546
  "type": "git",
547
  "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
548
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
549
  },
550
  "dist": {
551
  "type": "zip",
552
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
553
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
554
  "shasum": ""
555
  },
556
  "require": {
557
- "php": ">=5.5"
558
  },
559
  "require-dev": {
560
- "phpunit/phpunit": "^4.6"
561
  },
562
  "type": "library",
563
  "extra": {
564
  "branch-alias": {
565
- "dev-master": "1.0.x-dev"
566
  }
567
  },
568
  "autoload": {
569
  "psr-4": {
570
- "phpDocumentor\\Reflection\\": [
571
- "src"
572
- ]
573
  }
574
  },
575
  "notification-url": "https://packagist.org/downloads/",
@@ -591,44 +683,42 @@
591
  "reflection",
592
  "static analysis"
593
  ],
594
- "time": "2017-09-11T18:02:19+00:00"
595
  },
596
  {
597
  "name": "phpdocumentor/reflection-docblock",
598
- "version": "4.3.0",
599
  "source": {
600
  "type": "git",
601
  "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
602
- "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
603
  },
604
  "dist": {
605
  "type": "zip",
606
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
607
- "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
608
  "shasum": ""
609
  },
610
  "require": {
611
- "php": "^7.0",
612
- "phpdocumentor/reflection-common": "^1.0.0",
613
- "phpdocumentor/type-resolver": "^0.4.0",
614
- "webmozart/assert": "^1.0"
 
615
  },
616
  "require-dev": {
617
- "doctrine/instantiator": "~1.0.5",
618
- "mockery/mockery": "^1.0",
619
- "phpunit/phpunit": "^6.4"
620
  },
621
  "type": "library",
622
  "extra": {
623
  "branch-alias": {
624
- "dev-master": "4.x-dev"
625
  }
626
  },
627
  "autoload": {
628
  "psr-4": {
629
- "phpDocumentor\\Reflection\\": [
630
- "src/"
631
- ]
632
  }
633
  },
634
  "notification-url": "https://packagist.org/downloads/",
@@ -639,44 +729,47 @@
639
  {
640
  "name": "Mike van Riel",
641
  "email": "me@mikevanriel.com"
 
 
 
 
642
  }
643
  ],
644
  "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
645
- "time": "2017-11-30T07:14:17+00:00"
646
  },
647
  {
648
  "name": "phpdocumentor/type-resolver",
649
- "version": "0.4.0",
650
  "source": {
651
  "type": "git",
652
  "url": "https://github.com/phpDocumentor/TypeResolver.git",
653
- "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
654
  },
655
  "dist": {
656
  "type": "zip",
657
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
658
- "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
659
  "shasum": ""
660
  },
661
  "require": {
662
- "php": "^5.5 || ^7.0",
663
- "phpdocumentor/reflection-common": "^1.0"
664
  },
665
  "require-dev": {
666
- "mockery/mockery": "^0.9.4",
667
- "phpunit/phpunit": "^5.2||^4.8.24"
 
668
  },
669
  "type": "library",
670
  "extra": {
671
  "branch-alias": {
672
- "dev-master": "1.0.x-dev"
673
  }
674
  },
675
  "autoload": {
676
  "psr-4": {
677
- "phpDocumentor\\Reflection\\": [
678
- "src/"
679
- ]
680
  }
681
  },
682
  "notification-url": "https://packagist.org/downloads/",
@@ -689,42 +782,43 @@
689
  "email": "me@mikevanriel.com"
690
  }
691
  ],
692
- "time": "2017-07-14T14:27:02+00:00"
 
693
  },
694
  {
695
  "name": "phpspec/prophecy",
696
- "version": "1.8.0",
697
  "source": {
698
  "type": "git",
699
  "url": "https://github.com/phpspec/prophecy.git",
700
- "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
701
  },
702
  "dist": {
703
  "type": "zip",
704
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
705
- "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
706
  "shasum": ""
707
  },
708
  "require": {
709
  "doctrine/instantiator": "^1.0.2",
710
  "php": "^5.3|^7.0",
711
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
712
- "sebastian/comparator": "^1.1|^2.0|^3.0",
713
- "sebastian/recursion-context": "^1.0|^2.0|^3.0"
714
  },
715
  "require-dev": {
716
- "phpspec/phpspec": "^2.5|^3.2",
717
  "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
718
  },
719
  "type": "library",
720
  "extra": {
721
  "branch-alias": {
722
- "dev-master": "1.8.x-dev"
723
  }
724
  },
725
  "autoload": {
726
- "psr-0": {
727
- "Prophecy\\": "src/"
728
  }
729
  },
730
  "notification-url": "https://packagist.org/downloads/",
@@ -752,7 +846,7 @@
752
  "spy",
753
  "stub"
754
  ],
755
- "time": "2018-08-05T17:53:17+00:00"
756
  },
757
  {
758
  "name": "phpunit/php-code-coverage",
@@ -1005,16 +1099,16 @@
1005
  },
1006
  {
1007
  "name": "phpunit/phpunit",
1008
- "version": "6.5.13",
1009
  "source": {
1010
  "type": "git",
1011
  "url": "https://github.com/sebastianbergmann/phpunit.git",
1012
- "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
1013
  },
1014
  "dist": {
1015
  "type": "zip",
1016
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
1017
- "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
1018
  "shasum": ""
1019
  },
1020
  "require": {
@@ -1085,7 +1179,7 @@
1085
  "testing",
1086
  "xunit"
1087
  ],
1088
- "time": "2018-09-08T15:10:43+00:00"
1089
  },
1090
  {
1091
  "name": "phpunit/phpunit-mock-objects",
@@ -1144,8 +1238,58 @@
1144
  "mock",
1145
  "xunit"
1146
  ],
 
1147
  "time": "2018-08-09T05:50:03+00:00"
1148
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
  {
1150
  "name": "sebastian/code-unit-reverse-lookup",
1151
  "version": "1.0.1",
@@ -1359,16 +1503,16 @@
1359
  },
1360
  {
1361
  "name": "sebastian/exporter",
1362
- "version": "3.1.0",
1363
  "source": {
1364
  "type": "git",
1365
  "url": "https://github.com/sebastianbergmann/exporter.git",
1366
- "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
1367
  },
1368
  "dist": {
1369
  "type": "zip",
1370
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
1371
- "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
1372
  "shasum": ""
1373
  },
1374
  "require": {
@@ -1395,6 +1539,10 @@
1395
  "BSD-3-Clause"
1396
  ],
1397
  "authors": [
 
 
 
 
1398
  {
1399
  "name": "Jeff Welch",
1400
  "email": "whatthejeff@gmail.com"
@@ -1403,17 +1551,13 @@
1403
  "name": "Volker Dusch",
1404
  "email": "github@wallbash.com"
1405
  },
1406
- {
1407
- "name": "Bernhard Schussek",
1408
- "email": "bschussek@2bepublished.at"
1409
- },
1410
- {
1411
- "name": "Sebastian Bergmann",
1412
- "email": "sebastian@phpunit.de"
1413
- },
1414
  {
1415
  "name": "Adam Harvey",
1416
  "email": "aharvey@php.net"
 
 
 
 
1417
  }
1418
  ],
1419
  "description": "Provides the functionality to export PHP variables for visualization",
@@ -1422,7 +1566,7 @@
1422
  "export",
1423
  "exporter"
1424
  ],
1425
- "time": "2017-04-03T13:19:02+00:00"
1426
  },
1427
  {
1428
  "name": "sebastian/global-state",
@@ -1707,37 +1851,44 @@
1707
  },
1708
  {
1709
  "name": "symfony/console",
1710
- "version": "v4.2.2",
1711
  "source": {
1712
  "type": "git",
1713
  "url": "https://github.com/symfony/console.git",
1714
- "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522"
1715
  },
1716
  "dist": {
1717
  "type": "zip",
1718
- "url": "https://api.github.com/repos/symfony/console/zipball/b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
1719
- "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
1720
  "shasum": ""
1721
  },
1722
  "require": {
1723
  "php": "^7.1.3",
1724
- "symfony/contracts": "^1.0",
1725
- "symfony/polyfill-mbstring": "~1.0"
 
1726
  },
1727
  "conflict": {
1728
  "symfony/dependency-injection": "<3.4",
 
 
1729
  "symfony/process": "<3.3"
1730
  },
 
 
 
1731
  "require-dev": {
1732
  "psr/log": "~1.0",
1733
- "symfony/config": "~3.4|~4.0",
1734
- "symfony/dependency-injection": "~3.4|~4.0",
1735
- "symfony/event-dispatcher": "~3.4|~4.0",
1736
- "symfony/lock": "~3.4|~4.0",
1737
- "symfony/process": "~3.4|~4.0"
 
1738
  },
1739
  "suggest": {
1740
- "psr/log-implementation": "For using the console logger",
1741
  "symfony/event-dispatcher": "",
1742
  "symfony/lock": "",
1743
  "symfony/process": ""
@@ -1745,7 +1896,7 @@
1745
  "type": "library",
1746
  "extra": {
1747
  "branch-alias": {
1748
- "dev-master": "4.2-dev"
1749
  }
1750
  },
1751
  "autoload": {
@@ -1772,48 +1923,40 @@
1772
  ],
1773
  "description": "Symfony Console Component",
1774
  "homepage": "https://symfony.com",
1775
- "time": "2019-01-04T15:13:53+00:00"
1776
  },
1777
  {
1778
- "name": "symfony/contracts",
1779
- "version": "v1.0.2",
1780
  "source": {
1781
  "type": "git",
1782
- "url": "https://github.com/symfony/contracts.git",
1783
- "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
1784
  },
1785
  "dist": {
1786
  "type": "zip",
1787
- "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
1788
- "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
1789
  "shasum": ""
1790
  },
1791
  "require": {
1792
- "php": "^7.1.3"
1793
- },
1794
- "require-dev": {
1795
- "psr/cache": "^1.0",
1796
- "psr/container": "^1.0"
1797
  },
1798
  "suggest": {
1799
- "psr/cache": "When using the Cache contracts",
1800
- "psr/container": "When using the Service contracts",
1801
- "symfony/cache-contracts-implementation": "",
1802
- "symfony/service-contracts-implementation": "",
1803
- "symfony/translation-contracts-implementation": ""
1804
  },
1805
  "type": "library",
1806
  "extra": {
1807
  "branch-alias": {
1808
- "dev-master": "1.0-dev"
1809
  }
1810
  },
1811
  "autoload": {
1812
  "psr-4": {
1813
- "Symfony\\Contracts\\": ""
1814
  },
1815
- "exclude-from-classmap": [
1816
- "**/Tests/"
1817
  ]
1818
  },
1819
  "notification-url": "https://packagist.org/downloads/",
@@ -1822,55 +1965,53 @@
1822
  ],
1823
  "authors": [
1824
  {
1825
- "name": "Nicolas Grekas",
1826
- "email": "p@tchwork.com"
1827
  },
1828
  {
1829
  "name": "Symfony Community",
1830
  "homepage": "https://symfony.com/contributors"
1831
  }
1832
  ],
1833
- "description": "A set of abstractions extracted out of the Symfony components",
1834
  "homepage": "https://symfony.com",
1835
  "keywords": [
1836
- "abstractions",
1837
- "contracts",
1838
- "decoupling",
1839
- "interfaces",
1840
- "interoperability",
1841
- "standards"
1842
  ],
1843
- "time": "2018-12-05T08:06:11+00:00"
1844
  },
1845
  {
1846
- "name": "symfony/polyfill-ctype",
1847
- "version": "v1.10.0",
1848
  "source": {
1849
  "type": "git",
1850
- "url": "https://github.com/symfony/polyfill-ctype.git",
1851
- "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
1852
  },
1853
  "dist": {
1854
  "type": "zip",
1855
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
1856
- "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
1857
  "shasum": ""
1858
  },
1859
  "require": {
1860
  "php": ">=5.3.3"
1861
  },
1862
  "suggest": {
1863
- "ext-ctype": "For best performance"
1864
  },
1865
  "type": "library",
1866
  "extra": {
1867
  "branch-alias": {
1868
- "dev-master": "1.9-dev"
1869
  }
1870
  },
1871
  "autoload": {
1872
  "psr-4": {
1873
- "Symfony\\Polyfill\\Ctype\\": ""
1874
  },
1875
  "files": [
1876
  "bootstrap.php"
@@ -1882,56 +2023,57 @@
1882
  ],
1883
  "authors": [
1884
  {
1885
- "name": "Symfony Community",
1886
- "homepage": "https://symfony.com/contributors"
1887
  },
1888
  {
1889
- "name": "Gert de Pagter",
1890
- "email": "BackEndTea@gmail.com"
1891
  }
1892
  ],
1893
- "description": "Symfony polyfill for ctype functions",
1894
  "homepage": "https://symfony.com",
1895
  "keywords": [
1896
  "compatibility",
1897
- "ctype",
1898
  "polyfill",
1899
- "portable"
 
1900
  ],
1901
- "time": "2018-08-06T14:22:27+00:00"
1902
  },
1903
  {
1904
- "name": "symfony/polyfill-mbstring",
1905
- "version": "v1.10.0",
1906
  "source": {
1907
  "type": "git",
1908
- "url": "https://github.com/symfony/polyfill-mbstring.git",
1909
- "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
1910
  },
1911
  "dist": {
1912
  "type": "zip",
1913
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
1914
- "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
1915
  "shasum": ""
1916
  },
1917
  "require": {
1918
  "php": ">=5.3.3"
1919
  },
1920
- "suggest": {
1921
- "ext-mbstring": "For best performance"
1922
- },
1923
  "type": "library",
1924
  "extra": {
1925
  "branch-alias": {
1926
- "dev-master": "1.9-dev"
1927
  }
1928
  },
1929
  "autoload": {
1930
  "psr-4": {
1931
- "Symfony\\Polyfill\\Mbstring\\": ""
1932
  },
1933
  "files": [
1934
  "bootstrap.php"
 
 
 
1935
  ]
1936
  },
1937
  "notification-url": "https://packagist.org/downloads/",
@@ -1948,29 +2090,86 @@
1948
  "homepage": "https://symfony.com/contributors"
1949
  }
1950
  ],
1951
- "description": "Symfony polyfill for the Mbstring extension",
1952
  "homepage": "https://symfony.com",
1953
  "keywords": [
1954
  "compatibility",
1955
- "mbstring",
1956
  "polyfill",
1957
  "portable",
1958
  "shim"
1959
  ],
1960
- "time": "2018-09-21T13:07:52+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1961
  },
1962
  {
1963
  "name": "symfony/yaml",
1964
- "version": "v4.2.2",
1965
  "source": {
1966
  "type": "git",
1967
  "url": "https://github.com/symfony/yaml.git",
1968
- "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6"
1969
  },
1970
  "dist": {
1971
  "type": "zip",
1972
- "url": "https://api.github.com/repos/symfony/yaml/zipball/d0aa6c0ea484087927b49fd513383a7d36190ca6",
1973
- "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6",
1974
  "shasum": ""
1975
  },
1976
  "require": {
@@ -1981,7 +2180,7 @@
1981
  "symfony/console": "<3.4"
1982
  },
1983
  "require-dev": {
1984
- "symfony/console": "~3.4|~4.0"
1985
  },
1986
  "suggest": {
1987
  "symfony/console": "For validating YAML files using the lint command"
@@ -1989,7 +2188,7 @@
1989
  "type": "library",
1990
  "extra": {
1991
  "branch-alias": {
1992
- "dev-master": "4.2-dev"
1993
  }
1994
  },
1995
  "autoload": {
@@ -2016,20 +2215,20 @@
2016
  ],
2017
  "description": "Symfony Yaml Component",
2018
  "homepage": "https://symfony.com",
2019
- "time": "2019-01-03T09:07:35+00:00"
2020
  },
2021
  {
2022
  "name": "theseer/tokenizer",
2023
- "version": "1.1.0",
2024
  "source": {
2025
  "type": "git",
2026
  "url": "https://github.com/theseer/tokenizer.git",
2027
- "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
2028
  },
2029
  "dist": {
2030
  "type": "zip",
2031
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2032
- "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
2033
  "shasum": ""
2034
  },
2035
  "require": {
@@ -2056,36 +2255,33 @@
2056
  }
2057
  ],
2058
  "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2059
- "time": "2017-04-07T12:08:54+00:00"
2060
  },
2061
  {
2062
  "name": "webmozart/assert",
2063
- "version": "1.4.0",
2064
  "source": {
2065
  "type": "git",
2066
  "url": "https://github.com/webmozart/assert.git",
2067
- "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
2068
  },
2069
  "dist": {
2070
  "type": "zip",
2071
- "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
2072
- "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
2073
  "shasum": ""
2074
  },
2075
  "require": {
2076
  "php": "^5.3.3 || ^7.0",
2077
  "symfony/polyfill-ctype": "^1.8"
2078
  },
 
 
 
2079
  "require-dev": {
2080
- "phpunit/phpunit": "^4.6",
2081
- "sebastian/version": "^1.0.1"
2082
  },
2083
  "type": "library",
2084
- "extra": {
2085
- "branch-alias": {
2086
- "dev-master": "1.3-dev"
2087
- }
2088
- },
2089
  "autoload": {
2090
  "psr-4": {
2091
  "Webmozart\\Assert\\": "src/"
@@ -2107,12 +2303,13 @@
2107
  "check",
2108
  "validate"
2109
  ],
2110
- "time": "2018-12-25T11:19:39+00:00"
2111
  }
2112
  ],
2113
  "aliases": [],
2114
  "minimum-stability": "stable",
2115
  "stability-flags": {
 
2116
  "phing/phing": 15
2117
  },
2118
  "prefer-stable": false,
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
+ "content-hash": "8c78f3821e9ebc5ffc8c03dab0e2a8b3",
8
+ "packages": [
9
+ {
10
+ "name": "facebook/php-business-sdk",
11
+ "version": "6.0.0",
12
+ "source": {
13
+ "type": "git",
14
+ "url": "https://github.com/facebook/facebook-php-business-sdk.git",
15
+ "reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15"
16
+ },
17
+ "dist": {
18
+ "type": "zip",
19
+ "url": "https://api.github.com/repos/facebook/facebook-php-business-sdk/zipball/32c8678d3c50e0570b68d7cbb23062c16a5faf15",
20
+ "reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15",
21
+ "shasum": ""
22
+ },
23
+ "require-dev": {
24
+ "phpunit/phpunit": "~8",
25
+ "symfony/finder": "~2.6"
26
+ },
27
+ "type": "library",
28
+ "autoload": {
29
+ "psr-4": {
30
+ "FacebookAds\\": "src/FacebookAds/"
31
+ }
32
+ },
33
+ "notification-url": "https://packagist.org/downloads/",
34
+ "description": "PHP SDK for Facebook Business",
35
+ "homepage": "https://developers.facebook.com/",
36
+ "keywords": [
37
+ "ads",
38
+ "business",
39
+ "facebook",
40
+ "instagram",
41
+ "page",
42
+ "sdk"
43
+ ],
44
+ "time": "2020-02-03T20:06:10+00:00"
45
+ },
46
+ {
47
+ "name": "techcrunch/wp-async-task",
48
+ "version": "dev-master",
49
+ "source": {
50
+ "type": "git",
51
+ "url": "https://github.com/techcrunch/wp-async-task.git",
52
+ "reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc"
53
+ },
54
+ "dist": {
55
+ "type": "zip",
56
+ "url": "https://api.github.com/repos/techcrunch/wp-async-task/zipball/9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
57
+ "reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
58
+ "shasum": ""
59
+ },
60
+ "require-dev": {
61
+ "10up/wp_mock": "dev-master",
62
+ "phpunit/phpunit": "*@stable"
63
+ },
64
+ "type": "wordpress-plugin",
65
+ "autoload": {
66
+ "classmap": [
67
+ "wp-async-task.php"
68
+ ]
69
+ },
70
+ "notification-url": "https://packagist.org/downloads/",
71
+ "license": [
72
+ "MIT"
73
+ ],
74
+ "authors": [
75
+ {
76
+ "name": "Alex Khadiwala",
77
+ "role": "developer"
78
+ },
79
+ {
80
+ "name": "Nicolas Vincent",
81
+ "role": "developer"
82
+ },
83
+ {
84
+ "name": "Eric Mann",
85
+ "email": "eric.mann@10up.com",
86
+ "role": "developer"
87
+ },
88
+ {
89
+ "name": "John P. Bloch",
90
+ "email": "john.bloch@10up.com",
91
+ "role": "developer"
92
+ }
93
+ ],
94
+ "description": "Run asynchronous tasks for long-running operations in WordPress",
95
+ "time": "2016-03-10T17:37:13+00:00"
96
+ }
97
+ ],
98
  "packages-dev": [
99
  {
100
  "name": "10up/wp_mock",
139
  },
140
  {
141
  "name": "antecedent/patchwork",
142
+ "version": "2.1.12",
143
  "source": {
144
  "type": "git",
145
  "url": "https://github.com/antecedent/patchwork.git",
146
+ "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea"
147
  },
148
  "dist": {
149
  "type": "zip",
150
+ "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b98e046dd4c0acc34a0846604f06f6111654d9ea",
151
+ "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea",
152
  "shasum": ""
153
  },
154
  "require": {
155
  "php": ">=5.4.0"
156
  },
157
+ "require-dev": {
158
+ "phpunit/phpunit": ">=4"
159
+ },
160
  "type": "library",
161
  "notification-url": "https://packagist.org/downloads/",
162
  "license": [
179
  "runkit",
180
  "testing"
181
  ],
182
+ "time": "2019-12-22T17:52:09+00:00"
183
  },
184
  {
185
  "name": "doctrine/instantiator",
186
+ "version": "1.3.0",
187
  "source": {
188
  "type": "git",
189
  "url": "https://github.com/doctrine/instantiator.git",
190
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
191
  },
192
  "dist": {
193
  "type": "zip",
194
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
195
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
196
  "shasum": ""
197
  },
198
  "require": {
199
  "php": "^7.1"
200
  },
201
  "require-dev": {
202
+ "doctrine/coding-standard": "^6.0",
203
  "ext-pdo": "*",
204
  "ext-phar": "*",
205
+ "phpbench/phpbench": "^0.13",
206
+ "phpstan/phpstan-phpunit": "^0.11",
207
+ "phpstan/phpstan-shim": "^0.11",
208
+ "phpunit/phpunit": "^7.0"
209
  },
210
  "type": "library",
211
  "extra": {
230
  }
231
  ],
232
  "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
233
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
234
  "keywords": [
235
  "constructor",
236
  "instantiate"
237
  ],
238
+ "time": "2019-10-21T16:45:58+00:00"
239
  },
240
  {
241
  "name": "hamcrest/hamcrest-php",
323
  },
324
  {
325
  "name": "mockery/mockery",
326
+ "version": "1.3.1",
327
  "source": {
328
  "type": "git",
329
  "url": "https://github.com/mockery/mockery.git",
330
+ "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be"
331
  },
332
  "dist": {
333
  "type": "zip",
334
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
335
+ "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
336
  "shasum": ""
337
  },
338
  "require": {
341
  "php": ">=5.6.0"
342
  },
343
  "require-dev": {
344
+ "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0"
345
  },
346
  "type": "library",
347
  "extra": {
348
  "branch-alias": {
349
+ "dev-master": "1.3.x-dev"
350
  }
351
  },
352
  "autoload": {
384
  "test double",
385
  "testing"
386
  ],
387
+ "time": "2019-12-26T09:49:15+00:00"
388
  },
389
  {
390
  "name": "myclabs/deep-copy",
391
+ "version": "1.9.5",
392
  "source": {
393
  "type": "git",
394
  "url": "https://github.com/myclabs/DeepCopy.git",
395
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
396
  },
397
  "dist": {
398
  "type": "zip",
399
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
400
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
401
  "shasum": ""
402
  },
403
  "require": {
432
  "object",
433
  "object graph"
434
  ],
435
+ "time": "2020-01-17T21:11:47+00:00"
436
  },
437
  {
438
  "name": "phar-io/manifest",
635
  },
636
  {
637
  "name": "phpdocumentor/reflection-common",
638
+ "version": "2.0.0",
639
  "source": {
640
  "type": "git",
641
  "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
642
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
643
  },
644
  "dist": {
645
  "type": "zip",
646
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
647
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
648
  "shasum": ""
649
  },
650
  "require": {
651
+ "php": ">=7.1"
652
  },
653
  "require-dev": {
654
+ "phpunit/phpunit": "~6"
655
  },
656
  "type": "library",
657
  "extra": {
658
  "branch-alias": {
659
+ "dev-master": "2.x-dev"
660
  }
661
  },
662
  "autoload": {
663
  "psr-4": {
664
+ "phpDocumentor\\Reflection\\": "src/"
 
 
665
  }
666
  },
667
  "notification-url": "https://packagist.org/downloads/",
683
  "reflection",
684
  "static analysis"
685
  ],
686
+ "time": "2018-08-07T13:53:10+00:00"
687
  },
688
  {
689
  "name": "phpdocumentor/reflection-docblock",
690
+ "version": "5.0.0",
691
  "source": {
692
  "type": "git",
693
  "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
694
+ "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f"
695
  },
696
  "dist": {
697
  "type": "zip",
698
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f",
699
+ "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f",
700
  "shasum": ""
701
  },
702
  "require": {
703
+ "ext-filter": "^7.1",
704
+ "php": "^7.2",
705
+ "phpdocumentor/reflection-common": "^2.0",
706
+ "phpdocumentor/type-resolver": "^1.0",
707
+ "webmozart/assert": "^1"
708
  },
709
  "require-dev": {
710
+ "doctrine/instantiator": "^1",
711
+ "mockery/mockery": "^1"
 
712
  },
713
  "type": "library",
714
  "extra": {
715
  "branch-alias": {
716
+ "dev-master": "5.x-dev"
717
  }
718
  },
719
  "autoload": {
720
  "psr-4": {
721
+ "phpDocumentor\\Reflection\\": "src"
 
 
722
  }
723
  },
724
  "notification-url": "https://packagist.org/downloads/",
729
  {
730
  "name": "Mike van Riel",
731
  "email": "me@mikevanriel.com"
732
+ },
733
+ {
734
+ "name": "Jaap van Otterdijk",
735
+ "email": "account@ijaap.nl"
736
  }
737
  ],
738
  "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
739
+ "time": "2020-02-09T09:16:15+00:00"
740
  },
741
  {
742
  "name": "phpdocumentor/type-resolver",
743
+ "version": "1.0.1",
744
  "source": {
745
  "type": "git",
746
  "url": "https://github.com/phpDocumentor/TypeResolver.git",
747
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
748
  },
749
  "dist": {
750
  "type": "zip",
751
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
752
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
753
  "shasum": ""
754
  },
755
  "require": {
756
+ "php": "^7.1",
757
+ "phpdocumentor/reflection-common": "^2.0"
758
  },
759
  "require-dev": {
760
+ "ext-tokenizer": "^7.1",
761
+ "mockery/mockery": "~1",
762
+ "phpunit/phpunit": "^7.0"
763
  },
764
  "type": "library",
765
  "extra": {
766
  "branch-alias": {
767
+ "dev-master": "1.x-dev"
768
  }
769
  },
770
  "autoload": {
771
  "psr-4": {
772
+ "phpDocumentor\\Reflection\\": "src"
 
 
773
  }
774
  },
775
  "notification-url": "https://packagist.org/downloads/",
782
  "email": "me@mikevanriel.com"
783
  }
784
  ],
785
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
786
+ "time": "2019-08-22T18:11:29+00:00"
787
  },
788
  {
789
  "name": "phpspec/prophecy",
790
+ "version": "v1.10.2",
791
  "source": {
792
  "type": "git",
793
  "url": "https://github.com/phpspec/prophecy.git",
794
+ "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9"
795
  },
796
  "dist": {
797
  "type": "zip",
798
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
799
+ "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
800
  "shasum": ""
801
  },
802
  "require": {
803
  "doctrine/instantiator": "^1.0.2",
804
  "php": "^5.3|^7.0",
805
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
806
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
807
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
808
  },
809
  "require-dev": {
810
+ "phpspec/phpspec": "^2.5 || ^3.2",
811
  "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
812
  },
813
  "type": "library",
814
  "extra": {
815
  "branch-alias": {
816
+ "dev-master": "1.10.x-dev"
817
  }
818
  },
819
  "autoload": {
820
+ "psr-4": {
821
+ "Prophecy\\": "src/Prophecy"
822
  }
823
  },
824
  "notification-url": "https://packagist.org/downloads/",
846
  "spy",
847
  "stub"
848
  ],
849
+ "time": "2020-01-20T15:57:02+00:00"
850
  },
851
  {
852
  "name": "phpunit/php-code-coverage",
1099
  },
1100
  {
1101
  "name": "phpunit/phpunit",
1102
+ "version": "6.5.14",
1103
  "source": {
1104
  "type": "git",
1105
  "url": "https://github.com/sebastianbergmann/phpunit.git",
1106
+ "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
1107
  },
1108
  "dist": {
1109
  "type": "zip",
1110
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
1111
+ "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
1112
  "shasum": ""
1113
  },
1114
  "require": {
1179
  "testing",
1180
  "xunit"
1181
  ],
1182
+ "time": "2019-02-01T05:22:47+00:00"
1183
  },
1184
  {
1185
  "name": "phpunit/phpunit-mock-objects",
1238
  "mock",
1239
  "xunit"
1240
  ],
1241
+ "abandoned": true,
1242
  "time": "2018-08-09T05:50:03+00:00"
1243
  },
1244
+ {
1245
+ "name": "psr/container",
1246
+ "version": "1.0.0",
1247
+ "source": {
1248
+ "type": "git",
1249
+ "url": "https://github.com/php-fig/container.git",
1250
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
1251
+ },
1252
+ "dist": {
1253
+ "type": "zip",
1254
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1255
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1256
+ "shasum": ""
1257
+ },
1258
+ "require": {
1259
+ "php": ">=5.3.0"
1260
+ },
1261
+ "type": "library",
1262
+ "extra": {
1263
+ "branch-alias": {
1264
+ "dev-master": "1.0.x-dev"
1265
+ }
1266
+ },
1267
+ "autoload": {
1268
+ "psr-4": {
1269
+ "Psr\\Container\\": "src/"
1270
+ }
1271
+ },
1272
+ "notification-url": "https://packagist.org/downloads/",
1273
+ "license": [
1274
+ "MIT"
1275
+ ],
1276
+ "authors": [
1277
+ {
1278
+ "name": "PHP-FIG",
1279
+ "homepage": "http://www.php-fig.org/"
1280
+ }
1281
+ ],
1282
+ "description": "Common Container Interface (PHP FIG PSR-11)",
1283
+ "homepage": "https://github.com/php-fig/container",
1284
+ "keywords": [
1285
+ "PSR-11",
1286
+ "container",
1287
+ "container-interface",
1288
+ "container-interop",
1289
+ "psr"
1290
+ ],
1291
+ "time": "2017-02-14T16:28:37+00:00"
1292
+ },
1293
  {
1294
  "name": "sebastian/code-unit-reverse-lookup",
1295
  "version": "1.0.1",
1503
  },
1504
  {
1505
  "name": "sebastian/exporter",
1506
+ "version": "3.1.2",
1507
  "source": {
1508
  "type": "git",
1509
  "url": "https://github.com/sebastianbergmann/exporter.git",
1510
+ "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
1511
  },
1512
  "dist": {
1513
  "type": "zip",
1514
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
1515
+ "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
1516
  "shasum": ""
1517
  },
1518
  "require": {
1539
  "BSD-3-Clause"
1540
  ],
1541
  "authors": [
1542
+ {
1543
+ "name": "Sebastian Bergmann",
1544
+ "email": "sebastian@phpunit.de"
1545
+ },
1546
  {
1547
  "name": "Jeff Welch",
1548
  "email": "whatthejeff@gmail.com"
1551
  "name": "Volker Dusch",
1552
  "email": "github@wallbash.com"
1553
  },
 
 
 
 
 
 
 
 
1554
  {
1555
  "name": "Adam Harvey",
1556
  "email": "aharvey@php.net"
1557
+ },
1558
+ {
1559
+ "name": "Bernhard Schussek",
1560
+ "email": "bschussek@gmail.com"
1561
  }
1562
  ],
1563
  "description": "Provides the functionality to export PHP variables for visualization",
1566
  "export",
1567
  "exporter"
1568
  ],
1569
+ "time": "2019-09-14T09:02:43+00:00"
1570
  },
1571
  {
1572
  "name": "sebastian/global-state",
1851
  },
1852
  {
1853
  "name": "symfony/console",
1854
+ "version": "v4.4.4",
1855
  "source": {
1856
  "type": "git",
1857
  "url": "https://github.com/symfony/console.git",
1858
+ "reference": "f512001679f37e6a042b51897ed24a2f05eba656"
1859
  },
1860
  "dist": {
1861
  "type": "zip",
1862
+ "url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656",
1863
+ "reference": "f512001679f37e6a042b51897ed24a2f05eba656",
1864
  "shasum": ""
1865
  },
1866
  "require": {
1867
  "php": "^7.1.3",
1868
+ "symfony/polyfill-mbstring": "~1.0",
1869
+ "symfony/polyfill-php73": "^1.8",
1870
+ "symfony/service-contracts": "^1.1|^2"
1871
  },
1872
  "conflict": {
1873
  "symfony/dependency-injection": "<3.4",
1874
+ "symfony/event-dispatcher": "<4.3|>=5",
1875
+ "symfony/lock": "<4.4",
1876
  "symfony/process": "<3.3"
1877
  },
1878
+ "provide": {
1879
+ "psr/log-implementation": "1.0"
1880
+ },
1881
  "require-dev": {
1882
  "psr/log": "~1.0",
1883
+ "symfony/config": "^3.4|^4.0|^5.0",
1884
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
1885
+ "symfony/event-dispatcher": "^4.3",
1886
+ "symfony/lock": "^4.4|^5.0",
1887
+ "symfony/process": "^3.4|^4.0|^5.0",
1888
+ "symfony/var-dumper": "^4.3|^5.0"
1889
  },
1890
  "suggest": {
1891
+ "psr/log": "For using the console logger",
1892
  "symfony/event-dispatcher": "",
1893
  "symfony/lock": "",
1894
  "symfony/process": ""
1896
  "type": "library",
1897
  "extra": {
1898
  "branch-alias": {
1899
+ "dev-master": "4.4-dev"
1900
  }
1901
  },
1902
  "autoload": {
1923
  ],
1924
  "description": "Symfony Console Component",
1925
  "homepage": "https://symfony.com",
1926
+ "time": "2020-01-25T12:44:29+00:00"
1927
  },
1928
  {
1929
+ "name": "symfony/polyfill-ctype",
1930
+ "version": "v1.14.0",
1931
  "source": {
1932
  "type": "git",
1933
+ "url": "https://github.com/symfony/polyfill-ctype.git",
1934
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
1935
  },
1936
  "dist": {
1937
  "type": "zip",
1938
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
1939
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
1940
  "shasum": ""
1941
  },
1942
  "require": {
1943
+ "php": ">=5.3.3"
 
 
 
 
1944
  },
1945
  "suggest": {
1946
+ "ext-ctype": "For best performance"
 
 
 
 
1947
  },
1948
  "type": "library",
1949
  "extra": {
1950
  "branch-alias": {
1951
+ "dev-master": "1.14-dev"
1952
  }
1953
  },
1954
  "autoload": {
1955
  "psr-4": {
1956
+ "Symfony\\Polyfill\\Ctype\\": ""
1957
  },
1958
+ "files": [
1959
+ "bootstrap.php"
1960
  ]
1961
  },
1962
  "notification-url": "https://packagist.org/downloads/",
1965
  ],
1966
  "authors": [
1967
  {
1968
+ "name": "Gert de Pagter",
1969
+ "email": "BackEndTea@gmail.com"
1970
  },
1971
  {
1972
  "name": "Symfony Community",
1973
  "homepage": "https://symfony.com/contributors"
1974
  }
1975
  ],
1976
+ "description": "Symfony polyfill for ctype functions",
1977
  "homepage": "https://symfony.com",
1978
  "keywords": [
1979
+ "compatibility",
1980
+ "ctype",
1981
+ "polyfill",
1982
+ "portable"
 
 
1983
  ],
1984
+ "time": "2020-01-13T11:15:53+00:00"
1985
  },
1986
  {
1987
+ "name": "symfony/polyfill-mbstring",
1988
+ "version": "v1.14.0",
1989
  "source": {
1990
  "type": "git",
1991
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
1992
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
1993
  },
1994
  "dist": {
1995
  "type": "zip",
1996
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
1997
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
1998
  "shasum": ""
1999
  },
2000
  "require": {
2001
  "php": ">=5.3.3"
2002
  },
2003
  "suggest": {
2004
+ "ext-mbstring": "For best performance"
2005
  },
2006
  "type": "library",
2007
  "extra": {
2008
  "branch-alias": {
2009
+ "dev-master": "1.14-dev"
2010
  }
2011
  },
2012
  "autoload": {
2013
  "psr-4": {
2014
+ "Symfony\\Polyfill\\Mbstring\\": ""
2015
  },
2016
  "files": [
2017
  "bootstrap.php"
2023
  ],
2024
  "authors": [
2025
  {
2026
+ "name": "Nicolas Grekas",
2027
+ "email": "p@tchwork.com"
2028
  },
2029
  {
2030
+ "name": "Symfony Community",
2031
+ "homepage": "https://symfony.com/contributors"
2032
  }
2033
  ],
2034
+ "description": "Symfony polyfill for the Mbstring extension",
2035
  "homepage": "https://symfony.com",
2036
  "keywords": [
2037
  "compatibility",
2038
+ "mbstring",
2039
  "polyfill",
2040
+ "portable",
2041
+ "shim"
2042
  ],
2043
+ "time": "2020-01-13T11:15:53+00:00"
2044
  },
2045
  {
2046
+ "name": "symfony/polyfill-php73",
2047
+ "version": "v1.14.0",
2048
  "source": {
2049
  "type": "git",
2050
+ "url": "https://github.com/symfony/polyfill-php73.git",
2051
+ "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675"
2052
  },
2053
  "dist": {
2054
  "type": "zip",
2055
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675",
2056
+ "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675",
2057
  "shasum": ""
2058
  },
2059
  "require": {
2060
  "php": ">=5.3.3"
2061
  },
 
 
 
2062
  "type": "library",
2063
  "extra": {
2064
  "branch-alias": {
2065
+ "dev-master": "1.14-dev"
2066
  }
2067
  },
2068
  "autoload": {
2069
  "psr-4": {
2070
+ "Symfony\\Polyfill\\Php73\\": ""
2071
  },
2072
  "files": [
2073
  "bootstrap.php"
2074
+ ],
2075
+ "classmap": [
2076
+ "Resources/stubs"
2077
  ]
2078
  },
2079
  "notification-url": "https://packagist.org/downloads/",
2090
  "homepage": "https://symfony.com/contributors"
2091
  }
2092
  ],
2093
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
2094
  "homepage": "https://symfony.com",
2095
  "keywords": [
2096
  "compatibility",
 
2097
  "polyfill",
2098
  "portable",
2099
  "shim"
2100
  ],
2101
+ "time": "2020-01-13T11:15:53+00:00"
2102
+ },
2103
+ {
2104
+ "name": "symfony/service-contracts",
2105
+ "version": "v2.0.1",
2106
+ "source": {
2107
+ "type": "git",
2108
+ "url": "https://github.com/symfony/service-contracts.git",
2109
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749"
2110
+ },
2111
+ "dist": {
2112
+ "type": "zip",
2113
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
2114
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749",
2115
+ "shasum": ""
2116
+ },
2117
+ "require": {
2118
+ "php": "^7.2.5",
2119
+ "psr/container": "^1.0"
2120
+ },
2121
+ "suggest": {
2122
+ "symfony/service-implementation": ""
2123
+ },
2124
+ "type": "library",
2125
+ "extra": {
2126
+ "branch-alias": {
2127
+ "dev-master": "2.0-dev"
2128
+ }
2129
+ },
2130
+ "autoload": {
2131
+ "psr-4": {
2132
+ "Symfony\\Contracts\\Service\\": ""
2133
+ }
2134
+ },
2135
+ "notification-url": "https://packagist.org/downloads/",
2136
+ "license": [
2137
+ "MIT"
2138
+ ],
2139
+ "authors": [
2140
+ {
2141
+ "name": "Nicolas Grekas",
2142
+ "email": "p@tchwork.com"
2143
+ },
2144
+ {
2145
+ "name": "Symfony Community",
2146
+ "homepage": "https://symfony.com/contributors"
2147
+ }
2148
+ ],
2149
+ "description": "Generic abstractions related to writing services",
2150
+ "homepage": "https://symfony.com",
2151
+ "keywords": [
2152
+ "abstractions",
2153
+ "contracts",
2154
+ "decoupling",
2155
+ "interfaces",
2156
+ "interoperability",
2157
+ "standards"
2158
+ ],
2159
+ "time": "2019-11-18T17:27:11+00:00"
2160
  },
2161
  {
2162
  "name": "symfony/yaml",
2163
+ "version": "v4.4.4",
2164
  "source": {
2165
  "type": "git",
2166
  "url": "https://github.com/symfony/yaml.git",
2167
+ "reference": "cd014e425b3668220adb865f53bff64b3ad21767"
2168
  },
2169
  "dist": {
2170
  "type": "zip",
2171
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/cd014e425b3668220adb865f53bff64b3ad21767",
2172
+ "reference": "cd014e425b3668220adb865f53bff64b3ad21767",
2173
  "shasum": ""
2174
  },
2175
  "require": {
2180
  "symfony/console": "<3.4"
2181
  },
2182
  "require-dev": {
2183
+ "symfony/console": "^3.4|^4.0|^5.0"
2184
  },
2185
  "suggest": {
2186
  "symfony/console": "For validating YAML files using the lint command"
2188
  "type": "library",
2189
  "extra": {
2190
  "branch-alias": {
2191
+ "dev-master": "4.4-dev"
2192
  }
2193
  },
2194
  "autoload": {
2215
  ],
2216
  "description": "Symfony Yaml Component",
2217
  "homepage": "https://symfony.com",
2218
+ "time": "2020-01-21T11:12:16+00:00"
2219
  },
2220
  {
2221
  "name": "theseer/tokenizer",
2222
+ "version": "1.1.3",
2223
  "source": {
2224
  "type": "git",
2225
  "url": "https://github.com/theseer/tokenizer.git",
2226
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
2227
  },
2228
  "dist": {
2229
  "type": "zip",
2230
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2231
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2232
  "shasum": ""
2233
  },
2234
  "require": {
2255
  }
2256
  ],
2257
  "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2258
+ "time": "2019-06-13T22:48:21+00:00"
2259
  },
2260
  {
2261
  "name": "webmozart/assert",
2262
+ "version": "1.7.0",
2263
  "source": {
2264
  "type": "git",
2265
  "url": "https://github.com/webmozart/assert.git",
2266
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
2267
  },
2268
  "dist": {
2269
  "type": "zip",
2270
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
2271
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
2272
  "shasum": ""
2273
  },
2274
  "require": {
2275
  "php": "^5.3.3 || ^7.0",
2276
  "symfony/polyfill-ctype": "^1.8"
2277
  },
2278
+ "conflict": {
2279
+ "vimeo/psalm": "<3.6.0"
2280
+ },
2281
  "require-dev": {
2282
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
 
2283
  },
2284
  "type": "library",
 
 
 
 
 
2285
  "autoload": {
2286
  "psr-4": {
2287
  "Webmozart\\Assert\\": "src/"
2303
  "check",
2304
  "validate"
2305
  ],
2306
+ "time": "2020-02-14T12:15:55+00:00"
2307
  }
2308
  ],
2309
  "aliases": [],
2310
  "minimum-stability": "stable",
2311
  "stability-flags": {
2312
+ "techcrunch/wp-async-task": 20,
2313
  "phing/phing": 15
2314
  },
2315
  "prefer-stable": false,
core/EventIdGenerator.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright (C) 2015-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ *
9
+ * This program is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License along
15
+ * with this program; if not, write to the Free Software Foundation, Inc.,
16
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
+ */
18
+
19
+ namespace FacebookPixelPlugin\Core;
20
+
21
+ final class EventIdGenerator {
22
+ /**
23
+ * Creates a new guid v4 - via https://stackoverflow.com/a/15875555
24
+ * @return string A 36 character string containing dashes.
25
+ */
26
+ public static function guidv4() {
27
+ $data = openssl_random_pseudo_bytes(16);
28
+
29
+ $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
30
+ $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
31
+
32
+ return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
33
+ }
34
+ }
core/FacebookPluginConfig.php CHANGED
@@ -20,7 +20,7 @@ namespace FacebookPixelPlugin\Core;
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  class FacebookPluginConfig {
23
- const PLUGIN_VERSION = '1.8.0';
24
  const SOURCE = 'wordpress';
25
  const TEXT_DOMAIN = 'official-facebook-pixel';
26
 
@@ -32,6 +32,7 @@ class FacebookPluginConfig {
32
  const ADMIN_OPTION_GROUP = 'facebook_option_group';
33
  const ADMIN_PAGE_TITLE = 'Facebook Pixel Settings';
34
  const ADMIN_PRIVACY_URL = 'https://developers.facebook.com/docs/privacy/';
 
35
  const ADMIN_SECTION_ID = 'facebook_settings_section';
36
 
37
  const DEFAULT_PIXEL_ID = null;
@@ -39,6 +40,10 @@ class FacebookPluginConfig {
39
  const SETTINGS_KEY = 'facebook_config';
40
  const USE_PII_KEY = 'use_pii';
41
  const USE_ADVANCED_MATCHING_DEFAULT = null;
 
 
 
 
42
 
43
  const IS_PIXEL_RENDERED = 'is_pixel_rendered';
44
  const IS_NOSCRIPT_RENDERED = 'is_noscript_rendered';
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  class FacebookPluginConfig {
23
+ const PLUGIN_VERSION = '2.0.0';
24
  const SOURCE = 'wordpress';
25
  const TEXT_DOMAIN = 'official-facebook-pixel';
26
 
32
  const ADMIN_OPTION_GROUP = 'facebook_option_group';
33
  const ADMIN_PAGE_TITLE = 'Facebook Pixel Settings';
34
  const ADMIN_PRIVACY_URL = 'https://developers.facebook.com/docs/privacy/';
35
+ const ADMIN_S2S_URL = 'https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api';
36
  const ADMIN_SECTION_ID = 'facebook_settings_section';
37
 
38
  const DEFAULT_PIXEL_ID = null;
40
  const SETTINGS_KEY = 'facebook_config';
41
  const USE_PII_KEY = 'use_pii';
42
  const USE_ADVANCED_MATCHING_DEFAULT = null;
43
+ const USE_S2S_KEY = 'use_s2s';
44
+ const DEFAULT_ACCESS_TOKEN = null;
45
+ const ACCESS_TOKEN_KEY = 'access_token';
46
+ const USE_S2S_DEFAULT = null;
47
 
48
  const IS_PIXEL_RENDERED = 'is_pixel_rendered';
49
  const IS_NOSCRIPT_RENDERED = 'is_noscript_rendered';
core/FacebookPluginUtils.php CHANGED
@@ -40,4 +40,17 @@ class FacebookPluginUtils {
40
  public static function isAdmin() {
41
  return current_user_can('install_plugins');
42
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
40
  public static function isAdmin() {
41
  return current_user_can('install_plugins');
42
  }
43
+
44
+ public static function getLoggedInUserInfo() {
45
+ $current_user = wp_get_current_user();
46
+ if (empty($current_user)) {
47
+ return array();
48
+ }
49
+
50
+ return array(
51
+ 'email' => $current_user->user_email,
52
+ 'first_name' => $current_user->user_firstname,
53
+ 'last_name' => $current_user->user_lastname,
54
+ );
55
+ }
56
  }
core/FacebookServerSideEvent.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Core;
19
+
20
+ use FacebookAds\Api;
21
+ use FacebookAds\Object\ServerSide\Event;
22
+ use FacebookAds\Object\ServerSide\EventRequest;
23
+ use FacebookAds\Object\ServerSide\UserData;
24
+
25
+ defined('ABSPATH') or die('Direct access not allowed');
26
+
27
+ class FacebookServerSideEvent {
28
+ private static $instance = null;
29
+ private $tracked_events = [];
30
+
31
+ public static function getInstance() {
32
+ if (self::$instance == null) {
33
+ self::$instance = new FacebookServerSideEvent();
34
+ }
35
+
36
+ return self::$instance;
37
+ }
38
+
39
+ public function track($event) {
40
+ $this->tracked_events[] = $event;
41
+
42
+ if (FacebookWordpressOptions::getUseS2S()) {
43
+ do_action('send_server_event', $event);
44
+ }
45
+ }
46
+
47
+ public function getTrackedEvents() {
48
+ return $this->tracked_events;
49
+ }
50
+
51
+ public static function send($events) {
52
+ if (empty($events)) {
53
+ return;
54
+ }
55
+
56
+ $pixel_id = FacebookWordpressOptions::getPixelId();
57
+ $access_token = FacebookWordpressOptions::getAccessToken();
58
+ $agent = FacebookWordpressOptions::getAgentString();
59
+
60
+ $api = Api::init(null, null, $access_token);
61
+
62
+ $request = (new EventRequest($pixel_id))
63
+ ->setEvents($events)
64
+ ->setPartnerAgent($agent);
65
+
66
+ $response = $request->execute();
67
+ }
68
+ }
core/FacebookWordpressOptions.php CHANGED
@@ -39,32 +39,57 @@ class FacebookWordpressOptions {
39
  ? '' : FacebookPluginConfig::DEFAULT_PIXEL_ID;
40
  }
41
 
 
 
 
 
 
42
  // Default is on for unset config
43
  public static function getDefaultUsePIIKey() {
44
  return (!is_null(FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT)
45
  && !FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT) ? '0' : '1';
46
  }
47
 
 
 
 
 
 
 
48
  private static function setOptions() {
49
  self::$options = \get_option(
50
  FacebookPluginConfig::SETTINGS_KEY,
51
  array(
52
  FacebookPluginConfig::PIXEL_ID_KEY => self::getDefaultPixelID(),
53
  FacebookPluginConfig::USE_PII_KEY => self::getDefaultUsePIIKey(),
 
 
54
  ));
 
55
  // we need esc_js because the id is set through the form
56
  self::$options[FacebookPluginConfig::PIXEL_ID_KEY] =
57
  esc_js(self::$options[FacebookPluginConfig::PIXEL_ID_KEY]);
 
 
 
58
  }
59
 
60
  public static function getPixelId() {
61
  return self::$options[FacebookPluginConfig::PIXEL_ID_KEY];
62
  }
63
 
 
 
 
 
64
  public static function getUsePii() {
65
  return self::$options[FacebookPluginConfig::USE_PII_KEY];
66
  }
67
 
 
 
 
 
68
  public static function getUserInfo() {
69
  return self::$userInfo;
70
  }
39
  ? '' : FacebookPluginConfig::DEFAULT_PIXEL_ID;
40
  }
41
 
42
+ public static function getDefaultAccessToken() {
43
+ return is_null(FacebookPluginConfig::DEFAULT_ACCESS_TOKEN)
44
+ ? '' : FacebookPluginConfig::DEFAULT_ACCESS_TOKEN;
45
+ }
46
+
47
  // Default is on for unset config
48
  public static function getDefaultUsePIIKey() {
49
  return (!is_null(FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT)
50
  && !FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT) ? '0' : '1';
51
  }
52
 
53
+ // We default not to send events through S2S, if the config is unset.
54
+ public static function getDefaultUseS2SKey() {
55
+ return (is_null(FacebookPluginConfig::USE_S2S_DEFAULT)
56
+ || !FacebookPluginConfig::USE_S2S_DEFAULT) ? '0' : '1';
57
+ }
58
+
59
  private static function setOptions() {
60
  self::$options = \get_option(
61
  FacebookPluginConfig::SETTINGS_KEY,
62
  array(
63
  FacebookPluginConfig::PIXEL_ID_KEY => self::getDefaultPixelID(),
64
  FacebookPluginConfig::USE_PII_KEY => self::getDefaultUsePIIKey(),
65
+ FacebookPluginConfig::USE_S2S_KEY => self::getDefaultUseS2SKey(),
66
+ FacebookPluginConfig::ACCESS_TOKEN_KEY => self::getDefaultAccessToken(),
67
  ));
68
+
69
  // we need esc_js because the id is set through the form
70
  self::$options[FacebookPluginConfig::PIXEL_ID_KEY] =
71
  esc_js(self::$options[FacebookPluginConfig::PIXEL_ID_KEY]);
72
+
73
+ self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY] =
74
+ esc_js(self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY]);
75
  }
76
 
77
  public static function getPixelId() {
78
  return self::$options[FacebookPluginConfig::PIXEL_ID_KEY];
79
  }
80
 
81
+ public static function getAccessToken() {
82
+ return self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY];
83
+ }
84
+
85
  public static function getUsePii() {
86
  return self::$options[FacebookPluginConfig::USE_PII_KEY];
87
  }
88
 
89
+ public static function getUseS2S() {
90
+ return self::$options[FacebookPluginConfig::USE_S2S_KEY];
91
+ }
92
+
93
  public static function getUserInfo() {
94
  return self::$userInfo;
95
  }
core/FacebookWordpressPixelInjection.php CHANGED
@@ -23,6 +23,9 @@ class FacebookWordpressPixelInjection {
23
  public static $renderCache = array();
24
 
25
  public function __construct() {
 
 
 
26
  $pixel_id = FacebookWordpressOptions::getPixelId();
27
  if (FacebookPluginUtils::isPositiveInteger($pixel_id)) {
28
  add_action(
23
  public static $renderCache = array();
24
 
25
  public function __construct() {
26
+ }
27
+
28
+ public function inject() {
29
  $pixel_id = FacebookWordpressOptions::getPixelId();
30
  if (FacebookPluginUtils::isPositiveInteger($pixel_id)) {
31
  add_action(
core/FacebookWordpressSettingsPage.php CHANGED
@@ -88,6 +88,18 @@ class FacebookWordpressSettingsPage {
88
  array($this, 'usePiiFormField'),
89
  FacebookPluginConfig::ADMIN_MENU_SLUG,
90
  FacebookPluginConfig::ADMIN_SECTION_ID);
 
 
 
 
 
 
 
 
 
 
 
 
91
  }
92
 
93
  public function sanitizeInput($input) {
@@ -130,6 +142,28 @@ class FacebookWordpressSettingsPage {
130
  $description);
131
  }
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  public function usePiiFormField() {
134
  $link = sprintf(
135
  wp_kses(
@@ -164,6 +198,44 @@ class FacebookWordpressSettingsPage {
164
  $link);
165
  }
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  public function registerNotices() {
168
  // Update class field
169
  $pixel_id = FacebookWordpressOptions::getPixelId();
88
  array($this, 'usePiiFormField'),
89
  FacebookPluginConfig::ADMIN_MENU_SLUG,
90
  FacebookPluginConfig::ADMIN_SECTION_ID);
91
+ add_settings_field(
92
+ FacebookPluginConfig::USE_S2S_KEY,
93
+ 'Use Server-Side API?',
94
+ array($this, 'useS2SFormField'),
95
+ FacebookPluginConfig::ADMIN_MENU_SLUG,
96
+ FacebookPluginConfig::ADMIN_SECTION_ID);
97
+ add_settings_field(
98
+ FacebookPluginConfig::ACCESS_TOKEN_KEY,
99
+ 'Access Token',
100
+ array($this, 'accessTokenFormField'),
101
+ FacebookPluginConfig::ADMIN_MENU_SLUG,
102
+ FacebookPluginConfig::ADMIN_SECTION_ID);
103
  }
104
 
105
  public function sanitizeInput($input) {
142
  $description);
143
  }
144
 
145
+
146
+ public function accessTokenFormField() {
147
+ $description = esc_html__(
148
+ '',
149
+ FacebookPluginConfig::TEXT_DOMAIN);
150
+
151
+ $access_token = FacebookWordpressOptions::getAccessToken();
152
+ $existing_access_token_value = isset($access_token) ? esc_attr($access_token) : '';
153
+ $input_name = FacebookPluginConfig::SETTINGS_KEY .
154
+ '[' . FacebookPluginConfig::ACCESS_TOKEN_KEY . ']';
155
+
156
+ printf(
157
+ '
158
+ <textarea name="%s" id="%s" rows=4 cols=60 maxlength=250>%s</textarea>
159
+ <p class="description">%s</p>
160
+ ',
161
+ $input_name,
162
+ FacebookPluginConfig::ACCESS_TOKEN_KEY,
163
+ $existing_access_token_value,
164
+ $description);
165
+ }
166
+
167
  public function usePiiFormField() {
168
  $link = sprintf(
169
  wp_kses(
198
  $link);
199
  }
200
 
201
+ // Allow to the Plugin to send S2S Events
202
+ public function useS2SFormField() {
203
+ $link = sprintf(
204
+ wp_kses(
205
+ __(
206
+ 'An access token is required to use the server-side API.<br>
207
+ <a href="%s" target="_blank"> Generate Access Token</a>',
208
+ FacebookPluginConfig::TEXT_DOMAIN),
209
+ array('a' => array('href' => array(), 'target' => array()))),
210
+ esc_url(FacebookPluginConfig::ADMIN_S2S_URL));
211
+ printf(
212
+ '
213
+ <label for="%s">
214
+ <input
215
+ type="checkbox"
216
+ name="%s"
217
+ id="%s"
218
+ value="1"
219
+ ',
220
+ FacebookPluginConfig::USE_S2S_KEY,
221
+ FacebookPluginConfig::SETTINGS_KEY . '[' . FacebookPluginConfig::USE_S2S_KEY . ']',
222
+ FacebookPluginConfig::USE_S2S_KEY);
223
+ checked(1, FacebookWordpressOptions::getUseS2S());
224
+ printf(
225
+ '
226
+ />
227
+ %s
228
+ </label>
229
+ <p class="description">%s</p>
230
+ ',
231
+ esc_html__(
232
+ 'Also send events directly from your web server to Facebook through the
233
+ server-side API. This can help you capture more events.',
234
+ FacebookPluginConfig::TEXT_DOMAIN),
235
+ $link);
236
+ }
237
+
238
+
239
  public function registerNotices() {
240
  // Update class field
241
  $pixel_id = FacebookWordpressOptions::getPixelId();
core/PixelRenderer.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Core;
19
+
20
+ use ReflectionClass;
21
+ use FacebookAds\Object\ServerSide\CustomData;
22
+
23
+ defined('ABSPATH') or die('Direct access not allowed');
24
+
25
+ class PixelRenderer {
26
+ const EVENT_ID = 'eventID';
27
+ const TRACK = 'track';
28
+ const TRACK_CUSTOM = 'trackCustom';
29
+ const FB_INTEGRATION_TRACKING = 'fb_integration_tracking';
30
+ const SCRIPT_TAG = "<script type='text/javascript'>%s</script>";
31
+ const FBQ_CODE = "
32
+ fbq('%s', '%s', %s, %s);
33
+ ";
34
+
35
+ public static function render($events, $fb_integration_tracking) {
36
+ if (empty($events)) {
37
+ return "";
38
+ }
39
+
40
+ $code = "";
41
+ foreach ($events as $event) {
42
+ $code .= self::getPixelTrackCode($event, $fb_integration_tracking);
43
+ }
44
+
45
+ return sprintf(self::SCRIPT_TAG, $code);
46
+ }
47
+
48
+ private static function getPixelTrackCode($event, $fb_integration_tracking) {
49
+ $event_data[self::EVENT_ID] = $event->getEventId();
50
+
51
+ $custom_data = $event->getCustomData() !== null ?
52
+ $event->getCustomData() :
53
+ new CustomData();
54
+
55
+ $normalized_custom_data = $custom_data->normalize();
56
+ if (!is_null($fb_integration_tracking)) {
57
+ $normalized_custom_data[
58
+ self::FB_INTEGRATION_TRACKING] = $fb_integration_tracking;
59
+ }
60
+
61
+ $class = new ReflectionClass('FacebookPixelPlugin\Core\FacebookPixel');
62
+
63
+ return sprintf(
64
+ self::FBQ_CODE,
65
+ $class->getConstant(strtoupper($event->getEventName())) !== false
66
+ ? self::TRACK : self::TRACK_CUSTOM,
67
+ $event->getEventName(),
68
+ json_encode($normalized_custom_data, JSON_PRETTY_PRINT),
69
+ json_encode($event_data, JSON_PRETTY_PRINT)
70
+ );
71
+ }
72
+ }
core/ServerEventAsyncTask.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Core;
19
+
20
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
21
+
22
+ defined('ABSPATH') or die('Direct access not allowed');
23
+
24
+ class ServerEventAsyncTask extends \WP_Async_Task {
25
+ protected $action = 'send_server_event';
26
+
27
+ protected function prepare_data($data) {
28
+ try {
29
+ if (!empty($data)) {
30
+ return array('data' => base64_encode(serialize($data)));
31
+ }
32
+ } catch (\Exception $ex) {
33
+ // Need to log
34
+ }
35
+
36
+ return array();
37
+ }
38
+
39
+ protected function run_action() {
40
+ $events = unserialize(base64_decode($_POST['data']));
41
+ if (empty($events)) {
42
+ return;
43
+ }
44
+
45
+ FacebookServerSideEvent::send($events);
46
+ }
47
+ }
core/ServerEventFactory.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Core;
19
+
20
+ use FacebookAds\Object\ServerSide\Event;
21
+ use FacebookAds\Object\ServerSide\UserData;
22
+ use FacebookAds\Object\ServerSide\CustomData;
23
+ use FacebookPixelPlugin\Core\EventIdGenerator;
24
+ use FacebookPixelPlugin\Core\FacebookWordpressOptions;
25
+
26
+ defined('ABSPATH') or die('Direct access not allowed');
27
+
28
+ class ServerEventFactory {
29
+ public static function newEvent($event_name) {
30
+ $user_data = (new UserData())
31
+ ->setClientIpAddress(self::getIpAddress())
32
+ ->setClientUserAgent(self::getHttpUserAgent())
33
+ ->setFbp(self::getFbp())
34
+ ->setFbc(self::getFbc());
35
+
36
+ $event = (new Event())
37
+ ->setEventName($event_name)
38
+ ->setEventTime(time())
39
+ ->setEventId(EventIdGenerator::guidv4())
40
+ ->setEventSourceUrl(self::getRequestUri())
41
+ ->setUserData($user_data)
42
+ ->setCustomData(new CustomData());
43
+
44
+ return $event;
45
+ }
46
+
47
+ private static function getIpAddress() {
48
+ $ip_address = null;
49
+
50
+ if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
51
+ $ip_address = $_SERVER['HTTP_CLIENT_IP'];
52
+ } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
53
+ $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
54
+ } else if (!empty($_SERVER['REMOTE_ADDR'])) {
55
+ $ip_address = $_SERVER['REMOTE_ADDR'];
56
+ }
57
+
58
+ return $ip_address;
59
+ }
60
+
61
+ private static function getHttpUserAgent() {
62
+ $user_agent = null;
63
+
64
+ if (!empty($_SERVER['HTTP_USER_AGENT'])) {
65
+ $user_agent = $_SERVER['HTTP_USER_AGENT'];
66
+ }
67
+
68
+ return $user_agent;
69
+ }
70
+
71
+ private static function getRequestUri() {
72
+ $request_uri = null;
73
+
74
+ if (!empty($_SERVER['REQUEST_URI'])) {
75
+ $request_uri = $_SERVER['REQUEST_URI'];
76
+ }
77
+
78
+ return $request_uri;
79
+ }
80
+
81
+ private static function getFbp() {
82
+ $fbp = null;
83
+
84
+ if (!empty($_COOKIE['_fbp'])) {
85
+ $fbp = $_COOKIE['_fbp'];
86
+ }
87
+
88
+ return $fbp;
89
+ }
90
+
91
+ private static function getFbc() {
92
+ $fbc = null;
93
+
94
+ if (!empty($_COOKIE['_fbc'])) {
95
+ $fbc = $_COOKIE['_fbc'];
96
+ }
97
+
98
+ return $fbc;
99
+ }
100
+
101
+ public static function safeCreateEvent($event_name, $callback, $arguments) {
102
+ $event = self::newEvent($event_name);
103
+
104
+ try {
105
+ $data = call_user_func_array($callback, $arguments);
106
+
107
+ if (FacebookWordpressOptions::getUsePii()) {
108
+ $user_data = $event->getUserData();
109
+ if (!empty($data['email'])) {
110
+ $user_data->setEmail($data['email']);
111
+ }
112
+
113
+ if (!empty($data['first_name'])) {
114
+ $user_data->setFirstName($data['first_name']);
115
+ }
116
+
117
+ if (!empty($data['last_name'])) {
118
+ $user_data->setLastName($data['last_name']);
119
+ }
120
+ }
121
+
122
+ $custom_data = $event->getCustomData();
123
+ if (!empty($data['currency'])) {
124
+ $custom_data->setCurrency($data['currency']);
125
+ }
126
+
127
+ if (!empty($data['value'])) {
128
+ $custom_data->setValue($data['value']);
129
+ }
130
+
131
+ if (!empty($data['content_ids'])) {
132
+ $custom_data->setContentIds($data['content_ids']);
133
+ }
134
+
135
+ if (!empty($data['content_type'])) {
136
+ $custom_data->setContentType($data['content_type']);
137
+ }
138
+ } catch (\Exception $e) {
139
+ // Need to log
140
+ }
141
+
142
+ return $event;
143
+ }
144
+
145
+ public static function splitName($name) {
146
+ $first_name = $name;
147
+ $last_name = null;
148
+ $index = strpos($name, ' ');
149
+ if ($index !== false) {
150
+ $first_name = substr($name, 0, $index);
151
+ $last_name = substr($name, $index + 1);
152
+ }
153
+
154
+ return array($first_name, $last_name);
155
+ }
156
+ }
facebook-for-wordpress.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: <strong><em>***ATTENTION: After upgrade the plugin may be deactivated due to a known issue, to workaround please refresh this page and activate plugin.***</em></strong> The Facebook pixel is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your website and reach audiences you care about.
6
  * Author: Facebook
7
  * Author URI: https://www.facebook.com/
8
- * Version: 1.8.0
9
  * Text Domain: official-facebook-pixel
10
  */
11
 
@@ -36,6 +36,7 @@ use FacebookPixelPlugin\Core\FacebookPluginConfig;
36
  use FacebookPixelPlugin\Core\FacebookWordpressOptions;
37
  use FacebookPixelPlugin\Core\FacebookWordpressPixelInjection;
38
  use FacebookPixelPlugin\Core\FacebookWordpressSettingsPage;
 
39
 
40
  class FacebookForWordpress {
41
  public function __construct() {
@@ -43,24 +44,30 @@ class FacebookForWordpress {
43
  FacebookWordpressOptions::initialize();
44
 
45
  // load textdomain
46
- load_plugin_textdomain(FacebookPluginConfig::TEXT_DOMAIN, false, dirname(plugin_basename(__FILE__)) . '/languages/');
 
 
 
47
 
48
  // initialize pixel
49
  $options = FacebookWordpressOptions::getOptions();
50
  FacebookPixel::initialize(FacebookWordpressOptions::getPixelId());
51
-
52
  // Register WordPress pixel injection controlling where to fire pixel
53
  add_action('init', array($this, 'registerPixelInjection'), 0);
54
 
55
  // initialize admin page config
56
  $this->registerSettingsPage();
 
 
 
57
  }
58
 
59
  /**
60
  * Helper function for registering pixel injection.
61
  */
62
  public function registerPixelInjection() {
63
- return new FacebookWordpressPixelInjection();
 
64
  }
65
 
66
  /**
5
  * Description: <strong><em>***ATTENTION: After upgrade the plugin may be deactivated due to a known issue, to workaround please refresh this page and activate plugin.***</em></strong> The Facebook pixel is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your website and reach audiences you care about.
6
  * Author: Facebook
7
  * Author URI: https://www.facebook.com/
8
+ * Version: 2.0.0
9
  * Text Domain: official-facebook-pixel
10
  */
11
 
36
  use FacebookPixelPlugin\Core\FacebookWordpressOptions;
37
  use FacebookPixelPlugin\Core\FacebookWordpressPixelInjection;
38
  use FacebookPixelPlugin\Core\FacebookWordpressSettingsPage;
39
+ use FacebookPixelPlugin\Core\ServerEventAsyncTask;
40
 
41
  class FacebookForWordpress {
42
  public function __construct() {
44
  FacebookWordpressOptions::initialize();
45
 
46
  // load textdomain
47
+ load_plugin_textdomain(
48
+ FacebookPluginConfig::TEXT_DOMAIN,
49
+ false,
50
+ dirname(plugin_basename(__FILE__)) . '/languages/');
51
 
52
  // initialize pixel
53
  $options = FacebookWordpressOptions::getOptions();
54
  FacebookPixel::initialize(FacebookWordpressOptions::getPixelId());
 
55
  // Register WordPress pixel injection controlling where to fire pixel
56
  add_action('init', array($this, 'registerPixelInjection'), 0);
57
 
58
  // initialize admin page config
59
  $this->registerSettingsPage();
60
+
61
+ // initialize the s2s event async task
62
+ new ServerEventAsyncTask();
63
  }
64
 
65
  /**
66
  * Helper function for registering pixel injection.
67
  */
68
  public function registerPixelInjection() {
69
+ $injectionObj = new FacebookWordpressPixelInjection();
70
+ $injectionObj->inject();
71
  }
72
 
73
  /**
integration/EDDUtils.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Integration;
19
+
20
+ defined('ABSPATH') or die('Direct access not allowed');
21
+
22
+ class EDDUtils {
23
+ public static function getCurrency() {
24
+ return edd_get_currency();
25
+ }
26
+
27
+ public static function getCartTotal() {
28
+ return EDD()->cart->get_total();
29
+ }
30
+ }
integration/FacebookWordpressCalderaForm.php CHANGED
@@ -19,8 +19,13 @@ namespace FacebookPixelPlugin\Integration;
19
 
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
22
- use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'caldera-forms/caldera-core.php';
@@ -38,8 +43,14 @@ class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
38
  return $out;
39
  }
40
 
41
- $param = array();
42
- $code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, true);
 
 
 
 
 
 
43
  $code = sprintf("
44
  <!-- Facebook Pixel Event Code -->
45
  %s
@@ -50,4 +61,42 @@ class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
50
  $out['html'] .= $code;
51
  return $out;
52
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
19
 
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
 
22
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
23
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
24
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
25
+ use FacebookPixelPlugin\Core\ServerEventFactory;
26
+ use FacebookPixelPlugin\Core\PixelRenderer;
27
+ use FacebookAds\Object\ServerSide\Event;
28
+ use FacebookAds\Object\ServerSide\UserData;
29
 
30
  class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
31
  const PLUGIN_FILE = 'caldera-forms/caldera-core.php';
43
  return $out;
44
  }
45
 
46
+ $server_event = ServerEventFactory::safeCreateEvent(
47
+ 'Lead',
48
+ array(__CLASS__, 'readFormData'),
49
+ array($form)
50
+ );
51
+ FacebookServerSideEvent::getInstance()->track($server_event);
52
+
53
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
54
  $code = sprintf("
55
  <!-- Facebook Pixel Event Code -->
56
  %s
61
  $out['html'] .= $code;
62
  return $out;
63
  }
64
+
65
+ public static function readFormData($form) {
66
+ if (empty($form)) {
67
+ return array();
68
+ }
69
+
70
+ return array(
71
+ 'email' => self::getEmail($form),
72
+ 'first_name' => self::getFirstName($form),
73
+ 'last_name' => self::getLastName($form)
74
+ );
75
+ }
76
+
77
+ private static function getEmail($form) {
78
+ return self::getFieldValue($form, 'type', 'email');
79
+ }
80
+
81
+ private static function getFirstName($form) {
82
+ return self::getFieldValue($form, 'slug', 'first_name');
83
+ }
84
+
85
+ private static function getLastName($form) {
86
+ return self::getFieldValue($form, 'slug', 'last_name');
87
+ }
88
+
89
+ private static function getFieldValue($form, $attr, $attr_value) {
90
+ if (empty($form['fields'])) {
91
+ return null;
92
+ }
93
+
94
+ foreach ($form['fields'] as $field) {
95
+ if (array_key_exists($attr, $field) && $field[$attr] == $attr_value) {
96
+ return $_POST[$field['ID']];
97
+ }
98
+ }
99
+
100
+ return null;
101
+ }
102
  }
integration/FacebookWordpressContactForm7.php CHANGED
@@ -19,41 +19,104 @@ namespace FacebookPixelPlugin\Integration;
19
 
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
22
- use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressContactForm7 extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'contact-form-7/wp-contact-form-7.php';
27
  const TRACKING_NAME = 'contact-form-7';
28
 
29
  public static function injectPixelCode() {
30
- self::addPixelFireForHook(array(
31
- 'hook_name' => 'wpcf7_contact_form',
32
- 'classname' => __CLASS__,
33
- 'inject_function' => 'injectLeadEvent'));
34
  }
35
 
36
- public static function injectLeadEvent() {
37
  if (FacebookPluginUtils::isAdmin()) {
38
- return;
39
  }
40
 
41
- $param = array();
42
- $code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, false);
43
- $listener = 'wpcf7submit';
 
 
 
44
 
45
- printf("
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  <!-- Facebook Pixel Event Code -->
47
- <script>
48
- document.addEventListener(
49
- '%s',
50
- function (event) {%s},
51
- false
52
- );
53
- </script>
54
  <!-- End Facebook Pixel Event Code -->
55
  ",
56
- $listener,
57
  $code);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
  }
19
 
20
  defined('ABSPATH') or die('Direct access not allowed');
21
 
 
22
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
23
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
24
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
25
+ use FacebookPixelPlugin\Core\ServerEventFactory;
26
+ use FacebookPixelPlugin\Core\PixelRenderer;
27
+ use FacebookAds\Object\ServerSide\Event;
28
+ use FacebookAds\Object\ServerSide\UserData;
29
 
30
  class FacebookWordpressContactForm7 extends FacebookWordpressIntegrationBase {
31
  const PLUGIN_FILE = 'contact-form-7/wp-contact-form-7.php';
32
  const TRACKING_NAME = 'contact-form-7';
33
 
34
  public static function injectPixelCode() {
35
+ add_action(
36
+ 'wpcf7_submit',
37
+ array(__CLASS__, 'trackServerEvent'),
38
+ 10, 2);
39
  }
40
 
41
+ public static function trackServerEvent($form, $result) {
42
  if (FacebookPluginUtils::isAdmin()) {
43
+ return $result;
44
  }
45
 
46
+ $server_event = ServerEventFactory::safeCreateEvent(
47
+ 'Lead',
48
+ array(__CLASS__, 'readFormData'),
49
+ array($form)
50
+ );
51
+ FacebookServerSideEvent::getInstance()->track($server_event);
52
 
53
+ add_action(
54
+ 'wpcf7_ajax_json_echo',
55
+ array(__CLASS__, 'injectLeadEvent'),
56
+ 20, 2);
57
+
58
+ return $result;
59
+ }
60
+
61
+ public static function injectLeadEvent($response, $result) {
62
+ if (FacebookPluginUtils::isAdmin()) {
63
+ return $response;
64
+ }
65
+
66
+ $events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
67
+ $code = PixelRenderer::render($events, self::TRACKING_NAME);
68
+ $code = sprintf("
69
  <!-- Facebook Pixel Event Code -->
70
+ %s
 
 
 
 
 
 
71
  <!-- End Facebook Pixel Event Code -->
72
  ",
 
73
  $code);
74
+
75
+ $response['message'] .= $code;
76
+ return $response;
77
+ }
78
+
79
+ public static function readFormData($form) {
80
+ if (empty($form)) {
81
+ return array();
82
+ }
83
+
84
+ $form_tags = $form->scan_form_tags();
85
+ $name = self::getName($form_tags);
86
+
87
+ return array(
88
+ 'email' => self::getEmail($form_tags),
89
+ 'first_name' => $name[0],
90
+ 'last_name' => $name[1]
91
+ );
92
+ }
93
+
94
+ private static function getEmail($form_tags) {
95
+ if (empty($form_tags)) {
96
+ return null;
97
+ }
98
+
99
+ foreach ($form_tags as $tag) {
100
+ if ($tag->basetype == "email") {
101
+ return $_POST[$tag->name];
102
+ }
103
+ }
104
+
105
+ return null;
106
+ }
107
+
108
+ private static function getName($form_tags) {
109
+ if (empty($form_tags)) {
110
+ return null;
111
+ }
112
+
113
+ foreach ($form_tags as $tag) {
114
+ if ($tag->basetype === "text"
115
+ && strpos(strtolower($tag->name), 'name') !== false) {
116
+ return ServerEventFactory::splitName($_POST[$tag->name]);
117
+ }
118
+ }
119
+
120
+ return null;
121
  }
122
  }
integration/FacebookWordpressEasyDigitalDownloads.php CHANGED
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
24
 
25
  class FacebookWordpressEasyDigitalDownloads extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'easy-digital-downloads/easy-digital-downloads.php';
@@ -73,10 +76,10 @@ jQuery(document).ready(function ($) {
73
  'inject_function' => 'injectInitiateCheckoutEvent'));
74
 
75
  // Purchase
76
- self::addPixelFireForHook(array(
77
- 'hook_name' => 'edd_payment_receipt_after',
78
- 'classname' => __CLASS__,
79
- 'inject_function' => 'injectPurchaseEvent'));
80
 
81
  // ViewContent
82
  self::addPixelFireForHook(array(
@@ -112,14 +115,14 @@ jQuery(document).ready(function ($) {
112
  return;
113
  }
114
 
115
- $currency = edd_get_currency();
116
- $value = EDD()->cart->get_total();
117
- $param = array(
118
- 'currency' => $currency,
119
- 'value' => $value,
120
  );
121
- $code = FacebookPixel::getPixelInitiateCheckoutCode($param, self::TRACKING_NAME, true);
122
 
 
123
  printf("
124
  <!-- Facebook Pixel Event Code -->
125
  %s
@@ -128,27 +131,28 @@ jQuery(document).ready(function ($) {
128
  $code);
129
  }
130
 
131
- public static function injectPurchaseEvent($payment) {
132
  if (FacebookPluginUtils::isAdmin() || empty($payment->ID)) {
133
  return;
134
  }
135
 
136
- $payment_meta = edd_get_payment_meta($payment->ID);
 
 
 
 
 
137
 
138
- $content_ids = array();
139
- $value = 0;
140
- foreach ($payment_meta['cart_details'] as $item) {
141
- $content_ids[] = $item['id'];
142
- $value += $item['price'];
143
- }
144
- $currency = $payment_meta['currency'];
145
- $param = array(
146
- 'content_ids' => $content_ids,
147
- 'content_type' => 'product',
148
- 'currency' => $currency,
149
- 'value' => $value,
150
  );
151
- $code = FacebookPixel::getPixelPurchaseCode($param, self::TRACKING_NAME, true);
 
 
 
 
152
 
153
  printf("
154
  <!-- Facebook Pixel Event Code -->
@@ -189,4 +193,39 @@ jQuery(document).ready(function ($) {
189
  ",
190
  $code);
191
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\ServerEventFactory;
25
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
26
+ use FacebookPixelPlugin\Core\PixelRenderer;
27
 
28
  class FacebookWordpressEasyDigitalDownloads extends FacebookWordpressIntegrationBase {
29
  const PLUGIN_FILE = 'easy-digital-downloads/easy-digital-downloads.php';
76
  'inject_function' => 'injectInitiateCheckoutEvent'));
77
 
78
  // Purchase
79
+ add_action(
80
+ 'edd_payment_receipt_after',
81
+ array(__CLASS__, 'trackPurchaseEvent'),
82
+ 10, 2);
83
 
84
  // ViewContent
85
  self::addPixelFireForHook(array(
115
  return;
116
  }
117
 
118
+ $server_event = ServerEventFactory::safeCreateEvent(
119
+ 'InitiateCheckout',
120
+ array(__CLASS__, 'createInitiateCheckoutEvent'),
121
+ array()
 
122
  );
123
+ FacebookServerSideEvent::getInstance()->track($server_event);
124
 
125
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
126
  printf("
127
  <!-- Facebook Pixel Event Code -->
128
  %s
131
  $code);
132
  }
133
 
134
+ public static function trackPurchaseEvent($payment, $edd_receipt_args) {
135
  if (FacebookPluginUtils::isAdmin() || empty($payment->ID)) {
136
  return;
137
  }
138
 
139
+ $server_event = ServerEventFactory::safeCreateEvent(
140
+ 'Purchase',
141
+ array(__CLASS__, 'createPurchaseEvent'),
142
+ array($payment)
143
+ );
144
+ FacebookServerSideEvent::getInstance()->track($server_event);
145
 
146
+ add_action(
147
+ 'wp_footer',
148
+ array(__CLASS__, 'injectPurchaseEvent'),
149
+ 20
 
 
 
 
 
 
 
 
150
  );
151
+ }
152
+
153
+ public static function injectPurchaseEvent() {
154
+ $events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
155
+ $code = PixelRenderer::render($events, self::TRACKING_NAME);
156
 
157
  printf("
158
  <!-- Facebook Pixel Event Code -->
193
  ",
194
  $code);
195
  }
196
+
197
+ public static function createInitiateCheckoutEvent() {
198
+ $event_data = FacebookPluginUtils::getLoggedInUserInfo();
199
+ $event_data['currency'] = EDDUtils::getCurrency();
200
+ $event_data['value'] = EDDUtils::getCartTotal();
201
+
202
+ return $event_data;
203
+ }
204
+
205
+ public static function createPurchaseEvent($payment) {
206
+ $event_data = array();
207
+
208
+ $payment_meta = \edd_get_payment_meta($payment->ID);
209
+ if (empty($payment_meta)) {
210
+ return $event_data;
211
+ }
212
+
213
+ $event_data['email'] = $payment_meta['email'];
214
+ $event_data['first_name'] = $payment_meta['user_info']['first_name'];
215
+ $event_data['last_name'] = $payment_meta['user_info']['last_name'];
216
+
217
+ $content_ids = array();
218
+ $value = 0;
219
+ foreach ($payment_meta['cart_details'] as $item) {
220
+ $content_ids[] = $item['id'];
221
+ $value += $item['price'];
222
+ }
223
+
224
+ $event_data['currency'] = $payment_meta['currency'];
225
+ $event_data['value'] = $value;
226
+ $event_data['content_ids'] = $content_ids;
227
+ $event_data['content_type'] = 'product';
228
+
229
+ return $event_data;
230
+ }
231
  }
integration/FacebookWordpressFormidableForm.php CHANGED
@@ -21,34 +21,115 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressFormidableForm extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'formidable/formidable.php';
27
  const TRACKING_NAME = 'formidable-lite';
28
 
29
  public static function injectPixelCode() {
30
- self::addPixelFireForHook(array(
31
- 'hook_name' => 'frm_after_create_entry',
32
- 'classname' => __CLASS__,
33
- 'inject_function' => 'injectLeadEvent',
34
- 'priority' => 30));
 
35
  }
36
 
37
- public static function injectLeadEvent($entry_id, $form_id) {
38
  if (FacebookPluginUtils::isAdmin()) {
39
  return;
40
  }
41
 
42
- $param = array();
43
- $code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
  printf("
46
  <!-- Facebook Pixel Event Code -->
47
- <script>
48
  %s
49
- </script>
50
  <!-- End Facebook Pixel Event Code -->
51
  ",
52
  $code);
53
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
25
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
26
+ use FacebookPixelPlugin\Core\ServerEventFactory;
27
+ use FacebookPixelPlugin\Core\PixelRenderer;
28
+ use FacebookAds\Object\ServerSide\Event;
29
+ use FacebookAds\Object\ServerSide\UserData;
30
 
31
  class FacebookWordpressFormidableForm extends FacebookWordpressIntegrationBase {
32
  const PLUGIN_FILE = 'formidable/formidable.php';
33
  const TRACKING_NAME = 'formidable-lite';
34
 
35
  public static function injectPixelCode() {
36
+ add_action(
37
+ 'frm_after_create_entry',
38
+ array(__CLASS__, 'trackServerEvent'),
39
+ 20,
40
+ 2
41
+ );
42
  }
43
 
44
+ public static function trackServerEvent($entry_id, $form_id) {
45
  if (FacebookPluginUtils::isAdmin()) {
46
  return;
47
  }
48
 
49
+ $server_event = ServerEventFactory::safeCreateEvent(
50
+ 'Lead',
51
+ array(__CLASS__, 'readFormData'),
52
+ array($entry_id)
53
+ );
54
+ FacebookServerSideEvent::getInstance()->track($server_event);
55
+
56
+ add_action(
57
+ 'wp_footer',
58
+ array(__CLASS__, 'injectLeadEvent'),
59
+ 20
60
+ );
61
+ }
62
+
63
+ public static function injectLeadEvent() {
64
+ if (FacebookPluginUtils::isAdmin()) {
65
+ return;
66
+ }
67
+
68
+ $events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
69
+ $code = PixelRenderer::render($events, self::TRACKING_NAME);
70
 
71
  printf("
72
  <!-- Facebook Pixel Event Code -->
 
73
  %s
 
74
  <!-- End Facebook Pixel Event Code -->
75
  ",
76
  $code);
77
  }
78
+
79
+ public static function readFormData($entry_id) {
80
+ if (empty($entry_id)) {
81
+ return array();
82
+ }
83
+
84
+ $entry_values =
85
+ IntegrationUtils::getFormidableFormsEntryValues($entry_id);
86
+
87
+ $field_values = $entry_values->get_field_values();
88
+ if (!empty($field_values)) {
89
+ return array(
90
+ 'email' => self::getEmail($field_values),
91
+ 'first_name' => self::getFirstName($field_values),
92
+ 'last_name' => self::getLastName($field_values)
93
+ );
94
+ }
95
+
96
+ return array();
97
+ }
98
+
99
+ private static function getEmail($field_values) {
100
+ foreach ($field_values as $field_value) {
101
+ $field = $field_value->get_field();
102
+ if ($field->type == 'email') {
103
+ return $field_value->get_saved_value();
104
+ }
105
+ }
106
+
107
+ return null;
108
+ }
109
+
110
+ private static function getFirstName($field_values) {
111
+ return self::getFieldValue($field_values, 'text', 'Name', 'First');
112
+ }
113
+
114
+ private static function getLastName($field_values) {
115
+ return self::getFieldValue($field_values, 'text', 'Last', 'Last');
116
+ }
117
+
118
+ private static function getFieldValue(
119
+ $field_values,
120
+ $type,
121
+ $name,
122
+ $description)
123
+ {
124
+ foreach ($field_values as $field_value) {
125
+ $field = $field_value->get_field();
126
+ if ($field->type == $type &&
127
+ $field->name == $name &&
128
+ $field->description == $description) {
129
+ return $field_value->get_saved_value();
130
+ }
131
+ }
132
+
133
+ return null;
134
+ }
135
  }
integration/FacebookWordpressGravityForms.php CHANGED
@@ -21,6 +21,12 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'gravityforms/gravityforms.php';
@@ -38,13 +44,17 @@ class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
38
  return $confirmation;
39
  }
40
 
41
- $pixel_code = FacebookPixel::getPixelLeadCode(
42
- array(), self::TRACKING_NAME, false);
 
 
 
 
 
 
43
  $code = sprintf("
44
  <!-- Facebook Pixel Event Code -->
45
- <script>
46
  %s
47
- </script>
48
  <!-- End Facebook Pixel Event Code -->
49
  ", $pixel_code);
50
 
@@ -67,4 +77,59 @@ class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
67
 
68
  return $confirmation;
69
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
25
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
26
+ use FacebookPixelPlugin\Core\ServerEventFactory;
27
+ use FacebookPixelPlugin\Core\PixelRenderer;
28
+ use FacebookAds\Object\ServerSide\Event;
29
+ use FacebookAds\Object\ServerSide\UserData;
30
 
31
  class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
32
  const PLUGIN_FILE = 'gravityforms/gravityforms.php';
44
  return $confirmation;
45
  }
46
 
47
+ $event = ServerEventFactory::safeCreateEvent(
48
+ 'Lead',
49
+ array(__CLASS__, 'readFormData'),
50
+ array($form, $entry)
51
+ );
52
+ FacebookServerSideEvent::getInstance()->track($event);
53
+
54
+ $pixel_code = PixelRenderer::render(array($event), self::TRACKING_NAME);
55
  $code = sprintf("
56
  <!-- Facebook Pixel Event Code -->
 
57
  %s
 
58
  <!-- End Facebook Pixel Event Code -->
59
  ", $pixel_code);
60
 
77
 
78
  return $confirmation;
79
  }
80
+
81
+ public static function readFormData($form, $entry) {
82
+ if (empty($form) || empty($entry)) {
83
+ return array();
84
+ }
85
+
86
+ return array(
87
+ 'email' => self::getEmail($form, $entry),
88
+ 'first_name' => self::getFirstName($form, $entry),
89
+ 'last_name' => self::getLastName($form, $entry)
90
+ );
91
+ }
92
+
93
+ private static function getEmail($form, $entry) {
94
+ if (empty($form['fields'])) {
95
+ return null;
96
+ }
97
+
98
+ foreach ($form['fields'] as $field) {
99
+ if ($field->type == 'email') {
100
+ return $entry[$field->id];
101
+ }
102
+ }
103
+
104
+ return null;
105
+ }
106
+
107
+ private static function getFirstName($form, $entry) {
108
+ return self::getName($form, $entry, 'name', 'First');
109
+ }
110
+
111
+ private static function getLastName($form, $entry) {
112
+ return self::getName($form, $entry, 'name', 'Last');
113
+ }
114
+
115
+ private static function getName($form, $entry, $type, $label) {
116
+ if (empty($form['fields'])) {
117
+ return null;
118
+ }
119
+
120
+ foreach ($form['fields'] as $field) {
121
+ if ($field->type == $type) {
122
+ $inputs = $field->inputs;
123
+ if (!empty($inputs)) {
124
+ foreach ($inputs as $input) {
125
+ if ($input['label'] == $label) {
126
+ return $entry[$input['id']];
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ return null;
134
+ }
135
  }
integration/FacebookWordpressMailchimpForWp.php CHANGED
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
24
 
25
  class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'mailchimp-for-wp/mailchimp-for-wp.php';
@@ -38,14 +41,36 @@ class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
38
  return;
39
  }
40
 
41
- $code = FacebookPixel::getPixelLeadCode(array(), self::TRACKING_NAME, false);
 
 
 
 
 
 
 
42
  printf("
43
  <!-- Facebook Pixel Event Code -->
44
- <script>
45
  %s
46
- </script>
47
  <!-- End Facebook Pixel Event Code -->
48
  ",
49
  $code);
50
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\ServerEventFactory;
25
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
26
+ use FacebookPixelPlugin\Core\PixelRenderer;
27
 
28
  class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
29
  const PLUGIN_FILE = 'mailchimp-for-wp/mailchimp-for-wp.php';
41
  return;
42
  }
43
 
44
+ $server_event = ServerEventFactory::safeCreateEvent(
45
+ 'Lead',
46
+ array(__CLASS__, 'readFormData'),
47
+ array()
48
+ );
49
+ FacebookServerSideEvent::getInstance()->track($server_event);
50
+
51
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
52
  printf("
53
  <!-- Facebook Pixel Event Code -->
 
54
  %s
 
55
  <!-- End Facebook Pixel Event Code -->
56
  ",
57
  $code);
58
  }
59
+
60
+ public static function readFormData() {
61
+ $event_data = array();
62
+ if (!empty($_POST['EMAIL'])) {
63
+ $event_data['email'] = $_POST['EMAIL'];
64
+ }
65
+
66
+ if (!empty($_POST['FNAME'])) {
67
+ $event_data['first_name'] = $_POST['FNAME'];
68
+ }
69
+
70
+ if (!empty($_POST['LNAME'])) {
71
+ $event_data['last_name'] = $_POST['LNAME'];
72
+ }
73
+
74
+ return $event_data;
75
+ }
76
  }
integration/FacebookWordpressNinjaForms.php CHANGED
@@ -21,6 +21,12 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'ninja-forms/ninja-forms.php';
@@ -30,24 +36,14 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
30
  add_action(
31
  'ninja_forms_submission_actions',
32
  array(__CLASS__, 'injectLeadEvent'),
33
- 10, 2);
34
  }
35
 
36
- public static function injectLeadEvent($actions, $form_data) {
37
  if (FacebookPluginUtils::isAdmin()) {
38
  return $actions;
39
  }
40
 
41
- $param = array();
42
- $pixel_code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, true);
43
-
44
- $code = sprintf("
45
- <!-- Facebook Pixel Event Code -->
46
- %s
47
- <!-- End Facebook Pixel Event Code -->
48
- ",
49
- $pixel_code);
50
-
51
  foreach ($actions as $key => $action) {
52
  if (!isset($action['settings']) || !isset($action['settings']['type'])) {
53
  continue;
@@ -60,6 +56,20 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
60
 
61
  // inject code when form is submitted successfully
62
  if ($type == 'successmessage') {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  $action['settings']['success_msg'] .= $code;
64
  $actions[$key] = $action;
65
  }
@@ -67,4 +77,39 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
67
 
68
  return $actions;
69
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
25
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
26
+ use FacebookPixelPlugin\Core\ServerEventFactory;
27
+ use FacebookPixelPlugin\Core\PixelRenderer;
28
+ use FacebookAds\Object\ServerSide\Event;
29
+ use FacebookAds\Object\ServerSide\UserData;
30
 
31
  class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
32
  const PLUGIN_FILE = 'ninja-forms/ninja-forms.php';
36
  add_action(
37
  'ninja_forms_submission_actions',
38
  array(__CLASS__, 'injectLeadEvent'),
39
+ 10, 3);
40
  }
41
 
42
+ public static function injectLeadEvent($actions, $form_cache, $form_data) {
43
  if (FacebookPluginUtils::isAdmin()) {
44
  return $actions;
45
  }
46
 
 
 
 
 
 
 
 
 
 
 
47
  foreach ($actions as $key => $action) {
48
  if (!isset($action['settings']) || !isset($action['settings']['type'])) {
49
  continue;
56
 
57
  // inject code when form is submitted successfully
58
  if ($type == 'successmessage') {
59
+ $event = ServerEventFactory::safeCreateEvent(
60
+ 'Lead',
61
+ array(__CLASS__, 'readFormData'),
62
+ array($form_data)
63
+ );
64
+ FacebookServerSideEvent::getInstance()->track($event);
65
+
66
+ $pixel_code = PixelRenderer::render(array($event), self::TRACKING_NAME);
67
+ $code = sprintf("
68
+ <!-- Facebook Pixel Event Code -->
69
+ %s
70
+ <!-- End Facebook Pixel Event Code -->
71
+ ", $pixel_code);
72
+
73
  $action['settings']['success_msg'] .= $code;
74
  $actions[$key] = $action;
75
  }
77
 
78
  return $actions;
79
  }
80
+
81
+ public static function readFormData($form_data) {
82
+ if (empty($form_data)) {
83
+ return array();
84
+ }
85
+
86
+ $name = self::getName($form_data);
87
+ return array(
88
+ 'email' => self::getEmail($form_data),
89
+ 'first_name' => $name[0],
90
+ 'last_name' => $name[1]
91
+ );
92
+ }
93
+
94
+ private static function getEmail($form_data) {
95
+ return self::getField($form_data, 'email');
96
+ }
97
+
98
+ private static function getName($form_data) {
99
+ return ServerEventFactory::splitName(self::getField($form_data, 'name'));
100
+ }
101
+
102
+ private static function getField($form_data, $key) {
103
+ if (empty($form_data['fields'])) {
104
+ return null;
105
+ }
106
+
107
+ foreach ($form_data['fields'] as $field) {
108
+ if ($field['key'] == $key) {
109
+ return $field['value'];
110
+ }
111
+ }
112
+
113
+ return null;
114
+ }
115
  }
integration/FacebookWordpressWPECommerce.php CHANGED
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
24
 
25
  class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'wp-e-commerce/wp-e-commerce.php';
@@ -48,10 +51,16 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
48
  if (FacebookPluginUtils::isAdmin()) {
49
  return $response;
50
  }
 
51
  $product_id = $response['product_id'];
52
- $params = static::getParametersForCart($product_id);
53
- $code = FacebookPixel::getPixelAddToCartCode($params, self::TRACKING_NAME, true);
 
 
 
 
54
 
 
55
  $code = sprintf("
56
  <!-- Facebook Pixel Event Code -->
57
  %s
@@ -67,24 +76,39 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
67
  return;
68
  }
69
 
70
- $code = FacebookPixel::getPixelInitiateCheckoutCode(array(), self::TRACKING_NAME, false);
 
 
 
 
 
 
 
71
  printf("
72
  <!-- Facebook Pixel Event Code -->
73
- <script>
74
  %s
75
- </script>
76
  <!-- End Facebook Pixel Event Code -->
77
  ",
78
  $code);
79
  }
80
 
81
- public static function injectPurchaseEvent($purchase_log_object, $session_id, $display_to_screen) {
 
 
 
 
82
  if (FacebookPluginUtils::isAdmin() || !$display_to_screen) {
83
  return;
84
  }
85
 
86
- $params = static::getParametersForPurchase($purchase_log_object);
87
- $code = FacebookPixel::getPixelPurchaseCode($params, self::TRACKING_NAME, true);
 
 
 
 
 
 
88
 
89
  printf("
90
  <!-- Facebook Pixel Event Code -->
@@ -94,29 +118,32 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
94
  $code);
95
  }
96
 
97
- private static function getParametersForPurchase($purchase_log_object) {
 
 
98
  $cart_items = $purchase_log_object->get_items();
99
  $total_price = $purchase_log_object->get_total();
100
- $currency = function_exists('\wpsc_get_currency_code') ? \wpsc_get_currency_code() : 'Unknown';
101
- $item_ids = array();
102
 
 
103
  foreach ($cart_items as $item) {
104
  // This is for backwards compatibility
105
  $item_array = (array) $item;
106
  $item_ids[] = $item_array['prodid'];
107
  }
108
 
109
- $params = array(
110
- 'content_ids' => $item_ids,
111
- 'content_type' => 'product',
112
- 'currency' => $currency,
113
- 'value' => $total_price,
114
- );
115
 
116
- return $params;
117
  }
118
 
119
- private static function getParametersForCart($product_id) {
 
 
120
  global $wpsc_cart;
121
  $cart_items = $wpsc_cart->get_items();
122
  foreach ($cart_items as $item) {
@@ -126,13 +153,34 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
126
  }
127
  }
128
 
129
- $params = array(
130
- 'content_ids' => array($product_id),
131
- 'content_type' => 'product',
132
- 'currency' => function_exists('\wpsc_get_currency_code') ? \wpsc_get_currency_code() : 'Unknown',
133
- 'value' => $unit_price,
134
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
 
136
- return $params;
137
  }
138
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\ServerEventFactory;
25
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
26
+ use FacebookPixelPlugin\Core\PixelRenderer;
27
 
28
  class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
29
  const PLUGIN_FILE = 'wp-e-commerce/wp-e-commerce.php';
51
  if (FacebookPluginUtils::isAdmin()) {
52
  return $response;
53
  }
54
+
55
  $product_id = $response['product_id'];
56
+ $server_event = ServerEventFactory::safeCreateEvent(
57
+ 'AddToCart',
58
+ array(__CLASS__, 'createAddToCartEvent'),
59
+ array($product_id)
60
+ );
61
+ FacebookServerSideEvent::getInstance()->track($server_event);
62
 
63
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
64
  $code = sprintf("
65
  <!-- Facebook Pixel Event Code -->
66
  %s
76
  return;
77
  }
78
 
79
+ $server_event = ServerEventFactory::safeCreateEvent(
80
+ 'InitiateCheckout',
81
+ array(__CLASS__, 'createInitiateCheckoutEvent'),
82
+ array()
83
+ );
84
+ FacebookServerSideEvent::getInstance()->track($server_event);
85
+
86
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
87
  printf("
88
  <!-- Facebook Pixel Event Code -->
 
89
  %s
 
90
  <!-- End Facebook Pixel Event Code -->
91
  ",
92
  $code);
93
  }
94
 
95
+ public static function injectPurchaseEvent(
96
+ $purchase_log_object,
97
+ $session_id,
98
+ $display_to_screen)
99
+ {
100
  if (FacebookPluginUtils::isAdmin() || !$display_to_screen) {
101
  return;
102
  }
103
 
104
+ $server_event = ServerEventFactory::safeCreateEvent(
105
+ 'Purchase',
106
+ array(__CLASS__, 'createPurchaseEvent'),
107
+ array($purchase_log_object)
108
+ );
109
+ FacebookServerSideEvent::getInstance()->track($server_event);
110
+
111
+ $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
112
 
113
  printf("
114
  <!-- Facebook Pixel Event Code -->
118
  $code);
119
  }
120
 
121
+ public static function createPurchaseEvent($purchase_log_object) {
122
+ $event_data = FacebookPluginUtils::getLoggedInUserInfo();
123
+
124
  $cart_items = $purchase_log_object->get_items();
125
  $total_price = $purchase_log_object->get_total();
126
+ $currency = function_exists('\wpsc_get_currency_code')
127
+ ? \wpsc_get_currency_code() : '';
128
 
129
+ $item_ids = array();
130
  foreach ($cart_items as $item) {
131
  // This is for backwards compatibility
132
  $item_array = (array) $item;
133
  $item_ids[] = $item_array['prodid'];
134
  }
135
 
136
+ $event_data['content_ids'] = $item_ids;
137
+ $event_data['content_type'] = 'product';
138
+ $event_data['currency'] = $currency;
139
+ $event_data['value'] = $total_price;
 
 
140
 
141
+ return $event_data;
142
  }
143
 
144
+ public static function createAddToCartEvent($product_id) {
145
+ $event_data = FacebookPluginUtils::getLoggedInUserInfo();
146
+
147
  global $wpsc_cart;
148
  $cart_items = $wpsc_cart->get_items();
149
  foreach ($cart_items as $item) {
153
  }
154
  }
155
 
156
+ $event_data['content_ids'] = array($product_id);
157
+ $event_data['content_type'] = 'product';
158
+ $event_data['currency'] =
159
+ function_exists('\wpsc_get_currency_code')
160
+ ? \wpsc_get_currency_code() : '';
161
+ $event_data['value'] = $unit_price;
162
+
163
+ return $event_data;
164
+ }
165
+
166
+ public static function createInitiateCheckoutEvent() {
167
+ $event_data = FacebookPluginUtils::getLoggedInUserInfo();
168
+ $content_ids = array();
169
+
170
+ $value = 0;
171
+ global $wpsc_cart;
172
+ $cart_items = $wpsc_cart->get_items();
173
+ foreach ($cart_items as $item) {
174
+ $content_ids[] = $item->product_id;
175
+ $value += $item->unit_price;
176
+ }
177
+
178
+ $event_data['currency'] =
179
+ function_exists('\wpsc_get_currency_code')
180
+ ? \wpsc_get_currency_code() : '';
181
+ $event_data['value'] = $value;
182
+ $event_data['content_ids'] = $content_ids;
183
 
184
+ return $event_data;
185
  }
186
  }
integration/FacebookWordpressWPForms.php CHANGED
@@ -21,46 +21,102 @@ defined('ABSPATH') or die('Direct access not allowed');
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
 
 
 
 
 
 
24
 
25
  class FacebookWordpressWPForms extends FacebookWordpressIntegrationBase {
26
  const PLUGIN_FILE = 'wpforms-lite/wpforms.php';
27
  const TRACKING_NAME = 'wpforms-lite';
28
 
29
- private static $leadJS = "
30
- jQuery(document).ready(function ($) {
31
- $('.wpforms-form').submit(function(e) {
32
- e.preventDefault();
 
 
 
 
33
 
34
- %s
35
- });
36
- });
37
- ";
38
 
39
- public static function injectPixelCode() {
40
- self::addPixelFireForHook(array(
41
- 'hook_name' => 'wpforms_frontend_output',
42
- 'classname' => __CLASS__,
43
- 'inject_function' => 'injectLeadEvent'));
 
 
 
 
 
 
 
44
  }
45
 
46
- public static function injectLeadEvent($form_data) {
47
  if (FacebookPluginUtils::isAdmin()) {
48
  return;
49
  }
50
 
51
- $param = array();
52
- $pixel_code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, false);
53
- $listener_code = sprintf(
54
- self::$leadJS,
55
- $pixel_code);
56
 
57
  printf("
58
  <!-- Facebook Pixel Event Code -->
59
- <script>
60
  %s
61
- </script>
62
  <!-- End Facebook Pixel Event Code -->
63
  ",
64
- $listener_code);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
  }
21
 
22
  use FacebookPixelPlugin\Core\FacebookPixel;
23
  use FacebookPixelPlugin\Core\FacebookPluginUtils;
24
+ use FacebookPixelPlugin\Core\FacebookServerSideEvent;
25
+ use FacebookPixelPlugin\Core\FacebookWordPressOptions;
26
+ use FacebookPixelPlugin\Core\ServerEventFactory;
27
+ use FacebookPixelPlugin\Core\PixelRenderer;
28
+ use FacebookAds\Object\ServerSide\Event;
29
+ use FacebookAds\Object\ServerSide\UserData;
30
 
31
  class FacebookWordpressWPForms extends FacebookWordpressIntegrationBase {
32
  const PLUGIN_FILE = 'wpforms-lite/wpforms.php';
33
  const TRACKING_NAME = 'wpforms-lite';
34
 
35
+ public static function injectPixelCode() {
36
+ add_action(
37
+ 'wpforms_process_before',
38
+ array(__CLASS__, 'trackEvent'),
39
+ 20,
40
+ 2
41
+ );
42
+ }
43
 
44
+ public static function trackEvent($entry, $form_data) {
45
+ if (FacebookPluginUtils::isAdmin()) {
46
+ return;
47
+ }
48
 
49
+ $server_event = ServerEventFactory::safeCreateEvent(
50
+ 'Lead',
51
+ array(__CLASS__, 'readFormData'),
52
+ array($entry, $form_data)
53
+ );
54
+ FacebookServerSideEvent::getInstance()->track($server_event);
55
+
56
+ add_action(
57
+ 'wp_footer',
58
+ array(__CLASS__, 'injectLeadEvent'),
59
+ 20
60
+ );
61
  }
62
 
63
+ public static function injectLeadEvent() {
64
  if (FacebookPluginUtils::isAdmin()) {
65
  return;
66
  }
67
 
68
+ $events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
69
+ $pixel_code = PixelRenderer::render($events, self::TRACKING_NAME);
 
 
 
70
 
71
  printf("
72
  <!-- Facebook Pixel Event Code -->
 
73
  %s
 
74
  <!-- End Facebook Pixel Event Code -->
75
  ",
76
+ $pixel_code);
77
+ }
78
+
79
+ public static function readFormData($entry, $form_data) {
80
+ if (empty($entry) || empty($form_data)) {
81
+ return array();
82
+ }
83
+
84
+ return array(
85
+ 'email' => self::getEmail($entry, $form_data),
86
+ 'first_name' => self::getFirstName($entry, $form_data),
87
+ 'last_name' => self::getLastName($entry, $form_data)
88
+ );
89
+ }
90
+
91
+ private static function getEmail($entry, $form_data) {
92
+ return self::getField($entry, $form_data, 'email');
93
+ }
94
+
95
+ private static function getFirstName($entry, $form_data) {
96
+ return self::getField($entry, $form_data, 'name', 'first');
97
+ }
98
+
99
+ private static function getLastName($entry, $form_data) {
100
+ return self::getField($entry, $form_data, 'name', 'last');
101
+ }
102
+
103
+ private static function getField($entry, $form_data, $type, $label = null) {
104
+ if (empty($form_data['fields'])) {
105
+ return null;
106
+ }
107
+
108
+ foreach ($form_data['fields'] as $field) {
109
+ if ($field['type'] == $type) {
110
+ if (!empty($entry['fields'])) {
111
+ if (!empty($label)) {
112
+ return $entry['fields'][$field['id']][$label];
113
+ } else {
114
+ return $entry['fields'][$field['id']];
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ return null;
121
  }
122
  }
integration/IntegrationUtils.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright (C) 2017-present, Facebook, Inc.
4
+ *
5
+ * This program is free software; you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation; version 2 of the License.
8
+ * This program is distributed in the hope that it will be useful,
9
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ * GNU General Public License for more details.
12
+ */
13
+
14
+ /**
15
+ * @package FacebookPixelPlugin
16
+ */
17
+
18
+ namespace FacebookPixelPlugin\Integration;
19
+
20
+ defined('ABSPATH') or die('Direct access not allowed');
21
+
22
+ class IntegrationUtils {
23
+ public static function getFormidableFormsEntryValues($entry_id) {
24
+ return new \FrmEntryValues($entry_id);
25
+ }
26
+ }
languages/official-facebook-pixel-ar_AR.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-cs_CZ.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-da_DK.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-de_DE.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-en_GB.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-es_ES.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-es_LA.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-fi_FI.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-fr_CA.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-fr_FR.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-he_IL.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-it_IT.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-ja_JP.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-ko_KR.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-nb_NO.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-nl_NL.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-pl_PL.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-pt_BR.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-pt_PT.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-ru_RU.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-sv_SE.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-th_TH.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-pixel\n"
7
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
8
  "PO-Revision-Date: 2018-11-28 17:37-0800\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-pixel\n"
7
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
8
  "PO-Revision-Date: 2018-11-28 17:37-0800\n"
languages/official-facebook-pixel-tr_TR.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-vi_VN.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-zh_CN.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel-zh_TW.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
languages/official-facebook-pixel.pot CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the Official Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Official Facebook Pixel 1.8.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
2
  # This file is distributed under the same license as the Official Facebook Pixel package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Official Facebook Pixel 2.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
7
  "pixel\n"
8
  "POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
readme.txt CHANGED
@@ -4,18 +4,16 @@ Tags: Facebook, Facebook Conversion Pixel, Facebook Pixel, Facebook Pixel Events
4
  Requires at least: 4.4
5
  Tested up to: 5.3
6
  Requires PHP: 5.3
7
- Stable tag: 1.8.0
8
  License: GPLv2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  Grow your business with Official Facebook Pixel!
12
 
13
  == Description ==
14
- ***ATTENTION: Due to a known issue, upgrading this plugin may result in plugin deactivation (especially if you are upgrading from version 1.7.10 - 1.7.19). Please go to your site's 'Plugins' tab, refresh the page, and activate the plugin if it's deactivated to prevent losing your future pixel events.***
15
 
16
- This plugin will install a Facebook Pixel for your page. There is also built in support for other WordPress plugins. The Official Facebook Pixel allows you to fire lower funnel events: Lead, ViewContent, AddToCart, InitiateCheckout and Purchase. Tracking lower funnel events can help you understand the actions people are taking on your website. You can then use this information to make adjustments accordingly in your advertising campaigns.
17
-
18
- Current plugins that we support:
19
  * Caldera Forms
20
  * Contact Form 7
21
  * Easy Digital Downloads
@@ -51,7 +49,14 @@ If you get stuck, or have any questions, you can ask for help in the [Official F
51
  Of course! This plugin is open sourced on the Facebook Incubator GitHub. You can find the code and contribution instructions in the [plugin repository](https://github.com/facebookincubator/Facebook-Pixel-for-WordPress).
52
 
53
  == Changelog ==
54
- = 2019-02-18 version 1.8.0 =
 
 
 
 
 
 
 
55
  * remove get_called_class from the codebase
56
 
57
  = 2019-02-10 version 1.7.24 =
4
  Requires at least: 4.4
5
  Tested up to: 5.3
6
  Requires PHP: 5.3
7
+ Stable tag: 2.0.0
8
  License: GPLv2
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
  Grow your business with Official Facebook Pixel!
12
 
13
  == Description ==
14
+ This plugin will install a Facebook Pixel for your page so you can capture the actions people take when they interact with your page, such as Lead, ViewContent, AddToCart, InitiateCheckout and Purchase events. Version 2.0.0 also includes support for the server-side API, which lets you send events directly from your page's server so you can capture a more of these events when they happen. This can help you better understand your customer's journey from the moment they show interest in your business to the moment they complete a conversion. You can use this information to create ad campaigns that are relevant to your audience. [Learn More](https://www.facebook.com/business/learn/facebook-ads-pixel)
15
 
16
+ This plugin also includes built-in support for these other WordPress plugins:
 
 
17
  * Caldera Forms
18
  * Contact Form 7
19
  * Easy Digital Downloads
49
  Of course! This plugin is open sourced on the Facebook Incubator GitHub. You can find the code and contribution instructions in the [plugin repository](https://github.com/facebookincubator/Facebook-Pixel-for-WordPress).
50
 
51
  == Changelog ==
52
+ = 2020-03-09 version 2.0.0 =
53
+ * Added support for Server-Side API [Learn More](https://developers.facebook.com/docs/marketing-api/server-side-api)
54
+
55
+ = 2019-12-02 version 1.8.0 =
56
+ * Support for WordPress 5.3
57
+ * Fix Gravity Forms confirmation redirect
58
+
59
+ = 2019-02-18 version 1.7.25 =
60
  * remove get_called_class from the codebase
61
 
62
  = 2019-02-10 version 1.7.24 =
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'WP_Async_Task' => $vendorDir . '/techcrunch/wp-async-task/wp-async-task.php',
10
  );
vendor/composer/autoload_psr4.php CHANGED
@@ -9,4 +9,5 @@ return array(
9
  'FacebookPixelPlugin\\Integration\\' => array($baseDir . '/integration'),
10
  'FacebookPixelPlugin\\Core\\' => array($baseDir . '/core'),
11
  'FacebookPixelPlugin\\' => array($baseDir . '/'),
 
12
  );
9
  'FacebookPixelPlugin\\Integration\\' => array($baseDir . '/integration'),
10
  'FacebookPixelPlugin\\Core\\' => array($baseDir . '/core'),
11
  'FacebookPixelPlugin\\' => array($baseDir . '/'),
12
+ 'FacebookAds\\' => array($vendorDir . '/facebook/php-business-sdk/src/FacebookAds'),
13
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInite233542683f10f1b46247367fb9e8c6c::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'F' =>
@@ -12,6 +12,7 @@ class ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53
12
  'FacebookPixelPlugin\\Integration\\' => 32,
13
  'FacebookPixelPlugin\\Core\\' => 25,
14
  'FacebookPixelPlugin\\' => 20,
 
15
  ),
16
  );
17
 
@@ -28,13 +29,22 @@ class ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53
28
  array (
29
  0 => __DIR__ . '/../..' . '/',
30
  ),
 
 
 
 
 
 
 
 
31
  );
32
 
33
  public static function getInitializer(ClassLoader $loader)
34
  {
35
  return \Closure::bind(function () use ($loader) {
36
- $loader->prefixLengthsPsr4 = ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53::$prefixLengthsPsr4;
37
- $loader->prefixDirsPsr4 = ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53::$prefixDirsPsr4;
 
38
 
39
  }, null, ClassLoader::class);
40
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInite233542683f10f1b46247367fb9e8c6c
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'F' =>
12
  'FacebookPixelPlugin\\Integration\\' => 32,
13
  'FacebookPixelPlugin\\Core\\' => 25,
14
  'FacebookPixelPlugin\\' => 20,
15
+ 'FacebookAds\\' => 12,
16
  ),
17
  );
18
 
29
  array (
30
  0 => __DIR__ . '/../..' . '/',
31
  ),
32
+ 'FacebookAds\\' =>
33
+ array (
34
+ 0 => __DIR__ . '/..' . '/facebook/php-business-sdk/src/FacebookAds',
35
+ ),
36
+ );
37
+
38
+ public static $classMap = array (
39
+ 'WP_Async_Task' => __DIR__ . '/..' . '/techcrunch/wp-async-task/wp-async-task.php',
40
  );
41
 
42
  public static function getInitializer(ClassLoader $loader)
43
  {
44
  return \Closure::bind(function () use ($loader) {
45
+ $loader->prefixLengthsPsr4 = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$prefixLengthsPsr4;
46
+ $loader->prefixDirsPsr4 = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$prefixDirsPsr4;
47
+ $loader->classMap = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$classMap;
48
 
49
  }, null, ClassLoader::class);
50
  }
vendor/composer/installed.json CHANGED
@@ -1 +1,94 @@
1
- []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "facebook/php-business-sdk",
4
+ "version": "6.0.0",
5
+ "version_normalized": "6.0.0.0",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/facebook/facebook-php-business-sdk.git",
9
+ "reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/facebook/facebook-php-business-sdk/zipball/32c8678d3c50e0570b68d7cbb23062c16a5faf15",
14
+ "reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15",
15
+ "shasum": ""
16
+ },
17
+ "require-dev": {
18
+ "phpunit/phpunit": "~8",
19
+ "symfony/finder": "~2.6"
20
+ },
21
+ "time": "2020-02-03T20:06:10+00:00",
22
+ "type": "library",
23
+ "installation-source": "dist",
24
+ "autoload": {
25
+ "psr-4": {
26
+ "FacebookAds\\": "src/FacebookAds/"
27
+ }
28
+ },
29
+ "notification-url": "https://packagist.org/downloads/",
30
+ "description": "PHP SDK for Facebook Business",
31
+ "homepage": "https://developers.facebook.com/",
32
+ "keywords": [
33
+ "ads",
34
+ "business",
35
+ "facebook",
36
+ "instagram",
37
+ "page",
38
+ "sdk"
39
+ ]
40
+ },
41
+ {
42
+ "name": "techcrunch/wp-async-task",
43
+ "version": "dev-master",
44
+ "version_normalized": "9999999-dev",
45
+ "source": {
46
+ "type": "git",
47
+ "url": "https://github.com/techcrunch/wp-async-task.git",
48
+ "reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc"
49
+ },
50
+ "dist": {
51
+ "type": "zip",
52
+ "url": "https://api.github.com/repos/techcrunch/wp-async-task/zipball/9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
53
+ "reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
54
+ "shasum": ""
55
+ },
56
+ "require-dev": {
57
+ "10up/wp_mock": "dev-master",
58
+ "phpunit/phpunit": "*@stable"
59
+ },
60
+ "time": "2016-03-10T17:37:13+00:00",
61
+ "type": "wordpress-plugin",
62
+ "installation-source": "source",
63
+ "autoload": {
64
+ "classmap": [
65
+ "wp-async-task.php"
66
+ ]
67
+ },
68
+ "notification-url": "https://packagist.org/downloads/",
69
+ "license": [
70
+ "MIT"
71
+ ],
72
+ "authors": [
73
+ {
74
+ "name": "Alex Khadiwala",
75
+ "role": "developer"
76
+ },
77
+ {
78
+ "name": "Nicolas Vincent",
79
+ "role": "developer"
80
+ },
81
+ {
82
+ "name": "Eric Mann",
83
+ "email": "eric.mann@10up.com",
84
+ "role": "developer"
85
+ },
86
+ {
87
+ "name": "John P. Bloch",
88
+ "email": "john.bloch@10up.com",
89
+ "role": "developer"
90
+ }
91
+ ],
92
+ "description": "Run asynchronous tasks for long-running operations in WordPress"
93
+ }
94
+ ]
vendor/facebook/php-business-sdk/.github/ISSUE_TEMPLATE.md ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ # Facebook PHP Business SDK Issue
2
+ Since we want to handle bugs more efficiently, we've decided to close issue reporting in Github and move to our dedicated bug reporting channel.
3
+ If you encounter a bug with Business SDK (PHP), please report the issue at [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
vendor/facebook/php-business-sdk/.travis.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: php
2
+
3
+ dist: trusty
4
+
5
+ php:
6
+ - 7.2
7
+ - 7.3
8
+ - 7.4
9
+ - hhvm
10
+
11
+ sudo: false
12
+
13
+ install:
14
+ - composer self-update && composer --version
15
+ - composer install --dev --prefer-source
16
+
17
+ script:
18
+ - vendor/bin/phpunit -v -c $PWD/test/phpunit-travis.xml --coverage-clover=coverage.clover
19
+
20
+ after_script:
21
+ - wget https://scrutinizer-ci.com/ocular.phar
22
+ - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
23
+
24
+ notifications:
25
+ email: false
26
+
27
+ matrix:
28
+ fast_finish: true
29
+ allow_failures:
30
+ - php: hhvm
vendor/facebook/php-business-sdk/CHANGELOG.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+
6
+ ## Unreleased
7
+
8
+ ## v6.0.0
9
+ ### Changed
10
+ - Graph API call upgrade to [v6.0](https://developers.facebook.com/docs/graph-api/changelog/version6.0)
11
+
12
+ ## v5.0.5
13
+ ### Added
14
+ - Server-side API added search_string to CustomData and fixed setLastName in UserData object.
15
+
16
+ ## v5.0.3
17
+ ### Added
18
+ - Added function `getHeaders` in RequestException class which provides header information
19
+ ### Fixed
20
+ - Server Side API CustomData model normalization fix
21
+
22
+ ## v5.0.2
23
+
24
+ ### Added
25
+ - Added `CrashRepoter`, more context available [here](https://developers.facebook.com/docs/business-sdk/guides/crash-reports)
26
+
27
+ ## v5.0.1
28
+ ### Added
29
+ - Added strongly typed Server-Side API for Web (https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api/using-the-api)
30
+
31
+ ## v5.0.0
32
+ ### Changed
33
+ - Graph API call upgrade to [v5.0](https://developers.facebook.com/docs/graph-api/changelog/version5.0)
34
+
35
+ ## v4.0.6
36
+
37
+ ### Fixed
38
+ - Add back `source` param in `Adaccount->createAdVideo`.
39
+
40
+ ## v4.0.5
41
+
42
+ ### Fixed
43
+ - Introduce `addUsersMultiKey` and `removeUsersMultiKey` in `CustomAudience` to still allow add users to `CustomAudience` with multiple keys after `CustomAudienceMultiKey` been deprecated.
44
+
45
+ ## v4.0.0
46
+ ### Changed
47
+ - Graph API call upgrade to [v4.0](https://developers.facebook.com/docs/graph-api/changelog/version4.0)
48
+
49
+ ## v3.3.1
50
+ ### Changed
51
+ - Remove list of API call from Business SDK, any [these APIs](https://developers.facebook.com/docs/graph-api/changelog/4-30-2019-endpoint-deprecations) included in Business SDK will be deprecated.
52
+
53
+ ## v3.3.0
54
+ ### Changed
55
+ - Graph API call upgrade to [v3.3](https://developers.facebook.com/docs/graph-api/changelog/version3.3)
56
+ ### Deprecated
57
+ - Deprecated `parentID` in `AbstractCrudObject`.
58
+ - Deprecated `CustomAudienceMultiKey`, use class `CustomAudience` instead.
59
+ - Deprecated functions `create`, `read`, `update` in `AbstractCrudObject`. Check out our [recommended way](https://github.com/facebook/facebook-php-business-sdk#object-classes) to make API call.
60
+ ***`read` will reset the object fields, while `getSelf` will get a new object.*** For example :
61
+ ```
62
+ $async_job = $adaccount->getInsightsAsync($fields, $params);
63
+
64
+ $async_job = $async_job->getSelf();
65
+
66
+ while (!$async_job->isComplete()) {
67
+ sleep(1);
68
+ $async_job = $async_job->getSelf();
69
+ }
70
+ ```
71
+
vendor/facebook/php-business-sdk/CODE_OF_CONDUCT.md ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ # Code of Conduct
2
+
3
+ Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated.
vendor/facebook/php-business-sdk/CONTRIBUTING.md ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Contributing to Facebook Ads API SDK for PHP
2
+ We want to make contributing to this project as easy and transparent as
3
+ possible.
4
+
5
+ ## Code of Conduct
6
+ The code of conduct is described in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
7
+
8
+ ## Our Development Process
9
+ The Facebook Ads API SDK for PHP is currently developed in Facebook's internal
10
+ repositories and then exported out to GitHub by a Facebook team member. We invite
11
+ you to submit pull requests directly to GitHub and, after review, these can be
12
+ merged into the project.
13
+
14
+ ## Pull Requests
15
+ We actively welcome your pull requests.
16
+
17
+ 1. Fork the repo and create your branch from `master`.
18
+ 2. If you've added code that should be tested, add tests.
19
+ 3. If you've changed APIs, update the documentation.
20
+ 4. Ensure the test suite passes.
21
+ 5. Make sure your code lints.
22
+ 6. If you haven't already, complete the Contributor License Agreement ("CLA").
23
+
24
+ ## Contributor License Agreement ("CLA")
25
+ In order to accept your pull request, we need you to submit a CLA. You only need
26
+ to do this once to work on any of Facebook's open source projects.
27
+
28
+ Complete your CLA [here](https://code.facebook.com/cla)
29
+
30
+ ## Issues
31
+ Since we want to handle bugs more efficiently, we encourage you report bug to
32
+ our dedicated bug reporting channel. If you encounter a bug with Business SDK
33
+ (PHP), please report the issue at
34
+ [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
35
+
36
+ Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
37
+ disclosure of security bugs. In those cases, please go through the process
38
+ outlined on that page
39
+
40
+ ## Coding Style
41
+ Please follow [PHP Coding Standards](https://secure.phabricator.com/book/phabcontrib/article/php_coding_standards/)
42
+
43
+ ## License
44
+ By contributing to Facebook Ads API SDK for PHP, you agree that your contributions
45
+ will be licensed under the LICENSE file in the root directory of this source tree.
vendor/facebook/php-business-sdk/DEVELOPER_GUIDE.md ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Facebook Ads SDK - Developer Guide
2
+
3
+ ## Introduction
4
+
5
+ This guide assumes you have an app that has been whitelisted for the Facebook Ads API, that you have a fully working development environment with all required dependencies and that are ready to start coding. If you haven't done this, please see the [README](./README.md) file.
6
+
7
+ We also assume you are somewhat familiar with namespaces in PHP. If not, we recommend you take some time to read the [namespace basics](http://www.php.net/manual/en/language.namespaces.basics.php) in the PHP Manual.
8
+
9
+ You should also have the documentation for the [Facebook Marketing APIs](https://developers.facebook.com/docs/ads-api) available as you will need to refer to this to understand which combination of parameters are required for the different object types.
10
+
11
+ ## Bootstrapping <a name="bootstrapping"></a>
12
+ The classes within the Facebook Ads SDK are designed to be included using an autoloader compliant with the [PSR-4](http://www.php-fig.org/psr/psr-4/). If you are using [Composer](https://getcomposer.org/) to include dependencies, you will find an implementation available within the vendor folder. This guide assumes you are using this autoloader.
13
+
14
+ ```php
15
+ <?php
16
+ define('VENDOR_DIR', '/path/to/sdk/'); // Path to the Vendor directory
17
+ $loader = include VENDOR_DIR.'/vendor/autoload.php';
18
+ ```
19
+
20
+ ### Authentication <a name="authentication"></a>
21
+ To make any request to the Ads API, you will need to have a valid access token and the user has accepted the `ads_management` permission.
22
+
23
+ ## The Api Object
24
+
25
+ The `FacebookAds\Api` object is the basis of the Ads SDK which encapsulates a `FacebookAds\Session` and is used to execute requests against the Graph API.
26
+
27
+ An easy to use init method is provided:
28
+
29
+ ```php
30
+ use FacebookAds\Api;
31
+
32
+ // Set the default application to be used with this session and register an instance of the Api object
33
+ Api::init('<APP_ID>', '<APP_SECRET>', '<ACCESS_TOKEN>');
34
+
35
+ // The instace is now retrivable
36
+ $api = Api::instance();
37
+ ```
38
+
39
+ ### Making requests to the Graph <a name="making_requests"></a>
40
+
41
+ Generally you should not need to make requests to the Graph API directly as these calls are handled by the implementation of objects within the SDK. However, there may be some case where you do want to query the Graph directly. In this case, you can use the `call` method of the `Api` class which returns a `FacebookAds\Http\RequestInterface`, by default the registered class is `FacebookAds\Http\Request`:
42
+
43
+ ```php
44
+ $response = $api->call(
45
+ '/61405622',
46
+ Api::HTTP_METHOD_GET,
47
+ array('fields'=>'name')
48
+ );
49
+ var_dump($response->getContent());
50
+ ```
51
+
52
+ ### Handling Multiple Access Tokens <a name="multiple_tokens"></a>
53
+ The first time an `Api` object is instantiated, we store a static reference to that object within the `Api` class and this is used as the default instance within the SDK. This saves you from having to pass around a reference to an `Api` instance within your application.
54
+
55
+ A common requirement amongst Facebook Ads API developers however is to be able to handle multiple sessions within a single script execution. For example, you may have a process which syncs updated objects for multiple app users into some local datastore.
56
+
57
+ To enable this, we provide two ways to manage sessions.
58
+
59
+ The first is by mutating the default instance used by the application. The default instance can be accessed using the method `Api::instance()`. You can also change the default instance using the static method `Api::setInstance($api)`.
60
+
61
+ The second is to explicitly define the `Api` instance you want to use when querying the Graph. This is achieved by passing an instance to the constructor of any class that extends from `Object\AbstractCrudObject`.
62
+
63
+ ```php
64
+ use FacebookAds\Object\Ad;
65
+ $my_ad = new Ad($id, $parent_id=null, $api);
66
+ ```
67
+
68
+ ## Objects Types
69
+
70
+
71
+ ### CRUD Objects
72
+ For any entity that can be directly queried from the Graph API we have provided classes which extend `Object\AbstractCrudObject`. This provides `create`, `read`, `update` and `delete` methods for the majority of these entities. However, in some cases the Graph API does not support all of these operations and you will receive an `\Exception` if you attempt to call an unsupported method.
73
+
74
+ When setting class variables on an object of this type we perform some basic validation to ensure the field is a valid field and an `\Exception` will be thrown if a field name is not found within the [field definition](#field_definition) for that class.
75
+
76
+ ### Simple Objects
77
+ There is another set of entities which cannot be directly queried from the Graph such as an `AdPreview`. This type of object extends `Object\AbstractObject` which provides methods to access the response data.
78
+
79
+ ### Field definitions <a name="field_definition"></a>
80
+
81
+ For each object type, we provide a class enumerating the available fields of that object. These can be found within the `FacebookAds\Object\Fields` namespace and provide a way to reference fields without using strings. You can alternatively use strings if you find this easier.
82
+
83
+ For example, you can set the data of an object using the field definitions in the following way:
84
+
85
+ ```php
86
+ $someObject->setData(array(
87
+ MyObjectFields::ID => 1234,
88
+ MyObjectFields::NAME => 'My Name',
89
+ ));
90
+ ```
91
+
92
+ Alternatively, you can use the string equivalent:
93
+
94
+ ```php
95
+ $someObject->setData(array(
96
+ 'id'=>1234,
97
+ 'name'=>'My Name',
98
+ ));
99
+ ```
100
+
101
+ Similarly the same applies for direct assignation:
102
+
103
+ ```php
104
+ //Using field definitions:
105
+ $someObject->{SomeObjectFields::ID} = 123;
106
+
107
+ //Equivalent to using the variable name directly:
108
+ $someObject->id = 123;
109
+ ```
110
+
111
+ ### The Cursor Class
112
+ When requesting multiple objects from the Graph, responses may be returned in pages of data which can be traversed using cursors. We encapsulate this information into a `Cursor` class which represents the set of objects in the current page along with information about how to access subsequent pages of objects. This class implements the `\Iterable` and `\Countable` interfaces.
113
+
114
+ ## Reading Objects
115
+
116
+ ### Reading a single object
117
+ To read an object from the Graph you will need its `id`. By default, only the `id` field of an object is queried and you should specify when reading an object the fields you need. It is not recommended that you request all fields unless you require them all.
118
+
119
+ ```php
120
+ use FacebookAds\Object\AdAccount;
121
+ use FacebookAds\Object\Fields\AdAccountFields;
122
+
123
+ $required_fields = array(
124
+ AdAccountFields::ID,
125
+ AdAccountFields::NAME,
126
+ AdAccountFields::DAILY_SPEND_LIMIT,
127
+ );
128
+
129
+ $adaccount = (new AdAccount($id))->read($required_fields);
130
+ ```
131
+ See [Defining Default Fields](#default_fields) within the section about Extending the SDK for an example of how to avoid defining the fields you require every request.
132
+
133
+
134
+ ### Reading multiple objects
135
+ We provide the static method `readIds($ids = array(...), $fields = array(...))` to enable you to request many objects of a single type and will return a `Cursor`:
136
+
137
+ ```php
138
+ use FacebookAds\Object\AdAccount;
139
+ use FacebookAds\Object\Fields\AdAccountFields;
140
+
141
+ $required_fields = array(
142
+ AdAccountFields::ID,
143
+ AdAccountFields::NAME,
144
+ AdAccountFields::DAILY_SPEND_LIMIT,
145
+ );
146
+ $account_ids = array('act_x', 'act_y'...)
147
+ $adaccounts = AdAccount::readIds($account_ids, $required_fields);
148
+ foreach($adaccounts as $account) {
149
+ echo $account->id."\n";
150
+ }
151
+ ```
152
+
153
+ ## Creating Objects
154
+
155
+ When creating objects on the Graph, they are generally created by making a POST request to an edge of a parent object. For example, ads are created using the endpoint `https://graph.facebook.com/act_123123/ads`. Therefore when creating an object, you must know the `id` of the parent object which is generally the id of an AdAccount. You should consult the [Facebook Developer Documentation](https://developers.facebook.com/docs/ads-api) to see which parent object to use.
156
+
157
+ ```php
158
+ use FacebookAds\Object\Ad;
159
+ use FacebookAds\Object\Fields\AdFields;
160
+
161
+ $account_id = 'act_123123';
162
+ $ad = new Ad($id=null, $account_id);
163
+
164
+ $ad->setData(array(
165
+ AdFields::NAME => 'My Test Ad',
166
+ AdFields::ADSET_ID => $adset_id,
167
+ ));
168
+
169
+ $ad->create(array(
170
+ Ad::STATUS_PARAM_NAME => Ad::STATUS_PAUSED,
171
+ ));
172
+ echo $ad->{AdFields::ID};
173
+ ```
174
+
175
+ ## Updating Objects
176
+
177
+ When you mutate an AdObject, we record which variables have changed and make it easy for you to write these change to the Graph API by calling the `update` method.
178
+
179
+ Please note that in some cases the variable name used to update an attribute of an entity differs from the one read from Graph API. Any variable you change will be included in the request to update an object an you will likely receive an `\Exception` if the field name is incorrect. Please consult the [Facebook Developer Documentation](https://developers.facebook.com/docs/ads-api) to see which fields are required.
180
+
181
+ ```php
182
+ use FacebookAds\Object\Ad;
183
+ use FacebookAds\Object\Fields\AdFields;
184
+
185
+ $ad = new Ad($id);
186
+ $ad->name = 'Updated Name';
187
+ $ad->update();
188
+ ```
189
+
190
+ ## Deleting Objects
191
+
192
+
193
+ ### Deleting a single object
194
+
195
+ To delete an object, you only need call the `delete` method on an instance of that object. Note, you do not have had to have read the object from the Graph API, all you need is the `id` of the object.
196
+
197
+ ```php
198
+ use FacebookAds\Object\Ad;
199
+ use FacebookAds\Object\Fields\AdFields;
200
+
201
+ $ad = new Ad($id);
202
+ $ad->delete();
203
+ ```
204
+
205
+ ### Deleting multiple objects
206
+
207
+ We provide the static method `deleteIds($ids = array(...))` to enable you to delete many objects at the same time. This method returns a boolean value and will only return `true` if all objects were successfully deleted. A return value of `false` means one or more failed to be deleted. Please also note that we do not verify the type of the `id` you have passed into this function.
208
+
209
+ ```php
210
+ use FacebookAds\Object\Ad;
211
+ $status = Ad::deleteIds($ids = array(...));
212
+ ```
213
+
214
+ ### Save Helper
215
+
216
+ On object that extends `AbstractCrudObject` you can call the `save` method which will call `create` if the object does not have a value for `id` set, or will call `update` a value is present.
217
+
218
+
219
+ ## Connections
220
+
221
+ Objects on the Graph API may also have connections. A connection provides a way to retrieve objects which relate to the current object, for example, you can retrieve all the ads relative to an ad account using the URL `https://graph.facebook.com/act_123123/ads`.
222
+
223
+ For each connection an object has, we provide a helper method to retrieve its related objects. In the case of `ObjectObject\AdAccount` we provide several of these methods including `getAds($required_fields)` which will return a `Cursor` containing a page of `Object\Ad` objects.
224
+
225
+ ```php
226
+ use FacebookAds\Object\AdAccount;
227
+ $account = new AdAccount($id);
228
+ $ads = $account->getAds($fields = array('name')));
229
+ foreach($ads as $ad) {
230
+ echo $ad->name."\n";
231
+ }
232
+ ```
233
+
234
+ You only need the `id` of the object on which you want to call a connection method, therefore you do not need to have read the object from the Graph API first.
235
+
236
+ For cases where these helper methods are not available, see [Requesting Connections Without Helper Methods](#generic_connections).
237
+
238
+ ## Targeting <a name="targeting"></a>
239
+
240
+ Facebook's targeting can generally be broken down into [interests](https://developers.facebook.com/docs/reference/ads-api/interest-targeting), [demographics](https://developers.facebook.com/docs/reference/ads-api/demographic-targeting), [behaviors](https://developers.facebook.com/docs/reference/ads-api/behavior-targeting) and [geo targeting](https://developers.facebook.com/docs/reference/ads-api/targeting-specs/#location). Many of these need to be queried from the Graph API search endpoint.
241
+
242
+ To query targeting using the Ads SDK, you can use the `Object\TargetingSearch` class.
243
+
244
+ ## Examples
245
+
246
+ This set of examples will walk you through:
247
+
248
+ 1. Reading AdAccounts for a user
249
+ * Creating a Campaign
250
+ * Searching targeting criteria
251
+ * Creating an AdSet
252
+ * Creating an AdImage
253
+ * Creating an AdCreative
254
+ * Creating an Ad
255
+
256
+ Examples can be found within the `examples/` folder of the SDK. This assumes you have bootstrap code with an access token:
257
+
258
+ ```php
259
+ <?php
260
+ define('SDK_DIR', '/path/to/sdk/'); // Path to the SDK directory
261
+
262
+ $loader = include SDK_DIR.'/vendor/autoload.php';
263
+
264
+ use FacebookAds\Api;
265
+
266
+ Api::init($app_id, $app_secret, $access_token);
267
+
268
+ ```
269
+
270
+ ### 1. Reading AdAccounts
271
+
272
+ The `FacebookSession` contains the `id` of the user who has the active session and this can be used to read their `AdAccount` connections.
273
+
274
+ ```php
275
+ use FacebookAds\Object\AdUser;
276
+ use FacebookAds\Object\Fields\AdUserFields;
277
+ use FacebookAds\Object\AdAccount;
278
+ use FacebookAds\Object\Fields\AdAccountFields;
279
+
280
+ $user = new AdUser('me');
281
+ $user->read(array(AdUserFields::ID));
282
+
283
+ $accounts = $user->getAdAccounts(array(
284
+ AdAccountFields::ID,
285
+ AdAccountFields::NAME,
286
+ ));
287
+
288
+ // Print out the accounts
289
+ echo "Accounts:\n";
290
+ foreach($accounts as $account) {
291
+ echo $account->id . ' - ' .$account->name."\n";
292
+ }
293
+
294
+ // Grab the first account for next steps (you should probably choose one)
295
+ $account = (count($accounts)) ? $accounts->getObjects()[0] : null;
296
+ echo "\nUsing this account: ";
297
+ echo $account->id."\n";
298
+ ```
299
+
300
+ ### 2. Creating a Campaign
301
+
302
+ Now we have an `AdAccount` for the current user we can go ahead an create our [Campaign](https://developers.facebook.com/docs/reference/ads-api/adcampaign). All `ads` within your `campaign` should have the same objective. You can find the available objectives within the [`AdObjectives`](src/FacebookAds/Object/Values/AdObjectives.php) class.
303
+
304
+ In the following example we create a paused campaign so your ads do not go live, however you can omit the status field if you want your ad to run.
305
+
306
+ ```php
307
+ use FacebookAds\Object\Campaign;
308
+ use FacebookAds\Object\Fields\CampaignFields;
309
+ use FacebookAds\Object\Values\AdObjectives;
310
+ use FacebookAds\Object\Values\AdBuyingTypes;
311
+
312
+ $campaign = new Campaign(null, $account->id);
313
+ $campaign->setData(array(
314
+ CampaignFields::NAME => 'My First Campaign',
315
+ CampaignFields::OBJECTIVE => AdObjectives::LINK_CLICKS,
316
+ ));
317
+
318
+ $campaign->create(array(
319
+ Campaign::STATUS_PARAM_NAME => Campaign::STATUS_PAUSED,
320
+ ));
321
+ echo "Campaign ID:".$campaign->id."\n";
322
+ ```
323
+
324
+
325
+ ### 3. Searching Targeting
326
+
327
+ The final thing we need before creating an `Ad` is some targeting. Many attributes of targeting can be found defined in the developer documentation, however some categories need you to search, such as interests. For this, we provide the `TargetingSearch` class.
328
+
329
+ ```php
330
+ use FacebookAds\Object\TargetingSearch;
331
+ use FacebookAds\Object\Search\TargetingSearchTypes;
332
+
333
+ $results = TargetingSearch::search(
334
+ $type = TargetingSearchTypes::INTEREST,
335
+ $class = null,
336
+ $query = 'facebook london',
337
+ );
338
+
339
+ // we'll take the top result for now
340
+ $target = (count($results)) ? $results->getObjects()[0] : null;
341
+ echo "Using target: ".$target->name."\n";
342
+ ```
343
+
344
+ Targeting for the moment is expressed in the form of a multidimensional array:
345
+
346
+ ```php
347
+ $targeting = array(
348
+ 'geo_locations' => array(
349
+ 'countries' => array('GB'),
350
+ ),
351
+ 'interests' => array(
352
+ array(
353
+ 'id' => $target->id,
354
+ 'name'=>$target->name,
355
+ ),
356
+ ),
357
+ );
358
+ ```
359
+
360
+
361
+ ### 4. Creating an AdSet
362
+
363
+ An [`AdSet`](https://developers.facebook.com/docs/reference/ads-api/adset) is a set of [`Ad`](https://developers.facebook.com/docs/reference/ads-api/adgroup) objects and it is best practice to ensure all `Ad` objects within an `AdSet` have the same targeting.
364
+
365
+ The `AdSet` holds the attributes about the duration of a campaign and the budget. When deciding a budget, you should also choose between `lifetime_budget` and `daily_budget`.
366
+
367
+ ```php
368
+ use FacebookAds\Object\AdSet;
369
+ use FacebookAds\Object\Fields\AdSetFields;
370
+ use FacebookAds\Object\Values\BillingEvents;
371
+ use FacebookAds\Object\Values\OptimizationGoals;
372
+
373
+ $adset = new AdSet(null, $account->id);
374
+ $adset->setData(array(
375
+ AdSetFields::NAME => 'My First AdSet',
376
+ AdSetFields::CAMPAIGN_ID => $campaign->id,
377
+ AdSetFields::DAILY_BUDGET => '150',
378
+ AdSetFields::OPTIMIZATION_GOAL => OptimizationGoals::REACH,
379
+ AdSetFields::BILLING_EVENT => BillingEvents::IMPRESSIONS,
380
+ AdSetFields::BID_AMOUNT => 2,
381
+ AdSetFields::TARGETING => $targeting,
382
+ AdSetFields::START_TIME =>
383
+ (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
384
+ AdSetFields::END_TIME =>
385
+ (new \DateTime("+2 week"))->format(\DateTime::ISO8601),
386
+ ));
387
+
388
+ $adset->create();
389
+ echo 'AdSet ID: '.$adset->id."\n";
390
+ ```
391
+ ### 5. Create an AdImage
392
+
393
+ Now you have a `AdSet`, you will be able to create an `Ad`, however, first you will need to upload the image you want to use as part of the `AdCreative`.
394
+
395
+ ```php
396
+ use FacebookAds\Object\AdImage;
397
+ use FacebookAds\Object\Fields\AdImageFields;
398
+
399
+ $image = new AdImage(null, $account->id);
400
+ $image->filename = SDK_DIR.'/test/misc/FB-f-Logo__blue_512.png';
401
+
402
+ $image->create();
403
+ echo 'Image Hash: '.$image->hash."\n";
404
+ ```
405
+
406
+ ### 6. Creating an AdCreative
407
+
408
+ You can create an `AdCreative` in two ways. The first is by including a JSON object when creating an `Ad` and the second, which we will demonstrate here, is by explicitly creation an `AdCreative` and using its `id` when creating an `Ad`.
409
+
410
+ ```php
411
+ use FacebookAds\Object\AdCreative;
412
+ use FacebookAds\Object\Fields\AdCreativeFields;
413
+
414
+ $creative = new AdCreative(null, $account->id);
415
+ $creative->setData(array(
416
+ AdCreativeFields::NAME => 'Sample Creative',
417
+ AdCreativeFields::TITLE => 'Welcome to the Jungle',
418
+ AdCreativeFields::BODY => 'We\'ve got fun \'n\' games',
419
+ AdCreativeFields::IMAGE_HASH => $image->hash,
420
+ AdCreativeFields::OBJECT_URL => 'http://www.example.com/',
421
+ ));
422
+
423
+ $creative->create();
424
+ echo 'Creative ID: '.$creative->id . "\n";
425
+ ```
426
+
427
+ ### 7. Creating an Ad
428
+
429
+ The final step is to create the [`Ad`](https://developers.facebook.com/docs/reference/ads-api/adgroup/). The `Ad` contains all of the information about bid, creative and targeting. It should also have the asme objective as the `Campaign` we created.
430
+
431
+ ```php
432
+ use FacebookAds\Object\Ad;
433
+ use FacebookAds\Object\Fields\AdFields;
434
+
435
+ $ad = new Ad(null, $account->id);
436
+ $ad->setData(array(
437
+ AdFields::CREATIVE => array('creative_id' => $creative->id),
438
+ AdFields::NAME => 'My First Ad',
439
+ AdFields::ADSET_ID => $adset->id,
440
+ ));
441
+
442
+ $ad->create();
443
+ echo 'Ad ID:'.$ad->id."\n";
444
+ ```
445
+ ## Extending the SDK
446
+
447
+ There are many scenarios in which you may want to extend the SDK, and when developing this SDK we attempted to balance extensibility with ease of use for new developers.
448
+
449
+ ### Defining Default Fields to Read <a name="default_fields"></a>
450
+ We noted earlier that by default no fields are requested when calling the `read` method of a class implementing `AbstractCrudObject`, however if you always require the same set of fields throughout your application we have provided a simple way to do this.
451
+
452
+ Within your own namespace, you can extend the any class implementing `AbstractCrudObject` and override the static variable `$defaultReadFields` to be an array of fields you want to be read by default. You should try to not change the classes in the SDK directly as this may break forward compatibly.
453
+
454
+ ```php
455
+ namespace MyNamespace\Object;
456
+
457
+ use FacebookAds\Object\Fields\AdAccountFields;
458
+
459
+ class AdAccount extends FacebookAds\Object\AdAccount {
460
+
461
+ protected static $defaultReadFields = array(
462
+ AdAccountFields::ID,
463
+ AdAccountFields::NAME,
464
+ AdAccountFields::DAILY_SPEND_LIMIT,
465
+ AdAccountFields::CURRENCY,
466
+ );
467
+ }
468
+ ```
469
+
470
+ Within your application, whenever you use an `AdAccount`, you should use the one within your namespace instead of the `FacebookAds` one.
471
+
472
+ ```php
473
+ use MyNamespace\Object\AdAccount;
474
+ $adaccount = (new AdAccount($id))->read();
475
+ echo $adaccount->name;
476
+ ```
477
+
478
+ ### Requesting Connections Without Helper Methods<a name="generic_connections"></a>
479
+
480
+ As detailed in the [Connections](#connections) section, we provide helper methods to request objects relative to an object. However, in some cases these methods may not have been implemented, or if you have extended our based objects as in the example of [defining default fields to read](#default_fields), calling a connection helper method on a base object will return objects of the \FacebookAds namespace type.
481
+
482
+ In this case, you can use our generic connection methods to retrieve the correct type of object for any class extending `AbstractCrudObject`. To enable this, we provide two methods, `getOneByConnection` and `getManyByConnection` or which the latter is the most commonly used.
483
+
484
+ ```php
485
+ use FacebookAds\Object\AdAccount;
486
+
487
+ // Ad in your namespace which you have used to extend the
488
+ // FacebookAds\Object\Ad class
489
+ use MyNamespace\Object\Ad;
490
+
491
+ $account = new AdAccount($id);
492
+ $my_adaccount_objects = $account->getManyByConnection(
493
+ Ad::className(), $fields = array(...), $params = array(...));
494
+
495
+ ```
vendor/facebook/php-business-sdk/LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
2
+
3
+ You are hereby granted a non-exclusive, worldwide, royalty-free license to
4
+ use, copy, modify, and distribute this software in source code or binary
5
+ form for use in connection with the web services and APIs provided by
6
+ Facebook.
7
+
8
+ As with any software that integrates with the Facebook platform, your use
9
+ of this software is subject to the Facebook Developer Principles and
10
+ Policies [http://developers.facebook.com/policy/]. This copyright notice
11
+ shall be included in all copies or substantial portions of the software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19
+ DEALINGS IN THE SOFTWARE.
vendor/facebook/php-business-sdk/README.md ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Facebook Business SDK for PHP
2
+
3
+ [![Packagist](https://img.shields.io/packagist/v/facebook/php-business-sdk.svg?style=flat-square)](https://packagist.org/packages/facebook/php-business-sdk)
4
+ [![License](https://img.shields.io/badge/license-Facebook%20Platform-blue.svg?style=flat-square)](https://github.com/facebook/facebook-php-business-sdk/blob/master/LICENSE)
5
+ [![Travis](https://img.shields.io/travis/facebook/facebook-php-business-sdk.svg?style=flat-square)](https://travis-ci.org/facebook/facebook-php-business-sdk)
6
+ [![Scrutinizer](https://img.shields.io/scrutinizer/g/facebook/facebook-php-business-sdk.svg?style=flat-square)](https://scrutinizer-ci.com/g/facebook/facebook-php-business-sdk)
7
+ [![Scrutinizer Coverage](https://img.shields.io/scrutinizer/coverage/g/facebook/facebook-php-business-sdk.svg?style=flat-square)](https://scrutinizer-ci.com/g/facebook/facebook-php-business-sdk)
8
+
9
+ ## Introduction
10
+
11
+ The Facebook <a href="https://developers.facebook.com/docs/business-sdk" target="_blank">Business SDK</a> is a one-stop shop to help our partners better serve their businesses. Partners are using multiple Facebook API's to server the needs of their clients. Adopting all these API's and keeping them up to date across the various platforms can be time consuming and ultimately prohibitive. For this reason Facebook has developed the Business SDK bundling many of its APIs into one SDK to ease implementation and upkeep. The Business SDK is an upgraded version of the Marketing API SDK that includes the Marketing API as well as many Facebook APIs from different platforms such as Pages, Business Manager, Instagram, etc.
12
+
13
+ ## Quick Start
14
+
15
+ Business SDK <a href="https://developers.facebook.com/docs/business-sdk/getting-started" target="_blank">Getting Started Guide</a>
16
+
17
+ ## Pre-requisites
18
+
19
+ ### Register An App
20
+
21
+ To get started with the SDK, you must have an app
22
+ registered on <a href="https://developers.facebook.com/" target="_blank">developers.facebook.com</a>.
23
+
24
+ To manage the Marketing API, please visit your
25
+ <a href="https://developers.facebook.com/apps/<YOUR APP ID>/dashboard"> App Dashboard </a>
26
+ and add the <b>Marketing API</b> product to your app.
27
+
28
+ **IMPORTANT**: For security, it is recommended that you turn on 'App Secret
29
+ Proof for Server API calls' in your app's Settings->Advanced page.
30
+
31
+ ### Obtain An Access Token
32
+
33
+ When someone connects with an app using Facebook Login and approves the request
34
+ for permissions, the app obtains an access token that provides temporary, secure
35
+ access to Facebook APIs.
36
+
37
+ An access token is an opaque string that identifies a User, app, or Page.
38
+
39
+ For example, to access the Marketing API, you need to generate a User access token
40
+ for your app and ask for the ``ads_management`` permission; to access Pages API,
41
+ you need to generate a Page access token for your app and ask for the ``manage_page`` permission.
42
+
43
+ Refer to our
44
+ <a href="https://developers.facebook.com/docs/facebook-login/access-tokens" target="_blank">
45
+ Access Token Guide</a> to learn more.
46
+
47
+ For now, we can use the
48
+ <a href="https://developers.facebook.com/tools/explorer" target="_blank">Graph Explorer</a>
49
+ to get an access token.
50
+
51
+ ## Installation
52
+
53
+ The Facebook Business SDK requires PHP 5.6 or greater.
54
+
55
+ ### Composer
56
+
57
+ The Facebook Business SDK uses composer to manage dependencies. Visit the <a href="https://getcomposer.org/download/" target="_blank">composer documentation</a> to learn how to install composer.
58
+
59
+ Add the following to your `composer.json` file:
60
+
61
+ ```json
62
+ {
63
+ "require": {
64
+ "facebook/php-business-sdk": "5.0.5"
65
+ }
66
+ }
67
+ ```
68
+ then install it through composer:
69
+
70
+ ```shell
71
+ php composer.phar install --no-dev
72
+ ```
73
+
74
+ This SDK and its dependencies will be installed under `./vendor`.
75
+
76
+ ### Alternatives
77
+
78
+ This repository is written following the [psr-4 autoloading standard](http://www.php-fig.org/psr/psr-4/). Any psr-4 compatible autoloader can be used.
79
+
80
+ ## Usage
81
+
82
+ ### Api main class
83
+
84
+ The `FacebookAds\Api` object is the foundation of the Business SDK which encapsulates a `FacebookAds\Session` and is used to execute requests against the Graph API.
85
+
86
+ To instantiate an Api object you will need a valid access token:
87
+ ```php
88
+ use FacebookAds\Api;
89
+
90
+ // Initialize a new Session and instantiate an Api object
91
+ Api::init($app_id, $app_secret, $access_token);
92
+
93
+ // The Api object is now available through singleton
94
+ $api = Api::instance();
95
+
96
+ ```
97
+
98
+ Once instantiated, the Api object will allow you to start making requests to the Graph API.
99
+
100
+ ### Fields names
101
+
102
+ Due to the high number of field names in the Graph API existing objects, in order to facilitate your code maintainability, enum-like classes are provided.
103
+ These files are stored under the `FacebookAds/Object/Fields` directory.
104
+ You can access object properties in the same manner you would usually do in php:
105
+
106
+ ```php
107
+ use FacebookAds\Object\AdAccount;
108
+
109
+ $account = new AdAccount();
110
+ $account->name = 'My account name';
111
+ echo $account->name;
112
+ ```
113
+
114
+ or using the enums:
115
+
116
+ ```php
117
+ use FacebookAds\Object\AdAccount;
118
+ use FacebookAds\Object\Fields\AdAccountFields;
119
+
120
+ $account = new AdAccount();
121
+ $account->{AdAccountFields::NAME} = 'My account name';
122
+ echo $account->{AdAccountFields::NAME};
123
+ ```
124
+
125
+ ### Object classes
126
+
127
+ Facebook Ads entities are defined as classes under the `FacebookAds/Object` directory.
128
+
129
+ #### Read Objects
130
+
131
+ ```php
132
+ use FacebookAds\Object\AdAccount;
133
+
134
+ $account = (new AdAccount($account_id))->getSelf();
135
+ ```
136
+
137
+ For some objects, the Ads API doesn't return all available fields by default. The first argument of the object's read method is an array of field names to be requested.
138
+
139
+ ```php
140
+ use FacebookAds\Object\AdAccount;
141
+ use FacebookAds\Object\Fields\AdAccountFields;
142
+
143
+ $fields = array(
144
+ AdAccountFields::ID,
145
+ AdAccountFields::NAME,
146
+ );
147
+
148
+ $account = (new AdAccount($account_id))->getSelf($fields);
149
+ ```
150
+ Requesting an high number of fields may cause the response time to visibly increase, you should always request only the fields you really need.
151
+
152
+ #### Create Objects
153
+
154
+ ```php
155
+ use FacebookAds\Object\AdSet;
156
+ use FacebookAds\Object\AdAccount;
157
+ use FacebookAds\Object\Fields\AdSetFields;
158
+
159
+ $account_id = 'act_123123';
160
+ $campaign_id = '123456';
161
+
162
+ $account = new AdAccount($account_id);
163
+ $adset = $account->createAdSet(
164
+ array(),
165
+ array(
166
+ AdSetFields::NAME => 'My Test AdSet',
167
+ AdSetFields::CAMPAIGN_ID => campaign_id,
168
+ AdSetFields::DAILY_BUDGET => 150,
169
+ AdSetFields::START_TIME => (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
170
+ AdSetFields::END_TIME => (new \DateTime("+2 week"))->format(\DateTime::ISO8601),
171
+ AdSetFields::BILLING_EVENT => 'IMPRESSIONS',
172
+ AdSetFields::TARGETING => array('geo_locations' => array('countries' => array('US'))),
173
+ AdSetFields::BID_AMOUNT => '1000',
174
+ )
175
+ );
176
+
177
+ echo $adset->id;
178
+ ```
179
+
180
+ #### Update Objects
181
+
182
+ ```php
183
+ use FacebookAds\Object\AdSet;
184
+ use FacebookAds\Object\Fields\AdSetFields;
185
+
186
+ $ad_set_id = '123456';
187
+
188
+ $set = new AdSet($ad_set_id);
189
+ $fields = array(
190
+ );
191
+ $params = array(
192
+ AdSetFields::NAME => 'My new AdSet name',
193
+ );
194
+ $set->updateSelf($fields, $params);
195
+ ```
196
+
197
+ #### Delete Objects
198
+
199
+ ```php
200
+ use FacebookAds\Object\AdSet;
201
+
202
+ $ad_set_id = '123456';
203
+
204
+ $set = new AdSet($ad_set_id);
205
+ $set->deleteSelf();
206
+ ```
207
+
208
+ ### Cursors
209
+
210
+ Since the release of the Facebook Graph API 2.0, pagination is handled through [cursors](https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2#paging).
211
+ Here cursors are defined as in `\FacebookAds\Cursor`. Cursors are generally returned from connection methods:
212
+
213
+ ```php
214
+ use FacebookAds\Object\AdAccount;
215
+ use FacebookAds\Object\Fields\CampaignFields;
216
+
217
+ $account = new AdAccount('<ACT_ID>');
218
+ $cursor = $account->getCampaigns(['id','name']);
219
+
220
+ // Loop over objects
221
+ foreach ($cursor as $campaign) {
222
+ echo $campaign->{CampaignFields::NAME}.PHP_EOL;
223
+ }
224
+
225
+ // Access objects by index
226
+ if ($cursor->count() > 0) {
227
+ echo "The first campaign in the cursor is: ".$cursor[0]->{CampaignFields::NAME}.PHP_EOL;
228
+ }
229
+
230
+ // Fetch the next page
231
+ $cursor->fetchAfter();
232
+ // New Objects will be appended to the cursor
233
+ ```
234
+
235
+ #### Implicit Fetching
236
+
237
+ Whenever all object connected to a parent are required (carelessly from the number of HTTP requests) implicit fetching can help reducing the amount of code required.
238
+ If cursor has Implicit Fetching enabled, while iterating (foreach, Cursor::next(), Cursor::prev()) the page end is reached, the SDK will automatically fetch and append a new page, until cursor end.
239
+ Implicit Fetching will make you lose control of the number of HTTP request that will be sent and, for this reason, is disabled by default.
240
+ Implicit Fetching can be enabled for a specific cursor:
241
+
242
+ ```php
243
+ $cursor->setUseImplicitFetch(true);
244
+ ```
245
+
246
+ Or globally:
247
+
248
+ ```php
249
+ use FacebookAds\Cursor;
250
+
251
+ Cursor::setDefaultUseImplicitFetch(true);
252
+ ```
253
+
254
+ #### Reverse Iterations
255
+
256
+ Cursors are bi-directional, and can be iterated in reverse order:
257
+
258
+ ```php
259
+ use FacebookAds\Object\AbstractCrudObject;
260
+
261
+ /** @var \FacebookAds\Cursor $cursor */
262
+ $cursor->setUseImplicitFetch(true);
263
+
264
+ $cursor->end();
265
+ while ($cursor->valid()) {
266
+ echo $cursor->current()->{AbstractCrudObject::FIELD_ID}.PHP_EOL;
267
+ $cursor->prev();
268
+ }
269
+
270
+ ```
271
+
272
+ ## Tests
273
+
274
+ The 'test' folder contains the test cases. These are logically divided in unit and integration tests.
275
+ Integration tests require an active Facebook Ad Account, a Facebook Application and a valid Access Token.
276
+
277
+ Note: we are currently unable to securely and reliably run integration tests on a public CI system. Our integrations with Travis and Scrutinizer (including badges at the top of this file) include only unit tests.
278
+
279
+
280
+ ### Install dependencies
281
+
282
+ From the root folder run:
283
+
284
+ ```shell
285
+ php composer.phar install --dev
286
+ ```
287
+
288
+ ### Execute unit tests only
289
+
290
+ ```shell
291
+ ./vendor/bin/phpunit -c test/phpunit-travis.xml
292
+ ```
293
+
294
+ To run tests individually (be sure not to be pointing to an integration test file):
295
+
296
+ ```shell
297
+ ./vendor/bin/phpunit -c test/phpunit-travis.xml path/to/class/file
298
+ ```
299
+
300
+
301
+ ### Execute all tests (unit + integration)
302
+
303
+ Setup your integration config:
304
+
305
+ 1 - Copy the config file template.
306
+
307
+ ```shell
308
+ cp test/config.php.dist test/config.php
309
+ ```
310
+
311
+ 2 - Edit `test/config.php` with your informations.
312
+
313
+ Execute:
314
+
315
+ ```shell
316
+ ./vendor/bin/phpunit -c test/
317
+ ```
318
+
319
+ To run tests individually:
320
+
321
+ ```shell
322
+ ./vendor/bin/phpunit -c test/ path/to/class/file
323
+ ```
324
+
325
+ ## Debug
326
+
327
+ If this SDK is not working as expected, it may be either a SDK issue or API issue.
328
+
329
+ This can be identified by constructing a raw cURL request and seeing if the response is as expected
330
+
331
+ for example:
332
+
333
+ ```php
334
+ require __DIR__ . '/vendor/autoload.php';
335
+ use FacebookAds\Api;
336
+ use FacebookAds\Object\AdAccount;
337
+
338
+ Api::init($app_id, $app_secret, $access_token);
339
+ $api = Api::instance();
340
+
341
+ use FacebookAds\Logger\CurlLogger;
342
+ $api->setLogger(new CurlLogger());
343
+ $account = new AdAccount($account_id);
344
+ $account->read(array('id'));
345
+ ```
346
+
347
+ When running this code, this cURL request will be printed to the console as:
348
+ ```
349
+ curl -G \
350
+ -d 'fields=id' \
351
+ -d 'access_token=<access_token>' \
352
+ https://graph.facebook.com/v3.1/<act_accountid>
353
+ ```
354
+
355
+ ## SDK Codegen
356
+ Our SDK is autogenerated from [SDK Codegen](https://github.com/facebook/facebook-business-sdk-codegen). If you want to learn more about how our SDK code is generated, please check this repository.
357
+
358
+ ## Issue
359
+ Since we want to handle bugs more efficiently, we've decided to close issue reporting in Github and move to our dedicated bug reporting channel.
360
+ If you encounter a bug with Business SDK (PHP), please report the issue at [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
vendor/facebook/php-business-sdk/bin/clean_account.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ /*
4
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
5
+ *
6
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
7
+ * use, copy, modify, and distribute this software in source code or binary
8
+ * form for use in connection with the web services and APIs provided by
9
+ * Facebook.
10
+ *
11
+ * As with any software that integrates with the Facebook platform, your use
12
+ * of this software is subject to the Facebook Developer Principles and
13
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
14
+ * shall be included in all copies or substantial portions of the software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
+ * DEALINGS IN THE SOFTWARE.
23
+ *
24
+ */
25
+
26
+ use FacebookAds\Api;
27
+ use FacebookAds\Cursor;
28
+ use FacebookAds\Object\AbstractCrudObject;
29
+ use FacebookAds\Object\AdAccount;
30
+ use FacebookAds\Logger\CurlLogger;
31
+ use FacebookAdsTest\Bootstrap\IntegrationBootstrap;
32
+
33
+ chdir(__DIR__);
34
+
35
+ /** @var IntegrationBootstrap $bootstrap */
36
+ if (in_array('--docsmith-bootstrap', $_SERVER['argv'])) {
37
+ $bootstrap = require_once __DIR__.'/../docsmith/init_integration.php';
38
+ } else {
39
+ $bootstrap = require_once __DIR__.'/../test/init_integration.php';
40
+ }
41
+
42
+ $config = $bootstrap->getConfig();
43
+
44
+ Api::init($config->appId, $config->appSecret, $config->accessToken);
45
+
46
+ if (in_array('--dump', $_SERVER['argv'])) {
47
+ Api::instance()->setLogger(new CurlLogger(STDERR));
48
+ }
49
+
50
+ $get_class_name = function($object) {
51
+ return (new ReflectionClass($object))->getShortName();
52
+ };
53
+
54
+ $delete_object = function(AbstractCrudObject $object) use ($get_class_name) {
55
+ echo sprintf(
56
+ ' > Deleting %s %d',
57
+ $get_class_name($object),
58
+ $object->{AbstractCrudObject::FIELD_ID}).PHP_EOL;
59
+
60
+ try {
61
+ $object->deleteSelf();
62
+ } catch (Exception $e) {
63
+ echo sprintf(" > Deletion failed with %s: %s",
64
+ $get_class_name($e),
65
+ $e->getMessage()).PHP_EOL;
66
+ }
67
+ };
68
+
69
+ $clean_edge = function($cursor_provider) use ($get_class_name, $delete_object) {
70
+ try {
71
+ $cursor = call_user_func($cursor_provider);
72
+ if (!$cursor instanceof Cursor) {
73
+ throw new ErrorException(sprintf(
74
+ "Provider returned instance of %s",
75
+ $get_class_name($cursor)));
76
+ }
77
+ $cursor->setUseImplicitFetch(true);
78
+ foreach ($cursor as $object) {
79
+ if (!$object instanceof AbstractCrudObject) {
80
+ throw new ErrorException(sprintf(
81
+ "Provider returned instance of %s, not a CRUD object",
82
+ $get_class_name($object)));
83
+ }
84
+
85
+ $trait = 'FacebookAds\Object\Traits\CannotDelete';
86
+ if (in_array($trait, (new ReflectionClass($object))->getTraitNames())) {
87
+ break;
88
+ }
89
+ $delete_object($object);
90
+ }
91
+ } catch (Exception $e) {
92
+ echo sprintf(" > Edge iteration failed with %s: %s",
93
+ $get_class_name($e),
94
+ $e->getMessage()).PHP_EOL;
95
+ }
96
+ };
97
+
98
+ $account = new AdAccount($config->accountId);
99
+ $reflection = new ReflectionClass($account);
100
+
101
+ foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
102
+ if (
103
+ strncasecmp($method->getName(), 'get', 3) !== 0
104
+ || preg_match('/@return\s+Cursor/', $method->getDocComment()) !== 1
105
+ ) {
106
+ continue;
107
+ }
108
+
109
+ echo sprintf(' > Fetching AdAccount::%s', $method->getName()).PHP_EOL;
110
+ $clean_edge($method->getClosure($account));
111
+ }
vendor/facebook/php-business-sdk/bin/create_phar.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
4
+ *
5
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
+ * use, copy, modify, and distribute this software in source code or binary
7
+ * form for use in connection with the web services and APIs provided by
8
+ * Facebook.
9
+ *
10
+ * As with any software that integrates with the Facebook platform, your use
11
+ * of this software is subject to the Facebook Developer Principles and
12
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
+ * shall be included in all copies or substantial portions of the software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ * DEALINGS IN THE SOFTWARE.
22
+ *
23
+ */
24
+
25
+ namespace FacebookAdsBin;
26
+
27
+ use Symfony\Component\Finder\Finder;
28
+
29
+ chdir(__DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR);
30
+
31
+ require_once 'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
32
+
33
+ // Options
34
+ $include_autoloader = !in_array('--no-autoloader', $_SERVER['argv']);
35
+ $compress_gzip = !in_array('--no-gzip', $_SERVER['argv']);
36
+
37
+ $alias = 'facebook-php-ads-sdk.phar';
38
+ $build_dir = '.'.DIRECTORY_SEPARATOR.'builds'.DIRECTORY_SEPARATOR;
39
+ $out = $build_dir.$alias;
40
+
41
+ if (!is_dir($build_dir)) {
42
+ mkdir($build_dir);
43
+ } else if (file_exists($out)) {
44
+ unlink($out);
45
+ }
46
+
47
+ $phar = new \Phar($out, 0, $alias);
48
+ $phar->setSignatureAlgorithm(\Phar::SHA1);
49
+ if ($compress_gzip) {
50
+ $phar->compressFiles(\Phar::GZ);
51
+ }
52
+ $phar->startBuffering();
53
+ $phar->addFile('LICENSE');
54
+
55
+ $finder = (new Finder())->files()
56
+ ->ignoreVCS(true)
57
+ ->name('*.php')
58
+ ->in('src');
59
+
60
+ foreach ($finder->getIterator() as $file) {
61
+ $phar->addFile($file);
62
+ }
63
+
64
+ $stub = <<<'EOF'
65
+ <?php
66
+ /**
67
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
68
+ *
69
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
70
+ * use, copy, modify, and distribute this software in source code or binary
71
+ * form for use in connection with the web services and APIs provided by
72
+ * Facebook.
73
+ *
74
+ * As with any software that integrates with the Facebook platform, your use
75
+ * of this software is subject to the Facebook Developer Principles and
76
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
77
+ * shall be included in all copies or substantial portions of the software.
78
+ *
79
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
80
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
81
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
82
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
83
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
84
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
85
+ * DEALINGS IN THE SOFTWARE.
86
+ *
87
+ */
88
+ Phar::mapPhar('%s');
89
+
90
+ if (%d) {
91
+ spl_autoload_register(function($class) {
92
+ $prefix = 'FacebookAds\\';
93
+ $base_dir = 'phar://%s/src/FacebookAds/';
94
+ $len = strlen($prefix);
95
+ if (strncmp($prefix, $class, $len) !== 0) {
96
+ return;
97
+ }
98
+ $relative_class = substr($class, $len);
99
+ $file = $base_dir.str_replace(
100
+ '\\', DIRECTORY_SEPARATOR, $relative_class).'.php';
101
+ if (file_exists($file)) {
102
+ require $file;
103
+ }
104
+ });
105
+ }
106
+
107
+ __HALT_COMPILER();
108
+ EOF;
109
+
110
+
111
+ $phar->setStub(sprintf($stub, $alias, $include_autoloader ? 1 : 0, $alias));
112
+ $phar->stopBuffering();
vendor/facebook/php-business-sdk/bin/docsmith.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ /**
4
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
5
+ *
6
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
7
+ * use, copy, modify, and distribute this software in source code or binary
8
+ * form for use in connection with the web services and APIs provided by
9
+ * Facebook.
10
+ *
11
+ * As with any software that integrates with the Facebook platform, your use
12
+ * of this software is subject to the Facebook Developer Principles and
13
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
14
+ * shall be included in all copies or substantial portions of the software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
+ * DEALINGS IN THE SOFTWARE.
23
+ *
24
+ */
25
+
26
+ use FacebookAdsTest\Bootstrap;
27
+ use FacebookAdsDocsmith\Runner;
28
+ use FacebookAdsDocsmith\Runner\ActionsEnum;
29
+ use FacebookAdsDocsmith\Runner\OptionsEnum;
30
+ use FacebookAdsTest\Bootstrap\IntegrationBootstrap;
31
+
32
+ $relative_path = getcwd();
33
+ chdir(__DIR__);
34
+
35
+ /** @var IntegrationBootstrap $bootstrap */
36
+ $bootstrap = require_once __DIR__.'/../docsmith/init_auto.php';
37
+
38
+ if ($argc < 3) {
39
+ Runner::throwInvalidUsage("Insufficient number of arguments");
40
+ }
41
+
42
+ $action = $argv[1];
43
+ if (!ActionsEnum::getInstance()->isValidValue($action)) {
44
+ Runner::throwInvalidUsage("Unknown action {$action}");
45
+ }
46
+
47
+ $doc_path = $argv[2][0] == '/'
48
+ ? $argv[2]
49
+ : realpath($relative_path.'/'.$argv[2]);
50
+
51
+ if (!file_exists($doc_path)) {
52
+ Runner::throwInvalidUsage("Can't open {$doc_path} for reading");
53
+ }
54
+
55
+ $opts = array_splice($argv, 3);
56
+ $options = new ArrayObject(
57
+ array_fill_keys(OptionsEnum::getInstance()->getValues(), false));
58
+
59
+ foreach ($opts as $opt) {
60
+ $opt = substr($opt, 1);
61
+ if (OptionsEnum::getInstance()->isValidValue($opt)) {
62
+ $options->offsetSet($opt, true);
63
+ }
64
+ }
65
+
66
+ $runner = new Runner($doc_path, $action, $options);
67
+
68
+ exit($runner->run());
vendor/facebook/php-business-sdk/bin/get_version.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ /**
4
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
5
+ *
6
+ * You are hereby granted a non-exclusive, worldwide, royalty-free license to
7
+ * use, copy, modify, and distribute this software in source code or binary
8
+ * form for use in connection with the web services and APIs provided by
9
+ * Facebook.
10
+ *
11
+ * As with any software that integrates with the Facebook platform, your use
12
+ * of this software is subject to the Facebook Developer Principles and
13
+ * Policies [http://developers.facebook.com/policy/]. This copyright notice
14
+ * shall be included in all copies or substantial portions of the software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
+ * DEALINGS IN THE SOFTWARE.
23
+ *
24
+ */
25
+
26
+ use \FacebookAdsDocsmith\Bootstrap\IntegrationBootstrap;
27
+ use FacebookAds\Api;
28
+
29
+ chdir(__DIR__);
30
+
31
+ /** @var IntegrationBootstrap $bootstrap */
32
+ $bootstrap = require_once __DIR__.'/../docsmith/init_stub.php';
33
+
34
+ echo sprintf('v%s', Api::init('', '', '')->getDefaultGraphVersion()).PHP_EOL;
vendor/facebook/php-business-sdk/composer.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "facebook/php-business-sdk",
3
+ "description": "PHP SDK for Facebook Business",
4
+ "type": "library",
5
+ "keywords": [
6
+ "facebook",
7
+ "ads",
8
+ "business",
9
+ "sdk",
10
+ "instagram",
11
+ "page"
12
+ ],
13
+ "homepage": "https://developers.facebook.com/",
14
+ "require-dev": {
15
+ "phpunit/phpunit": "~8",
16
+ "symfony/finder": "~2.6"
17
+ },
18
+ "autoload": {
19
+ "psr-4": {
20
+ "FacebookAds\\": "src/FacebookAds/"
21
+ }
22
+ }
23
+ }
vendor/facebook/php-business-sdk/fb_ca_chain_bundle.crt ADDED
@@ -0,0 +1,3920 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## ca-bundle.crt -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012
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
+ ## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
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
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $
18
+
19
+ GTE CyberTrust Global Root
20
+ ==========================
21
+ -----BEGIN CERTIFICATE-----
22
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
23
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
24
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
25
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
26
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
27
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
28
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
29
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
30
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
31
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
32
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
33
+ -----END CERTIFICATE-----
34
+
35
+ Thawte Server CA
36
+ ================
37
+ -----BEGIN CERTIFICATE-----
38
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
39
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
40
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
41
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
42
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
43
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
44
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
45
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
46
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
47
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
48
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
49
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
50
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
51
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
52
+ -----END CERTIFICATE-----
53
+
54
+ Thawte Premium Server CA
55
+ ========================
56
+ -----BEGIN CERTIFICATE-----
57
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
58
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
59
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
60
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
61
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
62
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
63
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
64
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
65
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
66
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
67
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
68
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
69
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
70
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
71
+ UCemDaYj+bvLpgcUQg==
72
+ -----END CERTIFICATE-----
73
+
74
+ Equifax Secure CA
75
+ =================
76
+ -----BEGIN CERTIFICATE-----
77
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
78
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
79
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
80
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
81
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
82
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
83
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
84
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
85
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
86
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
87
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
88
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
89
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
90
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
91
+ 70+sB3c4
92
+ -----END CERTIFICATE-----
93
+
94
+ Digital Signature Trust Co. Global CA 1
95
+ =======================================
96
+ -----BEGIN CERTIFICATE-----
97
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
98
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
99
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
100
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
101
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
102
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
103
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
104
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
105
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
106
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
107
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
108
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
109
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
110
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
111
+ RbyhkwS7hp86W0N6w4pl
112
+ -----END CERTIFICATE-----
113
+
114
+ Digital Signature Trust Co. Global CA 3
115
+ =======================================
116
+ -----BEGIN CERTIFICATE-----
117
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
118
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
119
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
120
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
121
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
122
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
123
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
124
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
125
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
126
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
127
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
128
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
129
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
130
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
131
+ mPnHfxsb1gYgAlihw6ID
132
+ -----END CERTIFICATE-----
133
+
134
+ Verisign Class 3 Public Primary Certification Authority
135
+ =======================================================
136
+ -----BEGIN CERTIFICATE-----
137
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
138
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
139
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
140
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
141
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
142
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
143
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
144
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
145
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
146
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
147
+ Tqj/ZA1k
148
+ -----END CERTIFICATE-----
149
+
150
+ Verisign Class 1 Public Primary Certification Authority - G2
151
+ ============================================================
152
+ -----BEGIN CERTIFICATE-----
153
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
154
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
155
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
156
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
157
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
158
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
159
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
160
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
161
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
162
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
163
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
164
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
165
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
166
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
167
+ -----END CERTIFICATE-----
168
+
169
+ Verisign Class 2 Public Primary Certification Authority - G2
170
+ ============================================================
171
+ -----BEGIN CERTIFICATE-----
172
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
173
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
174
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
175
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
176
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
177
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
178
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
179
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
180
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
181
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
182
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
183
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
184
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
185
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
186
+ -----END CERTIFICATE-----
187
+
188
+ Verisign Class 3 Public Primary Certification Authority - G2
189
+ ============================================================
190
+ -----BEGIN CERTIFICATE-----
191
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
192
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
193
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
194
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
195
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
196
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
197
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
198
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
199
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
200
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
201
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
202
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
203
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
204
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
205
+ -----END CERTIFICATE-----
206
+
207
+ GlobalSign Root CA
208
+ ==================
209
+ -----BEGIN CERTIFICATE-----
210
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
211
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
212
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
213
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
214
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
215
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
216
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
217
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
218
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
219
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
220
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
221
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
222
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
223
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
224
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
225
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
226
+ -----END CERTIFICATE-----
227
+
228
+ GlobalSign Root CA - R2
229
+ =======================
230
+ -----BEGIN CERTIFICATE-----
231
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
232
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
233
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
234
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
235
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
236
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
237
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
238
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
239
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
240
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
241
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
242
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
243
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
244
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
245
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
246
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
247
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
248
+ -----END CERTIFICATE-----
249
+
250
+ ValiCert Class 1 VA
251
+ ===================
252
+ -----BEGIN CERTIFICATE-----
253
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
254
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
255
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
256
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
257
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
258
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
259
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
260
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
261
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
262
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
263
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
264
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
265
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
266
+ Orf1LXLI
267
+ -----END CERTIFICATE-----
268
+
269
+ ValiCert Class 2 VA
270
+ ===================
271
+ -----BEGIN CERTIFICATE-----
272
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
273
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
274
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
275
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
276
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
277
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
278
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
279
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
280
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
281
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
282
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
283
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
284
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
285
+ W9ViH0Pd
286
+ -----END CERTIFICATE-----
287
+
288
+ RSA Root Certificate 1
289
+ ======================
290
+ -----BEGIN CERTIFICATE-----
291
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
292
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
293
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
294
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
295
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
296
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
297
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
298
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
299
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
300
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
301
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
302
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
303
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
304
+ on+jjBXu
305
+ -----END CERTIFICATE-----
306
+
307
+ Verisign Class 1 Public Primary Certification Authority - G3
308
+ ============================================================
309
+ -----BEGIN CERTIFICATE-----
310
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
311
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
312
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
313
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
314
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
315
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
316
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
317
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
318
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
319
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
320
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
321
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
322
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
323
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
324
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
325
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
326
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
327
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
328
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
329
+ -----END CERTIFICATE-----
330
+
331
+ Verisign Class 2 Public Primary Certification Authority - G3
332
+ ============================================================
333
+ -----BEGIN CERTIFICATE-----
334
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
335
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
336
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
337
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
338
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
339
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
340
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
341
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
342
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
343
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
344
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
345
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
346
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
347
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
348
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
349
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
350
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
351
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
352
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
353
+ -----END CERTIFICATE-----
354
+
355
+ Verisign Class 3 Public Primary Certification Authority - G3
356
+ ============================================================
357
+ -----BEGIN CERTIFICATE-----
358
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
359
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
360
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
361
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
362
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
363
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
364
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
365
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
366
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
367
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
368
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
369
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
370
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
371
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
372
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
373
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
374
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
375
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
376
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
377
+ -----END CERTIFICATE-----
378
+
379
+ Verisign Class 4 Public Primary Certification Authority - G3
380
+ ============================================================
381
+ -----BEGIN CERTIFICATE-----
382
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
383
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
384
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
385
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
386
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
387
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
388
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
389
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
390
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
391
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
392
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
393
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
394
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
395
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
396
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
397
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
398
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
399
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
400
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
401
+ -----END CERTIFICATE-----
402
+
403
+ Entrust.net Secure Server CA
404
+ ============================
405
+ -----BEGIN CERTIFICATE-----
406
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
407
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
408
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
409
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
410
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
411
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
412
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
413
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
414
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
415
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
416
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
417
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
418
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
419
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
420
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
421
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
422
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
423
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
424
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
425
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
426
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
427
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
428
+ -----END CERTIFICATE-----
429
+
430
+ Entrust.net Premium 2048 Secure Server CA
431
+ =========================================
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
434
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
435
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
436
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
437
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
438
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
439
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
440
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
441
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
442
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
443
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
444
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
445
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
446
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
447
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
448
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
449
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
450
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
451
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
452
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
453
+ -----END CERTIFICATE-----
454
+
455
+ Baltimore CyberTrust Root
456
+ =========================
457
+ -----BEGIN CERTIFICATE-----
458
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
459
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
460
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
461
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
462
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
463
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
464
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
465
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
466
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
467
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
468
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
469
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
470
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
471
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
472
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
473
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
474
+ -----END CERTIFICATE-----
475
+
476
+ Equifax Secure Global eBusiness CA
477
+ ==================================
478
+ -----BEGIN CERTIFICATE-----
479
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
480
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
481
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
482
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
483
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
484
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
485
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
486
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
487
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
488
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
489
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
490
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
491
+ -----END CERTIFICATE-----
492
+
493
+ Equifax Secure eBusiness CA 1
494
+ =============================
495
+ -----BEGIN CERTIFICATE-----
496
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
497
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
498
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
499
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
500
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
501
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
502
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
503
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
504
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
505
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
506
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
507
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
508
+ -----END CERTIFICATE-----
509
+
510
+ Equifax Secure eBusiness CA 2
511
+ =============================
512
+ -----BEGIN CERTIFICATE-----
513
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
514
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
515
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
516
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
517
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
518
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
519
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
520
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
521
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
522
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
523
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
524
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
525
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
526
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
527
+ V+GRMOrN
528
+ -----END CERTIFICATE-----
529
+
530
+ AddTrust Low-Value Services Root
531
+ ================================
532
+ -----BEGIN CERTIFICATE-----
533
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
534
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
535
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
536
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
537
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
538
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
539
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
540
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
541
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
542
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
543
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
544
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
545
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
546
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
547
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
548
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
549
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
550
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
551
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
552
+ -----END CERTIFICATE-----
553
+
554
+ AddTrust External Root
555
+ ======================
556
+ -----BEGIN CERTIFICATE-----
557
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
558
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
559
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
560
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
561
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
562
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
563
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
564
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
565
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
566
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
567
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
568
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
569
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
570
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
571
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
572
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
573
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
574
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
575
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
576
+ -----END CERTIFICATE-----
577
+
578
+ AddTrust Public Services Root
579
+ =============================
580
+ -----BEGIN CERTIFICATE-----
581
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
582
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
583
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
584
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
585
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
586
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
587
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
588
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
589
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
590
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
591
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
592
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
593
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
594
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
595
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
596
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
597
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
598
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
599
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
600
+ -----END CERTIFICATE-----
601
+
602
+ AddTrust Qualified Certificates Root
603
+ ====================================
604
+ -----BEGIN CERTIFICATE-----
605
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
606
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
607
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
608
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
609
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
610
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
611
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
612
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
613
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
614
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
615
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
616
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
617
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
618
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
619
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
620
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
621
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
622
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
623
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
624
+ -----END CERTIFICATE-----
625
+
626
+ Entrust Root Certification Authority
627
+ ====================================
628
+ -----BEGIN CERTIFICATE-----
629
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
630
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
631
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
632
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
633
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
634
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
635
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
636
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
637
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
638
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
639
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
640
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
641
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
642
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
643
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
644
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
645
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
646
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
647
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
648
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
649
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
650
+ -----END CERTIFICATE-----
651
+
652
+ RSA Security 2048 v3
653
+ ====================
654
+ -----BEGIN CERTIFICATE-----
655
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
656
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
657
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
658
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
659
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
660
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
661
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
662
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
663
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
664
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
665
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
666
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
667
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
668
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
669
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
670
+ pKnXwiJPZ9d37CAFYd4=
671
+ -----END CERTIFICATE-----
672
+
673
+ GeoTrust Global CA
674
+ ==================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
677
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
678
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
679
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
680
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
681
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
682
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
683
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
684
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
685
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
686
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
687
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
688
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
689
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
690
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
691
+ Mw==
692
+ -----END CERTIFICATE-----
693
+
694
+ GeoTrust Global CA 2
695
+ ====================
696
+ -----BEGIN CERTIFICATE-----
697
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
698
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
699
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
700
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
701
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
702
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
703
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
704
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
705
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
706
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
707
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
708
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
709
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
710
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
711
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
712
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
713
+ -----END CERTIFICATE-----
714
+
715
+ GeoTrust Universal CA
716
+ =====================
717
+ -----BEGIN CERTIFICATE-----
718
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
719
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
720
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
721
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
722
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
723
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
724
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
725
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
726
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
727
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
728
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
729
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
730
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
731
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
732
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
733
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
734
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
735
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
736
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
737
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
738
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
739
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
740
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
741
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
742
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
743
+ -----END CERTIFICATE-----
744
+
745
+ GeoTrust Universal CA 2
746
+ =======================
747
+ -----BEGIN CERTIFICATE-----
748
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
749
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
750
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
751
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
752
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
753
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
754
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
755
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
756
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
757
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
758
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
759
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
760
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
761
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
762
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
763
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
764
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
765
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
766
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
767
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
768
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
769
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
770
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
771
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
772
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
773
+ -----END CERTIFICATE-----
774
+
775
+ UTN-USER First-Network Applications
776
+ ===================================
777
+ -----BEGIN CERTIFICATE-----
778
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
779
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
780
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
781
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
782
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
783
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
784
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
785
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
786
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
787
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
788
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
789
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
790
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
791
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
792
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
793
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
794
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
795
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
796
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
797
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
798
+ -----END CERTIFICATE-----
799
+
800
+ America Online Root Certification Authority 1
801
+ =============================================
802
+ -----BEGIN CERTIFICATE-----
803
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
804
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
805
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
806
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
807
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
808
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
809
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
810
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
811
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
812
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
813
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
814
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
815
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
816
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
817
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
818
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
819
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
820
+ -----END CERTIFICATE-----
821
+
822
+ America Online Root Certification Authority 2
823
+ =============================================
824
+ -----BEGIN CERTIFICATE-----
825
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
826
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
827
+ Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
828
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
829
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
830
+ ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
831
+ fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
832
+ f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
833
+ qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
834
+ RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
835
+ gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
836
+ 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
837
+ FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
838
+ Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
839
+ B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
840
+ aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
841
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
842
+ T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
843
+ +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
844
+ JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
845
+ zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
846
+ ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
847
+ 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
848
+ GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
849
+ Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
850
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
851
+ -----END CERTIFICATE-----
852
+
853
+ Visa eCommerce Root
854
+ ===================
855
+ -----BEGIN CERTIFICATE-----
856
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
857
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
858
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
859
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
860
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
861
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
862
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
863
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
864
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
865
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
866
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
867
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
868
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
869
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
870
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
871
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
872
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
873
+ -----END CERTIFICATE-----
874
+
875
+ Certum Root CA
876
+ ==============
877
+ -----BEGIN CERTIFICATE-----
878
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
879
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
880
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
881
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
882
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
883
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
884
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
885
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
886
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
887
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
888
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
889
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
890
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
891
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
892
+ -----END CERTIFICATE-----
893
+
894
+ Comodo AAA Services root
895
+ ========================
896
+ -----BEGIN CERTIFICATE-----
897
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
898
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
899
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
900
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
901
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
902
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
903
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
904
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
905
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
906
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
907
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
908
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
909
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
910
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
911
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
912
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
913
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
914
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
915
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
916
+ -----END CERTIFICATE-----
917
+
918
+ Comodo Secure Services root
919
+ ===========================
920
+ -----BEGIN CERTIFICATE-----
921
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
922
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
923
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
924
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
925
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
926
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
927
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
928
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
929
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
930
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
931
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
932
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
933
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
934
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
935
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
936
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
937
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
938
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
939
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
940
+ RR3B7Hzs/Sk=
941
+ -----END CERTIFICATE-----
942
+
943
+ Comodo Trusted Services root
944
+ ============================
945
+ -----BEGIN CERTIFICATE-----
946
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
947
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
948
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
949
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
950
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
951
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
952
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
953
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
954
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
955
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
956
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
957
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
958
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
959
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
960
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
961
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
962
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
963
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
964
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
965
+ 9y5Xt5hwXsjEeLBi
966
+ -----END CERTIFICATE-----
967
+
968
+ QuoVadis Root CA
969
+ ================
970
+ -----BEGIN CERTIFICATE-----
971
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
972
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
973
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
974
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
975
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
976
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
977
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
978
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
979
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
980
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
981
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
982
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
983
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
984
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
985
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
986
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
987
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
988
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
989
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
990
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
991
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
992
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
993
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
994
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
995
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
996
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
997
+ 5nrQNiOKSnQ2+Q==
998
+ -----END CERTIFICATE-----
999
+
1000
+ QuoVadis Root CA 2
1001
+ ==================
1002
+ -----BEGIN CERTIFICATE-----
1003
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1004
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1005
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1006
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1007
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1008
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1009
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1010
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1011
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1012
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1013
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1014
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1015
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1016
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1017
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1018
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1019
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1020
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1021
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1022
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1023
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1024
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1025
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1026
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1027
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1028
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1029
+ -----END CERTIFICATE-----
1030
+
1031
+ QuoVadis Root CA 3
1032
+ ==================
1033
+ -----BEGIN CERTIFICATE-----
1034
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1035
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1036
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1037
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1038
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1039
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1040
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1041
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1042
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1043
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1044
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1045
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1046
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1047
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1048
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1049
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1050
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1051
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1052
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1053
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1054
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1055
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1056
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1057
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1058
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1059
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1060
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1061
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1062
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1063
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=